From: Andrew Bartlett Date: Thu, 16 May 2013 05:24:25 +0000 (+1000) Subject: torture: Add tests of rename behaviour to replica_sync.py X-Git-Url: http://git.samba.org/?p=obnox%2Fsamba%2Fsamba-obnox.git;a=commitdiff_plain;h=2d38009852487ab3572b66817ed0492333b5ec7d torture: Add tests of rename behaviour to replica_sync.py Reviewed-by: Stefan Metzmacher --- diff --git a/source4/torture/drs/python/replica_sync.py b/source4/torture/drs/python/replica_sync.py index 88394218242..63221a52a35 100644 --- a/source4/torture/drs/python/replica_sync.py +++ b/source4/torture/drs/python/replica_sync.py @@ -370,3 +370,107 @@ objectClass: organizationalUnit self._check_deleted(self.ldb_dc2, ou2) self._check_deleted(self.ldb_dc2, ou1_child) self._check_deleted(self.ldb_dc2, ou2_child) + + def test_ReplRenames(self): + """Tests that objects created under a OU deleted eleswhere end up in lostAndFound""" + self._disable_inbound_repl(self.dnsname_dc1) + self._disable_inbound_repl(self.dnsname_dc2) + + # Create two OUs on DC2 + ou1 = self._create_ou(self.ldb_dc2, "OU=Original parent") + ou2 = self._create_ou(self.ldb_dc2, "OU=Original parent 2") + + # replicate them from DC2 to DC1 + self._enable_inbound_repl(self.dnsname_dc1) + self._net_drs_replicate(DC=self.dnsname_dc1, fromDC=self.dnsname_dc2, forced=True, full_sync=False) + self._disable_inbound_repl(self.dnsname_dc1) + + # Create children on DC1 + ou1_child = self._create_ou(self.ldb_dc1, "OU=Test Child,OU=Original parent") + ou2_child = self._create_ou(self.ldb_dc1, "OU=Test Child 2,OU=Original parent") + ou3_child = self._create_ou(self.ldb_dc1, "OU=Test Case Child,OU=Original parent") + + # replicate them from DC1 to DC2 + self._enable_inbound_repl(self.dnsname_dc2) + self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True, full_sync=False) + self._disable_inbound_repl(self.dnsname_dc2) + + self.ldb_dc1.rename("" % ou2_child, "OU=Test Child 3,OU=Original parent 2,%s" % self.domain_dn) + self.ldb_dc1.rename("" % ou1_child, "OU=Test Child 2,OU=Original parent 2,%s" % self.domain_dn) + self.ldb_dc1.rename("" % ou2_child, "OU=Test Child,OU=Original parent 2,%s" % self.domain_dn) + self.ldb_dc1.rename("" % ou3_child, "OU=Test CASE Child,OU=Original parent,%s" % self.domain_dn) + self.ldb_dc2.rename("" % ou2, "OU=Original parent 3,%s" % self.domain_dn) + self.ldb_dc2.rename("" % ou1, "OU=Original parent 2,%s" % self.domain_dn) + + # replicate them from DC1 to DC2 + self._enable_inbound_repl(self.dnsname_dc2) + self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True, full_sync=False) + self._disable_inbound_repl(self.dnsname_dc2) + + # Check the sub-OUs are now under Original Parent 3 (original + # parent 2 for Test CASE Child), and both have the right names + + # Check that DC2 got the DC1 object, and the renames are all correct + res1 = self.ldb_dc2.search(base="" % ou1_child, + scope=SCOPE_BASE, attrs=["name"]) + res2 = self.ldb_dc2.search(base="" % ou2_child, + scope=SCOPE_BASE, attrs=["name"]) + res3 = self.ldb_dc2.search(base="" % ou3_child, + scope=SCOPE_BASE, attrs=["name"]) + print res1[0].dn + print res2[0].dn + print res3[0].dn + self.assertEqual('Test Child 2', res1[0]["name"][0]) + self.assertEqual('Test Child', res2[0]["name"][0]) + self.assertEqual('Test CASE Child', res3[0]["name"][0]) + self.assertEqual(str(res1[0].dn), "OU=Test Child 2,OU=Original parent 3,%s" % self.domain_dn) + self.assertEqual(str(res2[0].dn), "OU=Test Child,OU=Original parent 3,%s" % self.domain_dn) + self.assertEqual(str(res3[0].dn), "OU=Test CASE Child,OU=Original parent 2,%s" % self.domain_dn) + + # replicate them from DC2 to DC1 + self._enable_inbound_repl(self.dnsname_dc1) + self._net_drs_replicate(DC=self.dnsname_dc1, fromDC=self.dnsname_dc2, forced=True, full_sync=False) + self._disable_inbound_repl(self.dnsname_dc1) + + # Check that DC1 got the DC2 object, and the renames are all correct + res1 = self.ldb_dc1.search(base="" % ou1_child, + scope=SCOPE_BASE, attrs=["name"]) + res2 = self.ldb_dc1.search(base="" % ou2_child, + scope=SCOPE_BASE, attrs=["name"]) + res3 = self.ldb_dc1.search(base="" % ou3_child, + scope=SCOPE_BASE, attrs=["name"]) + print res1[0].dn + print res2[0].dn + print res3[0].dn + self.assertEqual('Test Child 2', res1[0]["name"][0]) + self.assertEqual('Test Child', res2[0]["name"][0]) + self.assertEqual('Test CASE Child', res3[0]["name"][0]) + self.assertEqual(str(res1[0].dn), "OU=Test Child 2,OU=Original parent 3,%s" % self.domain_dn) + self.assertEqual(str(res2[0].dn), "OU=Test Child,OU=Original parent 3,%s" % self.domain_dn) + self.assertEqual(str(res3[0].dn), "OU=Test CASE Child,OU=Original parent 2,%s" % self.domain_dn) + + # Delete all objects by GUID on DC1 + + self.ldb_dc1.delete('' % ou1_child) + self.ldb_dc1.delete('' % ou2_child) + self.ldb_dc1.delete('' % ou3_child) + self.ldb_dc1.delete('' % ou1) + self.ldb_dc1.delete('' % ou2) + + self._enable_inbound_repl(self.dnsname_dc1) + self._enable_inbound_repl(self.dnsname_dc2) + self._net_drs_replicate(DC=self.dnsname_dc2, fromDC=self.dnsname_dc1, forced=True, full_sync=False) + + + # Check all deleted on DC1 + self._check_deleted(self.ldb_dc1, ou1) + self._check_deleted(self.ldb_dc1, ou2) + self._check_deleted(self.ldb_dc1, ou1_child) + self._check_deleted(self.ldb_dc1, ou2_child) + self._check_deleted(self.ldb_dc1, ou3_child) + # Check all deleted on DC2 + self._check_deleted(self.ldb_dc2, ou1) + self._check_deleted(self.ldb_dc2, ou2) + self._check_deleted(self.ldb_dc2, ou1_child) + self._check_deleted(self.ldb_dc2, ou2_child) + self._check_deleted(self.ldb_dc2, ou3_child)