On 28/07/14 14:11, Petr Viktorin wrote:
On 07/09/2014 06:29 PM, Martin Basti wrote:
Patch attached.
Ticket: https://fedorahosted.org/freeipa/ticket/4164


Looks & works fine for me.
Can you also add a test for this?


Tests attached.
I also added tests with --ip-address parameter.

--
Martin Basti

From a08fdb771658de3de470f1dcfda1197e6a23b8fa Mon Sep 17 00:00:00 2001
From: Martin Basti <mba...@redhat.com>
Date: Thu, 7 Aug 2014 14:25:34 +0200
Subject: [PATCH] Tests: host tests with dns

Test for: https://fedorahosted.org/freeipa/ticket/4164
---
 ipatests/test_xmlrpc/test_host_plugin.py | 448 +++++++++++++++++++++++++++++++
 1 file changed, 448 insertions(+)

diff --git a/ipatests/test_xmlrpc/test_host_plugin.py b/ipatests/test_xmlrpc/test_host_plugin.py
index 725e8900fdd1eca2a0cda9fd88dc4e479970e62e..2890baa3cb3bab90a4cdfd4d573403ac1a034b31 100644
--- a/ipatests/test_xmlrpc/test_host_plugin.py
+++ b/ipatests/test_xmlrpc/test_host_plugin.py
@@ -27,6 +27,7 @@ import tempfile
 from ipapython import ipautil
 from ipalib import api, errors, x509
 from ipapython.dn import DN
