class EmptyAttributeRecordTestCase(TestCase): def setUp(self): self.record = UserRecord(dn='test', attrs={'mail': None}) def test_attribute_is_empty_list(self): self.assertEqual(self.record.attrs['mail'], []) def test_empty_attribute_removed(self): self.record.remove_empty_attributes() self.assertNotIn('mail', self.record.attrs)
def test_user_attributes_synced_correctly(self): records = {} for result in self.users_to_sync: record = UserRecord.from_db_user( result.User, self.user_base_dn, should_be_blocked=result.should_be_blocked) records[record.dn] = record for ldap_user in self.new_ldap_users: ldap_record = UserRecord.from_ldap_record(ldap_user) self.assert_attributes_equal(records[ldap_record.dn], ldap_record)
def test_record_from_ldap_record(self): ldapsearch_record = { 'dn': 'somedn', 'attributes': { 'mail': 'mail', 'gecos': 'baz' }, 'raw_attributes': { 'mail': b'mail' } } record = UserRecord.from_ldap_record(ldapsearch_record) assertSubDict({'mail': ['mail'], 'gecos': ['baz']}, record.attrs) for key in UserRecord.get_synced_attributes(): assert key in record.attrs
def setUp(self): super(DeleteActionTestCase, self).setUp() self.uid = 'shizzle' self.dn = dn_from_username(self.uid, base=self.base) self.connection.add(self.dn, UserRecord.LDAP_OBJECTCLASSES) record = UserRecord(dn=self.dn, attrs={}) DeleteAction(record=record).execute(self.connection)
def test_mail_creation(self): users_without_mail = [ u for u in self.users_to_sync if u.User.email is None ] if not users_without_mail: raise RuntimeError( "Fixtures do not provide a syncable user without a mail address" ) mod_user = users_without_mail[0].User mod_dn = UserRecord.from_db_user(mod_user, self.user_base_dn).dn mod_user.email = '*****@*****.**' session.add(mod_user) session.commit() users_to_sync = fetch_users_to_sync(session, self.config.required_property) exporter = self.build_user_exporter(current_users=self.new_ldap_users, desired_users=users_to_sync) exporter.compile_actions() relevant_actions = [ a for a in exporter.actions if not isinstance(a, IdleAction) ] print(relevant_actions) self.assertEqual(len(relevant_actions), 1) self.assertEqual(type(relevant_actions[0]), ModifyAction) exporter.execute_all(self.conn) newest_users = fetch_current_ldap_users(self.conn, base_dn=self.user_base_dn) modified_ldap_record = self.get_by_dn(newest_users, mod_dn) self.assertIn('mail', modified_ldap_record['attributes']) self.assertEqual(modified_ldap_record['attributes']['mail'], [mod_user.email])
def objects(self, dn, connection, base): connection.add(dn, UserRecord.LDAP_OBJECTCLASSES) record = UserRecord(dn=dn, attrs={}) action = ModifyAction(record=record, modifications={'mail': '*****@*****.**'}) action.execute(connection) return get_all_objects(connection, base)
def record(self): return UserRecord(dn='test', attrs={ 'userPassword': "******", 'mail': None, 'cn': "User", 'uid': 50 })
def setUp(self): self.record = UserRecord(dn='test', attrs={ 'userPassword': "******", 'mail': None, 'cn': "User", 'uid': 50 })
def setUp(self): super(ModifyActionTestCase, self).setUp() self.uid = 'shizzle' self.dn = dn_from_username(self.uid, base=self.base) self.connection.add(self.dn, UserRecord.LDAP_OBJECTCLASSES) record = UserRecord(dn=self.dn, attrs={}) action = ModifyAction(record=record, modifications={'mail': '*****@*****.**'}) action.execute(self.connection)
def setUp(self): super(AddActionTestCase, self).setUp() self.attributes = { 'objectClass': UserRecord.LDAP_OBJECTCLASSES, 'mail': ['bas'], 'userPassword': ['$1$dtruiandetnuhgaldrensutrhawtruhs'] } self.uid = 'shizzle' self.dn = dn_from_username(self.uid, base=self.base) record = UserRecord(dn=self.dn, attrs=self.attributes) action = AddAction(record=record) action.execute(self.connection) self.objects = self.get_all_objects()
def attrs(self): class complete_user: name = 'foo bar shizzle' login = '******' email = '*****@*****.**' email_forwarded = True class unix_account: uid = 10006 gid = 100 home_directory = '/home/test' login_shell = '/bin/bash' passwd_hash = 'somehash' return UserRecord.from_db_user(complete_user, base_dn='o=test').attrs
def test_mail_deletion(self): users_with_mail = [ u for u in self.users_to_sync if u.User.email is not None ] if not users_with_mail: raise RuntimeError( "Fixtures do not provide a syncable user with a mail address") modified_user = users_with_mail[0].User mod_dn = UserRecord.from_db_user(modified_user, self.user_base_dn).dn modified_user.email = '*****@*****.**' session.add(modified_user) session.commit() self.users_to_sync = fetch_users_to_sync(session, self.config.required_property) self.sync_all() newest_users = fetch_current_ldap_users(self.conn, base_dn=self.user_base_dn) modified_record = self.get_by_dn(newest_users, mod_dn) self.assertNotIn('mail', modified_record)
def setUp(self): self.record = UserRecord(dn='test', attrs={'mail': 'shizzle'})
def objects(self, dn, connection, base): connection.add(dn, UserRecord.LDAP_OBJECTCLASSES) record = UserRecord(dn=dn, attrs={}) DeleteAction(record=record).execute(connection) return get_all_objects(connection, base)
def test_record_equality(self, record): assert record == UserRecord(dn='test', attrs={'mail': 'shizzle'})
def setUp(self): self.record = UserRecord(dn='test', attrs={'mail': None})
def setUp(self): self.desired_user = UserRecord(dn='user', attrs={}) self.exporter = LdapExporter(desired=[self.desired_user], current=[]) self.exporter.compile_actions()
def test_correctly_different_record_modifies(self): difference = self.record - UserRecord(dn='test', attrs={'mail': ''}) self.assertIsInstance(difference, ModifyAction)
def test_record_noncanonical_equality(self, record): assert record == UserRecord(dn='test', attrs={'mail': ['shizzle']})
def test_correctly_different_record_modifies(self, record): difference = record - UserRecord(dn='test', attrs={'mail': ''}) assert isinstance(difference, ModifyAction)
def test_different_dn_raises_typeerror(self): with self.assertRaises(TypeError): # pylint: disable=expression-not-assigned self.record - UserRecord(dn='notatest', attrs={})
def test_modify_action(self, attrs_current, attrs_desired, modifications): action = ModifyAction.from_two_records( desired_record=UserRecord(dn=None, attrs=attrs_desired), current_record=UserRecord(dn=None, attrs=attrs_current)) assert action.modifications == modifications
def test_execute_does_nothing(): IdleAction(record=(UserRecord(dn='test', attrs={}))).execute()
def setUp(self): self.record = UserRecord(dn='test', attrs={})
def record(self): return UserRecord(dn='test', attrs={'mail': None})
def setUp(self): self.attrs = UserRecord.from_db_user(self.complete_user, base_dn='o=test').attrs
def test_desired_record_passed(self): desired = UserRecord(dn=None, attrs={'gecos': 'test'}) current = UserRecord(dn=None, attrs={}) action = ModifyAction.from_two_records(desired_record=desired, current_record=current) assert action.record == desired
def test_record_equality(self): self.assertEqual(self.record, UserRecord(dn='test', attrs={'mail': 'shizzle'}))
def objects(self, connection, attributes, uid, dn, base): """Objects after executing an AddAction""" action = AddAction(record=UserRecord(dn=dn, attrs=attributes)) action.execute(connection) return get_all_objects(connection, base)
def test_record_noncanonical_equality(self): self.assertEqual(self.record, UserRecord(dn='test', attrs={'mail': ['shizzle']}))