PEP8: fix E703: statement ends with a semicolon
[nivanova/samba-autobuild/.git] / source4 / torture / drs / python / repl_move.py
index 41a364e5628475ea065db393d10b4aaae8d4fb5b..d65d173013a9a331a7deafd4c43b77e9762c4df2 100644 (file)
 #  PYTHONPATH="$PYTHONPATH:$samba4srcdir/torture/drs/python" $SUBUNITRUN repl_move -U"$DOMAIN/$DC_USERNAME"%"$DC_PASSWORD"
 #
 
+from __future__ import print_function
 import time
 import uuid
+import samba.tests
 
 from samba.ndr import ndr_unpack
 from samba.dcerpc import drsblobs
@@ -38,11 +40,13 @@ from samba.drs_utils import drs_DsBind
 from ldb import (
     SCOPE_BASE,
     SCOPE_SUBTREE,
-    )
+)
 
-import drs_base, ldb
+import drs_base
+import ldb
 from samba.dcerpc.drsuapi import *
 
+
 class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
     def _ds_bind(self, server_name):
@@ -54,11 +58,19 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
     def setUp(self):
         super(DrsMoveObjectTestCase, self).setUp()
+        # disable automatic replication temporary
+        self._disable_all_repl(self.dnsname_dc1)
+        self._disable_all_repl(self.dnsname_dc2)
+
         # make sure DCs are synchronized before the test
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
         self._net_drs_replicate(DC=self.dnsname_dc1, fromDC=self.dnsname_dc2, forced=True)
+
+        self.top_ou = samba.tests.create_test_ou(self.ldb_dc1,
+                                                 "replica_move")
+
         self.ou1_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU1")
-        self.ou1_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou1_dn.add_base(self.top_ou)
         ou1 = {}
         ou1["dn"] = self.ou1_dn
         ou1["objectclass"] = "organizationalUnit"
@@ -66,17 +78,13 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         self.ldb_dc1.add(ou1)
 
         self.ou2_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU2")
-        self.ou2_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou2_dn.add_base(self.top_ou)
         ou2 = {}
         ou2["dn"] = self.ou2_dn
         ou2["objectclass"] = "organizationalUnit"
         ou2["ou"] = self.ou2_dn.get_component_value(0)
         self.ldb_dc1.add(ou2)
 
-        # disable automatic replication temporary
-        self._disable_inbound_repl(self.dnsname_dc1)
-        self._disable_inbound_repl(self.dnsname_dc2)
-
         # trigger replication from DC1 to DC2
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
         self.dc1_guid = self.ldb_dc1.get_invocation_id()
@@ -87,21 +95,21 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
     def tearDown(self):
         try:
-            self.ldb_dc1.delete(self.ou1_dn, ["tree_delete:1"])
-        except ldb.LdbError as (enum, string):
+            self.ldb_dc1.delete(self.top_ou, ["tree_delete:1"])
+        except ldb.LdbError as e:
+            (enum, string) = e.args
             if enum == ldb.ERR_NO_SUCH_OBJECT:
                 pass
 
-        self.ldb_dc1.delete(self.ou2_dn, ["tree_delete:1"])
-        self._enable_inbound_repl(self.dnsname_dc1)
-        self._enable_inbound_repl(self.dnsname_dc2)
+        self._enable_all_repl(self.dnsname_dc1)
+        self._enable_all_repl(self.dnsname_dc2)
         super(DrsMoveObjectTestCase, self).tearDown()
 
     def _make_username(self):
         return "DrsMoveU_" + time.strftime("%s", time.gmtime())
 
     def _check_metadata(self, user_dn, sam_ldb, drs, metadata, expected):
-        repl = ndr_unpack(drsblobs.replPropertyMetaDataBlob, str(metadata[0]))
+        repl = ndr_unpack(drsblobs.replPropertyMetaDataBlob, metadata[0])
 
         self.assertEqual(len(repl.ctr.array), len(expected))
 
@@ -143,7 +151,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         req8.highwatermark.reserved_usn = 0
         req8.highwatermark.highest_usn = 0
         req8.uptodateness_vector = None
