TestV3LeaseRecoverKeyWithDetachedLease ensures that revoking a detached lease after restart does not delete the key.
(t *testing.T)
| 850 | // TestV3LeaseRecoverKeyWithDetachedLease ensures that revoking a detached lease after restart |
| 851 | // does not delete the key. |
| 852 | func TestV3LeaseRecoverKeyWithDetachedLease(t *testing.T) { |
| 853 | integration.BeforeTest(t) |
| 854 | |
| 855 | clus := integration.NewCluster(t, &integration.ClusterConfig{Size: 1, UseBridge: true}) |
| 856 | defer clus.Terminate(t) |
| 857 | |
| 858 | kvc := integration.ToGRPC(clus.Client(0)).KV |
| 859 | lsc := integration.ToGRPC(clus.Client(0)).Lease |
| 860 | |
| 861 | lresp, err := lsc.LeaseGrant(context.TODO(), &pb.LeaseGrantRequest{TTL: fiveMinTTL}) |
| 862 | require.NoError(t, err) |
| 863 | require.Empty(t, lresp.Error) |
| 864 | _, err = kvc.Put(context.TODO(), &pb.PutRequest{Key: []byte("foo"), Value: []byte("bar"), Lease: lresp.ID}) |
| 865 | require.NoError(t, err) |
| 866 | |
| 867 | // overwrite lease with none |
| 868 | _, err = kvc.Put(context.TODO(), &pb.PutRequest{Key: []byte("foo"), Value: []byte("bar")}) |
| 869 | require.NoError(t, err) |
| 870 | |
| 871 | // restart server and ensure lease still exists |
| 872 | clus.Members[0].Stop(t) |
| 873 | clus.Members[0].Restart(t) |
| 874 | clus.WaitMembersForLeader(t, clus.Members) |
| 875 | |
| 876 | // overwrite old client with newly dialed connection |
| 877 | // otherwise, error with "grpc: RPC failed fast due to transport failure" |
| 878 | nc, err := integration.NewClientV3(clus.Members[0]) |
| 879 | require.NoError(t, err) |
| 880 | kvc = integration.ToGRPC(nc).KV |
| 881 | lsc = integration.ToGRPC(nc).Lease |
| 882 | defer nc.Close() |
| 883 | |
| 884 | // revoke the detached lease |
| 885 | _, err = lsc.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: lresp.ID}) |
| 886 | require.NoError(t, err) |
| 887 | rresp, err := kvc.Range(context.TODO(), &pb.RangeRequest{Key: []byte("foo")}) |
| 888 | require.NoError(t, err) |
| 889 | if len(rresp.Kvs) != 1 { |
| 890 | t.Fatalf("only detached lease removed, key should remain") |
| 891 | } |
| 892 | } |
| 893 | |
| 894 | func TestV3LeaseRecoverKeyWithMutipleLease(t *testing.T) { |
| 895 | integration.BeforeTest(t) |
nothing calls this directly
no test coverage detected
searching dependent graphs…