summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorGarming Sam <garming@catalyst.net.nz>2014-03-06 11:36:06 +1300
committerJeremy Allison <jra@samba.org>2014-05-07 19:49:15 +0200
commit8abbfa9fc9c4af62bbea15c56abeae89905b1b94 (patch)
tree336f457bf64434949af38f742b09bef81d7716cf /python
parent8e9d2626eb2fc6f0041ddda7210ef22ba8205df6 (diff)
downloadsamba-8abbfa9fc9c4af62bbea15c56abeae89905b1b94.tar.gz
samba-8abbfa9fc9c4af62bbea15c56abeae89905b1b94.tar.xz
samba-8abbfa9fc9c4af62bbea15c56abeae89905b1b94.zip
docs: add test to docs.py to set parameters to some arbitrary value
This does not currently test enums. Signed-off-by: Garming Sam <garming@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'python')
-rw-r--r--python/samba/tests/docs.py103
1 files changed, 93 insertions, 10 deletions
diff --git a/python/samba/tests/docs.py b/python/samba/tests/docs.py
index d9f123e7781..31c66a61a7d 100644
--- a/python/samba/tests/docs.py
+++ b/python/samba/tests/docs.py
@@ -84,7 +84,7 @@ def get_implementation_parameters(sourcedir):
finally:
f.close()
-def get_default_triples(sourcedir):
+def get_documented_tuples(sourcedir, omit_no_default=True):
path = os.path.join(sourcedir, "bin", "default", "docs-xml", "smbdotconf")
if not os.path.exists(os.path.join(path, "parameters.all.xml")):
raise Exception("Unable to find parameters.all.xml")
@@ -97,20 +97,28 @@ def get_default_triples(sourcedir):
root = ET.fromstring(out)
for parameter in root:
name = parameter.attrib.get("name")
+ param_type = parameter.attrib.get("type")
+ if parameter.attrib.get('removed') == "1":
+ continue
values = parameter.findall("value")
defaults = []
for value in values:
if value.attrib.get("type") == "default":
defaults.append(value)
+
+ default_text = None
if len(defaults) == 0:
- continue
+ if omit_no_default:
+ continue
elif len(defaults) > 1:
raise Exception("More than one default found for parameter %s" % name)
- default_text = defaults[0].text
+ else:
+ default_text = defaults[0].text
+
if default_text is None:
default_text = ""
context = parameter.attrib.get("context")
- yield name, default_text, context
+ yield name, default_text, context, param_type
p.close()
class SmbDotConfTests(TestCase):
@@ -172,22 +180,32 @@ class SmbDotConfTests(TestCase):
self._test_default(['bin/testparm'])
self._set_defaults(['bin/testparm'])
+ # registry shares appears to need sudo
+ self._set_arbitrary(['bin/testparm'],
+ exceptions = ['client lanman auth',
+ 'client plaintext auth',
+ 'registry shares',
+ 'idmap backend',
+ 'idmap gid',
+ 'idmap uid'])
+
def test_default_s4(self):
self._test_default(['bin/samba-tool', 'testparm'])
self._set_defaults(['bin/samba-tool', 'testparm'])
+ self._set_arbitrary(['bin/samba-tool', 'testparm'])
def _test_default(self, program):
topdir = os.path.abspath(samba.source_tree_topdir())
try:
- defaults = set(get_default_triples(topdir))
+ defaults = set(get_documented_tuples(topdir))
except:
self.fail("Unable to load parameters")
bindir = os.path.join(topdir, "bin")
failset = set()
count = 0
- for triple in defaults:
- param, default, context = triple
+ for tuples in defaults:
+ param, default, context, param_type = tuples
if param in self.special_cases:
continue
section = None
@@ -212,15 +230,15 @@ class SmbDotConfTests(TestCase):
def _set_defaults(self, program):
topdir = os.path.abspath(samba.source_tree_topdir())
try:
- defaults = set(get_default_triples(topdir))
+ defaults = set(get_documented_tuples(topdir))
except:
self.fail("Unable to load parameters")
bindir = os.path.join(topdir, "bin")
failset = set()
count = 0
- for triple in defaults:
- param, default, context = triple
+ for tuples in defaults:
+ param, default, context, param_type = tuples
# temporarily remove parametric options - no dump available in s4
if param in ['printing'] or ':' in param:
@@ -245,3 +263,68 @@ class SmbDotConfTests(TestCase):
if len(failset) > 0:
self.fail(self._format_message(failset,
"Parameters that do not have matching defaults:"))
+
+ def _set_arbitrary(self, program, exceptions=None):
+ arbitrary = {'string': 'string', 'boolean': 'yes', 'integer': '5',
+ 'enum':'', 'boolean-auto': '', 'char': 'a', 'list': 'a, b, c'}
+
+ topdir = os.path.abspath(samba.source_tree_topdir())
+ try:
+ defaults = set(get_documented_tuples(topdir, False))
+ except Exception,e:
+ self.fail("Unable to load parameters" + e)
+ bindir = os.path.join(topdir, "bin")
+ failset = set()
+ count = 0
+
+ for tuples in defaults:
+ param, default, context, param_type = tuples
+
+ # temporarily remove parametric options - no dump available in s4
+ if param in ['printing', 'copy', 'include', 'log level'] or ':' in param:
+ continue
+
+ # currently no easy way to set an arbitrary value for these
+ if param_type in ['enum', 'boolean-auto']:
+ continue
+
+ if exceptions is not None:
+ if param in exceptions:
+ continue
+
+ section = None
+ if context == "G":
+ section = "global"
+ elif context == "S":
+ section = "test"
+ else:
+ self.fail("%s has no valid context" % param)
+
+ value_to_use = arbitrary.get(param_type)
+ if value_to_use is None:
+ self.fail("%s has an invalid type" % param)
+
+ p = subprocess.Popen(program + ["-s", self.smbconf,
+ "--section-name", section, "--parameter-name", param,
+ "--option", "%s = %s" % (param, value_to_use)],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=topdir).communicate()
+ if p[0].upper().strip() != value_to_use.upper():
+ # currently no way to distinguish command lists
+ if param_type == 'list':
+ if ", ".join(p[0].upper().strip().split()) == value_to_use.upper():
+ continue
+
+ # currently no way to identify octal
+ if param_type == 'integer':
+ try:
+ if int(value_to_use, 8) == int(p[0].strip(), 8):
+ continue
+ except:
+ pass
+
+ doc_triple = "%s\n Expected: %s" % (param, value_to_use)
+ failset.add("%s\n Got: %s" % (doc_triple, p[0].upper().strip()))
+
+ if len(failset) > 0:
+ self.fail(self._format_message(failset,
+ "Parameters that were unexpectedly not set:"))