#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Originally based on ./sam.py
+from __future__ import print_function
import optparse
import sys
import os
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})
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)
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 = {}
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)
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)
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')
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()
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])
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')
(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])