diff --git a/clientv3/integration/kv_test.go b/clientv3/integration/kv_test.go index b87cad194..829d727cb 100644 --- a/clientv3/integration/kv_test.go +++ b/clientv3/integration/kv_test.go @@ -179,3 +179,75 @@ func TestKVRange(t *testing.T) { } } } + +func TestKVDeleteRange(t *testing.T) { + defer testutil.AfterTest(t) + + clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) + defer clus.Terminate(t) + + kv := clientv3.NewKV(clus.RandClient()) + + keySet := []string{"a", "b", "c", "c", "c", "d", "e", "f"} + for i, key := range keySet { + if _, err := kv.Put(key, "", lease.NoLease); err != nil { + t.Fatalf("#%d: couldn't put %q (%v)", i, key, err) + } + } + + tests := []struct { + key, end string + delRev int64 + }{ + {"a", "b", int64(len(keySet) + 2)}, // delete [a, b) + {"d", "f", int64(len(keySet) + 3)}, // delete [d, f) + } + + for i, tt := range tests { + dresp, err := kv.DeleteRange(tt.key, tt.end) + if err != nil { + t.Fatalf("#%d: couldn't delete range (%v)", i, err) + } + if dresp.Header.Revision != tt.delRev { + t.Fatalf("#%d: dresp.Header.Revision got %d, want %d", i, dresp.Header.Revision, tt.delRev) + } + resp, err := kv.Range(tt.key, tt.end, 0, 0, nil) + if err != nil { + t.Fatalf("#%d: couldn't get key (%v)", i, err) + } + if len(resp.Kvs) > 0 { + t.Fatalf("#%d: resp.Kvs expected none, but got %+v", i, resp.Kvs) + } + } +} + +func TestKVDelete(t *testing.T) { + defer testutil.AfterTest(t) + + clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) + defer clus.Terminate(t) + + kv := clientv3.NewKV(clus.RandClient()) + + presp, err := kv.Put("foo", "", lease.NoLease) + if err != nil { + t.Fatalf("couldn't put 'foo' (%v)", err) + } + if presp.Header.Revision != 2 { + t.Fatalf("presp.Header.Revision got %d, want %d", presp.Header.Revision, 2) + } + resp, err := kv.Delete("foo") + if err != nil { + t.Fatalf("couldn't delete key (%v)", err) + } + if resp.Header.Revision != 3 { + t.Fatalf("resp.Header.Revision got %d, want %d", resp.Header.Revision, 3) + } + gresp, err := kv.Get("foo", 0) + if err != nil { + t.Fatalf("couldn't get key (%v)", err) + } + if len(gresp.Kvs) > 0 { + t.Fatalf("gresp.Kvs got %+v, want none", gresp.Kvs) + } +}