(t *testing.T)
| 496 | } |
| 497 | |
| 498 | func TestCASNoChange(t *testing.T) { |
| 499 | t.Parallel() |
| 500 | |
| 501 | withFixtures(t, func(t *testing.T, kv *Client) { |
| 502 | err := cas(kv, key, func(in *data) (*data, bool, error) { |
| 503 | if in == nil { |
| 504 | in = &data{Members: map[string]member{}} |
| 505 | } |
| 506 | |
| 507 | in.Members["hello"] = member{ |
| 508 | Timestamp: time.Now().Unix(), |
| 509 | Tokens: generateTokens(128), |
| 510 | State: JOINING, |
| 511 | } |
| 512 | |
| 513 | return in, true, nil |
| 514 | }) |
| 515 | require.NoError(t, err) |
| 516 | |
| 517 | startTime := time.Now() |
| 518 | calls := 0 |
| 519 | err = casWithErr(context.Background(), kv, key, func(d *data) (*data, bool, error) { |
| 520 | calls++ |
| 521 | return d, true, nil |
| 522 | }) |
| 523 | require.EqualError(t, err, "failed to CAS-update key test: no change detected") |
| 524 | require.Equal(t, maxCasRetries, calls) |
| 525 | // if there was no change, CAS sleeps before every retry |
| 526 | require.True(t, time.Since(startTime) >= (maxCasRetries-1)*noChangeDetectedRetrySleep) |
| 527 | }) |
| 528 | } |
| 529 | |
| 530 | func TestCASNoChangeShortTimeout(t *testing.T) { |
| 531 | withFixtures(t, func(t *testing.T, kv *Client) { |
nothing calls this directly
no test coverage detected