Skip to content

Commit 1aed386

Browse files
committed
test(grpc): use t.Context() for the consistency-loop RPCs
Replace context.Background() in Test_consistency_satisfy_write_after_ read_sequence and Test_grpc_transaction with the per-test t.Context(). Both tests now derive a single ctx at the top of the test body and thread it through every RPC and retryNotLeader call. Two effects: - Test-level cancel (timeout, parent stopping the test, t.Cleanup draining) propagates into the in-flight RPC instead of leaking the goroutine through context.Background until the gRPC call eventually errors out on its own. - The retry helper observes the same cancel signal, so a stalled shutdown does not chase 9999 iterations of "leader not found" retries past the point the test has been told to stop. Behaviour-equivalent on the happy path; the consistency assertions (assert.Equal / assert.Nil) are unchanged. Build / vet / lint clean, both tests still pass at 9999 iterations locally.
1 parent 78b9d09 commit 1aed386

1 file changed

Lines changed: 22 additions & 16 deletions

File tree

adapter/grpc_test.go

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ func Test_consistency_satisfy_write_after_read_sequence(t *testing.T) {
188188
c := rawKVClient(t, adders)
189189
defer shutdown(nodes)
190190

191+
// Use t.Context() so a test-level cancel (timeout, parent test
192+
// stopping) propagates into every RPC and the retry loop alike,
193+
// rather than leaking work via context.Background() once the test
194+
// goroutine returns.
195+
ctx := t.Context()
191196
key := []byte("test-key-sequence")
192197

193198
// Each RPC is wrapped in retryNotLeader so an in-flight Raft
@@ -199,9 +204,8 @@ func Test_consistency_satisfy_write_after_read_sequence(t *testing.T) {
199204
// subsequent Get must return the same value, otherwise we fail.
200205
for i := range 9999 {
201206
want := []byte("sequence" + strconv.Itoa(i))
202-
err := retryNotLeader(context.Background(), func() error {
203-
_, perr := c.RawPut(context.Background(),
204-
&pb.RawPutRequest{Key: key, Value: want})
207+
err := retryNotLeader(ctx, func() error {
208+
_, perr := c.RawPut(ctx, &pb.RawPutRequest{Key: key, Value: want})
205209
return perr
206210
})
207211
// Stop at the first non-leader-churn RPC failure instead of
@@ -212,19 +216,18 @@ func Test_consistency_satisfy_write_after_read_sequence(t *testing.T) {
212216
break
213217
}
214218

215-
err = retryNotLeader(context.Background(), func() error {
216-
_, perr := c.RawPut(context.Background(),
217-
&pb.RawPutRequest{Key: key, Value: want})
219+
err = retryNotLeader(ctx, func() error {
220+
_, perr := c.RawPut(ctx, &pb.RawPutRequest{Key: key, Value: want})
218221
return perr
219222
})
220223
if !assert.NoError(t, err, "Put RPC failed") {
221224
break
222225
}
223226

224227
var resp *pb.RawGetResponse
225-
err = retryNotLeader(context.Background(), func() error {
228+
err = retryNotLeader(ctx, func() error {
226229
var gerr error
227-
resp, gerr = c.RawGet(context.Background(), &pb.RawGetRequest{Key: key})
230+
resp, gerr = c.RawGet(ctx, &pb.RawGetRequest{Key: key})
228231
return gerr
229232
})
230233
if !assert.NoError(t, err, "Get RPC failed") {
@@ -245,6 +248,9 @@ func Test_grpc_transaction(t *testing.T) {
245248
c := transactionalKVClient(t, adders)
246249
defer shutdown(nodes)
247250

251+
// See Test_consistency_satisfy_write_after_read_sequence for why
252+
// we use t.Context() and retryNotLeader together.
253+
ctx := t.Context()
248254
key := []byte("test-key-sequence")
249255

250256
// Same retryNotLeader wrap as Test_consistency_satisfy_write_after_read
@@ -253,8 +259,8 @@ func Test_grpc_transaction(t *testing.T) {
253259
// invariants strict.
254260
for i := range 9999 {
255261
want := []byte("sequence" + strconv.Itoa(i))
256-
err := retryNotLeader(context.Background(), func() error {
257-
_, perr := c.Put(context.Background(), &pb.PutRequest{Key: key, Value: want})
262+
err := retryNotLeader(ctx, func() error {
263+
_, perr := c.Put(ctx, &pb.PutRequest{Key: key, Value: want})
258264
return perr
259265
})
260266
// See Test_consistency_satisfy_write_after_read_sequence:
@@ -264,27 +270,27 @@ func Test_grpc_transaction(t *testing.T) {
264270
break
265271
}
266272
var resp *pb.GetResponse
267-
err = retryNotLeader(context.Background(), func() error {
273+
err = retryNotLeader(ctx, func() error {
268274
var gerr error
269-
resp, gerr = c.Get(context.Background(), &pb.GetRequest{Key: key})
275+
resp, gerr = c.Get(ctx, &pb.GetRequest{Key: key})
270276
return gerr
271277
})
272278
if !assert.NoError(t, err, "Get RPC failed") {
273279
break
274280
}
275281
assert.Equal(t, want, resp.Value, "consistency check failed")
276282

277-
err = retryNotLeader(context.Background(), func() error {
278-
_, derr := c.Delete(context.Background(), &pb.DeleteRequest{Key: key})
283+
err = retryNotLeader(ctx, func() error {
284+
_, derr := c.Delete(ctx, &pb.DeleteRequest{Key: key})
279285
return derr
280286
})
281287
if !assert.NoError(t, err, "Delete RPC failed") {
282288
break
283289
}
284290

285-
err = retryNotLeader(context.Background(), func() error {
291+
err = retryNotLeader(ctx, func() error {
286292
var gerr error
287-
resp, gerr = c.Get(context.Background(), &pb.GetRequest{Key: key})
293+
resp, gerr = c.Get(ctx, &pb.GetRequest{Key: key})
288294
return gerr
289295
})
290296
if !assert.NoError(t, err, "Get RPC failed") {

0 commit comments

Comments
 (0)