(t *testing.T)
| 375 | } |
| 376 | |
| 377 | func TestBasicGetAndCas(t *testing.T) { |
| 378 | c := dataCodec{} |
| 379 | |
| 380 | var cfg KVConfig |
| 381 | flagext.DefaultValues(&cfg) |
| 382 | cfg.TCPTransport = TCPTransportConfig{ |
| 383 | BindAddrs: getLocalhostAddrs(), |
| 384 | } |
| 385 | cfg.Codecs = []codec.Codec{c} |
| 386 | |
| 387 | mkv := NewKV(cfg, log.NewNopLogger(), &staticDNSProviderMock{}, prometheus.NewPedanticRegistry()) |
| 388 | require.NoError(t, services.StartAndAwaitRunning(context.Background(), mkv)) |
| 389 | defer services.StopAndAwaitTerminated(context.Background(), mkv) //nolint:errcheck |
| 390 | |
| 391 | kv, err := NewClient(mkv, c) |
| 392 | require.NoError(t, err) |
| 393 | |
| 394 | const key = "test" |
| 395 | |
| 396 | val := get(t, kv, key) |
| 397 | if val != nil { |
| 398 | t.Error("Expected nil, got:", val) |
| 399 | } |
| 400 | |
| 401 | // Create member in PENDING state, with some tokens |
| 402 | name := "Ing 1" |
| 403 | err = cas(kv, key, updateFn(name)) |
| 404 | require.NoError(t, err) |
| 405 | |
| 406 | r := getData(t, kv, key) |
| 407 | if r == nil || r.Members[name].Timestamp == 0 || len(r.Members[name].Tokens) <= 0 { |
| 408 | t.Fatalf("Expected ring with tokens, got %v", r) |
| 409 | } |
| 410 | |
| 411 | val = get(t, kv, "other key") |
| 412 | if val != nil { |
| 413 | t.Errorf("Expected nil, got: %v", val) |
| 414 | } |
| 415 | |
| 416 | // Update member into ACTIVE state |
| 417 | err = cas(kv, key, updateFn(name)) |
| 418 | require.NoError(t, err) |
| 419 | |
| 420 | r = getData(t, kv, key) |
| 421 | if r.Members[name].State != ACTIVE { |
| 422 | t.Errorf("Expected member to be active after second update, got %v", r) |
| 423 | } |
| 424 | |
| 425 | // Delete member |
| 426 | err = cas(kv, key, func(r *data) (*data, bool, error) { |
| 427 | delete(r.Members, name) |
| 428 | return r, true, nil |
| 429 | }) |
| 430 | require.NoError(t, err) |
| 431 | |
| 432 | r = getData(t, kv, key) |
| 433 | if r.Members[name].State != LEFT { |
| 434 | t.Errorf("Expected member to be LEFT, got %v", r) |
nothing calls this directly
no test coverage detected