On Fri, Jun 17, 2016 at 20:04:38 +0200, Ján Tomko wrote:
A new hidden command for virsh that will iterate over
all command groups and commands and print help for every single one.
This involves running vshCmddefOptParse so we can get an error if
one of the command's option structure is invalid.
---
.gitignore | 1 +
tests/Makefile.am | 1 +
tests/virsh-self-test | 37 +++++++++++++++++++++++++++++++++++++
tools/virsh.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 89 insertions(+)
create mode 100755 tests/virsh-self-test
diff --git a/tests/virsh-self-test b/tests/virsh-self-test
new file mode 100755
index 0000000..42e8605
--- /dev/null
+++ b/tests/virsh-self-test
@@ -0,0 +1,37 @@
+#!/bin/sh
+# run virsh self-test to make sure command option structures are valid
+
+# Copyright (C) 2008, 2009 Red Hat, Inc.
This year doesn't look correct
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <
http://www.gnu.org/licenses/>.
+
+. "$(dirname $0)/test-lib.sh"
+
+fail=0
+
+test_url=test:///default
+
+test_intro "virsh-self-test"
+$abs_top_builddir/tools/virsh -c $test_url self-test > /dev/null
+status=$?
+test_result 1 "virsh-self-test" $status
+
+if test "$status" = "1" ; then
+ fail=1
+fi
+
+test_final $counter $fail
+
+(exit $fail); exit $fail
diff --git a/tools/virsh.c b/tools/virsh.c
index 2a807d9..8eb05d3 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -341,6 +341,50 @@ virshConnectionHandler(vshControl *ctl)
return NULL;
}
+/* -----------------
+ * Command self-test
+ * ----------------- */
+
+static const vshCmdInfo info_selftest[] = {
+ {.name = "help",
+ .data = N_("internal command for testing virsh")
+ },
+ {.name = "desc",
+ .data = N_("This message should not be output.")
$ tools/virsh self-test --help
NAME
self-test - internal command for testing virsh
SYNOPSIS
self-test
DESCRIPTION
This message should not be output.
I'd go with "DO NOT USE THIS COMMAND", or "internal use only".
+ },
+ {.name = NULL}
+};
+
+/* Prints help for every command.
+ * That runs vshCmddefOptParse which validates
+ * the per-command options structure. */
+static bool
+cmdSelfTest(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
+{
+ const vshCmdGrp *grp;
+ const vshCmdDef *def;
+ /*
+ const char *blacklist [] = {
+ "self-test",
+ "connect"
+ }; */
You probably forgot to delete this.
+
+ vshPrint(ctl, "%s", _("Grouped commands:\n\n"));
This doesn't look necessary. Perhaps you could change it to a warning
that this output shouldn't be used.
+
+ for (grp = cmdGroups; grp->name; grp++) {
+ for (def = grp->commands; def->name; def++) {
+ if (def->flags & VSH_CMD_FLAG_ALIAS)
+ continue;
ACK