From: Douglas Bagnall Date: Tue, 24 Oct 2017 22:57:50 +0000 (+1300) Subject: linked_attribute tests: helper assert function for expected LdbError X-Git-Tag: tevent-0.9.34~96 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1e62bbaeac8f3ea44b7b2091d0d1c7ebe0d5e6ff;p=thirdparty%2Fsamba.git linked_attribute tests: helper assert function for expected LdbError The logic involved in asserting that a function raises an LdbError with a particular error value has shown itself to be too complicated for me to repeat too often. To test this function, you would want a put a test in a bit like this: def test_assertRaisesLdbError(self): for i in [1, 2, ldb.ERR_ENTRY_ALREADY_EXISTS, 999]: def f(*args, **kwargs): raise ldb.LdbError(i, 'msg %s' % i) self.assertRaisesLdbError(i, 'a message', f, 'la la', la='la') def f2(*args, **kwargs): raise ldb.LdbError(i + 1, 'msg %s' % i) def f3(*args, **kwargs): pass for f in (f2, f3): try: self.assertRaisesLdbError(i, 'a message', f, 'la la', la='la') except AssertionError as e: print i, e, f pass else: print i, f self.fail('assertRaisesLdbError() failed to fail!') ..but a self-testing test-tester is getting a too meta to run in every autobuild. Signed-off-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/source4/dsdb/tests/python/linked_attributes.py b/source4/dsdb/tests/python/linked_attributes.py index 1923f687749..d18a667c4fe 100644 --- a/source4/dsdb/tests/python/linked_attributes.py +++ b/source4/dsdb/tests/python/linked_attributes.py @@ -165,6 +165,26 @@ 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 (num, msg): + if num != errcode: + lut = {v: k for k, v in vars(ldb).iteritems() + 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).iteritems() + 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 = {} @@ -393,16 +413,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)) - else: - self.fail("adding duplicate values succeed when it shouldn't") + 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]) @@ -471,16 +485,11 @@ class LATests(samba.tests.TestCase): self.assert_back_links(u3, [g1]) self.assert_back_links(u4, []) - try: - # adding u2 twice should be an error - self.replace_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)) - else: - self.fail("replacing duplicate values succeeded when it shouldn't") + 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')