diff --git a/e2e/ctl_v3_auth_test.go b/e2e/ctl_v3_auth_test.go index 01df776b34bd..85972a096177 100644 --- a/e2e/ctl_v3_auth_test.go +++ b/e2e/ctl_v3_auth_test.go @@ -740,32 +740,32 @@ func authTestWatch(cx ctlCtx) { puts []kv args []string - wkv []kv + wkv []kvExec want bool }{ { // watch 1 key, should be successful []kv{{"key", "value"}}, []string{"key", "--rev", "1"}, - []kv{{"key", "value"}}, + []kvExec{{key: "key", val: "value"}}, true, }, { // watch 3 keys by range, should be successful []kv{{"key1", "val1"}, {"key3", "val3"}, {"key2", "val2"}}, []string{"key", "key3", "--rev", "1"}, - []kv{{"key1", "val1"}, {"key2", "val2"}}, + []kvExec{{key: "key1", val: "val1"}, {key: "key2", val: "val2"}}, true, }, { // watch 1 key, should not be successful []kv{}, []string{"key5", "--rev", "1"}, - []kv{}, + []kvExec{}, false, }, { // watch 3 keys by range, should not be successful []kv{}, []string{"key", "key6", "--rev", "1"}, - []kv{}, + []kvExec{}, false, }, } diff --git a/e2e/ctl_v3_make_mirror_test.go b/e2e/ctl_v3_make_mirror_test.go index 8bb92e1d9990..ef1cf24c5939 100644 --- a/e2e/ctl_v3_make_mirror_test.go +++ b/e2e/ctl_v3_make_mirror_test.go @@ -28,16 +28,17 @@ func makeMirrorTest(cx ctlCtx) { var ( flags = []string{} kvs = []kv{{"key1", "val1"}, {"key2", "val2"}, {"key3", "val3"}} + kvs2 = []kvExec{{key: "key1", val: "val1"}, {key: "key2", val: "val2"}, {key: "key3", val: "val3"}} prefix = "key" ) - testMirrorCommand(cx, flags, kvs, kvs, prefix, prefix) + testMirrorCommand(cx, flags, kvs, kvs2, prefix, prefix) } func makeMirrorModifyDestPrefixTest(cx ctlCtx) { var ( flags = []string{"--prefix", "o_", "--dest-prefix", "d_"} kvs = []kv{{"o_key1", "val1"}, {"o_key2", "val2"}, {"o_key3", "val3"}} - kvs2 = []kv{{"d_key1", "val1"}, {"d_key2", "val2"}, {"d_key3", "val3"}} + kvs2 = []kvExec{{key: "d_key1", val: "val1"}, {key: "d_key2", val: "val2"}, {key: "d_key3", val: "val3"}} srcprefix = "o_" destprefix = "d_" ) @@ -48,7 +49,7 @@ func makeMirrorNoDestPrefixTest(cx ctlCtx) { var ( flags = []string{"--prefix", "o_", "--no-dest-prefix"} kvs = []kv{{"o_key1", "val1"}, {"o_key2", "val2"}, {"o_key3", "val3"}} - kvs2 = []kv{{"key1", "val1"}, {"key2", "val2"}, {"key3", "val3"}} + kvs2 = []kvExec{{key: "key1", val: "val1"}, {key: "key2", val: "val2"}, {key: "key3", val: "val3"}} srcprefix = "o_" destprefix = "key" ) @@ -56,7 +57,7 @@ func makeMirrorNoDestPrefixTest(cx ctlCtx) { testMirrorCommand(cx, flags, kvs, kvs2, srcprefix, destprefix) } -func testMirrorCommand(cx ctlCtx, flags []string, sourcekvs, destkvs []kv, srcprefix, destprefix string) { +func testMirrorCommand(cx ctlCtx, flags []string, sourcekvs []kv, destkvs []kvExec, srcprefix, destprefix string) { // set up another cluster to mirror with mirrorcfg := configAutoTLS mirrorcfg.clusterSize = 1 diff --git a/e2e/ctl_v3_watch_test.go b/e2e/ctl_v3_watch_test.go index bc9d64ac9704..9356729b9f39 100644 --- a/e2e/ctl_v3_watch_test.go +++ b/e2e/ctl_v3_watch_test.go @@ -38,32 +38,62 @@ func TestCtlV3WatchInteractivePeerTLS(t *testing.T) { testCtl(t, watchTest, withInteractive(), withCfg(configPeerTLS)) } +type kvExec struct { + key, val string + execOutput string +} + func watchTest(cx ctlCtx) { tests := []struct { puts []kv args []string - wkv []kv + wkv []kvExec }{ { // watch 1 key []kv{{"sample", "value"}}, []string{"sample", "--rev", "1"}, + []kvExec{{key: "sample", val: "value"}}, + }, + { // watch 1 key with "echo watch event received" + []kv{{"sample", "value"}}, + []string{"sample", "--rev", "1", "--", "echo", "watch event received"}, + []kvExec{{key: "sample", val: "value", execOutput: "watch event received"}}, + }, + { // watch 1 key with "echo watch event received" + []kv{{"sample", "value"}}, + []string{"--rev", "1", "sample", "--", "echo", "watch event received"}, + []kvExec{{key: "sample", val: "value", execOutput: "watch event received"}}, + }, + { // watch 1 key with "echo \"Hello World!\"" []kv{{"sample", "value"}}, + []string{"--rev", "1", "sample", "--", "echo", "\"Hello World!\""}, + []kvExec{{key: "sample", val: "value", execOutput: "Hello World!"}}, + }, + { // watch 1 key with "echo watch event received" + []kv{{"sample", "value"}}, + []string{"sample", "samplx", "--rev", "1", "--", "echo", "watch event received"}, + []kvExec{{key: "sample", val: "value", execOutput: "watch event received"}}, + }, + { // watch 1 key with "echo watch event received" + []kv{{"sample", "value"}}, + []string{"sample", "--rev", "1", "samplx", "--", "echo", "watch event received"}, + []kvExec{{key: "sample", val: "value", execOutput: "watch event received"}}, }, { // watch 3 keys by prefix []kv{{"key1", "val1"}, {"key2", "val2"}, {"key3", "val3"}}, []string{"key", "--rev", "1", "--prefix"}, - []kv{{"key1", "val1"}, {"key2", "val2"}, {"key3", "val3"}}, + []kvExec{{key: "key1", val: "val1"}, {key: "key2", val: "val2"}, {key: "key3", val: "val3"}}, }, { // watch by revision []kv{{"etcd", "revision_1"}, {"etcd", "revision_2"}, {"etcd", "revision_3"}}, []string{"etcd", "--rev", "2"}, - []kv{{"etcd", "revision_2"}, {"etcd", "revision_3"}}, + []kvExec{{key: "etcd", val: "revision_2"}, {key: "etcd", val: "revision_3"}}, }, { // watch 3 keys by range []kv{{"key1", "val1"}, {"key3", "val3"}, {"key2", "val2"}}, []string{"key", "key3", "--rev", "1"}, - []kv{{"key1", "val1"}, {"key2", "val2"}}, + []kvExec{{key: "key1", val: "val1"}, {key: "key2", val: "val2"}}, }, } @@ -97,7 +127,7 @@ func setupWatchArgs(cx ctlCtx, args []string) []string { return cmdArgs } -func ctlV3Watch(cx ctlCtx, args []string, kvs ...kv) error { +func ctlV3Watch(cx ctlCtx, args []string, kvs ...kvExec) error { cmdArgs := setupWatchArgs(cx, args) proc, err := spawnCmd(cmdArgs) @@ -119,6 +149,11 @@ func ctlV3Watch(cx ctlCtx, args []string, kvs ...kv) error { if _, err = proc.Expect(elem.val); err != nil { return err } + if elem.execOutput != "" { + if _, err = proc.Expect(elem.execOutput); err != nil { + return err + } + } } return proc.Stop() }