(t *testing.T)
| 30 | ) |
| 31 | |
| 32 | func 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 | |
| 74 | type slow struct{ n int } |
| 75 |
nothing calls this directly
no test coverage detected