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

Function TestDeleteMultipleClients

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

Source from the content-addressed store, hash-verified

749}
750
751func TestDeleteMultipleClients(t *testing.T) {
752
753 const deleteTime = 1 * time.Second
754
755 var cfg KVConfig
756 flagext.DefaultValues(&cfg)
757 cfg.TCPTransport = TCPTransportConfig{
758 BindAddrs: getLocalhostAddrs(),
759 BindPort: 0, // randomize
760 }
761
762 cfg.Codecs = []codec.Codec{
763 dataCodec{},
764 }
765
766 cfg.GossipNodes = 1
767 cfg.GossipInterval = 100 * time.Millisecond
768 cfg.PushPullInterval = deleteTime
769 cfg.ObsoleteEntriesTimeout = deleteTime
770
771 mkv1 := NewKV(cfg, log.NewNopLogger(), &staticDNSProviderMock{}, prometheus.NewPedanticRegistry())
772 require.NoError(t, services.StartAndAwaitRunning(context.Background(), mkv1))
773 defer services.StopAndAwaitTerminated(context.Background(), mkv1) //nolint:errcheck
774
775 kv1, err := NewClient(mkv1, dataCodec{})
776 require.NoError(t, err)
777
778 const memberKey = "entry"
779
780 // Calling updateFn once creates single entry, in JOINING state.
781 err = cas(kv1, key, updateFn(memberKey))
782 require.NoError(t, err)
783
784 // We will read values from second KV, which will join the first one
785 cfg.JoinMembers = []string{net.JoinHostPort("127.0.0.1", strconv.Itoa(mkv1.GetListeningPort()))}
786
787 mkv2 := NewKV(cfg, log.NewNopLogger(), &staticDNSProviderMock{}, prometheus.NewPedanticRegistry())
788 require.NoError(t, services.StartAndAwaitRunning(context.Background(), mkv2))
789 defer services.StopAndAwaitTerminated(context.Background(), mkv2) //nolint:errcheck
790
791 // While waiting for mkv2 to start, we can already create a client for it.
792 // Any client operations will block until mkv2 transitioned to Running state.
793 kv2, err := NewClient(mkv2, dataCodec{})
794 require.NoError(t, err)
795
796 val, err := kv2.Get(context.Background(), key)
797 require.NoError(t, err)
798 require.NotNil(t, val)
799
800 err = kv1.Delete(context.Background(), key)
801 if err != nil {
802 t.Fatalf("Failed to delete key %s: %v", key, err)
803 }
804
805 // wait for the obselete entries to be removed.
806 checkMemberlistEntry(t, kv1, key, 10*deleteTime)
807 checkMemberlistEntry(t, kv2, key, 10*deleteTime)
808}

Callers

nothing calls this directly

Calls 13

GetListeningPortMethod · 0.95
GetMethod · 0.95
DeleteMethod · 0.95
DefaultValuesFunction · 0.92
StartAndAwaitRunningFunction · 0.92
StopAndAwaitTerminatedFunction · 0.92
getLocalhostAddrsFunction · 0.85
NewKVFunction · 0.85
casFunction · 0.85
updateFnFunction · 0.85
checkMemberlistEntryFunction · 0.85
FatalfMethod · 0.80

Tested by

no test coverage detected