From ed3672850c93277fd26e8027294440a7950ea00a Mon Sep 17 00:00:00 2001 From: Sam Batschelet Date: Thu, 14 Dec 2017 22:21:07 -0500 Subject: [PATCH] e2e: improve lease coverage --- e2e/ctl_v3_auth_test.go | 40 +++++++++++++++++++++++++++++++++++ e2e/ctl_v3_lease_test.go | 45 +++++++++++++++++++++++++++++++++++----- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/e2e/ctl_v3_auth_test.go b/e2e/ctl_v3_auth_test.go index 01df776b34b..d59461868fe 100644 --- a/e2e/ctl_v3_auth_test.go +++ b/e2e/ctl_v3_auth_test.go @@ -41,6 +41,9 @@ func TestCtlV3AuthInvalidMgmt(t *testing.T) { testCtl(t, authTestInvalidMgm func TestCtlV3AuthFromKeyPerm(t *testing.T) { testCtl(t, authTestFromKeyPerm) } func TestCtlV3AuthAndWatch(t *testing.T) { testCtl(t, authTestWatch) } +func TestCtlV3AuthLeaseTestKeepAlive(t *testing.T) { testCtl(t, authLeaseTestKeepAlive) } +func TestCtlV3AuthLeaseTestTimeToLiveExpired(t *testing.T) { testCtl(t, authLeaseTestTimeToLiveExpired) } + func TestCtlV3AuthRoleGet(t *testing.T) { testCtl(t, authTestRoleGet) } func TestCtlV3AuthUserGet(t *testing.T) { testCtl(t, authTestUserGet) } func TestCtlV3AuthRoleList(t *testing.T) { testCtl(t, authTestRoleList) } @@ -723,6 +726,43 @@ func authTestFromKeyPerm(cx ctlCtx) { } } +func authLeaseTestKeepAlive(cx ctlCtx) { + if err := authEnable(cx); err != nil { + cx.t.Fatal(err) + } + + cx.user, cx.pass = "root", "root" + authSetupTestUser(cx) + // put with TTL 10 seconds and keep-alive + leaseID, err := ctlV3LeaseGrant(cx, 10) + if err != nil { + cx.t.Fatalf("leaseTestKeepAlive: ctlV3LeaseGrant error (%v)", err) + } + if err := ctlV3Put(cx, "key", "val", leaseID); err != nil { + cx.t.Fatalf("leaseTestKeepAlive: ctlV3Put error (%v)", err) + } + if err := ctlV3LeaseKeepAlive(cx, leaseID); err != nil { + cx.t.Fatalf("leaseTestKeepAlive: ctlV3LeaseKeepAlive error (%v)", err) + } + if err := ctlV3Get(cx, []string{"key"}, kv{"key", "val"}); err != nil { + cx.t.Fatalf("leaseTestKeepAlive: ctlV3Get error (%v)", err) + } +} + +func authLeaseTestTimeToLiveExpired(cx ctlCtx) { + if err := authEnable(cx); err != nil { + cx.t.Fatal(err) + } + + cx.user, cx.pass = "root", "root" + authSetupTestUser(cx) + + ttl := 3 + if err := leaseTestTimeToLiveExpire(cx, ttl); err != nil { + cx.t.Fatal(err) + } +} + func authTestWatch(cx ctlCtx) { if err := authEnable(cx); err != nil { cx.t.Fatal(err) diff --git a/e2e/ctl_v3_lease_test.go b/e2e/ctl_v3_lease_test.go index 4c11d0707d5..4c926fc299d 100644 --- a/e2e/ctl_v3_lease_test.go +++ b/e2e/ctl_v3_lease_test.go @@ -19,13 +19,15 @@ import ( "strconv" "strings" "testing" + "time" ) -func TestCtlV3LeaseGrantTimeToLive(t *testing.T) { testCtl(t, leaseTestGrantTimeToLive) } -func TestCtlV3LeaseGrantLeases(t *testing.T) { testCtl(t, leaseTestGrantLeasesList) } -func TestCtlV3LeaseKeepAlive(t *testing.T) { testCtl(t, leaseTestKeepAlive) } -func TestCtlV3LeaseKeepAliveOnce(t *testing.T) { testCtl(t, leaseTestKeepAliveOnce) } -func TestCtlV3LeaseRevoke(t *testing.T) { testCtl(t, leaseTestRevoke) } +func TestCtlV3LeaseGrantTimeToLive(t *testing.T) { testCtl(t, leaseTestGrantTimeToLive) } +func TestCtlV3LeaseGrantLeases(t *testing.T) { testCtl(t, leaseTestGrantLeasesList) } +func TestCtlV3LeaseTestTimeToLiveExpired(t *testing.T) { testCtl(t, leaseTestTimeToLiveExpired) } +func TestCtlV3LeaseKeepAlive(t *testing.T) { testCtl(t, leaseTestKeepAlive) } +func TestCtlV3LeaseKeepAliveOnce(t *testing.T) { testCtl(t, leaseTestKeepAliveOnce) } +func TestCtlV3LeaseRevoke(t *testing.T) { testCtl(t, leaseTestRevoke) } func leaseTestGrantTimeToLive(cx ctlCtx) { id, err := ctlV3LeaseGrant(cx, 10) @@ -73,6 +75,39 @@ func leaseTestGrantLeasesList(cx ctlCtx) { } } +func leaseTestTimeToLiveExpired(cx ctlCtx) { + err := leaseTestTimeToLiveExpire(cx, 3) + if err != nil { + cx.t.Fatal(err) + } +} + +func leaseTestTimeToLiveExpire(cx ctlCtx, ttl int) error { + leaseID, err := ctlV3LeaseGrant(cx, ttl) + if err != nil { + return err + } + + if err = ctlV3Put(cx, "key", "val", leaseID); err != nil { + return fmt.Errorf("leaseTestTimeToLiveExpire: ctlV3Put error (%v)", err) + } + // eliminate false positive + time.Sleep(time.Duration(ttl+1) * time.Second) + cmdArgs := append(cx.PrefixArgs(), "lease", "timetolive", leaseID) + proc, err := spawnCmd(cmdArgs) + if err != nil { + return err + } + _, err = proc.Expect("TTL(0s), remaining(-1s)") // expect expired lease + if err != nil { + return err + } + if err := ctlV3Get(cx, []string{"key"}); err != nil { + return fmt.Errorf("leaseTestTimeToLiveExpire: ctlV3Get error (%v)", err) + } + return nil +} + func leaseTestKeepAlive(cx ctlCtx) { // put with TTL 10 seconds and keep-alive leaseID, err := ctlV3LeaseGrant(cx, 10)