samba-tool: Add test to make sure all commands have a synopsis set.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 13 Oct 2011 21:47:45 +0000 (23:47 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 13 Oct 2011 22:22:57 +0000 (00:22 +0200)
source4/scripting/python/samba/netcmd/__init__.py
source4/scripting/python/samba/netcmd/ntacl.py
source4/scripting/python/samba/tests/netcmd.py

index 831ac6ba57bb5c77a8dd23aa129633a0e9d26f59..bf0845726cc9a8b07c430371d4a090130b73bdb4 100644 (file)
@@ -168,6 +168,8 @@ class Command(object):
 class SuperCommand(Command):
     """A samba-tool command with subcommands."""
 
+    synopsis = "%prog <subcommand>"
+
     subcommands = {}
 
     def _run(self, myname, subcommand=None, *args):
index 2e5b0c69aa1ae9c11118fc006b9c808991cb45b2..9f946139adca85a823953f43f0600f60e7da7f46 100644 (file)
@@ -41,6 +41,7 @@ from samba.netcmd import (
 
 class cmd_ntacl_set(Command):
     """Set ACLs on a file"""
+
     synopsis = "%prog <acl> <file> [options]"
 
     takes_options = [
index ac5164b47924ac8197b478c416c264d7449cef2f..3f6448ac28db0ca5a8c0a396f3b939cc7fb319fa 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 # Unix SMB/CIFS implementation.
-# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2009
+# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2009-2011
 #
 # 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
@@ -22,6 +22,7 @@
 from cStringIO import StringIO
 from samba.netcmd import Command
 from samba.netcmd.testparm import cmd_testparm
+from samba.netcmd.main import cmd_sambatool
 import samba.tests
 
 class NetCmdTestCase(samba.tests.TestCase):
@@ -38,6 +39,16 @@ class NetCmdTestCase(samba.tests.TestCase):
         self.assertEquals(retcode, retval)
         return cmd.outf.getvalue(), cmd.errf.getvalue()
 
+    def iter_all_subcommands(self):
+        todo = []
+        todo.extend(cmd_sambatool.subcommands.items())
+        while todo:
+            (path, cmd) = todo.pop()
+            yield path, cmd
+            subcmds = getattr(cmd, "subcommands", {})
+            todo.extend([(path + " " + k, v) for (k, v) in
+                subcmds.iteritems()])
+
 
 class TestParmTests(NetCmdTestCase):
 
@@ -50,14 +61,23 @@ class TestParmTests(NetCmdTestCase):
             "required for the host access check\n", err)
 
 
-class CommandTests(samba.tests.TestCase):
+class CommandTests(NetCmdTestCase):
 
     def test_description(self):
         class cmd_foo(Command):
             """Mydescription"""
-        self.assertEquals("Mydescription", cmd_foo().description)
+        self.assertEquals("Mydescription", cmd_foo().short_description)
 
     def test_name(self):
         class cmd_foo(Command):
             pass
         self.assertEquals("foo", cmd_foo().name)
+
+    def test_synopsis_everywhere(self):
+        missing = []
+        for path, cmd in self.iter_all_subcommands():
+            if cmd.synopsis is None:
+                missing.append(path)
+        if missing:
+            self.fail("The following commands do not have a synopsis set: %r" %
+                    missing)