+from ipapython.dnsutil import DNSName
 from nose.tools import raises, assert_raises
 from nose.plugins.skip import SkipTest
 from ipatests.test_xmlrpc.xmlrpc_test import (Declarative, XMLRPC_test,
@@ -56,6 +57,82 @@ dn4 = DN(('fqdn',fqdn4),('cn','computers'),('cn','accounts'),
          api.env.basedn)
 invalidfqdn1 = u'foo_bar.lab.%s' % api.env.domain
 
+# DNS integration tests
+dnszone = u'zone-ipv6host.test'
+dnszone_absolute = dnszone + '.'
+dnszone_dnsname = DNSName(dnszone_absolute)
+dnszone_dn = DN(('idnsname', dnszone_absolute), api.env.container_dns, api.env.basedn)
+dnszone_ns = u'ns1.%s' % dnszone_absolute
+dnszone_ns_dnsname = DNSName(dnszone_ns)
+dnszone_rname = u'root.%s' % dnszone_absolute
+dnszone_rname_dnsname = DNSName(dnszone_rname)
+dnszone_ip = u'172.16.29.1'
+
+revzone = u'29.16.172.in-addr.arpa.'
+revzone_dnsname = DNSName(revzone)
+revzone_ip = u'172.16.29.0'
+revzone_ipprefix = u'172.16.29.'
+revzone_dn = DN(('idnsname', revzone), api.env.container_dns, api.env.basedn)
+
+revipv6zone = u'0.0.0.0.1.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.'
+revipv6zone_dnsname = DNSName(revipv6zone)
+revipv6zone_ip = u'2001:db8:1::'
+revipv6zone_ipprefix = u'2001:db8:1:'
+revipv6zone_dn = DN(('idnsname', revipv6zone), api.env.container_dns, api.env.basedn)
+
+arec = u'172.16.29.22'
+aaaarec = u'2001:db8:1::beef'
+
+arec2 = u'172.16.29.33'
+aaaarec2 = u'2001:db8:1::dead'
+
+name5 = u'testipv6onlyhost'
+name5_dnsname = DNSName(name5)
+name5_dn = DN(('idnsname', name5), dnszone_dn)
+fqdn5 = u'%s.%s' % (name5, dnszone)
+dn5 = DN(('fqdn',fqdn5),('cn','computers'),('cn','accounts'),
+         api.env.basedn)
+
+name6 = u'testipv4onlyhost'
+name6_dnsname = DNSName(name6)
+name6_dn = DN(('idnsname', name6), dnszone_dn)
+fqdn6 = u'%s.%s' % (name6, dnszone)
+dn6 = DN(('fqdn',fqdn6),('cn','computers'),('cn','accounts'),
+         api.env.basedn)
+
+name7 = u'testipv4and6host'
+name7_dnsname = DNSName(name7)
+name7_dn = DN(('idnsname', name7), dnszone_dn)
+fqdn7 = u'%s.%s' % (name7, dnszone)
+dn7 = DN(('fqdn',fqdn7),('cn','computers'),('cn','accounts'),
+         api.env.basedn)
+
+name8 = u'withipv4addr'
+name8_ip = u'172.16.29.40'
+name8_arec = name8_ip
+name8_dnsname = DNSName(name8)
+name8_dn = DN(('idnsname', name8), dnszone_dn)
+fqdn8 = u'%s.%s' % (name8, dnszone)
+dn8 = DN(('fqdn',fqdn8),('cn','computers'),('cn','accounts'),
+         api.env.basedn)
+name8_ptr = u'40'
+name8_ptrrec = fqdn8 + '.'
+name8_ptr_dnsname = DNSName(name8_ptr)
+name8_ptr_dn = DN(('idnsname', name8_ptr), revzone_dn)
+
+name9 = u'withipv6addr'
+name9_ipv6 = u'2001:db8:1::9'
+name9_aaaarec = name9_ipv6
+name9_dnsname = DNSName(name9)
+name9_dn = DN(('idnsname', name9), dnszone_dn)
+fqdn9 = u'%s.%s' % (name9, dnszone)
+dn9 = DN(('fqdn',fqdn9),('cn','computers'),('cn','accounts'),
+         api.env.basedn)
+name9_ptr = u'9.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0'
+name9_ptrrec = fqdn9 + '.'
+name9_ptr_dnsname = DNSName(name9_ptr)
+name9_ptr_dn = DN(('idnsname', name9_ptr), revipv6zone_dn)
+
 sshpubkey = u'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGAX3xAeLeaJggwTqMjxNwa6XHBUAikXPGMzEpVrlLDCZtv00djsFTBi38PkgxBJVkgRWMrcBsr/35lq7P6w8KGIwA8GI48Z0qBS2NBMJ2u9WQ2hjLN6GdMlo77O0uJY3251p12pCVIS/bHRSq8kHO2No8g7KA9fGGcagPfQH+ee3t7HUkpbQkFTmbPPN++r3V8oVUk5LxbryB3UIIVzNmcSIn3JrXynlvui4MixvrtX6zx+O/bBo68o8/eZD26QrahVbA09fivrn/4h3TM019Eu/c2jOdckfU3cHUV/3Tno5d6JicibyaoDDK7S/yjdn5jhaz8MSEayQvFkZkiF0L public key test'
 sshpubkeyfp = u'13:67:6B:BF:4E:A2:05:8E:AE:25:8B:A1:31:DE:6F:1B public key test (ssh-rsa)'
 
@@ -958,3 +1035,374 @@ class test_host_false_pwd_change(XMLRPC_test):
         # verify that it's gone
         with assert_raises(errors.NotFound):
             api.Command['host_show'](self.fqdn1)
+
+
+class test_host_dns(Declarative):
+
+    cleanup_commands = [
+        ('host_del', [fqdn5], {}),
+        ('host_del', [fqdn6], {}),
+        ('host_del', [fqdn7], {}),
+        ('host_del', [fqdn8], {}),
+        ('host_del', [fqdn9], {}),
+        ('dnszone_del', [dnszone], {}),
+        ('dnszone_del', [revzone], {}),
+        ('dnszone_del', [revipv6zone], {}),
+    ]
+
+    tests = [
+        dict(
+            desc='Create zone %r' % dnszone,
+            command=(
+                'dnszone_add', [dnszone], {
+                    'idnssoamname': dnszone_ns,
+                    'idnssoarname': dnszone_rname,
+                    'ip_address' : dnszone_ip,
+                }
+            ),
+            expected={
+                'value': dnszone_dnsname,
+                'summary': None,
+                'result': {
+                    'dn': dnszone_dn,
+                    'idnsname': [dnszone_dnsname],
+                    'idnszoneactive': [u'TRUE'],
+                    'idnssoamname': [dnszone_ns_dnsname],
+                    'nsrecord': [dnszone_ns],
+                    'idnssoarname': [dnszone_rname_dnsname],
+                    'idnssoaserial': [fuzzy_digits],
+                    'idnssoarefresh': [fuzzy_digits],
+                    'idnssoaretry': [fuzzy_digits],
+                    'idnssoaexpire': [fuzzy_digits],
+                    'idnssoaminimum': [fuzzy_digits],
+                    'idnsallowdynupdate': [u'FALSE'],
+                    'idnsupdatepolicy': [u'grant %(realm)s krb5-self * A; '
+                                         u'grant %(realm)s krb5-self * AAAA; '
+                                         u'grant %(realm)s krb5-self * SSHFP;'
+                                         % dict(realm=api.env.realm)],
+                    'idnsallowtransfer': [u'none;'],
+                    'idnsallowquery': [u'any;'],
+                    'objectclass': objectclasses.dnszone,
+                },
+            },
+        ),
+
+
+        dict(
+            desc='Create reverse zone %r' % revzone,
+            command=(
+                'dnszone_add', [revzone], {
+                    'idnssoamname': dnszone_ns,
+                    'idnssoarname': dnszone_rname,
+                }
+            ),
+            expected={
+                'value': revzone_dnsname,
+                'summary': None,
+                'result': {
+                    'dn': revzone_dn,
+                    'idnsname': [revzone_dnsname],
+                    'idnszoneactive': [u'TRUE'],
+                    'idnssoamname': [dnszone_ns_dnsname],
+                    'nsrecord': [dnszone_ns],
+                    'idnssoarname': [dnszone_rname_dnsname],
+                    'idnssoaserial': [fuzzy_digits],
+                    'idnssoarefresh': [fuzzy_digits],
+                    'idnssoaretry': [fuzzy_digits],
+                    'idnssoaexpire': [fuzzy_digits],
+                    'idnssoaminimum': [fuzzy_digits],
+                    'idnsallowdynupdate': [u'FALSE'],
+                    'idnsupdatepolicy': [u'grant %(realm)s krb5-subdomain %(zone)s PTR;'
+                                         % dict(realm=api.env.realm, zone=revzone)],
+                    'idnsallowtransfer': [u'none;'],
+                    'idnsallowquery': [u'any;'],
+                    'objectclass': objectclasses.dnszone,
+                },
+            },
+        ),
+
+
+        dict(
+            desc='Create reverse zone %r' % revipv6zone,
+            command=(
+                'dnszone_add', [revipv6zone], {
+                    'idnssoamname': dnszone_ns,
+                    'idnssoarname': dnszone_rname,
+                }
+            ),
+            expected={
+                'value': revipv6zone_dnsname,
+                'summary': None,
+                'result': {
+                    'dn': revipv6zone_dn,
+                    'idnsname': [revipv6zone_dnsname],
+                    'idnszoneactive': [u'TRUE'],
+                    'idnssoamname': [dnszone_ns_dnsname],
+                    'nsrecord': [dnszone_ns],
+                    'idnssoarname': [dnszone_rname_dnsname],
+                    'idnssoaserial': [fuzzy_digits],
+                    'idnssoarefresh': [fuzzy_digits],
+                    'idnssoaretry': [fuzzy_digits],
+                    'idnssoaexpire': [fuzzy_digits],
+                    'idnssoaminimum': [fuzzy_digits],
+                    'idnsallowdynupdate': [u'FALSE'],
+                    'idnsupdatepolicy': [u'grant %(realm)s krb5-subdomain %(zone)s PTR;'
+                                         % dict(realm=api.env.realm, zone=revipv6zone)],
+                    'idnsallowtransfer': [u'none;'],
+                    'idnsallowquery': [u'any;'],
+                    'objectclass': objectclasses.dnszone,
+                },
+            },
+        ),
+
+
+        dict(
+            desc='Add A record to %r in zone %r' % (name5, dnszone),
+            command=('dnsrecord_add', [dnszone, name5], {'arecord': arec}),
+            expected={
+                'value': name5_dnsname,
+                'summary': None,
+                'result': {
+                    'dn': name5_dn,
+                    'idnsname': [name5_dnsname],
+                    'arecord': [arec],
+                    'objectclass': objectclasses.dnsrecord,
+                },
+            },
+        ),
+
+
+        dict(
+            desc='Add A record to %r in zone %r' % (name6, dnszone),
+            command=('dnsrecord_add', [dnszone, name6], {'aaaarecord': aaaarec}),
+            expected={
+                'value': name6_dnsname,
+                'summary': None,
+                'result': {
+                    'dn': name6_dn,
+                    'idnsname': [name6_dnsname],
+                    'aaaarecord': [aaaarec],
+                    'objectclass': objectclasses.dnsrecord,
+                },
+            },
+        ),
+
+
+        dict(
+            desc='Add A record to %r in zone %r' % (name7, dnszone),
+            command=('dnsrecord_add', [dnszone, name7], {'arecord': arec2,
+                                                    'aaaarecord': aaaarec}
+                     ),
+            expected={
+                'value': name7_dnsname,
+                'summary': None,
+                'result': {
+                    'dn': name7_dn,
+                    'idnsname': [name7_dnsname],
+                    'arecord': [arec2],
+                    'aaaarecord': [aaaarec],
+                    'objectclass': objectclasses.dnsrecord,
+                },
+            },
+        ),
+
+
+        dict(
+            desc='Create %r' % fqdn5,
+            command=('host_add', [fqdn5],
+                dict(
+                    description=u'Test host 5',
+                    l=u'Undisclosed location 5',
+                ),
+            ),
+            expected=dict(
+                value=fqdn5,
+                summary=u'Added host "%s"' % fqdn5,
+                result=dict(
+                    dn=dn5,
+                    fqdn=[fqdn5],
+                    description=[u'Test host 5'],
+                    l=[u'Undisclosed location 5'],
+                    krbprincipalname=[u'host/%s@%s' % (fqdn5, api.env.realm)],
+                    objectclass=objectclasses.host,
+                    ipauniqueid=[fuzzy_uuid],
+                    managedby_host=[fqdn5],
+                    has_keytab=False,
+                    has_password=False,
+                ),
+            ),
+        ),
+
+
+        dict(
+            desc='Create %r' % fqdn6,
+            command=('host_add', [fqdn6],
+                dict(
+                    description=u'Test host 6',
+                    l=u'Undisclosed location 6',
+                ),
+            ),
+            expected=dict(
+                value=fqdn6,
+                summary=u'Added host "%s"' % fqdn6,
+                result=dict(
+                    dn=dn6,
+                    fqdn=[fqdn6],
+                    description=[u'Test host 6'],
+                    l=[u'Undisclosed location 6'],
+                    krbprincipalname=[u'host/%s@%s' % (fqdn6, api.env.realm)],
+                    objectclass=objectclasses.host,
+                    ipauniqueid=[fuzzy_uuid],
+                    managedby_host=[fqdn6],
+                    has_keytab=False,
+                    has_password=False,
+                ),
+            ),
+        ),
+
+
+        dict(
+            desc='Create %r' % fqdn7,
+            command=('host_add', [fqdn7],
+                dict(
+                    description=u'Test host 7',
+                    l=u'Undisclosed location 7',
+                ),
+            ),
+            expected=dict(
+                value=fqdn7,
+                summary=u'Added host "%s"' % fqdn7,
+                result=dict(
+                    dn=dn7,
+                    fqdn=[fqdn7],
+                    description=[u'Test host 7'],
+                    l=[u'Undisclosed location 7'],
+                    krbprincipalname=[u'host/%s@%s' % (fqdn7, api.env.realm)],
+                    objectclass=objectclasses.host,
+                    ipauniqueid=[fuzzy_uuid],
+                    managedby_host=[fqdn7],
+                    has_keytab=False,
+                    has_password=False,
+                ),
+            ),
+        ),
+
+
+        dict(
+            desc='Create %r' % fqdn8,
+            command=('host_add', [fqdn8],
+                dict(
+                    description=u'Test host 8',
+                    l=u'Undisclosed location 8',
+                    ip_address=name8_ip,
+                ),
+            ),
+            expected=dict(
+                value=fqdn8,
+                summary=u'Added host "%s"' % fqdn8,
+                result=dict(
+                    dn=dn8,
+                    fqdn=[fqdn8],
+                    description=[u'Test host 8'],
+                    l=[u'Undisclosed location 8'],
+                    krbprincipalname=[u'host/%s@%s' % (fqdn8, api.env.realm)],
+                    objectclass=objectclasses.host,
+                    ipauniqueid=[fuzzy_uuid],
+                    managedby_host=[fqdn8],
+                    has_keytab=False,
+                    has_password=False,
+                ),
+            ),
+        ),
+
+
+        dict(
+            desc='Check if A record was created for host %r' % fqdn8,
+            command=('dnsrecord_show', [dnszone, name8], {}
+            ),
+            expected=dict(
+                value=name8_dnsname,
+                summary=None,
+                result=dict(
+                    dn=name8_dn,
+                    idnsname=[name8_dnsname],
+                    arecord=[name8_arec],
+                ),
+            ),
+        ),
+
+
+        dict(
+            desc='Check if PTR record was created for host %r' % fqdn8,
+            command=('dnsrecord_show', [revzone, name8_ptr], {}
+            ),
+            expected=dict(
+                value=name8_ptr_dnsname,
+                summary=None,
+                result=dict(
+                    dn=name8_ptr_dn,
+                    idnsname=[name8_ptr_dnsname],
+                    ptrrecord=[name8_ptrrec],
+                ),
+            ),
+        ),
+
+        dict(
+            desc='Create %r' % fqdn9,
+            command=('host_add', [fqdn9],
+                dict(
+                    description=u'Test host 9',
+                    l=u'Undisclosed location 9',
+                    ip_address=name9_ipv6,
+                ),
+            ),
+            expected=dict(
+                value=fqdn9,
+                summary=u'Added host "%s"' % fqdn9,
+                result=dict(
+                    dn=dn9,
+                    fqdn=[fqdn9],
+                    description=[u'Test host 9'],
+                    l=[u'Undisclosed location 9'],
+                    krbprincipalname=[u'host/%s@%s' % (fqdn9, api.env.realm)],
+                    objectclass=objectclasses.host,
+                    ipauniqueid=[fuzzy_uuid],
+                    managedby_host=[fqdn9],
+                    has_keytab=False,
+                    has_password=False,
+                ),
+            ),
+        ),
+
+
+        dict(
+            desc='Check if AAAA record was created for host %r' % fqdn9,
+            command=('dnsrecord_show', [dnszone, name9], {}
+            ),
+            expected=dict(
+                value=name9_dnsname,
+                summary=None,
+                result=dict(
+                    dn=name9_dn,
+                    idnsname=[name9_dnsname],
+                    aaaarecord=[name9_aaaarec],
+                ),
+            ),
+        ),
+
+
+        dict(
+            desc='Check if PTR record was created for host %r' % fqdn9,
+            command=('dnsrecord_show', [revipv6zone, name9_ptr], {}
+            ),
+            expected=dict(
+                value=name9_ptr_dnsname,
+                summary=None,
+                result=dict(
+                    dn=name9_ptr_dn,
+                    idnsname=[name9_ptr_dnsname],
+                    ptrrecord=[name9_ptrrec],
+                ),
+            ),
+        ),
+    ]
-- 
1.8.3.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to