diff options
author | Petr Viktorin <pviktori@redhat.com> | 2012-03-12 05:58:44 -0400 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2012-04-03 16:19:59 -0400 |
commit | 2b077f7b0d68a758ae15a73eeef74591bac84360 (patch) | |
tree | 4d99ffc71065e7bc9a38bd6559f8185e1e936c81 /tests/test_xmlrpc | |
parent | b0a5524028cb692d83fafca88ed40794b5c1e86a (diff) | |
download | freeipa-2b077f7b0d68a758ae15a73eeef74591bac84360.tar.gz freeipa-2b077f7b0d68a758ae15a73eeef74591bac84360.tar.xz freeipa-2b077f7b0d68a758ae15a73eeef74591bac84360.zip |
Test the batch plugin
This adds tests for the batch plugin, and changes its output
declaration to allow results as tuples (this tripped validation).
The assert_deepequal function ignores the order of items in lists.
Document this in its docstring, and use a custom checker for the
batch plugin results.
Diffstat (limited to 'tests/test_xmlrpc')
-rw-r--r-- | tests/test_xmlrpc/test_batch_plugin.py | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/tests/test_xmlrpc/test_batch_plugin.py b/tests/test_xmlrpc/test_batch_plugin.py new file mode 100644 index 000000000..d69bfd9c4 --- /dev/null +++ b/tests/test_xmlrpc/test_batch_plugin.py @@ -0,0 +1,194 @@ +# Authors: +# Petr Viktorin <pviktori@redhat.com> +# +# Copyright (C) 2012 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, either version 3 of the License, or +# (at your option) any later version. +# +# 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, see <http://www.gnu.org/licenses/>. + +""" +Test the `ipalib/plugins/batch.py` module. +""" + +from ipalib import api, errors +from tests.test_xmlrpc import objectclasses +from tests.util import assert_equal, Fuzzy, assert_deepequal +from xmlrpc_test import Declarative, fuzzy_digits, fuzzy_uuid +from ipalib.dn import DN + +group1 = u'testgroup1' + + +def deepequal_list(*expected): + """Factory for a function that checks a list + + The created function asserts items of a list are "deepequal" to the given + argument. Unlike using assert_deepequal directly, the order matters. + """ + def checker(got): + if len(expected) != len(got): + raise AssertionError('Expected %s entries, got %s\n\n%s\n%s' % + (len(expected), len(got), expected, got)) + for e, g in zip(expected, got): + assert_deepequal(e, g) + return True + return checker + + +class test_batch(Declarative): + + cleanup_commands = [ + ('group_del', [group1], {}), + ] + + tests = [ + + dict( + desc='Batch ping', + command=('batch', [dict(method='ping', params=([], {}))], {}), + expected=dict( + count=1, + results=[ + dict(summary=Fuzzy('IPA server version .*'), error=None), + ] + ), + ), + + dict( + desc='Batch two pings', + command=('batch', [dict(method='ping', params=([], {}))] * 2, {}), + expected=dict( + count=2, + results=[ + dict(summary=Fuzzy('IPA server version .*'), error=None), + dict(summary=Fuzzy('IPA server version .*'), error=None), + ] + ), + ), + + dict( + desc='Create and deleting a group', + command=('batch', [ + dict(method='group_add', + params=([group1], dict(description=u'Test desc 1'))), + dict(method='group_del', params=([group1], dict())), + ], {}), + expected=dict( + count=2, + results=deepequal_list( + dict( + value=group1, + summary=u'Added group "testgroup1"', + result=dict( + cn=[group1], + description=[u'Test desc 1'], + objectclass=objectclasses.group + [u'posixgroup'], + ipauniqueid=[fuzzy_uuid], + gidnumber=[fuzzy_digits], + dn=lambda x: DN(x) == \ + DN(('cn', 'testgroup1'), + ('cn', 'groups'), + ('cn', 'accounts'), + api.env.basedn), + ), + error=None), + dict( + summary=u'Deleted group "%s"' % group1, + result=dict(failed=u''), + value=group1, + error=None), + ), + ), + ), + + dict( + desc='Try to delete nonexistent group twice', + command=('batch', [ + dict(method='group_del', params=([group1], dict())), + dict(method='group_del', params=([group1], dict())), + ], {}), + expected=dict( + count=2, + results=[ + dict(error=u'%s: group not found' % group1), + dict(error=u'%s: group not found' % group1), + ], + ), + ), + + dict( + desc='Try to delete non-existent group first, then create it', + command=('batch', [ + dict(method='group_del', params=([group1], dict())), + dict(method='group_add', + params=([group1], dict(description=u'Test desc 1'))), + ], {}), + expected=dict( + count=2, + results=deepequal_list( + dict(error=u'%s: group not found' % group1), + dict( + value=group1, + summary=u'Added group "testgroup1"', + result=dict( + cn=[group1], + description=[u'Test desc 1'], + objectclass=objectclasses.group + [u'posixgroup'], + ipauniqueid=[fuzzy_uuid], + gidnumber=[fuzzy_digits], + dn=lambda x: DN(x) == \ + DN(('cn', 'testgroup1'), + ('cn', 'groups'), + ('cn', 'accounts'), + api.env.basedn), + ), + error=None), + ), + ), + ), + + dict( + desc='Try bad command invocations', + command=('batch', [ + # bad command name + dict(method='nonexistent_ipa_command', params=([], dict())), + # dash, not underscore, in command name + dict(method='user-del', params=([], dict())), + # missing command name + dict(params=([group1], dict())), + # missing params + dict(method='user_del'), + # missing required argument + dict(method='user_add', params=([], dict())), + # missing required option + dict(method='group_add', params=([group1], dict())), + # bad type + dict(method='group_add', params=([group1], dict( + description=u't', gidnumber=u'bad'))), + ], {}), + expected=dict( + count=7, + results=deepequal_list( + dict(error=u"unknown command 'nonexistent_ipa_command'"), + dict(error=u"unknown command 'user-del'"), + dict(error=u"'method' is required"), + dict(error=u"'params' is required"), + dict(error=u"'givenname' is required"), + dict(error=u"'description' is required"), + dict(error=Fuzzy(u"invalid 'gid'.*")), + ), + ), + ), + + ] |