483b06
From e0f1082c7664235a298bbb1d574549917a00e8a0 Mon Sep 17 00:00:00 2001
483b06
From: Martin Babinsky <mbabinsk@redhat.com>
483b06
Date: Thu, 18 May 2017 16:20:13 +0200
483b06
Subject: [PATCH] test_serverroles: Get rid of MockLDAP and use ldap2 instead
483b06
483b06
The test fixture haphazardly intermixed MockLDAP and ldap2 calls in
483b06
setup and teardown code, greatly hampering extension of the code and
483b06
also porting efforts to Python 3. Get rid of MockLDAP and use ldap2 for
483b06
all LDAP operations.
483b06
483b06
https://pagure.io/freeipa/issue/6937
483b06
483b06
Reviewed-By: Jan Cholasta <jcholast@redhat.com>
483b06
Reviewed-By: Stanislav Laznicka <slaznick@redhat.com>
483b06
---
483b06
 ipatests/test_ipaserver/test_serverroles.py | 109 +++++++++++++---------------
483b06
 1 file changed, 51 insertions(+), 58 deletions(-)
483b06
483b06
diff --git a/ipatests/test_ipaserver/test_serverroles.py b/ipatests/test_ipaserver/test_serverroles.py
483b06
index b373a4d32f60e5ef48bcf07ac29162516113e8a8..985c750b64f109e0a83686f31ddb3b8d4171072d 100644
483b06
--- a/ipatests/test_ipaserver/test_serverroles.py
483b06
+++ b/ipatests/test_ipaserver/test_serverroles.py
483b06
@@ -14,40 +14,39 @@ import pytest
483b06
 from ipaplatform.paths import paths
483b06
 from ipalib import api, create_api, errors
483b06
 from ipapython.dn import DN
483b06
-from ipatests.util import MockLDAP
483b06
 
483b06
 
483b06
-def _make_service_entry_mods(enabled=True, other_config=None):
483b06
+def _make_service_entry(ldap_backend, dn, enabled=True, other_config=None):
483b06
     mods = {
483b06
-        b'objectClass': [b'top', b'nsContainer', b'ipaConfigObject'],
483b06
+        'objectClass': ['top', 'nsContainer', 'ipaConfigObject'],
483b06
     }
483b06
     if enabled:
483b06
-        mods.update({b'ipaConfigString': [b'enabledService']})
483b06
+        mods.update({'ipaConfigString': ['enabledService']})
483b06
 
483b06
     if other_config is not None:
483b06
-        mods.setdefault(b'ipaConfigString', [])
483b06
-        mods[b'ipaConfigString'].extend(other_config)
483b06
+        mods.setdefault('ipaConfigString', [])
483b06
+        mods['ipaConfigString'].extend(other_config)
483b06
 
483b06
-    return mods
483b06
+    return ldap_backend.make_entry(dn, **mods)
483b06
 
483b06
 
