PEP8: fix E303: too many blank lines (2)
[nivanova/samba-autobuild/.git] / source4 / dsdb / tests / python / linked_attributes.py
index 6235bf77a8949860430b57e2b3f2260a2e37770e..f297ac9c16b982c17ea7af5361744e805fc07664 100644 (file)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # Originally based on ./sam.py
+from __future__ import print_function
 import optparse
 import sys
 import os
@@ -64,8 +65,8 @@ class LATests(samba.tests.TestCase):
         if opts.delete_in_setup:
             try:
                 self.samdb.delete(self.ou, ['tree_delete:1'])
-            except ldb.LdbError, e:
-                print "tried deleting %s, got error %s" % (self.ou, e)
+            except ldb.LdbError as e:
+                print("tried deleting %s, got error %s" % (self.ou, e))
         self.samdb.add({'objectclass': 'organizationalUnit',
                         'dn': self.ou})
 
@@ -145,9 +146,9 @@ class LATests(samba.tests.TestCase):
         results = sorted(results)
 
         if expected != results:
-            print msg
-            print "expected %s" % expected
-            print "received %s" % results
+            print(msg)
+            print("expected %s" % expected)
+            print("received %s" % results)
 
         self.assertEqual(results, expected)
 
@@ -165,6 +166,27 @@ class LATests(samba.tests.TestCase):
                                 attrs=['objectGUID'])
         return str(misc.GUID(res[0]['objectGUID'][0]))
 
+    def assertRaisesLdbError(self, errcode, msg, f, *args, **kwargs):
+        """Assert a function raises a particular LdbError."""
+        try:
+            f(*args, **kwargs)
+        except ldb.LdbError as e:
+            (num, msg) = e.args
+            if num != errcode:
+                lut = {v: k for k, v in vars(ldb).items()
+                       if k.startswith('ERR_') and isinstance(v, int)}
+                self.fail("%s, expected "
+                          "LdbError %s, (%d) "
+                          "got %s (%d)" % (msg,
+                                           lut.get(errcode), errcode,
+                                           lut.get(num), num))
+        else:
+            lut = {v: k for k, v in vars(ldb).items()
+                   if k.startswith('ERR_') and isinstance(v, int)}
+            self.fail("%s, expected "
+                      "LdbError %s, (%d) "
+                      "but we got success" % (msg, lut.get(errcode), errcode))
+
     def _test_la_backlinks(self, reveal=False):
         tag = 'backlinks'
         kwargs = {}
@@ -187,7 +209,7 @@ class LATests(samba.tests.TestCase):
 
     def test_la_backlinks_reveal(self):
         if opts.no_reveal_internals:
-            print 'skipping because --no-reveal-internals'
+            print('skipping because --no-reveal-internals')
             return
         self._test_la_backlinks(True)
 
@@ -215,7 +237,7 @@ class LATests(samba.tests.TestCase):
 
     def test_la_backlinks_delete_group_reveal(self):
         if opts.no_reveal_internals:
-            print 'skipping because --no-reveal-internals'
+            print('skipping because --no-reveal-internals')
             return
         self._test_la_backlinks_delete_group(True)
 
@@ -306,6 +328,11 @@ class LATests(samba.tests.TestCase):
         self.remove_linked_attribute(g1, [])
         self.assert_forward_links(g1, [])
 
+        # removing a duplicate link in the same message should fail
+        self.add_linked_attribute(g2, [u1, u2])
+        self.assertRaises(ldb.LdbError,
+                          self.remove_linked_attribute, g2, [u1, u1])
+
     def _test_la_links_delete_link_reveal(self):
         u1, u2 = self.add_objects(2, 'user', 'u_del_link_reveal')
         g1, g2 = self.add_objects(2, 'group', 'g_del_link_reveal')
@@ -320,11 +347,11 @@ class LATests(samba.tests.TestCase):
                                   show_recycled=1,
                                   show_deactivated_link=0,
                                   reveal_internals=0
-        )
+                                  )
 
     def test_la_links_delete_link_reveal(self):
         if opts.no_reveal_internals:
-            print 'skipping because --no-reveal-internals'
+            print('skipping because --no-reveal-internals')
             return
         self._test_la_links_delete_link_reveal()
 
@@ -388,14 +415,10 @@ class LATests(samba.tests.TestCase):
         self.add_linked_attribute(g2, [u3, u1])
         self.add_linked_attribute(g3, u2)
 
-        try:
-            # adding u2 twice should be an error
-            self.add_linked_attribute(g2, [u1, u2, u3, u2])
-        except ldb.LdbError as (num, msg):
-            if num != ldb.ERR_ENTRY_ALREADY_EXISTS:
-                self.fail("adding duplicate values, expected "
-                          "ERR_ENTRY_ALREADY_EXISTS, (%d) "
-                          "got %d" % (ldb.ERR_ENTRY_ALREADY_EXISTS, num))
+        self.assertRaisesLdbError(ldb.ERR_ENTRY_ALREADY_EXISTS,
+                                  "adding duplicate values",
+                                  self.add_linked_attribute, g2,
+                                  [u1, u2, u3, u2])
 
         self.assert_forward_links(g1, [u1, u2, u3, u4])
         self.assert_forward_links(g2, [u3, u1])
@@ -464,6 +487,10 @@ class LATests(samba.tests.TestCase):
         self.assert_back_links(u3, [g1])
         self.assert_back_links(u4, [])
 
+        self.assertRaisesLdbError(ldb.ERR_ENTRY_ALREADY_EXISTS,
+                                  "replacing duplicate values",
+                                  self.replace_linked_attribute, g2,
+                                  [u1, u2, u3, u2])
 
     def test_la_links_replace2(self):
         users = self.add_objects(12, 'user', 'u_replace2')
@@ -590,14 +617,11 @@ class LATests(samba.tests.TestCase):
         (g2,) = self.add_objects(1, 'group', 'g_all_at_once2',
                                  more_attrs={'member': users[:5]})
 
-        try:
-            self.add_objects(1, 'group', 'g_with_duplicate_links',
-                             more_attrs={'member': users[:5] + users[1:2]})
-        except ldb.LdbError as (num, msg):
-            if num != ldb.ERR_ENTRY_ALREADY_EXISTS:
-                self.fail("adding duplicate values, expected "
-                          "ERR_ENTRY_ALREADY_EXISTS, (%d) "
-                          "got %d" % (ldb.ERR_ENTRY_ALREADY_EXISTS, num))
+        self.assertRaisesLdbError(ldb.ERR_ENTRY_ALREADY_EXISTS,
+                                  "adding multiple duplicate values",
+                                  self.add_objects, 1, 'group',
+                                  'g_with_duplicate_links',
+                                  more_attrs={'member': users[:5] + users[1:2]})
 
         self.assert_forward_links(g1, users)
         self.assert_forward_links(g2, users[:5])