From cef83c0cc60359935fc4fa5db60cdc825bd3fa25 Mon Sep 17 00:00:00 2001 From: Douglas Bagnall Date: Mon, 18 Dec 2017 16:54:07 +1300 Subject: [PATCH] samba-tool: --help test, ensuring help tree coverage `samba-tool [COMMAND] --help` will list sub-commands of COMMAND (or top-level commands if COMMAND is omitted). This ensures that `samba-tool COMMAND SUBCOMMAND --help` works for all the commands found in the help tree. Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- python/samba/tests/samba_tool/help.py | 62 +++++++++++++++++++++++++++++++++++ source4/selftest/tests.py | 1 + 2 files changed, 63 insertions(+) create mode 100644 python/samba/tests/samba_tool/help.py diff --git a/python/samba/tests/samba_tool/help.py b/python/samba/tests/samba_tool/help.py new file mode 100644 index 00000000000..4c12eeff33d --- /dev/null +++ b/python/samba/tests/samba_tool/help.py @@ -0,0 +1,62 @@ +# Unix SMB/CIFS implementation. +# Copyright (C) Catalyst IT Ltd 2017. +# +# Originally written by Douglas Bagnall +# +# 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 3 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 . +# + +import re +from samba.tests.samba_tool.base import SambaToolCmdTest +from samba.tests import BlackboxProcessError + + +class HelpTestCase(SambaToolCmdTest): + """Tests for samba-tool --help + + We test for consistency and lack of crashes.""" + + def _find_sub_commands(self, args): + self.runcmd(*args) + + def test_help_tree(self): + # we call actual subprocesses, because we are probing the + # actual help output where there is no sub-command. Don't copy + # this if you have an actual command: for that use + # self.runcmd() or self.runsubcmd(). + known_commands = [[]] + failed_commands = [] + + for i in range(4): + new_commands = [] + for c in known_commands: + line = ' '.join(['samba-tool'] + c + ['--help']) + try: + output = self.check_output(line) + except BlackboxProcessError as e: + output = e.stdout + failed_commands.append(c) + + output = output.partition('Available subcommands:')[2] + subcommands = re.findall(r'^\s*([\w-]+)\s+-', output, + re.MULTILINE) + for s in subcommands: + new_commands.append(c + [s]) + + if not new_commands: + break + + known_commands = new_commands + + self.assertEqual(failed_commands, []) diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 0a0bc931908..755f0c9a411 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -607,6 +607,7 @@ planpythontestsuite("chgdcpass:local", "samba.tests.samba_tool.user_check_passwo planpythontestsuite("ad_dc_ntvfs:local", "samba.tests.samba_tool.group") planpythontestsuite("ad_dc:local", "samba.tests.samba_tool.ntacl") planpythontestsuite("none", "samba.tests.samba_tool.provision_password_check") +planpythontestsuite("none", "samba.tests.samba_tool.help") planpythontestsuite("ad_dc:local", "samba.tests.samba_tool.sites") planpythontestsuite("ad_dc:local", "samba.tests.samba_tool.dnscmd") -- 2.11.4.GIT