(t *testing.T)
| 1503 | var _ codec.Codec = &distributedCounterCodec{} |
| 1504 | |
| 1505 | func 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)) |
nothing calls this directly
no test coverage detected