(t *testing.T)
| 351 | } |
| 352 | |
| 353 | func TestObjectDeleteMarkers(t *testing.T) { |
| 354 | s := RunBasicJetStreamServer() |
| 355 | defer shutdownJSServerAndRemoveStorage(t, s) |
| 356 | |
| 357 | nc, js := jsClient(t, s) |
| 358 | defer nc.Close() |
| 359 | ctx := context.Background() |
| 360 | |
| 361 | obs, err := js.CreateObjectStore(ctx, jetstream.ObjectStoreConfig{Bucket: "OBJS"}) |
| 362 | expectOk(t, err) |
| 363 | |
| 364 | msg := bytes.Repeat([]byte("A"), 100) |
| 365 | _, err = obs.PutBytes(ctx, "A", msg) |
| 366 | expectOk(t, err) |
| 367 | |
| 368 | err = obs.Delete(ctx, "A") |
| 369 | expectOk(t, err) |
| 370 | |
| 371 | si, err := js.Stream(ctx, "OBJ_OBJS") |
| 372 | expectOk(t, err) |
| 373 | |
| 374 | // We should have one message left, the "delete" marker. |
| 375 | if si.CachedInfo().State.Msgs != 1 { |
| 376 | t.Fatalf("Expected 1 marker msg, got %d msgs", si.CachedInfo().State.Msgs) |
| 377 | } |
| 378 | // For deleted object return error |
| 379 | _, err = obs.GetInfo(ctx, "A") |
| 380 | expectErr(t, err, jetstream.ErrObjectNotFound) |
| 381 | _, err = obs.Get(ctx, "A") |
| 382 | expectErr(t, err, jetstream.ErrObjectNotFound) |
| 383 | |
| 384 | info, err := obs.GetInfo(ctx, "A", jetstream.GetObjectInfoShowDeleted()) |
| 385 | expectOk(t, err) |
| 386 | // Make sure we have a delete marker, this will be there to drive Watch functionality. |
| 387 | if !info.Deleted { |
| 388 | t.Fatalf("Expected info to be marked as deleted") |
| 389 | } |
| 390 | _, err = obs.Get(ctx, "A", jetstream.GetObjectShowDeleted()) |
| 391 | expectOk(t, err) |
| 392 | } |
| 393 | |
| 394 | func TestObjectMultiWithDelete(t *testing.T) { |
| 395 | s := RunBasicJetStreamServer() |
nothing calls this directly
no test coverage detected