[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Fri Dec 22 06:51:03 UTC 2017


The branch, master has been updated
       via  8a42954 samba-tool test: ensure `samba-tool help` works
       via  316594f samba-tool: treat 'samba-tool help foo' as 'samba-tool foo --help'
       via  769197d samba-tool: give cache_loader pseudo-dict a .get() method
       via  cef83c0 samba-tool: --help test, ensuring help tree coverage
       via  abcc955 selftest: pass location of perl executable from waf to test-envs
      from  c4919d4 s3:smb2_server: allow logoff, close, unlock, cancel and echo on expired sessions

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 8a42954775df6795efa9b5ba5676301d14b3efac
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date:   Mon Dec 18 17:06:07 2017 +1300

    samba-tool test: ensure `samba-tool help` works
    
    We make sure the output is identical to `samba-tool --help` for the same
    subcommands.
    
    Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    
    Autobuild-User(master): Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date(master): Fri Dec 22 07:50:21 CET 2017 on sn-devel-144

commit 316594f211340cc2d11a98895f624b50f2e51f7c
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date:   Fri Aug 11 16:39:33 2017 +1200

    samba-tool: treat 'samba-tool help foo' as 'samba-tool foo --help'
    
    Vaguely keeping up with the modern style.
    
    Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 769197dfa320ce9d252c0871df0ceb3c47fb644b
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date:   Thu Dec 21 11:30:24 2017 +1300

    samba-tool: give cache_loader pseudo-dict a .get() method
    
    This makes it more dict-like, and makes the next patch (adding
    samba-tool help) simpler.
    
    Signed-off-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit cef83c0cc60359935fc4fa5db60cdc825bd3fa25
Author: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
Date:   Mon Dec 18 16:54:07 2017 +1300

    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 <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit abcc95520102e40d836c60f389bc4fb6110223ec
Author: Uri Simchoni <uri at samba.org>
Date:   Thu Dec 21 19:49:39 2017 +0200

    selftest: pass location of perl executable from waf to test-envs
    
    Many perl scripts in the codebase are executables with a
    "/usr/bin/perl" shebang. Running them as executables is not
    portable as some OS's have a different location for the perl
    interpreter.
    
    During the configuration process, waf finds the location of the perl
    interpreter. Some or all  invocations of perl scripts from within
    test environment setup code are actually "$PERL <script>",
    but since PERL env var is typically not set, this amounts to the
    unportable "<script>", which invokes /usr/bin/perl.
    
    This patch exports the location of perl as found by the configuration
    process to the test environment, causing "$PERL <script>" to be
    "<correct place of perl interpreter> <script>".
    
    Signed-off-by: Uri Simchoni <uri at samba.org>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 python/samba/netcmd/__init__.py       | 13 +++++++
 python/samba/netcmd/main.py           |  6 +++
 python/samba/tests/samba_tool/help.py | 72 +++++++++++++++++++++++++++++++++++
 selftest/wscript                      |  3 ++
 source4/selftest/tests.py             |  1 +
 5 files changed, 95 insertions(+)
 create mode 100644 python/samba/tests/samba_tool/help.py


Changeset truncated at 500 lines:

diff --git a/python/samba/netcmd/__init__.py b/python/samba/netcmd/__init__.py
index ad8143d..05ecc43 100644
--- a/python/samba/netcmd/__init__.py
+++ b/python/samba/netcmd/__init__.py
@@ -202,6 +202,19 @@ class SuperCommand(Command):
             return self.subcommands[subcommand]._run(
                 "%s %s" % (myname, subcommand), *args)
 
+        if subcommand == 'help':
+            # pass the request down
+            if len(args) > 0:
+                sub = self.subcommands.get(args[0])
+                if isinstance(sub, SuperCommand):
+                    return sub._run("%s %s" % (myname, args[0]), 'help',
+                                    *args[1:])
+                elif sub is not None:
+                    return sub._run("%s %s" % (myname, args[0]), '--help',
+                                    *args[1:])
+
+            subcommand = '--help'
+
         epilog = "\nAvailable subcommands:\n"
         subcmds = self.subcommands.keys()
         subcmds.sort()
diff --git a/python/samba/netcmd/main.py b/python/samba/netcmd/main.py
index ba90748..cc16e4a 100644
--- a/python/samba/netcmd/main.py
+++ b/python/samba/netcmd/main.py
@@ -36,6 +36,12 @@ class cache_loader(dict):
                                  'cmd_%s' % attr)()
         return dict.__getitem__(self, attr)
 
+    def get(self, attr, default=None):
+        try:
+            return self[attr]
+        except KeyError:
+            return default
+
     def iteritems(self):
         for key in self:
             yield (key, self[key])
diff --git a/python/samba/tests/samba_tool/help.py b/python/samba/tests/samba_tool/help.py
new file mode 100644
index 0000000..62e0b3e
--- /dev/null
+++ b/python/samba/tests/samba_tool/help.py
@@ -0,0 +1,72 @@
+# Unix SMB/CIFS implementation.
+# Copyright (C) Catalyst IT Ltd 2017.
+#
+# Originally written by Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
+#
+# 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 <http://www.gnu.org/licenses/>.
+#
+
+import re
+from samba.tests.samba_tool.base import SambaToolCmdTest
+from samba.tests import BlackboxProcessError
+
+
+class HelpTestCase(SambaToolCmdTest):
+    """Tests for samba-tool help and --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)
+
+                tail = output.partition('Available subcommands:')[2]
+                subcommands = re.findall(r'^\s*([\w-]+)\s+-', tail,
+                                         re.MULTILINE)
+                for s in subcommands:
+                    new_commands.append(c + [s])
+
+                # check that `samba-tool help X Y` == `samba-tool X Y --help`
+                line = ' '.join(['samba-tool', 'help'] + c)
+                try:
+                    output2 = self.check_output(line)
+                except BlackboxProcessError as e:
+                    output2 = e.stdout
+                    failed_commands.append(c)
+
+                self.assertEqual(output, output2)
+
+            if not new_commands:
+                break
+
+            known_commands = new_commands
+
+        self.assertEqual(failed_commands, [])
diff --git a/selftest/wscript b/selftest/wscript
index 9f1fd4d..8264d96 100644
--- a/selftest/wscript
+++ b/selftest/wscript
@@ -202,6 +202,9 @@ def cmd_testonly(opt):
     # tell build system where to find config.h
     os.environ['CONFIG_H'] = 'bin/default/include/config.h'
 
+    # tell the test system where perl is
+    os.environ['PERL'] = env.PERL
+
     st_done = os.path.join(env.SELFTEST_PREFIX, 'st_done')
     if os.path.exists(st_done):
         os.unlink(st_done)
diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py
index 0a0bc93..755f0c9 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")


-- 
Samba Shared Repository



More information about the samba-cvs mailing list