diff options
Diffstat (limited to 'tests/test_cmdline/test_cli.py')
-rw-r--r-- | tests/test_cmdline/test_cli.py | 327 |
1 files changed, 0 insertions, 327 deletions
diff --git a/tests/test_cmdline/test_cli.py b/tests/test_cmdline/test_cli.py deleted file mode 100644 index bd1281e1d..000000000 --- a/tests/test_cmdline/test_cli.py +++ /dev/null @@ -1,327 +0,0 @@ -import shlex -import sys -import contextlib -import StringIO - -import nose - -from tests import util -from ipalib import api, errors -from ipapython.version import API_VERSION - - -class TestCLIParsing(object): - """Tests that commandlines are correctly parsed to Command keyword args - """ - def check_command(self, commandline, expected_command_name, **kw_expected): - argv = shlex.split(commandline) - executioner = api.Backend.cli - - cmd = executioner.get_command(argv) - kw_got = executioner.parse(cmd, argv[1:]) - kw_got = executioner.process_keyword_arguments(cmd, kw_got) - util.assert_deepequal(expected_command_name, cmd.name, 'Command name') - util.assert_deepequal(kw_expected, kw_got) - - def run_command(self, command_name, **kw): - """Run a command on the server""" - if not api.Backend.xmlclient.isconnected(): - api.Backend.xmlclient.connect(fallback=False) - try: - api.Command[command_name](**kw) - except errors.NetworkError: - raise nose.SkipTest('%r: Server not available: %r' % - (self.__module__, api.env.xmlrpc_uri)) - - @contextlib.contextmanager - def fake_stdin(self, string_in): - """Context manager that temporarily replaces stdin to read a string""" - old_stdin = sys.stdin - sys.stdin = StringIO.StringIO(string_in) - yield - sys.stdin = old_stdin - - def test_ping(self): - self.check_command('ping', 'ping', - version=API_VERSION) - - def test_user_show(self): - self.check_command('user-show admin', 'user_show', - uid=u'admin', - rights=False, - raw=False, - all=False, - version=API_VERSION) - - def test_user_show_underscore(self): - self.check_command('user_show admin', 'user_show', - uid=u'admin', - rights=False, - raw=False, - all=False, - version=API_VERSION) - - def test_group_add(self): - self.check_command('group-add tgroup1 --desc="Test group"', - 'group_add', - cn=u'tgroup1', - description=u'Test group', - nonposix=False, - external=False, - raw=False, - all=False, - version=API_VERSION) - - def test_sudocmdgroup_add_member(self): - # Test CSV splitting is not done - self.check_command( - # The following is as it would appear on the command line: - r'sudocmdgroup-add-member tcmdgroup1 --sudocmds=ab,c --sudocmds=d', - 'sudocmdgroup_add_member', - cn=u'tcmdgroup1', - sudocmd=[u'ab,c', u'd'], - raw=False, - all=False, - version=API_VERSION) - - def test_group_add_nonposix(self): - self.check_command('group-add tgroup1 --desc="Test group" --nonposix', - 'group_add', - cn=u'tgroup1', - description=u'Test group', - nonposix=True, - external=False, - raw=False, - all=False, - version=API_VERSION) - - def test_group_add_gid(self): - self.check_command('group-add tgroup1 --desc="Test group" --gid=1234', - 'group_add', - cn=u'tgroup1', - description=u'Test group', - gidnumber=u'1234', - nonposix=False, - external=False, - raw=False, - all=False, - version=API_VERSION) - - def test_group_add_interactive(self): - with self.fake_stdin('Test group\n'): - self.check_command('group-add tgroup1', 'group_add', - cn=u'tgroup1', - description=u'Test group', - nonposix=False, - external=False, - raw=False, - all=False, - version=API_VERSION) - - def test_dnsrecord_add(self): - self.check_command('dnsrecord-add test-example.com ns --a-rec=1.2.3.4', - 'dnsrecord_add', - dnszoneidnsname=u'test-example.com', - idnsname=u'ns', - arecord=u'1.2.3.4', - structured=False, - force=False, - raw=False, - all=False, - version=API_VERSION) - - def test_dnsrecord_del_all(self): - try: - self.run_command('dnszone_add', idnsname=u'test-example.com', - idnssoamname=u'ns.test-example.com', force=True) - except errors.NotFound: - raise nose.SkipTest('DNS is not configured') - try: - self.run_command('dnsrecord_add', - dnszoneidnsname=u'test-example.com', - idnsname=u'ns', arecord=u'1.2.3.4') - with self.fake_stdin('yes\n'): - self.check_command('dnsrecord_del test-example.com ns', - 'dnsrecord_del', - dnszoneidnsname=u'test-example.com', - idnsname=u'ns', - del_all=True, - structured=False, - version=API_VERSION) - with self.fake_stdin('YeS\n'): - self.check_command('dnsrecord_del test-example.com ns', - 'dnsrecord_del', - dnszoneidnsname=u'test-example.com', - idnsname=u'ns', - del_all=True, - structured=False, - version=API_VERSION) - finally: - self.run_command('dnszone_del', idnsname=u'test-example.com') - - def test_dnsrecord_del_one_by_one(self): - try: - self.run_command('dnszone_add', idnsname=u'test-example.com', - idnssoamname=u'ns.test-example.com', force=True) - except errors.NotFound: - raise nose.SkipTest('DNS is not configured') - try: - records = (u'1 1 E3B72BA346B90570EED94BE9334E34AA795CED23', - u'2 1 FD2693C1EFFC11A8D2BE57229212A04B45663791') - for record in records: - self.run_command('dnsrecord_add', - dnszoneidnsname=u'test-example.com', idnsname=u'ns', - sshfprecord=record) - with self.fake_stdin('no\nyes\nyes\n'): - self.check_command('dnsrecord_del test-example.com ns', - 'dnsrecord_del', - dnszoneidnsname=u'test-example.com', - idnsname=u'ns', - del_all=False, - sshfprecord=records, - structured=False, - version=API_VERSION) - finally: - self.run_command('dnszone_del', idnsname=u'test-example.com') - - def test_dnsrecord_add_ask_for_missing_fields(self): - sshfp_parts = (1, 1, u'E3B72BA346B90570EED94BE9334E34AA795CED23') - - with self.fake_stdin('SSHFP\n%d\n%d\n%s' % sshfp_parts): - self.check_command('dnsrecord-add test-example.com sshfp', - 'dnsrecord_add', - dnszoneidnsname=u'test-example.com', - idnsname=u'sshfp', - sshfp_part_fp_type=sshfp_parts[0], - sshfp_part_algorithm=sshfp_parts[1], - sshfp_part_fingerprint=sshfp_parts[2], - structured=False, - raw=False, - all=False, - force=False, - version=API_VERSION) - - # NOTE: when a DNS record part is passed via command line, it is not - # converted to its base type when transfered via wire - with self.fake_stdin('%d\n%s' % (sshfp_parts[1], sshfp_parts[2])): - self.check_command('dnsrecord-add test-example.com sshfp ' \ - '--sshfp-algorithm=%d' % sshfp_parts[0], - 'dnsrecord_add', - dnszoneidnsname=u'test-example.com', - idnsname=u'sshfp', - sshfp_part_fp_type=sshfp_parts[0], - sshfp_part_algorithm=unicode(sshfp_parts[1]), # passed via cmdline - sshfp_part_fingerprint=sshfp_parts[2], - structured=False, - raw=False, - all=False, - force=False, - version=API_VERSION) - - with self.fake_stdin(sshfp_parts[2]): - self.check_command('dnsrecord-add test-example.com sshfp ' \ - '--sshfp-algorithm=%d --sshfp-fp-type=%d' % (sshfp_parts[0], sshfp_parts[1]), - 'dnsrecord_add', - dnszoneidnsname=u'test-example.com', - idnsname=u'sshfp', - sshfp_part_fp_type=unicode(sshfp_parts[0]), # passed via cmdline - sshfp_part_algorithm=unicode(sshfp_parts[1]), # passed via cmdline - sshfp_part_fingerprint=sshfp_parts[2], - structured=False, - raw=False, - all=False, - force=False, - version=API_VERSION) - - def test_dnsrecord_del_comma(self): - try: - self.run_command( - 'dnszone_add', idnsname=u'test-example.com', - idnssoamname=u'ns.test-example.com', force=True) - except errors.NotFound: - raise nose.SkipTest('DNS is not configured') - try: - self.run_command( - 'dnsrecord_add', - dnszoneidnsname=u'test-example.com', - idnsname=u'test', - txtrecord=u'"A pretty little problem," said Holmes.') - with self.fake_stdin('no\nyes\n'): - self.check_command( - 'dnsrecord_del test-example.com test', - 'dnsrecord_del', - dnszoneidnsname=u'test-example.com', - idnsname=u'test', - del_all=False, - txtrecord=[u'"A pretty little problem," said Holmes.'], - structured=False, - version=API_VERSION) - finally: - self.run_command('dnszone_del', idnsname=u'test-example.com') - - def test_dnszone_add(self): - """ - Test dnszone-add with nameserver IP passed interatively - """ - # Pass IP of nameserver interactively for nameserver in zone - # (absolute name) - with self.fake_stdin('1.1.1.1\n'): - self.check_command( - 'dnszone_add example.com --name-server=ns.example.com. ' - '--admin-email=admin@example.com', - 'dnszone_add', - idnsname=u'example.com', - idnssoamname=u'ns.example.com.', - idnssoarname=u'admin@example.com', - ip_address=u'1.1.1.1', - idnssoaexpire=util.Fuzzy(type=int), - idnssoaserial=util.Fuzzy(type=int), - idnssoaretry=util.Fuzzy(type=int), - idnssoaminimum=util.Fuzzy(type=int), - idnssoarefresh=util.Fuzzy(type=int), - all=False, - raw=False, - force=False, - version=API_VERSION - ) - - # Pass IP of nameserver interactively for nameserver in zone - # (relative name) - with self.fake_stdin('1.1.1.1\n'): - self.check_command( - 'dnszone_add example.com --name-server=ns ' - '--admin-email=admin@example.com', - 'dnszone_add', - idnsname=u'example.com', - idnssoamname=u'ns', - idnssoarname=u'admin@example.com', - ip_address=u'1.1.1.1', - idnssoaexpire=util.Fuzzy(type=int), - idnssoaserial=util.Fuzzy(type=int), - idnssoaretry=util.Fuzzy(type=int), - idnssoaminimum=util.Fuzzy(type=int), - idnssoarefresh=util.Fuzzy(type=int), - all=False, - raw=False, - force=False, - version=API_VERSION - ) - - # Nameserver is outside the zone - no need to pass the IP - self.check_command( - 'dnszone_add example.com --name-server=ns.example.net. ' - '--admin-email=admin@example.com', - 'dnszone_add', - idnsname=u'example.com', - idnssoamname=u'ns.example.net.', - idnssoarname=u'admin@example.com', - idnssoaexpire=util.Fuzzy(type=int), - idnssoaserial=util.Fuzzy(type=int), - idnssoaretry=util.Fuzzy(type=int), - idnssoaminimum=util.Fuzzy(type=int), - idnssoarefresh=util.Fuzzy(type=int), - all=False, - raw=False, - force=False, - version=API_VERSION - ) |