MCPcopy
hub / github.com/grafana/dskit / TestBasicGetAndCas

Function TestBasicGetAndCas

kv/memberlist/memberlist_client_test.go:377–436  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

375}
376
377func 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)

Callers

nothing calls this directly

Calls 13

DefaultValuesFunction · 0.92
StartAndAwaitRunningFunction · 0.92
StopAndAwaitTerminatedFunction · 0.92
getLocalhostAddrsFunction · 0.85
NewKVFunction · 0.85
getFunction · 0.85
casFunction · 0.85
updateFnFunction · 0.85
getDataFunction · 0.85
FatalfMethod · 0.80
ErrorfMethod · 0.80
NewClientFunction · 0.70

Tested by

no test coverage detected