package k2v_test import ( k2v "code.notaphish.fyi/milas/garage-k2v-go" "github.com/stretchr/testify/require" "net/http/httptrace" "testing" "time" ) func TestClient_PollItem(t *testing.T) { t.Parallel() f, ctx := newFixture(t) pk := randomPk() sk := randomSk() err := f.cli.InsertItem(ctx, f.bucket, pk, sk, "", []byte("hello1")) require.NoError(t, err) _, ct, err := f.cli.ReadItemSingle(ctx, f.bucket, pk, sk) updateErrCh := make(chan error, 1) pollReadyCh := make(chan struct{}) go func(ct k2v.CausalityToken) { defer close(updateErrCh) select { case <-ctx.Done(): t.Errorf("Context canceled: %v", ctx.Err()) return case <-pollReadyCh: t.Logf("PollItem connected") } updateErrCh <- f.cli.InsertItem(ctx, f.bucket, pk, sk, ct, []byte("hello2")) }(ct) trace := &httptrace.ClientTrace{ WroteRequest: func(_ httptrace.WroteRequestInfo) { pollReadyCh <- struct{}{} }, } item, ct, err := f.cli.PollItem(httptrace.WithClientTrace(ctx, trace), f.bucket, pk, sk, ct, 5*time.Second) require.NoError(t, err) require.Equal(t, "hello2", string(item)) require.NotEmpty(t, ct) require.NoError(t, <-updateErrCh) }