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

Function TestMultipleCodecs

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

Source from the content-addressed store, hash-verified

1503var _ codec.Codec = &distributedCounterCodec{}
1504
1505func TestMultipleCodecs(t *testing.T) {
1506 var cfg KVConfig
1507 flagext.DefaultValues(&cfg)
1508 cfg.TCPTransport = TCPTransportConfig{
1509 BindAddrs: getLocalhostAddrs(),
1510 BindPort: 0, // randomize
1511 }
1512
1513 cfg.Codecs = []codec.Codec{
1514 dataCodec{},
1515 distributedCounterCodec{},
1516 }
1517
1518 mkv1 := NewKV(cfg, log.NewNopLogger(), &staticDNSProviderMock{}, prometheus.NewPedanticRegistry())
1519 require.NoError(t, services.StartAndAwaitRunning(context.Background(), mkv1))
1520 defer services.StopAndAwaitTerminated(context.Background(), mkv1) //nolint:errcheck
1521
1522 kv1, err := NewClient(mkv1, dataCodec{})
1523 require.NoError(t, err)
1524
1525 kv2, err := NewClient(mkv1, distributedCounterCodec{})
1526 require.NoError(t, err)
1527
1528 err = kv1.CAS(context.Background(), "data", func(in interface{}) (out interface{}, retry bool, err error) {
1529 var d *data
1530 if in != nil {
1531 d = in.(*data)
1532 }
1533 if d == nil {
1534 d = &data{}
1535 }
1536 if d.Members == nil {
1537 d.Members = map[string]member{}
1538 }
1539 d.Members["test"] = member{
1540 Timestamp: time.Now().Unix(),
1541 State: ACTIVE,
1542 }
1543 return d, true, nil
1544 })
1545 require.NoError(t, err)
1546
1547 err = kv2.CAS(context.Background(), "counter", func(in interface{}) (out interface{}, retry bool, err error) {
1548 var dc distributedCounter
1549 if in != nil {
1550 dc = in.(distributedCounter)
1551 }
1552 if dc == nil {
1553 dc = distributedCounter{}
1554 }
1555 dc["test"] = 5
1556 return dc, true, err
1557 })
1558 require.NoError(t, err)
1559
1560 // We will read values from second KV, which will join the first one
1561 mkv2 := NewKV(cfg, log.NewNopLogger(), &staticDNSProviderMock{}, prometheus.NewPedanticRegistry())
1562 require.NoError(t, services.StartAndAwaitRunning(context.Background(), mkv2))

Callers

nothing calls this directly

Calls 11

CASMethod · 0.95
JoinMembersMethod · 0.95
GetListeningPortMethod · 0.95
GetMethod · 0.95
DefaultValuesFunction · 0.92
StartAndAwaitRunningFunction · 0.92
StopAndAwaitTerminatedFunction · 0.92
getLocalhostAddrsFunction · 0.85
NewKVFunction · 0.85
NewClientFunction · 0.70
EqualMethod · 0.45

Tested by

no test coverage detected