MCPcopy
hub / github.com/nats-io/nats.go / TestNoRaceObjectContextOpt

Function TestNoRaceObjectContextOpt

test/norace_test.go:32–72  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

30)
31
32func TestNoRaceObjectContextOpt(t *testing.T) {
33 s := RunBasicJetStreamServer()
34 defer shutdownJSServerAndRemoveStorage(t, s)
35
36 nc, js := jsClient(t, s)
37 defer nc.Close()
38
39 obs, err := js.CreateObjectStore(&nats.ObjectStoreConfig{Bucket: "OBJS"})
40 expectOk(t, err)
41
42 ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
43 time.AfterFunc(100*time.Millisecond, cancel)
44
45 start := time.Now()
46 _, err = obs.Put(&nats.ObjectMeta{Name: "TEST"}, &slow{1000}, nats.Context(ctx))
47 expectErr(t, err)
48 if delta := time.Since(start); delta > time.Second {
49 t.Fatalf("Cancel took too long: %v", delta)
50 }
51 si, err := js.StreamInfo("OBJ_OBJS")
52 expectOk(t, err)
53 if si.State.Msgs != 0 {
54 t.Fatalf("Expected no messages after canceling put, got %+v", si.State)
55 }
56
57 // Now put a large object in there.
58 blob := make([]byte, 16*1024*1024)
59 rand.Read(blob)
60 _, err = obs.PutBytes("BLOB", blob)
61 expectOk(t, err)
62
63 ctx, cancel = context.WithTimeout(context.Background(), 2*time.Second)
64 time.AfterFunc(10*time.Millisecond, cancel)
65
66 start = time.Now()
67 _, err = obs.GetBytes("BLOB", nats.Context(ctx))
68 expectErr(t, err)
69 if delta := time.Since(start); delta > 2500*time.Millisecond {
70 t.Fatalf("Cancel took too long: %v", delta)
71 }
72}
73
74type slow struct{ n int }
75

Callers

nothing calls this directly

Calls 14

FatalfMethod · 0.80
RunBasicJetStreamServerFunction · 0.70
jsClientFunction · 0.70
expectOkFunction · 0.70
expectErrFunction · 0.70
CreateObjectStoreMethod · 0.65
PutMethod · 0.65
ContextMethod · 0.65
StreamInfoMethod · 0.65
PutBytesMethod · 0.65
GetBytesMethod · 0.65

Tested by

no test coverage detected