diff options
author | Rob Crittenden <rcritten@redhat.com> | 2010-12-08 13:26:27 -0500 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2010-12-10 13:42:47 -0500 |
commit | e8e274c9e0a9fb9d2ef775f99c763d97b23050b1 (patch) | |
tree | 74ce17aa1891f94c9d41d7c32e9bb70851964e74 /tests | |
parent | 1a20d754216bafb82aa40ea584c7de7c9a5b0b07 (diff) | |
download | freeipa-e8e274c9e0a9fb9d2ef775f99c763d97b23050b1.tar.gz freeipa-e8e274c9e0a9fb9d2ef775f99c763d97b23050b1.tar.xz freeipa-e8e274c9e0a9fb9d2ef775f99c763d97b23050b1.zip |
Properly handle multi-valued attributes when using setattr/addattr.
The problem was that the normalizer was returning each value as a tuple
which we were then appending to a list, so it looked like
[(u'value1',), (u'value2',),...]. If there was a single value we could
end up adding a tuple to a list which would fail. Additionally python-ldap
doesn't like lists of lists so it was failing later in the process as well.
I've added some simple tests for setattr and addattr.
ticket 565
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_xmlrpc/objectclasses.py | 1 | ||||
-rw-r--r-- | tests/test_xmlrpc/test_attr.py | 178 |
2 files changed, 178 insertions, 1 deletions
diff --git a/tests/test_xmlrpc/objectclasses.py b/tests/test_xmlrpc/objectclasses.py index 54c8c280..5f230b43 100644 --- a/tests/test_xmlrpc/objectclasses.py +++ b/tests/test_xmlrpc/objectclasses.py @@ -30,7 +30,6 @@ user = [ u'posixaccount', u'krbprincipalaux', u'krbticketpolicyaux', - u'radiusprofile', u'ipaobject', ] diff --git a/tests/test_xmlrpc/test_attr.py b/tests/test_xmlrpc/test_attr.py new file mode 100644 index 00000000..523065f4 --- /dev/null +++ b/tests/test_xmlrpc/test_attr.py @@ -0,0 +1,178 @@ +# Authors: +# Rob Crittenden <rcritten@redhat.com> +# +# Copyright (C) 2010 Red Hat +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; version 2 only +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" +Test --setattr and --addattr +""" + +from ipalib import api, errors +from tests.test_xmlrpc import objectclasses +from xmlrpc_test import Declarative, fuzzy_digits, fuzzy_uuid + + +user_memberof = (u'cn=ipausers,cn=groups,cn=accounts,%s' % api.env.basedn,) +user1=u'tuser1' + + +class test_attr(Declarative): + + cleanup_commands = [ + ('user_del', [user1], {}), + ] + + tests = [ + + dict( + desc='Create %r' % user1, + command=( + 'user_add', [user1], dict(givenname=u'Test', sn=u'User1') + ), + expected=dict( + value=user1, + summary=u'Added user "tuser1"', + result=dict( + gecos=[user1], + givenname=[u'Test'], + homedirectory=[u'/home/tuser1'], + krbprincipalname=[u'tuser1@' + api.env.realm], + loginshell=[u'/bin/sh'], + objectclass=objectclasses.user, + sn=[u'User1'], + uid=[user1], + uidnumber=[fuzzy_digits], + displayname=[u'Test User1'], + cn=[u'Test User1'], + initials=[u'TU'], + ipauniqueid=[fuzzy_uuid], + dn=u'uid=tuser1,cn=users,cn=accounts,' + api.env.basedn, + ), + ), + ), + + + dict( + desc='Change givenname, add mail %r' % user1, + command=( + 'user_mod', [user1], dict(setattr=(u'givenname=Finkle', u'mail=test@example.com')) + ), + expected=dict( + result=dict( + givenname=[u'Finkle'], + homedirectory=[u'/home/tuser1'], + loginshell=[u'/bin/sh'], + sn=[u'User1'], + uid=[user1], + mail=[u'test@example.com'], + memberof_group=[u'ipausers'], + nsaccountlock=[u'False'], + ), + summary=u'Modified user "tuser1"', + value=user1, + ), + ), + + + dict( + desc='Add another mail %r' % user1, + command=( + 'user_mod', [user1], dict(addattr=u'mail=test2@example.com') + ), + expected=dict( + result=dict( + givenname=[u'Finkle'], + homedirectory=[u'/home/tuser1'], + loginshell=[u'/bin/sh'], + sn=[u'User1'], + uid=[user1], + mail=[u'test@example.com', u'test2@example.com'], + memberof_group=[u'ipausers'], + nsaccountlock=[u'False'], + ), + summary=u'Modified user "tuser1"', + value=user1, + ), + ), + + + dict( + desc='Add two phone numbers at once %r' % user1, + command=( + 'user_mod', [user1], dict(setattr=u'telephoneNumber=410-555-1212', addattr=u'telephoneNumber=301-555-1212') + ), + expected=dict( + result=dict( + givenname=[u'Finkle'], + homedirectory=[u'/home/tuser1'], + loginshell=[u'/bin/sh'], + sn=[u'User1'], + uid=[user1], + memberof_group=[u'ipausers'], + telephonenumber=[u'410-555-1212', u'301-555-1212'], + nsaccountlock=[u'False'], + ), + summary=u'Modified user "tuser1"', + value=user1, + ), + ), + + + dict( + desc='Go from two phone numbers to one %r' % user1, + command=( + 'user_mod', [user1], dict(setattr=u'telephoneNumber=301-555-1212') + ), + expected=dict( + result=dict( + givenname=[u'Finkle'], + homedirectory=[u'/home/tuser1'], + loginshell=[u'/bin/sh'], + sn=[u'User1'], + uid=[user1], + memberof_group=[u'ipausers'], + telephonenumber=[u'301-555-1212'], + nsaccountlock=[u'False'], + ), + summary=u'Modified user "tuser1"', + value=user1, + ), + ), + + + dict( + desc='Add two more phone numbers %r' % user1, + command=( + 'user_mod', [user1], dict(addattr=(u'telephoneNumber=703-555-1212', u'telephoneNumber=202-888-9833')) + ), + expected=dict( + result=dict( + givenname=[u'Finkle'], + homedirectory=[u'/home/tuser1'], + loginshell=[u'/bin/sh'], + sn=[u'User1'], + uid=[user1], + memberof_group=[u'ipausers'], + telephonenumber=[u'301-555-1212', u'202-888-9833', u'703-555-1212'], + nsaccountlock=[u'False'], + ), + summary=u'Modified user "tuser1"', + value=user1, + ), + ), + + ] |