selftest: Assert that name, the RDN attribute and actual RDN are in sync
authorAndrew Bartlett <abartlet@samba.org>
Sun, 27 Mar 2016 01:43:32 +0000 (14:43 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 6 Jun 2016 14:36:23 +0000 (16:36 +0200)
This allows us to catch such errors here, rather than just on dbcheck later

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz
source4/dsdb/tests/python/deletetest.py
source4/torture/drs/python/delete_object.py
source4/torture/drs/python/repl_move.py
source4/torture/drs/python/replica_sync.py

index 6044c9f7c0c8a1b6f085f8862bc2ac51b3b6bbba..a361915c03dfe1b667614381f0315c6272fe0d53 100755 (executable)
@@ -101,10 +101,12 @@ class BasicDeleteTests(BaseDeleteTests):
         print "Checking for correct rDN"
         rdn=liveObj[rdnName][0]
         rdn2=delObj[rdnName][0]
-        name2=delObj[rdnName][0]
+        name2=delObj["name"][0]
+        dn_rdn=delObj.dn.get_rdn_value()
         guid=liveObj["objectGUID"][0]
         self.assertEquals(rdn2, rdn + "\nDEL:" + self.GUID_string(guid))
         self.assertEquals(name2, rdn + "\nDEL:" + self.GUID_string(guid))
+        self.assertEquals(name2, dn_rdn)
 
     def delete_deleted(self, ldb, dn):
         print "Testing the deletion of the already deleted dn %s" % dn
index 3e20b6d069dcc439f37a4ac4905a813b6a89b209..cd7357175d19ef3f737b8c638b847de31fa28a2f 100644 (file)
@@ -68,8 +68,10 @@ class DrsDeleteObjectTestCase(drs_base.DrsBaseTestCase):
         # Deleted Object base DN
         dodn = self._deleted_objects_dn(sam_ldb)
         # now check properties of the user
-        name_orig = obj_orig["cn"][0]
-        name_cur  = user_cur["cn"][0]
+        cn_orig = obj_orig["cn"][0]
+        cn_cur  = user_cur["cn"][0]
+        name_orig = obj_orig["name"][0]
+        name_cur  = user_cur["name"][0]
         if is_deleted:
             self.assertEquals(user_cur["isDeleted"][0],"TRUE")
             self.assertFalse("objectCategory" in user_cur)
@@ -80,9 +82,15 @@ class DrsDeleteObjectTestCase(drs_base.DrsBaseTestCase):
             self.assertTrue(dodn in str(user_cur["dn"]),
                             "User %s is deleted but it is not located under %s (found at %s)!" % (name_orig, dodn, user_cur["dn"]))
             self.assertEquals(name_cur, name_orig + "\nDEL:" + guid_str)
+            self.assertEquals(name_cur, user_cur.dn.get_rdn_value())
+            self.assertEquals(cn_cur, cn_orig + "\nDEL:" + guid_str)
+            self.assertEquals(name_cur, cn_cur)
         else:
             self.assertFalse("isDeleted" in user_cur)
             self.assertEquals(name_cur, name_orig)
+            self.assertEquals(name_cur, user_cur.dn.get_rdn_value())
+            self.assertEquals(cn_cur, cn_orig)
+            self.assertEquals(name_cur, cn_cur)
             self.assertEquals(obj_orig["dn"], user_cur["dn"])
             self.assertTrue(dodn not in str(user_cur["dn"]))
         return user_cur
index 10f4906e543b1e3d823126e66143749a7e829a7f..06cfc02278f1938fac8f9120ce0749adbd192a54 100644 (file)
@@ -87,13 +87,19 @@ class DrsMoveObjectTestCase(drs_base.DrsBaseTestCase):
         self.assertEquals(len(res), 1)
         user_cur = res[0]
         # now check properties of the user
-        name_orig = obj_orig["cn"][0]
-        name_cur  = user_cur["cn"][0]
+        cn_orig = obj_orig["cn"][0]
+        cn_cur  = user_cur["cn"][0]
+        name_orig = obj_orig["name"][0]
+        name_cur  = user_cur["name"][0]
         dn_orig = obj_orig["dn"]
         dn_cur  = user_cur["dn"]
         self.assertFalse("isDeleted" in user_cur)
+        self.assertEquals(cn_cur, cn_orig)
         self.assertEquals(name_cur, name_orig)
         self.assertEquals(dn_cur, dn_orig)
+        self.assertEqual(name_cur, cn_cur)
+        self.assertEqual(name_cur, user_cur.dn.get_rdn_value())
+
         return user_cur
 
 
index 2113c2d9e97a17f458681ea5177e38b3c4d981e7..e8aaf0f08de93d0a11a1ebdacbedc3a6deb2000e 100644 (file)
@@ -140,9 +140,12 @@ objectClass: organizationalUnit
                                   scope=SCOPE_BASE, attrs=["name"])
         print res1[0]["name"][0]
         print res2[0]["name"][0]
+        self.assertFalse('CNF:%s' % self.ou2 in str(res2[0]["name"][0]))
         self.assertTrue('CNF:%s' % self.ou1 in str(res1[0]["name"][0]))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc2, self.domain_dn) not in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc2, self.domain_dn) not in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete both objects by GUID on DC2
 
@@ -184,6 +187,8 @@ objectClass: organizationalUnit
         self.assertTrue('CNF:%s' % self.ou1 in str(res1[0]["name"][0]))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete both objects by GUID on DC1
 
@@ -225,6 +230,8 @@ objectClass: organizationalUnit
         self.assertTrue('CNF:%s' % self.ou2 in str(res2[0]["name"][0]), "Got %s for %s" % (str(res2[0]["name"][0]), self.ou2))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete both objects by GUID on DC1
 
@@ -269,6 +276,8 @@ objectClass: organizationalUnit
         self.assertTrue('CNF:%s' % self.ou1 in str(res1[0]["name"][0]))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete both objects by GUID on DC1
 
@@ -324,6 +333,8 @@ objectClass: organizationalUnit
         self.assertTrue('CNF:%s' % self.ou1 in str(res1[0]["name"][0]))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete both objects by GUID on DC1
 
@@ -376,6 +387,8 @@ objectClass: organizationalUnit
         self.assertTrue('CNF:%s' % self.ou1 in str(res1[0]["name"][0]))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete both objects by GUID on DC1
 
@@ -431,6 +444,8 @@ objectClass: organizationalUnit
         self.assertTrue('CNF:%s' % self.ou2 in str(res2[0]["name"][0]))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) not in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete both objects by GUID on DC1
 
@@ -487,6 +502,8 @@ objectClass: organizationalUnit
         self.assertTrue('CNF:%s' % ou1_child in str(res1[0]["name"][0]) or 'CNF:%s' % ou2_child in str(res2[0]["name"][0]))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) in str(res1[0].dn))
         self.assertTrue(self._lost_and_found_dn(self.ldb_dc1, self.domain_dn) in str(res2[0].dn))
+        self.assertEqual(str(res1[0]["name"][0]), res1[0].dn.get_rdn_value())
+        self.assertEqual(str(res2[0]["name"][0]), res2[0].dn.get_rdn_value())
 
         # Delete all objects by GUID on DC1