]> xenbits.xensource.com Git - libvirt.git/commitdiff
virshtest: Add test cases for command completion helper
authorPeter Krempa <pkrempa@redhat.com>
Tue, 12 Mar 2024 16:03:56 +0000 (17:03 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 25 Apr 2024 12:13:19 +0000 (14:13 +0200)
Add both single invocations as well as a script containing the same
commands.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
20 files changed:
tests/virshtest.c
tests/virshtestdata/completion-arg-full-argv-next.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-full-argv.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-full-bool-next.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-full-bool.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-full-string-next.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-full-string.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-partial.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-positional-empty.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-positional-partial-next.out [new file with mode: 0644]
tests/virshtestdata/completion-arg-positional-partial.out [new file with mode: 0644]
tests/virshtestdata/completion-args.out [new file with mode: 0644]
tests/virshtestdata/completion-argv-multiple-next.out [new file with mode: 0644]
tests/virshtestdata/completion-argv-multiple-positional-next.out [new file with mode: 0644]
tests/virshtestdata/completion-argv-multiple-positional.out [new file with mode: 0644]
tests/virshtestdata/completion-argv-multiple.out [new file with mode: 0644]
tests/virshtestdata/completion-command-complete.out [new file with mode: 0644]
tests/virshtestdata/completion-command.out [new file with mode: 0644]
tests/virshtestdata/completion.in [new file with mode: 0644]
tests/virshtestdata/completion.out [new file with mode: 0644]

index 14a96f2d35cbf9c20eed92293b56d1c8c1d0d13c..a1ae4813167571bb3695fb43b1896c5109b183e4 100644 (file)
@@ -96,6 +96,7 @@ struct testInfo {
     bool expensive;
     const char *const *env; /* extra environment variables to pass */
     bool forbid_root;
+    bool need_readline;
 };
 
 static int testCompare(const void *data)
@@ -109,6 +110,11 @@ static int testCompare(const void *data)
     if (info->forbid_root && geteuid() == 0)
         return EXIT_AM_SKIP;
 
+# ifndef WITH_READLINE
+    if (info->need_readline)
+        return EXIT_AM_SKIP;
+# endif
+
     if (info->testname) {
         outfile = g_strdup_printf("%s/virshtestdata/%s.out",
                                   abs_srcdir, info->testname);
@@ -206,6 +212,7 @@ static int
 mymain(void)
 {
     int ret = 0;
+    bool need_readline = false;
 
     custom_uri = g_strdup_printf("test://%s/../examples/xml/test/testnode.xml",
                                  abs_srcdir);
@@ -217,7 +224,7 @@ mymain(void)
                                                   abs_srcdir, testname); \
         const char *myargv[] = { __VA_ARGS__, NULL, NULL }; \
         const char **tmp = myargv; \
-        const struct testInfo info = { testname, testfilter, myargv, expensive, NULL, false}; \
+        const struct testInfo info = { testname, testfilter, myargv, expensive, NULL, false, need_readline}; \
         g_autofree char *scriptarg = NULL; \
         if (virFileReadAll(infile, 256 * 1024, &scriptarg) < 0) { \
             fprintf(stderr, "\nfailed to load '%s'\n", infile); \
@@ -246,7 +253,7 @@ mymain(void)
 # define DO_TEST_FULL(testname, filter, ...) \
     do { \
         const char *myargv[] = { __VA_ARGS__, NULL }; \
-        const struct testInfo info = { testname, NULL, myargv, false, NULL, false }; \
+        const struct testInfo info = { testname, NULL, myargv, false, NULL, false, need_readline }; \
         DO_TEST_INFO(&info); \
     } while (0)
 
@@ -342,6 +349,48 @@ mymain(void)
                  "checkpoint-create test --redefine checkpoint-c2.xml ;"
                  "checkpoint-info test c2");
 
+    /* completion doesn't work on non-readline builds */
+    need_readline = true;
+
+    DO_TEST_FULL("completion-command", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "ech");
+    DO_TEST_FULL("completion-command-complete", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "echo");
+    DO_TEST_FULL("completion-args", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "echo", "");
+    DO_TEST_FULL("completion-arg-partial", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "echo", "--xm", "--s");
+    DO_TEST_FULL("completion-arg-full-bool", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "echo", "--nonexistant-arg", "--xml");
+    DO_TEST_FULL("completion-arg-full-bool-next", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "echo", "--nonexistant-arg", "--xml", "");
+    DO_TEST_FULL("completion-arg-full-string", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "echo", "--nonexistant-arg", "--prefix");
+    DO_TEST_FULL("completion-arg-full-string-next", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "echo", "--nonexistant-arg", "--prefix", "");
+    DO_TEST_FULL("completion-arg-full-argv", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstats", "--domain");
+    DO_TEST_FULL("completion-arg-full-argv-next", NULL, VIRSH_DEFAULT,
+                 "complete", "--", "domstats", "--domain", "");
+    DO_TEST_FULL("completion-argv-multiple", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstats", "--domain", "fc", "--domain", "fv");
+    DO_TEST_FULL("completion-argv-multiple-next", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstats", "--domain", "fv", "--domain", "fc", "");
+    DO_TEST_FULL("completion-argv-multiple-positional", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstats", "--domain", "fc", "fv");
+    DO_TEST_FULL("completion-argv-multiple-positional-next", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstats", "--domain", "fc", "fv", "");
+    DO_TEST_FULL("completion-arg-positional-empty", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstate", "");
+    DO_TEST_FULL("completion-arg-positional-partial", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstate", "fv");
+    DO_TEST_FULL("completion-arg-positional-partial-next", NULL, VIRSH_CUSTOM,
+                 "complete", "--", "domstate", "fv", "");
+
+    DO_TEST_SCRIPT("completion", NULL, VIRSH_DEFAULT);
+
+    need_readline = false;
+
     if (virTestRun("read-big-pipe", testVirshPipe, NULL) < 0)
         ret = -1;
 
@@ -369,7 +418,7 @@ mymain(void)
         const char *uriTest = "uri; connect; uri";
         const char *myargv_noconnect[] = { abs_top_builddir "/tools/virsh", uriTest, NULL };
         const char *xdgDirBad = "XDG_CONFIG_HOME=" abs_srcdir "/virshtestdata/uriprecedence-xdg/bad/";
-        struct testInfo info = { NULL, NULL, myargv_noconnect, false, NULL, false };
+        struct testInfo info = { NULL, NULL, myargv_noconnect, false, NULL, false, false };
 
         /* test 1 - default from config */
         {
diff --git a/tests/virshtestdata/completion-arg-full-argv-next.out b/tests/virshtestdata/completion-arg-full-argv-next.out
new file mode 100644 (file)
index 0000000..76e579a
--- /dev/null
@@ -0,0 +1,2 @@
+test
+
diff --git a/tests/virshtestdata/completion-arg-full-argv.out b/tests/virshtestdata/completion-arg-full-argv.out
new file mode 100644 (file)
index 0000000..2d79541
--- /dev/null
@@ -0,0 +1,2 @@
+--domain
+
diff --git a/tests/virshtestdata/completion-arg-full-bool-next.out b/tests/virshtestdata/completion-arg-full-bool-next.out
new file mode 100644 (file)
index 0000000..3fc6e03
--- /dev/null
@@ -0,0 +1,7 @@
+--shell
+--xml
+--split
+--err
+--prefix
+--string
+
diff --git a/tests/virshtestdata/completion-arg-full-bool.out b/tests/virshtestdata/completion-arg-full-bool.out
new file mode 100644 (file)
index 0000000..511582e
--- /dev/null
@@ -0,0 +1,2 @@
+--xml
+
diff --git a/tests/virshtestdata/completion-arg-full-string-next.out b/tests/virshtestdata/completion-arg-full-string-next.out
new file mode 100644 (file)
index 0000000..3fc6e03
--- /dev/null
@@ -0,0 +1,7 @@
+--shell
+--xml
+--split
+--err
+--prefix
+--string
+
diff --git a/tests/virshtestdata/completion-arg-full-string.out b/tests/virshtestdata/completion-arg-full-string.out
new file mode 100644 (file)
index 0000000..b294733
--- /dev/null
@@ -0,0 +1,2 @@
+--prefix
+
diff --git a/tests/virshtestdata/completion-arg-partial.out b/tests/virshtestdata/completion-arg-partial.out
new file mode 100644 (file)
index 0000000..cc2820d
--- /dev/null
@@ -0,0 +1,4 @@
+--shell
+--split
+--string
+
diff --git a/tests/virshtestdata/completion-arg-positional-empty.out b/tests/virshtestdata/completion-arg-positional-empty.out
new file mode 100644 (file)
index 0000000..cf2bdf1
--- /dev/null
@@ -0,0 +1,3 @@
+--domain
+--reason
+
diff --git a/tests/virshtestdata/completion-arg-positional-partial-next.out b/tests/virshtestdata/completion-arg-positional-partial-next.out
new file mode 100644 (file)
index 0000000..d9e9cd0
--- /dev/null
@@ -0,0 +1,2 @@
+--reason
+
diff --git a/tests/virshtestdata/completion-arg-positional-partial.out b/tests/virshtestdata/completion-arg-positional-partial.out
new file mode 100644 (file)
index 0000000..4289a72
--- /dev/null
@@ -0,0 +1,2 @@
+fv0
+
diff --git a/tests/virshtestdata/completion-args.out b/tests/virshtestdata/completion-args.out
new file mode 100644 (file)
index 0000000..3fc6e03
--- /dev/null
@@ -0,0 +1,7 @@
+--shell
+--xml
+--split
+--err
+--prefix
+--string
+
diff --git a/tests/virshtestdata/completion-argv-multiple-next.out b/tests/virshtestdata/completion-argv-multiple-next.out
new file mode 100644 (file)
index 0000000..b29a060
--- /dev/null
@@ -0,0 +1,25 @@
+--state
+--cpu-total
+--balloon
+--vcpu
+--interface
+--block
+--perf
+--iothread
+--memory
+--dirtyrate
+--vm
+--list-active
+--list-inactive
+--list-persistent
+--list-transient
+--list-running
+--list-paused
+--list-shutoff
+--list-other
+--raw
+--enforce
+--backing
+--nowait
+--domain
+
diff --git a/tests/virshtestdata/completion-argv-multiple-positional-next.out b/tests/virshtestdata/completion-argv-multiple-positional-next.out
new file mode 100644 (file)
index 0000000..b29a060
--- /dev/null
@@ -0,0 +1,25 @@
+--state
+--cpu-total
+--balloon
+--vcpu
+--interface
+--block
+--perf
+--iothread
+--memory
+--dirtyrate
+--vm
+--list-active
+--list-inactive
+--list-persistent
+--list-transient
+--list-running
+--list-paused
+--list-shutoff
+--list-other
+--raw
+--enforce
+--backing
+--nowait
+--domain
+
diff --git a/tests/virshtestdata/completion-argv-multiple-positional.out b/tests/virshtestdata/completion-argv-multiple-positional.out
new file mode 100644 (file)
index 0000000..4289a72
--- /dev/null
@@ -0,0 +1,2 @@
+fv0
+
diff --git a/tests/virshtestdata/completion-argv-multiple.out b/tests/virshtestdata/completion-argv-multiple.out
new file mode 100644 (file)
index 0000000..4289a72
--- /dev/null
@@ -0,0 +1,2 @@
+fv0
+
diff --git a/tests/virshtestdata/completion-command-complete.out b/tests/virshtestdata/completion-command-complete.out
new file mode 100644 (file)
index 0000000..40cf7bd
--- /dev/null
@@ -0,0 +1,2 @@
+echo
+
diff --git a/tests/virshtestdata/completion-command.out b/tests/virshtestdata/completion-command.out
new file mode 100644 (file)
index 0000000..40cf7bd
--- /dev/null
@@ -0,0 +1,2 @@
+echo
+
diff --git a/tests/virshtestdata/completion.in b/tests/virshtestdata/completion.in
new file mode 100644 (file)
index 0000000..cd25946
--- /dev/null
@@ -0,0 +1,16 @@
+complete -- ech
+complete -- echo
+complete -- echo ''
+complete -- echo --xm --s
+complete -- echo --nonexistant-arg --xml
+complete -- echo --nonexistant-arg --xml ''
+complete -- echo --nonexistant-arg --prefix
+complete -- echo --nonexistant-arg --prefix ''
+complete -- domstats --domain
+complete -- domstats --domain ''
+complete -- domstats --domain f
+complete -- domstats --domain fc --domain fv
+complete -- domstats --domain fv --domain fc ''
+complete -- domstats --domain fc fv
+complete -- domstate ''
+complete -- domstate fv
diff --git a/tests/virshtestdata/completion.out b/tests/virshtestdata/completion.out
new file mode 100644 (file)
index 0000000..9cceb08
--- /dev/null
@@ -0,0 +1,71 @@
+echo
+
+echo
+
+--shell
+--xml
+--split
+--err
+--prefix
+--string
+
+--shell
+--split
+--string
+
+--xml
+
+--shell
+--xml
+--split
+--err
+--prefix
+--string
+
+--prefix
+
+--shell
+--xml
+--split
+--err
+--prefix
+--string
+
+--domain
+
+test
+
+
+
+--state
+--cpu-total
+--balloon
+--vcpu
+--interface
+--block
+--perf
+--iothread
+--memory
+--dirtyrate
+--vm
+--list-active
+--list-inactive
+--list-persistent
+--list-transient
+--list-running
+--list-paused
+--list-shutoff
+--list-other
+--raw
+--enforce
+--backing
+--nowait
+--domain
+
+
+--domain
+--reason
+
+
+
+## Exit code: 1