(t *testing.T)
| 892 | } |
| 893 | |
| 894 | func TestV3LeaseRecoverKeyWithMutipleLease(t *testing.T) { |
| 895 | integration.BeforeTest(t) |
| 896 | |
| 897 | clus := integration.NewCluster(t, &integration.ClusterConfig{Size: 1, UseBridge: true}) |
| 898 | defer clus.Terminate(t) |
| 899 | |
| 900 | kvc := integration.ToGRPC(clus.Client(0)).KV |
| 901 | lsc := integration.ToGRPC(clus.Client(0)).Lease |
| 902 | |
| 903 | var leaseIDs []int64 |
| 904 | for i := 0; i < 2; i++ { |
| 905 | lresp, err := lsc.LeaseGrant(context.TODO(), &pb.LeaseGrantRequest{TTL: fiveMinTTL}) |
| 906 | require.NoError(t, err) |
| 907 | require.Empty(t, lresp.Error) |
| 908 | leaseIDs = append(leaseIDs, lresp.ID) |
| 909 | |
| 910 | _, err = kvc.Put(context.TODO(), &pb.PutRequest{Key: []byte("foo"), Value: []byte("bar"), Lease: lresp.ID}) |
| 911 | require.NoError(t, err) |
| 912 | } |
| 913 | |
| 914 | // restart server and ensure lease still exists |
| 915 | clus.Members[0].Stop(t) |
| 916 | clus.Members[0].Restart(t) |
| 917 | clus.WaitMembersForLeader(t, clus.Members) |
| 918 | for i, leaseID := range leaseIDs { |
| 919 | if !leaseExist(t, clus, leaseID) { |
| 920 | t.Errorf("#%d: unexpected lease not exists", i) |
| 921 | } |
| 922 | } |
| 923 | |
| 924 | // overwrite old client with newly dialed connection |
| 925 | // otherwise, error with "grpc: RPC failed fast due to transport failure" |
| 926 | nc, err := integration.NewClientV3(clus.Members[0]) |
| 927 | require.NoError(t, err) |
| 928 | kvc = integration.ToGRPC(nc).KV |
| 929 | lsc = integration.ToGRPC(nc).Lease |
| 930 | defer nc.Close() |
| 931 | |
| 932 | // revoke the old lease |
| 933 | _, err = lsc.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: leaseIDs[0]}) |
| 934 | require.NoError(t, err) |
| 935 | // key should still exist |
| 936 | rresp, err := kvc.Range(context.TODO(), &pb.RangeRequest{Key: []byte("foo")}) |
| 937 | require.NoError(t, err) |
| 938 | if len(rresp.Kvs) != 1 { |
| 939 | t.Fatalf("only detached lease removed, key should remain") |
| 940 | } |
| 941 | |
| 942 | // revoke the latest lease |
| 943 | _, err = lsc.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: leaseIDs[1]}) |
| 944 | require.NoError(t, err) |
| 945 | rresp, err = kvc.Range(context.TODO(), &pb.RangeRequest{Key: []byte("foo")}) |
| 946 | require.NoError(t, err) |
| 947 | if len(rresp.Kvs) != 0 { |
| 948 | t.Fatalf("lease removed but key remains") |
| 949 | } |
| 950 | } |
| 951 |
nothing calls this directly
no test coverage detected
searching dependent graphs…