summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Kosek <mkosek@redhat.com>2012-04-16 11:00:00 +0200
committerRob Crittenden <rcritten@redhat.com>2012-04-15 18:37:26 -0400
commit73b23bf21d0604cdc7c0b4a37011e01a17684faf (patch)
tree346771535967800d5b5f676913203092266fd671
parent0df9c5bc5d5e24f4423af269a61f077102a8260e (diff)
downloadfreeipa.git-73b23bf21d0604cdc7c0b4a37011e01a17684faf.tar.gz
freeipa.git-73b23bf21d0604cdc7c0b4a37011e01a17684faf.tar.xz
freeipa.git-73b23bf21d0604cdc7c0b4a37011e01a17684faf.zip
Fix dnsrecord_add interactive mode
dnsrecord_add interactive mode did not work correctly when more than one DNS record part was entered as command line option. It asked for remaining options more than once. This patch fixes this situation and also adds tests to cover this use case properly. https://fedorahosted.org/freeipa/ticket/2641
-rw-r--r--ipalib/plugins/dns.py2
-rw-r--r--tests/test_cmdline/test_cli.py49
2 files changed, 50 insertions, 1 deletions
diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py
index 88ee29ba..b0e65ab9 100644
--- a/ipalib/plugins/dns.py
+++ b/ipalib/plugins/dns.py
@@ -2046,7 +2046,7 @@ class dnsrecord(LDAPObject):
continue
if rrparam.name not in processed:
- processed.append(rrparam)
+ processed.append(rrparam.name)
yield rrparam
api.register(dnsrecord)
diff --git a/tests/test_cmdline/test_cli.py b/tests/test_cmdline/test_cli.py
index 46b33d54..095577a3 100644
--- a/tests/test_cmdline/test_cli.py
+++ b/tests/test_cmdline/test_cli.py
@@ -186,3 +186,52 @@ class TestCLIParsing(object):
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)