-        req8.replica_flags = 0
+        req8.replica_flags = DRSUAPI_DRS_SYNC_FORCED
         req8.max_object_count = 1
         req8.max_ndr_size = 402116
         req8.extended_op = DRSUAPI_EXOP_REPL_OBJ
@@ -164,16 +172,16 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         for o in drs_ctr.first_object.meta_data_ctr.meta_data:
             i = 0
             drs_attid = drs_ctr.first_object.object.attribute_ctr.attributes[att_idx]
-            e = expected[i];
+            e = expected[i]
             (attid, orig_dsa, version) = e
 
             # Skip the RDN from the expected set, it is not sent over DRS
-            if (user_dn.get_rdn_name().upper() == "CN" \
+            if (user_dn.get_rdn_name().upper() == "CN"
                 and attid == DRSUAPI_ATTID_cn) \
-                or (user_dn.get_rdn_name().upper() == "OU" \
+                or (user_dn.get_rdn_name().upper() == "OU"
                     and attid == DRSUAPI_ATTID_ou):
                 i = i + 1
-                e = expected[i];
+                e = expected[i]
                 (attid, orig_dsa, version) = e
 
             self.assertEquals(attid, drs_attid.attid,
@@ -243,7 +251,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
         return user_cur
 
-
     def test_ReplicateMoveObject1(self):
         """Verifies how a moved container with a user inside is replicated between two DCs.
            This test should verify that:
@@ -262,7 +269,9 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -273,7 +282,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         initial_metadata = [
             (DRSUAPI_ATTID_objectClass, self.dc1_guid, 1),
             (DRSUAPI_ATTID_cn, self.dc1_guid, 1),
@@ -444,7 +453,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
                                    is_deleted=False,
                                    expected_metadata=modified_metadata)
 
-
         # trigger replication from DC1 to DC2, for cleanup
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
 
@@ -521,7 +529,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
                                    expected_metadata=deleted_modified_metadata_dc1)
         self.assertFalse("description" in user_cur)
 
-
     def test_ReplicateMoveObject2(self):
         """Verifies how a moved container with a user inside is not
            replicated between two DCs as no replication is triggered
@@ -535,7 +542,9 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -546,7 +555,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         initial_metadata = [
             (DRSUAPI_ATTID_objectClass, self.dc1_guid, 1),
             (DRSUAPI_ATTID_cn, self.dc1_guid, 1),
@@ -702,7 +711,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
                                    is_deleted=True,
                                    expected_metadata=deleted_metadata_dc1)
 
-
     def test_ReplicateMoveObject3(self):
         """Verifies how a moved container with a user inside is replicated between two DCs.
            This test should verify that:
@@ -717,7 +725,9 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -728,7 +738,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         initial_metadata = [
             (DRSUAPI_ATTID_objectClass, self.dc1_guid, 1),
             (DRSUAPI_ATTID_cn, self.dc1_guid, 1),
@@ -757,7 +767,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
                         obj_orig=user_orig, is_deleted=False,
                         expected_metadata=initial_metadata)
 
-
         new_dn = ldb.Dn(self.ldb_dc1, "CN=%s" % username)
         new_dn.add_base(self.ou2_dn)
         self.ldb_dc1.rename(user_dn, new_dn)
@@ -882,7 +891,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
                                    is_deleted=True,
                                    expected_metadata=deleted_metadata_dc2)
 
-
     def test_ReplicateMoveObject3b(self):
         """Verifies how a moved container with a user inside is replicated between two DCs.
            This test should verify that:
@@ -897,7 +905,9 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -908,7 +918,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         initial_metadata = [
             (DRSUAPI_ATTID_objectClass, self.dc1_guid, 1),
             (DRSUAPI_ATTID_cn, self.dc1_guid, 1),
@@ -937,7 +947,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
                         obj_orig=user_orig, is_deleted=False,
                         expected_metadata=initial_metadata)
 
-
         new_dn = ldb.Dn(self.ldb_dc1, "CN=%s" % username)
         new_dn.add_base(self.ou2_dn)
         self.ldb_dc1.rename(user_dn, new_dn)
@@ -1062,7 +1071,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
                                    is_deleted=True,
                                    expected_metadata=deleted_metadata_dc2)
 
-
     def test_ReplicateMoveObject4(self):
         """Verifies how a moved container with a user inside is replicated between two DCs.
            This test should verify that:
@@ -1078,7 +1086,9 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -1089,7 +1099,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         initial_metadata = [
             (DRSUAPI_ATTID_objectClass, self.dc1_guid, 1),
             (DRSUAPI_ATTID_cn, self.dc1_guid, 1),
@@ -1338,7 +1348,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
             (DRSUAPI_ATTID_objectCategory, self.dc1_guid, 2),
             (DRSUAPI_ATTID_isRecycled, self.dc1_guid, 1)]
 
-
         # check user info on DC1 - should be deleted user
         user_cur = self._check_obj(sam_ldb=self.ldb_dc1, drs=self.drs_dc1,
                                    obj_orig=user_moved_orig,
@@ -1401,7 +1410,9 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -1417,7 +1428,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         user_cur = self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_orig, is_deleted=False)
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_orig, is_deleted=False)
 
         new_dn = ldb.Dn(self.ldb_dc1, "CN=%s" % username)
@@ -1459,7 +1470,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         user_cur = self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_moved_orig, is_deleted=True)
         self.assertFalse("description" in user_cur)
 
-
     def test_ReplicateMoveObject6(self):
         """Verifies how a moved container is replicated between two DCs.
            This test should verify that:
@@ -1478,7 +1488,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=ou_orig, is_deleted=False)
 
         # trigger replication from DC1 to DC2
@@ -1525,7 +1535,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_cur = self._check_obj(sam_ldb=self.ldb_dc2, obj_orig=ou_moved_orig, is_deleted=True)
         self.assertFalse("description" in ou_cur)
 
-
     def test_ReplicateMoveObject7(self):
         """Verifies how a moved container is replicated between two DCs.
            This test should verify that:
@@ -1544,7 +1553,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=ou_orig, is_deleted=False)
 
         # trigger replication from DC1 to DC2
@@ -1591,7 +1600,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_cur = self._check_obj(sam_ldb=self.ldb_dc2, obj_orig=ou_moved_orig, is_deleted=True)
         self.assertFalse("description" in ou_cur)
 
-
     def test_ReplicateMoveObject8(self):
         """Verifies how a moved container is replicated between two DCs.
            This test should verify that:
@@ -1610,7 +1618,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=ou_orig, is_deleted=False)
 
         # trigger replication from DC1 to DC2