483b06
-def _make_master_entry_mods(ca=False):
483b06
+def _make_master_entry(ldap_backend, dn, ca=False):
483b06
     mods = {
483b06
-        b'objectClass': [
483b06
-            b'top',
483b06
-            b'nsContainer',
483b06
-            b'ipaReplTopoManagedServer',
483b06
-            b'ipaSupportedDomainLevelConfig',
483b06
-            b'ipaConfigObject',
483b06
+        'objectClass': [
483b06
+            'top',
483b06
+            'nsContainer',
483b06
+            'ipaReplTopoManagedServer',
483b06
+            'ipaSupportedDomainLevelConfig',
483b06
+            'ipaConfigObject',
483b06
         ],
483b06
-        b'ipaMaxDomainLevel': [b'1'],
483b06
-        b'ipaMinDomainLevel': [b'0'],
483b06
-        b'ipaReplTopoManagedsuffix': [str(api.env.basedn)]
483b06
+        'ipaMaxDomainLevel': ['1'],
483b06
+        'ipaMinDomainLevel': ['0'],
483b06
+        'ipaReplTopoManagedsuffix': [str(api.env.basedn)]
483b06
     }
483b06
     if ca:
483b06
-        mods[b'ipaReplTopoManagedsuffix'].append(b'o=ipaca')
483b06
+        mods['ipaReplTopoManagedsuffix'].append('o=ipaca')
483b06
 
483b06
-    return mods
483b06
+    return ldap_backend.make_entry(dn, **mods)
483b06
 
483b06
 _adtrust_agents = DN(
483b06
     ('cn', 'adtrust agents'),
483b06
@@ -235,7 +234,7 @@ class MockMasterTopology(object):
483b06
             ('cn', self.api.env.host), self.api.env.container_masters,
483b06
             self.api.env.basedn)
483b06
 
483b06
-        self.ldap = MockLDAP()
483b06
+        self.ldap = self.api.Backend.ldap2
483b06
 
483b06
         self.existing_masters = {
483b06
             m['cn'][0] for m in self.api.Command.server_find(
483b06
@@ -302,8 +301,9 @@ class MockMasterTopology(object):
483b06
             svc_mods = svc_desc[name]
483b06
 
483b06
             self.ldap.add_entry(
483b06
-                str(svc_dn),
483b06
-                _make_service_entry_mods(
483b06
+                _make_service_entry(
483b06
+                    self.ldap,
483b06
+                    svc_dn,
483b06
                     enabled=svc_mods['enabled'],
483b06
                     other_config=svc_mods.get('config', None)))
483b06
 
483b06
@@ -311,16 +311,16 @@ class MockMasterTopology(object):
483b06
 
483b06
     def _remove_svc_master_entries(self, master_dn):
483b06
         try:
483b06
-            entries = self.ldap.connection.search_s(
483b06
-                str(master_dn), ldap.SCOPE_SUBTREE
483b06
+            entries = self.ldap.get_entries(
483b06
+                master_dn, ldap.SCOPE_SUBTREE
483b06
             )
483b06
-        except ldap.NO_SUCH_OBJECT:
483b06
+        except errors.NotFound:
483b06
             return
483b06
 
483b06
         if entries:
483b06
-            entries.sort(key=lambda x: len(x[0]), reverse=True)
483b06
-            for entry_dn, _attrs in entries:
483b06
-                self.ldap.del_entry(str(entry_dn))
483b06
+            entries.sort(key=lambda x: len(x.dn), reverse=True)
483b06
+            for entry in entries:
483b06
+                self.ldap.delete_entry(entry)
483b06
 
483b06
     def _add_ipamaster_services(self, master_dn):
483b06
         """
483b06
@@ -329,19 +329,14 @@ class MockMasterTopology(object):
483b06
         for svc_name in self.ipamaster_services:
483b06
             svc_dn = self.get_service_dn(svc_name, master_dn)
483b06
             try:
483b06
-                self.api.Backend.ldap2.get_entry(svc_dn)
483b06
+                self.ldap.get_entry(svc_dn)
483b06
             except errors.NotFound:
483b06
-                self.ldap.add_entry(
483b06
-                    str(svc_dn), _make_service_entry_mods())
483b06
+                self.ldap.add_entry(_make_service_entry(self.ldap, svc_dn))
483b06
 
483b06
     def _add_members(self, dn, fqdn, member_attrs):
483b06
-        _entry, attrs = self.ldap.connection.search_s(
483b06
-            str(dn), ldap.SCOPE_SUBTREE)[0]
483b06
-        mods = []
483b06
-        value = attrs.get('member', [])
483b06
-        mod_op = ldap.MOD_REPLACE
483b06
-        if not value:
483b06
-            mod_op = ldap.MOD_ADD
483b06
+        entry_attrs = self.ldap.get_entry(dn)
483b06
+
483b06
+        value = entry_attrs.get('member', [])
483b06
 
483b06
         for a in member_attrs:
483b06
 
483b06
@@ -352,20 +347,18 @@ class MockMasterTopology(object):
483b06
                 result = self._add_service_entry(a, fqdn)['result']
483b06
                 value.append(str(result['dn']))
483b06
 
483b06
-        mods.append(
483b06
-            (mod_op, 'member', value)
483b06
-        )
483b06
-
483b06
-        self.ldap.connection.modify_s(str(dn), mods)
483b06
+        entry_attrs['member'] = value
483b06
+        self.ldap.update_entry(entry_attrs)
483b06
 
483b06
     def _remove_members(self, dn, fqdn, member_attrs):
483b06
-        _entry, attrs = self.ldap.connection.search_s(
483b06
-            str(dn), ldap.SCOPE_SUBTREE)[0]
483b06
-        mods = []
483b06
+        entry_attrs = self.ldap.get_entry(dn)
483b06
+
483b06
+        value = set(entry_attrs.get('member', []))
483b06
+
483b06
+        if not value:
483b06
+            return
483b06
+
483b06
         for a in member_attrs:
483b06
-            value = set(attrs.get('member', []))
483b06
-            if not value:
483b06
-                continue
483b06
 
483b06
             if a == 'host':
483b06
                 try:
483b06
@@ -382,13 +375,11 @@ class MockMasterTopology(object):
483b06
                     pass
483b06
                 self._del_service_entry(a, fqdn)
483b06
 
483b06
-        mods.append(
483b06
-            (ldap.MOD_REPLACE, 'member', list(value))
483b06
-        )
483b06
+        entry_attrs['member'] = list(value)
483b06
 
483b06
         try:
483b06
-            self.ldap.connection.modify_s(str(dn), mods)
483b06
-        except (ldap.NO_SUCH_OBJECT, ldap.NO_SUCH_ATTRIBUTE):
483b06
+            self.ldap.update_entry(entry_attrs)
483b06
+        except (errors.NotFound, errors.EmptyModlist):
483b06
             pass
483b06
 
483b06
     def _remove_test_host_attrs(self):
483b06
@@ -397,7 +388,7 @@ class MockMasterTopology(object):
483b06
         for attr_name in (
483b06
                 'caRenewalMaster', 'dnssecKeyMaster', 'pkinitEnabled'):
483b06
             try:
483b06
-                svc_entry = self.api.Backend.ldap2.find_entry_by_attr(
483b06
+                svc_entry = self.ldap.find_entry_by_attr(
483b06
                     'ipaConfigString', attr_name, 'ipaConfigObject',
483b06
                     base_dn=self.test_master_dn)
483b06
             except errors.NotFound:
483b06
@@ -407,7 +398,7 @@ class MockMasterTopology(object):
483b06
                     (svc_entry.dn, list(svc_entry.get('ipaConfigString', [])))
483b06
                 )
483b06
                 svc_entry[u'ipaConfigString'].remove(attr_name)
483b06
-                self.api.Backend.ldap2.update_entry(svc_entry)
483b06
+                self.ldap.update_entry(svc_entry)
483b06
 
483b06
         return original_dns_configs
483b06
 
483b06
@@ -416,7 +407,7 @@ class MockMasterTopology(object):
483b06
             try:
483b06
                 svc_entry = self.api.Backend.ldap2.get_entry(dn)
483b06
                 svc_entry['ipaConfigString'] = config
483b06
-                self.api.Backend.ldap2.update_entry(svc_entry)
483b06
+                self.ldap.update_entry(svc_entry)
483b06
             except (errors.NotFound, errors.EmptyModlist):
483b06
                 continue
483b06
 
483b06
@@ -427,7 +418,9 @@ class MockMasterTopology(object):
483b06
 
483b06
             # create master
483b06
             self.ldap.add_entry(
483b06
-                str(master_data.dn), _make_master_entry_mods(
483b06
+                _make_master_entry(
483b06
+                    self.ldap,
483b06
+                    master_data.dn,
483b06
                     ca='CA' in master_data.services))
483b06
 
483b06
             # now add service entries
483b06
-- 
483b06
2.9.4
483b06