The branch, master has been updated via 416bf1c samba.getopt: Add some basic tests. via aa7240e samba.getopt: Keep exception message when setting a lp option fails. via eb388cd samba-tool: Improve getopt.py error handling via 20f2034 samba-tool: Improve getopt.py error handling via 8dbf799 samba-tool: Improve getopt.py error handling via 0c342f8 samba-tool: Improve getopt.py error handling from e1d2b47 s3-docs: Add a clarification note for nss_info primary group membership calculation.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 416bf1c677e52b52c1447bb0901f9a12930abdf4 Author: Jelmer Vernooij <jel...@samba.org> Date: Wed Oct 19 03:35:22 2011 +0200 samba.getopt: Add some basic tests. Autobuild-User: Jelmer Vernooij <jel...@samba.org> Autobuild-Date: Wed Oct 19 05:04:33 CEST 2011 on sn-devel-104 commit aa7240e6cf9d2fcec660116f891fc9c7d6ce39bc Author: Jelmer Vernooij <jel...@samba.org> Date: Wed Oct 19 01:30:40 2011 +0200 samba.getopt: Keep exception message when setting a lp option fails. commit eb388cddacb42ae30f4ebb2fc846982132d3ad06 Author: Giampaolo Lauria <laur...@yahoo.com> Date: Mon Oct 17 15:34:47 2011 -0400 samba-tool: Improve getopt.py error handling Modified code to handle -k and --kerberos options to: 1. Throw the correct exception 2. On error, display the correct user's specified option commit 20f2034f380cf13b41ad5054a50edef72e18a6c2 Author: Giampaolo Lauria <laur...@yahoo.com> Date: Mon Oct 17 15:31:30 2011 -0400 samba-tool: Improve getopt.py error handling Throw an exception when the --option value is invalid commit 8dbf79941f029e7ddcb347c7436038c47eb8115e Author: Giampaolo Lauria <laur...@yahoo.com> Date: Mon Oct 17 15:28:52 2011 -0400 samba-tool: Improve getopt.py error handling Throw an exception when --option value is not in the form "a=b" commit 0c342f89860a4f64faf62340741b740603907c0e Author: Giampaolo Lauria <laur...@yahoo.com> Date: Mon Oct 17 15:22:01 2011 -0400 samba-tool: Improve getopt.py error handling Raise exception when -d or --debuglevel value is <0 ----------------------------------------------------------------------- Summary of changes: source4/scripting/python/samba/getopt.py | 22 ++++++--- source4/scripting/python/samba/tests/getopt.py | 57 ++++++++++++++++++++++++ source4/selftest/tests.py | 1 + 3 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 source4/scripting/python/samba/tests/getopt.py Changeset truncated at 500 lines: diff --git a/source4/scripting/python/samba/getopt.py b/source4/scripting/python/samba/getopt.py index f939180..8a9d4e5 100644 --- a/source4/scripting/python/samba/getopt.py +++ b/source4/scripting/python/samba/getopt.py @@ -64,6 +64,9 @@ class SambaOptions(optparse.OptionGroup): self._configfile = arg def _set_debuglevel(self, option, opt_str, arg, parser): + if arg < 0: + raise optparse.OptionValueError("invalid %s option value: %s" % + (opt_str, arg)) self._lp.set('debug level', str(arg)) def _set_realm(self, option, opt_str, arg, parser): @@ -72,10 +75,14 @@ class SambaOptions(optparse.OptionGroup): def _set_option(self, option, opt_str, arg, parser): if arg.find('=') == -1: - print("--option takes a 'a=b' argument") - sys.exit(1) + raise optparse.OptionValueError( + "--option option takes a 'a=b' argument") a = arg.split('=') - self._lp.set(a[0], a[1]) + try: + self._lp.set(a[0], a[1]) + except Exception, e: + raise optparse.OptionValueError( + "invalid --option option value %r: %s" % (arg, e)) def get_loadparm(self): """Return loadparm object with data specified on the command line.""" @@ -105,7 +112,7 @@ class VersionOptions(optparse.OptionGroup): sys.exit(0) -def parse_kerberos_arg(arg): +def parse_kerberos_arg(arg, opt_str): if arg.lower() in ["yes", 'true', '1']: return MUST_USE_KERBEROS elif arg.lower() in ["no", 'false', '0']: @@ -113,7 +120,8 @@ def parse_kerberos_arg(arg): elif arg.lower() in ["auto"]: return AUTO_USE_KERBEROS else: - raise optparse.BadOptionError("invalid kerberos option: %s" % arg) + raise optparse.OptionValueError("invalid %s option value: %s" % + (opt_str, arg)) class CredentialsOptions(optparse.OptionGroup): @@ -159,7 +167,7 @@ class CredentialsOptions(optparse.OptionGroup): self.ipaddress = arg def _set_kerberos(self, option, opt_str, arg, parser): - self.creds.set_kerberos_state(parse_kerberos_arg(arg)) + self.creds.set_kerberos_state(parse_kerberos_arg(arg, opt_str)) def _set_simple_bind_dn(self, option, opt_str, arg, parser): self.creds.set_bind_dn(arg) @@ -223,7 +231,7 @@ class CredentialsOptionsDouble(CredentialsOptions): self.no_pass2 = False def _set_kerberos2(self, option, opt_str, arg, parser): - self.creds2.set_kerberos_state(parse_kerberos_arg(arg)) + self.creds2.set_kerberos_state(parse_kerberos_arg(arg, opt_str)) def _set_simple_bind_dn2(self, option, opt_str, arg, parser): self.creds2.set_bind_dn(arg) diff --git a/source4/scripting/python/samba/tests/getopt.py b/source4/scripting/python/samba/tests/getopt.py new file mode 100644 index 0000000..9d72646 --- /dev/null +++ b/source4/scripting/python/samba/tests/getopt.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +# Unix SMB/CIFS implementation. +# Copyright (C) Jelmer Vernooij <jel...@samba.org> 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 +# 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/>. +# + +"""Tests for option parsing. + +""" + +import optparse +from samba.getopt import ( + AUTO_USE_KERBEROS, + DONT_USE_KERBEROS, + MUST_USE_KERBEROS, + parse_kerberos_arg, + ) +import samba.tests + +class KerberosOptionTests(samba.tests.TestCase): + + def test_parse_true(self): + self.assertEquals( + MUST_USE_KERBEROS, parse_kerberos_arg("yes", "--kerberos")) + self.assertEquals( + MUST_USE_KERBEROS, parse_kerberos_arg("true", "--kerberos")) + self.assertEquals( + MUST_USE_KERBEROS, parse_kerberos_arg("1", "--kerberos")) + + def test_parse_false(self): + self.assertEquals( + DONT_USE_KERBEROS, parse_kerberos_arg("no", "--kerberos")) + self.assertEquals( + DONT_USE_KERBEROS, parse_kerberos_arg("false", "--kerberos")) + self.assertEquals( + DONT_USE_KERBEROS, parse_kerberos_arg("0", "--kerberos")) + + def test_parse_auto(self): + self.assertEquals( + AUTO_USE_KERBEROS, parse_kerberos_arg("auto", "--kerberos")) + + def test_parse_invalid(self): + self.assertRaises(optparse.OptionValueError, + parse_kerberos_arg, "blah?", "--kerberos") diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py index 7dae7a2..70a0f53 100755 --- a/source4/selftest/tests.py +++ b/source4/selftest/tests.py @@ -402,6 +402,7 @@ plantestsuite_idlist("samba.tests.gensec", "dc:local", [subunitrun, "$LISTOPT", planpythontestsuite("none", "samba.tests.registry") plansambapythontestsuite("tdb.python", "none", "%s/lib/tdb/python/tests" % srcdir(), 'simple') planpythontestsuite("none", "samba.tests.auth") +planpythontestsuite("none", "samba.tests.getopt") planpythontestsuite("none", "samba.tests.security") planpythontestsuite("none", "samba.tests.dcerpc.misc") planpythontestsuite("none", "samba.tests.param") -- Samba Shared Repository