From 9ecf4b7aac0adbe23e166a42ac8ce0f24f4a13f6 Mon Sep 17 00:00:00 2001 From: Jan Cholasta Date: Wed, 27 Feb 2013 09:16:49 +0100 Subject: Decode and encode attribute values in LDAPEntry on demand. This is achieved by storing both decoded and encoded attribute values in LDAPEntry and synchronizing changes between them whenever an attribute is accessed. Added a new property "raw" to LDAPEntry. It provides a dictionary-like object which can be used to directly access encoded attribute values. https://fedorahosted.org/freeipa/ticket/3521 --- ipatests/test_ipaserver/test_ldap.py | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'ipatests/test_ipaserver') diff --git a/ipatests/test_ipaserver/test_ldap.py b/ipatests/test_ipaserver/test_ldap.py index 21363f2ef..9cd7f90db 100644 --- a/ipatests/test_ipaserver/test_ldap.py +++ b/ipatests/test_ipaserver/test_ldap.py @@ -257,3 +257,51 @@ class test_LDAPEntry(object): assert e.single_value('commonname') == self.cn1[0] assert e.single_value('COMMONNAME', 'default') == self.cn1[0] assert e.single_value('bad key', 'default') == 'default' + + def test_sync(self): + e = self.entry + + nice = e['test'] = [1, 2, 3] + assert e['test'] is nice + + raw = e.raw['test'] + assert raw == ['1', '2', '3'] + + nice.remove(1) + assert e.raw['test'] is raw + assert raw == ['2', '3'] + + raw.append('4') + assert e['test'] is nice + assert nice == [2, 3, u'4'] + + nice.remove(2) + raw.append('5') + assert nice == [3, u'4'] + assert raw == ['2', '3', '4', '5'] + assert e['test'] is nice + assert e.raw['test'] is raw + assert nice == [3, u'4', u'5'] + assert raw == ['3', '4', '5'] + + nice.insert(0, 2) + raw.remove('4') + assert nice == [2, 3, u'4', u'5'] + assert raw == ['3', '5'] + assert e.raw['test'] is raw + assert e['test'] is nice + assert nice == [2, 3, u'5'] + assert raw == ['3', '5', '2'] + + raw = ['a', 'b'] + e.raw['test'] = raw + assert e['test'] is not nice + assert e['test'] == [u'a', u'b'] + + nice = 'not list' + e['test'] = nice + assert e['test'] is nice + assert e.raw['test'] == ['not list'] + + e.raw['test'].append('second') + assert e['test'] == ['not list', u'second'] -- cgit