Explorar o código

e2e: lease tests, fix minor format string

Gyu-Ho Lee %!s(int64=9) %!d(string=hai) anos
pai
achega
84bf6e7462
Modificáronse 2 ficheiros con 106 adicións e 1 borrados
  1. 105 0
      e2e/ctl_v3_lease_test.go
  2. 1 1
      e2e/etcd_test.go

+ 105 - 0
e2e/ctl_v3_lease_test.go

@@ -0,0 +1,105 @@
+// Copyright 2016 CoreOS, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package e2e
+
+import (
+	"fmt"
+	"strconv"
+	"strings"
+	"testing"
+)
+
+func TestCtlV3LeaseKeepAlive(t *testing.T) { testCtl(t, leaseTestKeepAlive) }
+func TestCtlV3LeaseRevoke(t *testing.T)    { testCtl(t, leaseTestRevoke) }
+
+func leaseTestKeepAlive(cx ctlCtx) {
+	defer close(cx.errc)
+
+	// put with TTL 10 seconds and keep-alive
+	leaseID, err := ctlV3LeaseCreate(cx, 10)
+	if err != nil {
+		cx.t.Fatalf("leaseTestKeepAlive: ctlV3LeaseCreate 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 leaseTestRevoke(cx ctlCtx) {
+	defer close(cx.errc)
+
+	// put with TTL 10 seconds and revoke
+	leaseID, err := ctlV3LeaseCreate(cx, 10)
+	if err != nil {
+		cx.t.Fatalf("leaseTestRevoke: ctlV3LeaseCreate error (%v)", err)
+	}
+	if err := ctlV3Put(cx, "key", "val", leaseID); err != nil {
+		cx.t.Fatalf("leaseTestRevoke: ctlV3Put error (%v)", err)
+	}
+	if err := ctlV3LeaseRevoke(cx, leaseID); err != nil {
+		cx.t.Fatalf("leaseTestRevoke: ctlV3LeaseRevok error (%v)", err)
+	}
+	if err := ctlV3Get(cx, []string{"key"}); err != nil { // expect no output
+		cx.t.Fatalf("leaseTestRevoke: ctlV3Get error (%v)", err)
+	}
+}
+
+func ctlV3LeaseCreate(cx ctlCtx, ttl int) (string, error) {
+	cmdArgs := append(ctlV3PrefixArgs(cx.epc, cx.dialTimeout), "lease", "create", strconv.Itoa(ttl))
+	proc, err := spawnCmd(cmdArgs)
+	if err != nil {
+		return "", err
+	}
+
+	line, err := proc.Expect(" created with TTL(")
+	if err != nil {
+		return "", err
+	}
+	if err = proc.Close(); err != nil {
+		return "", err
+	}
+
+	// parse 'line LEASE_ID created with TTL(5s)' to get lease ID
+	hs := strings.Split(line, " ")
+	if len(hs) < 2 {
+		return "", fmt.Errorf("lease create failed with %q", line)
+	}
+	return hs[1], nil
+}
+
+func ctlV3LeaseKeepAlive(cx ctlCtx, leaseID string) error {
+	cmdArgs := append(ctlV3PrefixArgs(cx.epc, cx.dialTimeout), "lease", "keep-alive", leaseID)
+
+	proc, err := spawnCmd(cmdArgs)
+	if err != nil {
+		return err
+	}
+
+	if _, err = proc.Expect(fmt.Sprintf("lease %s keepalived with TTL(", leaseID)); err != nil {
+		return err
+	}
+	return proc.Stop()
+}
+
+func ctlV3LeaseRevoke(cx ctlCtx, leaseID string) error {
+	cmdArgs := append(ctlV3PrefixArgs(cx.epc, cx.dialTimeout), "lease", "revoke", leaseID)
+	return spawnWithExpect(cmdArgs, fmt.Sprintf("lease %s revoked", leaseID))
+}

+ 1 - 1
e2e/etcd_test.go

@@ -439,7 +439,7 @@ func spawnWithExpects(args []string, xs ...string) error {
 		for {
 			l, err := proc.ExpectFunc(lineFunc)
 			if err != nil {
-				return fmt.Errorf("%v (expected %s, got %q)", err, txt, lines)
+				return fmt.Errorf("%v (expected %q, got %q)", err, txt, lines)
 			}
 			lines = append(lines, l)
 			if strings.Contains(l, txt) {