@@ -1657,7 +1665,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_cur = self._check_obj(sam_ldb=self.ldb_dc2, obj_orig=ou_moved_orig, is_deleted=True)
         self.assertFalse("description" in ou_cur)
 
-
     def test_ReplicateMoveObject9(self):
         """Verifies how a moved container is replicated between two DCs.
            This test should verify that:
@@ -1677,7 +1684,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=ou_orig, is_deleted=False)
 
         # trigger replication from DC1 to DC2
@@ -1724,7 +1731,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_cur = self._check_obj(sam_ldb=self.ldb_dc2, obj_orig=ou_moved_orig, is_deleted=True)
         self.assertFalse("description" in ou_cur)
 
-
     def test_ReplicateMoveObject10(self):
         """Verifies how a moved container is replicated between two DCs.
            This test should verify that:
@@ -1743,7 +1749,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=ou_orig, is_deleted=False)
 
         # trigger replication from DC1 to DC2
@@ -1773,7 +1779,6 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_cur = self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=ou_orig, is_deleted=True)
         self.assertFalse("description" in ou_cur)
 
-
     def test_ReplicateMoveObject11(self):
         """Verifies how a moved container is replicated between two DCs.
            This test should verify that:
@@ -1792,7 +1797,7 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         ou_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (self.ou1_dn, self._GUID_string(ou_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=ou_orig, is_deleted=False)
 
         # trigger replication from DC1 to DC2
@@ -1823,75 +1828,77 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         self.assertFalse("description" in ou_cur)
 
 
-
 class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
     def setUp(self):
         super(DrsMoveBetweenTreeOfObjectTestCase, self).setUp()
+        # disable automatic replication temporary
+        self._disable_all_repl(self.dnsname_dc1)
+        self._disable_all_repl(self.dnsname_dc2)
+
+        self.top_ou = samba.tests.create_test_ou(self.ldb_dc1,
+                                                 "replica_move")
+
         # make sure DCs are synchronized before the test
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
         self._net_drs_replicate(DC=self.dnsname_dc1, fromDC=self.dnsname_dc2, forced=True)
+
         self.ou1_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU1")
-        self.ou1_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou1_dn.add_base(self.top_ou)
         self.ou1 = {}
         self.ou1["dn"] = self.ou1_dn
         self.ou1["objectclass"] = "organizationalUnit"
         self.ou1["ou"] = self.ou1_dn.get_component_value(0)
 
         self.ou2_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU2,OU=DrsOU1")
-        self.ou2_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou2_dn.add_base(self.top_ou)
         self.ou2 = {}
         self.ou2["dn"] = self.ou2_dn
         self.ou2["objectclass"] = "organizationalUnit"
         self.ou2["ou"] = self.ou2_dn.get_component_value(0)
 
         self.ou2b_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU2B,OU=DrsOU1")
-        self.ou2b_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou2b_dn.add_base(self.top_ou)
         self.ou2b = {}
         self.ou2b["dn"] = self.ou2b_dn
         self.ou2b["objectclass"] = "organizationalUnit"
         self.ou2b["ou"] = self.ou2b_dn.get_component_value(0)
 
         self.ou2c_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU2C,OU=DrsOU1")
-        self.ou2c_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou2c_dn.add_base(self.top_ou)
 
         self.ou3_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU3,OU=DrsOU2,OU=DrsOU1")
-        self.ou3_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou3_dn.add_base(self.top_ou)
         self.ou3 = {}
         self.ou3["dn"] = self.ou3_dn
         self.ou3["objectclass"] = "organizationalUnit"
         self.ou3["ou"] = self.ou3_dn.get_component_value(0)
 
         self.ou4_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU4,OU=DrsOU3,OU=DrsOU2,OU=DrsOU1")
-        self.ou4_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou4_dn.add_base(self.top_ou)
         self.ou4 = {}
         self.ou4["dn"] = self.ou4_dn
         self.ou4["objectclass"] = "organizationalUnit"
         self.ou4["ou"] = self.ou4_dn.get_component_value(0)
 
         self.ou5_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU5,OU=DrsOU4,OU=DrsOU3,OU=DrsOU2,OU=DrsOU1")
-        self.ou5_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou5_dn.add_base(self.top_ou)
         self.ou5 = {}
         self.ou5["dn"] = self.ou5_dn
         self.ou5["objectclass"] = "organizationalUnit"
         self.ou5["ou"] = self.ou5_dn.get_component_value(0)
 
         self.ou6_dn = ldb.Dn(self.ldb_dc1, "OU=DrsOU6,OU=DrsOU5,OU=DrsOU4,OU=DrsOU3,OU=DrsOU2,OU=DrsOU1")
-        self.ou6_dn.add_base(self.ldb_dc1.get_default_basedn())
+        self.ou6_dn.add_base(self.top_ou)
         self.ou6 = {}
         self.ou6["dn"] = self.ou6_dn
         self.ou6["objectclass"] = "organizationalUnit"
         self.ou6["ou"] = self.ou6_dn.get_component_value(0)
 
-        # disable automatic replication temporary
-        self._disable_inbound_repl(self.dnsname_dc1)
-        self._disable_inbound_repl(self.dnsname_dc2)
-
-
     def tearDown(self):
-        self.ldb_dc1.delete(self.ou1_dn, ["tree_delete:1"])
-        self._enable_inbound_repl(self.dnsname_dc1)
-        self._enable_inbound_repl(self.dnsname_dc2)
+        self.ldb_dc1.delete(self.top_ou, ["tree_delete:1"])
+        self._enable_all_repl(self.dnsname_dc1)
+        self._enable_all_repl(self.dnsname_dc2)
         super(DrsMoveBetweenTreeOfObjectTestCase, self).tearDown()
 
     def _make_username(self):
@@ -1930,7 +1937,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         return user_cur
 
-
     def test_ReplicateMoveInTree1(self):
         """Verifies how an object is replicated between two DCs.
            This test should verify that:
@@ -1945,7 +1951,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -1955,7 +1963,7 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_orig, is_deleted=False)
 
         self.ldb_dc1.add(self.ou2)
@@ -1985,7 +1993,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         # trigger replication from DC1 to DC2, for cleanup
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
 
-
     def test_ReplicateMoveInTree2(self):
         """Verifies how an object is replicated between two DCs.
            This test should verify that:
@@ -2001,7 +2008,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -2011,7 +2020,7 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_orig, is_deleted=False)
 
         self.ldb_dc1.add(self.ou2)
@@ -2079,7 +2088,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         user_cur = self._check_obj(sam_ldb=self.ldb_dc2, obj_orig=user_moved_orig, is_deleted=True)
         self.assertFalse("description" in user_cur)
 
-
     def test_ReplicateMoveInTree3(self):
         """Verifies how an object is replicated between two DCs.
            This test should verify that:
@@ -2095,7 +2103,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -2105,7 +2115,7 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_orig, is_deleted=False)
 
         self.ldb_dc1.add(self.ou2)
@@ -2163,7 +2173,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         # trigger replication from DC1 to DC2, for cleanup
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
 
-
     def test_ReplicateMoveInTree3b(self):
         """Verifies how an object is replicated between two DCs.
            This test should verify that:
@@ -2184,7 +2193,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -2194,7 +2205,7 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_orig, is_deleted=False)
 
         self.ldb_dc1.add(self.ou2)
@@ -2267,7 +2278,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         # trigger replication from DC1 to DC2, for cleanup
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
 
-
     def test_ReplicateMoveInTree4(self):
         """Verifies how an object is replicated between two DCs.
            This test should verify that:
@@ -2284,7 +2294,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -2294,7 +2306,7 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         user_dn   = ldb_res[0]["dn"]
 
         # check user info on DC1
-        print "Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0]))
+        print("Testing for %s with GUID %s" % (username, self._GUID_string(user_orig["objectGUID"][0])))
         self._check_obj(sam_ldb=self.ldb_dc1, obj_orig=user_orig, is_deleted=False)
 
         self.ldb_dc1.add(self.ou2)
@@ -2327,7 +2339,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         # trigger replication from DC1 to DC2, for cleanup
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
 
-
     def test_ReplicateAddInOU(self):
         """Verifies how an object is replicated between two DCs.
            This test should verify that:
@@ -2344,7 +2355,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -2372,7 +2385,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         # trigger replication from DC1 to DC2, for cleanup
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
 
-
     def test_ReplicateAddInMovedOU(self):
         """Verifies how an object is replicated between two DCs.
            This test should verify that:
@@ -2390,7 +2402,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -2427,7 +2441,6 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
         # trigger replication from DC1 to DC2, for cleanup
         self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True)
 
-
     def test_ReplicateAddInConflictOU_time(self):
         """Verifies how an object is replicated between two DCs, when created in an ambigious location
            This test should verify that:
@@ -2445,7 +2458,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,
@@ -2523,7 +2538,9 @@ class DrsMoveBetweenTreeOfObjectTestCase(drs_base.DrsBaseTestCase):
 
         # create user on DC1
         self.ldb_dc1.newuser(username=username,
-                             userou="ou=%s" % self.ou1_dn.get_component_value(0),
+                             userou="ou=%s,ou=%s"
+                             % (self.ou1_dn.get_component_value(0),
+                                self.top_ou.get_component_value(0)),
                              password=None, setpassword=False)
         ldb_res = self.ldb_dc1.search(base=self.ou1_dn,
                                       scope=SCOPE_SUBTREE,