(t *testing.T)
| 922 | } |
| 923 | |
| 924 | func TestKeyValuePurgeDeletesMarkerThreshold(t *testing.T) { |
| 925 | s := RunBasicJetStreamServer() |
| 926 | defer shutdownJSServerAndRemoveStorage(t, s) |
| 927 | |
| 928 | nc, js := jsClient(t, s) |
| 929 | defer nc.Close() |
| 930 | ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) |
| 931 | defer cancel() |
| 932 | |
| 933 | kv, err := js.CreateKeyValue(ctx, jetstream.KeyValueConfig{Bucket: "KVS", History: 10}) |
| 934 | expectOk(t, err) |
| 935 | |
| 936 | put := func(key, value string) { |
| 937 | t.Helper() |
| 938 | _, err := kv.Put(ctx, key, []byte(value)) |
| 939 | expectOk(t, err) |
| 940 | } |
| 941 | |
| 942 | put("foo", "foo1") |
| 943 | put("bar", "bar1") |
| 944 | put("foo", "foo2") |
| 945 | err = kv.Delete(ctx, "foo") |
| 946 | expectOk(t, err) |
| 947 | |
| 948 | time.Sleep(200 * time.Millisecond) |
| 949 | |
| 950 | err = kv.Delete(ctx, "bar") |
| 951 | expectOk(t, err) |
| 952 | |
| 953 | err = kv.PurgeDeletes(ctx, jetstream.DeleteMarkersOlderThan(100*time.Millisecond)) |
| 954 | expectOk(t, err) |
| 955 | |
| 956 | // The key foo should have been completely cleared of the data |
| 957 | // and the delete marker. |
| 958 | fooEntries, err := kv.History(ctx, "foo") |
| 959 | if err != jetstream.ErrKeyNotFound { |
| 960 | t.Fatalf("Expected all entries for key foo to be gone, got err=%v entries=%v", err, fooEntries) |
| 961 | } |
| 962 | barEntries, err := kv.History(ctx, "bar") |
| 963 | expectOk(t, err) |
| 964 | if len(barEntries) != 1 { |
| 965 | t.Fatalf("Expected 1 entry, got %v", barEntries) |
| 966 | } |
| 967 | if e := barEntries[0]; e.Operation() != jetstream.KeyValueDelete { |
| 968 | t.Fatalf("Unexpected entry: %+v", e) |
| 969 | } |
| 970 | } |
| 971 | |
| 972 | func TestKeyValueKeys(t *testing.T) { |
| 973 | s := RunBasicJetStreamServer() |
nothing calls this directly
no test coverage detected