Forráskód Böngészése

Merge pull request #4992 from gyuho/e2e_clean

e2e: clean up, return all lines in error
Gyu-Ho Lee 9 éve
szülő
commit
a38617d93a
3 módosított fájl, 34 hozzáadás és 17 törlés
  1. 0 0
      e2e/ctl_v2_test.go
  2. 15 12
      e2e/ctl_v3_test.go
  3. 19 5
      e2e/etcd_test.go

+ 0 - 0
e2e/etcdctl_test.go → e2e/ctl_v2_test.go


+ 15 - 12
e2e/etcdctlv3_test.go → e2e/ctl_v3_test.go

@@ -170,13 +170,13 @@ func putTest(cx ctlCtx) {
 
 
 	key, value := "foo", "bar"
 	key, value := "foo", "bar"
 
 
-	if err := ctlV3Put(cx, key, value); err != nil {
-		if cx.dialTimeout > 0 && isGRPCTimedout(err) {
+	if err := ctlV3Put(cx, key, value, ""); err != nil {
+		if cx.dialTimeout > 0 && !isGRPCTimedout(err) {
 			cx.t.Fatalf("putTest ctlV3Put error (%v)", err)
 			cx.t.Fatalf("putTest ctlV3Put error (%v)", err)
 		}
 		}
 	}
 	}
 	if err := ctlV3Get(cx, []string{key}, kv{key, value}); err != nil {
 	if err := ctlV3Get(cx, []string{key}, kv{key, value}); err != nil {
-		if cx.dialTimeout > 0 && isGRPCTimedout(err) {
+		if cx.dialTimeout > 0 && !isGRPCTimedout(err) {
 			cx.t.Fatalf("putTest ctlV3Get error (%v)", err)
 			cx.t.Fatalf("putTest ctlV3Get error (%v)", err)
 		}
 		}
 	}
 	}
@@ -205,13 +205,13 @@ func getTest(cx ctlCtx) {
 	}
 	}
 
 
 	for i := range kvs {
 	for i := range kvs {
-		if err := ctlV3Put(cx, kvs[i].key, kvs[i].val); err != nil {
+		if err := ctlV3Put(cx, kvs[i].key, kvs[i].val, ""); err != nil {
 			cx.t.Fatalf("getTest #%d: ctlV3Put error (%v)", i, err)
 			cx.t.Fatalf("getTest #%d: ctlV3Put error (%v)", i, err)
 		}
 		}
 	}
 	}
 	for i, tt := range tests {
 	for i, tt := range tests {
 		if err := ctlV3Get(cx, tt.args, tt.wkv...); err != nil {
 		if err := ctlV3Get(cx, tt.args, tt.wkv...); err != nil {
-			if cx.dialTimeout > 0 && isGRPCTimedout(err) {
+			if cx.dialTimeout > 0 && !isGRPCTimedout(err) {
 				cx.t.Errorf("getTest #%d: ctlV3Get error (%v)", i, err)
 				cx.t.Errorf("getTest #%d: ctlV3Get error (%v)", i, err)
 			}
 			}
 		}
 		}
@@ -246,12 +246,12 @@ func delTest(cx ctlCtx) {
 
 
 	for i, tt := range tests {
 	for i, tt := range tests {
 		for j := range tt.puts {
 		for j := range tt.puts {
-			if err := ctlV3Put(cx, tt.puts[j].key, tt.puts[j].val); err != nil {
+			if err := ctlV3Put(cx, tt.puts[j].key, tt.puts[j].val, ""); err != nil {
 				cx.t.Fatalf("delTest #%d-%d: ctlV3Put error (%v)", i, j, err)
 				cx.t.Fatalf("delTest #%d-%d: ctlV3Put error (%v)", i, j, err)
 			}
 			}
 		}
 		}
 		if err := ctlV3Del(cx, tt.args, tt.deletedNum); err != nil {
 		if err := ctlV3Del(cx, tt.args, tt.deletedNum); err != nil {
-			if cx.dialTimeout > 0 && isGRPCTimedout(err) {
+			if cx.dialTimeout > 0 && !isGRPCTimedout(err) {
 				cx.t.Fatalf("delTest #%d: ctlV3Del error (%v)", i, err)
 				cx.t.Fatalf("delTest #%d: ctlV3Del error (%v)", i, err)
 			}
 			}
 		}
 		}
@@ -287,13 +287,13 @@ func watchTest(cx ctlCtx) {
 	for i, tt := range tests {
 	for i, tt := range tests {
 		go func() {
 		go func() {
 			for j := range tt.puts {
 			for j := range tt.puts {
-				if err := ctlV3Put(cx, tt.puts[j].key, tt.puts[j].val); err != nil {
+				if err := ctlV3Put(cx, tt.puts[j].key, tt.puts[j].val, ""); err != nil {
 					cx.t.Fatalf("watchTest #%d-%d: ctlV3Put error (%v)", i, j, err)
 					cx.t.Fatalf("watchTest #%d-%d: ctlV3Put error (%v)", i, j, err)
 				}
 				}
 			}
 			}
 		}()
 		}()
 		if err := ctlV3Watch(cx, tt.args, tt.wkv...); err != nil {
 		if err := ctlV3Watch(cx, tt.args, tt.wkv...); err != nil {
-			if cx.dialTimeout > 0 && isGRPCTimedout(err) {
+			if cx.dialTimeout > 0 && !isGRPCTimedout(err) {
 				cx.t.Errorf("watchTest #%d: ctlV3Watch error (%v)", i, err)
 				cx.t.Errorf("watchTest #%d: ctlV3Watch error (%v)", i, err)
 			}
 			}
 		}
 		}
@@ -319,10 +319,10 @@ func epHealthTest(cx ctlCtx) {
 func txnTestSuccess(cx ctlCtx) {
 func txnTestSuccess(cx ctlCtx) {
 	defer close(cx.errc)
 	defer close(cx.errc)
 
 
-	if err := ctlV3Put(cx, "key1", "value1"); err != nil {
+	if err := ctlV3Put(cx, "key1", "value1", ""); err != nil {
 		cx.t.Fatalf("txnTestSuccess ctlV3Put error (%v)", err)
 		cx.t.Fatalf("txnTestSuccess ctlV3Put error (%v)", err)
 	}
 	}
-	if err := ctlV3Put(cx, "key2", "value2"); err != nil {
+	if err := ctlV3Put(cx, "key2", "value2", ""); err != nil {
 		cx.t.Fatalf("txnTestSuccess ctlV3Put error (%v)", err)
 		cx.t.Fatalf("txnTestSuccess ctlV3Put error (%v)", err)
 	}
 	}
 
 
@@ -371,8 +371,11 @@ func ctlV3PrefixArgs(clus *etcdProcessCluster, dialTimeout time.Duration) []stri
 	return cmdArgs
 	return cmdArgs
 }
 }
 
 
-func ctlV3Put(cx ctlCtx, key, value string) error {
+func ctlV3Put(cx ctlCtx, key, value, leaseID string) error {
 	cmdArgs := append(ctlV3PrefixArgs(cx.epc, cx.dialTimeout), "put", key, value)
 	cmdArgs := append(ctlV3PrefixArgs(cx.epc, cx.dialTimeout), "put", key, value)
+	if leaseID != "" {
+		cmdArgs = append(cmdArgs, "--lease", leaseID)
+	}
 	return spawnWithExpect(cmdArgs, "OK")
 	return spawnWithExpect(cmdArgs, "OK")
 }
 }
 
 

+ 19 - 5
e2e/etcd_test.go

@@ -416,8 +416,7 @@ func (epc *etcdProcessCluster) Close() (err error) {
 }
 }
 
 
 func spawnCmd(args []string) (*expect.ExpectProcess, error) {
 func spawnCmd(args []string) (*expect.ExpectProcess, error) {
-	// redirect stderr to stdout since expect only uses stdout
-	cmdargs := append([]string{"-c"}, strings.Join(append(args, "2>&1"), " "))
+	cmdargs := append([]string{"-c"}, strings.Join(args, " "))
 	return expect.NewExpect("/bin/sh", cmdargs...)
 	return expect.NewExpect("/bin/sh", cmdargs...)
 }
 }
 
 
@@ -430,16 +429,31 @@ func spawnWithExpects(args []string, xs ...string) error {
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	// process until either stdout or stderr contains
+	// the expected string
+	var (
+		lines    []string
+		lineFunc = func(txt string) bool { return true }
+	)
 	for _, txt := range xs {
 	for _, txt := range xs {
-		_, err = proc.Expect(txt)
-		if err != nil {
-			return err
+		for {
+			l, err := proc.ExpectFunc(lineFunc)
+			if err != nil {
+				return fmt.Errorf("%v (expected %s, got %q)", err, txt, lines)
+			}
+			lines = append(lines, l)
+			if strings.Contains(l, txt) {
+				break
+			}
 		}
 		}
 	}
 	}
 	perr := proc.Close()
 	perr := proc.Close()
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	if len(xs) == 0 && proc.LineCount() != 0 { // expect no output
+		return fmt.Errorf("unexpected output (got lines %q, line count %d)", lines, proc.LineCount())
+	}
 	return perr
 	return perr
 }
 }