--- /dev/null
+#!/bin/sh
+# run virsh self-test to make sure command option structures are valid
+
+# Copyright (C) 2016 Red Hat, Inc.
+
+# 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
return NULL;
}
+/* -----------------
+ * Command self-test
+ * ----------------- */
+
+static const vshCmdInfo info_selftest[] = {
+ {.name = "help",
+ .data = N_("internal command for testing virsh")
+ },
+ {.name = "desc",
+ .data = N_("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;
+
+ vshPrint(ctl, "Do not use the following output:\n\n");
+
+ for (grp = cmdGroups; grp->name; grp++) {
+ for (def = grp->commands; def->name; def++) {
+ if (def->flags & VSH_CMD_FLAG_ALIAS)
+ continue;
+
+ if (!vshCmddefHelp(ctl, def->name))
+ return false;
+ }
+ }
+
+ return true;
+}
+
+
/* ---------------
* Misc utils
* ---------------
.info = info_connect,
.flags = VSH_CMD_FLAG_NOCONNECT
},
+ {.name = "self-test",
+ .handler = cmdSelfTest,
+ .opts = NULL,
+ .info = info_selftest,
+ .flags = VSH_CMD_FLAG_NOCONNECT | VSH_CMD_FLAG_ALIAS
+ },
{.name = NULL}
};