summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2012-07-04 08:39:21 -0400
committerMartin Kosek <mkosek@redhat.com>2012-07-11 10:49:02 +0200
commit5f69a06d1a78242a65164a94d752380613e73e44 (patch)
treed80039d6dad813ac932cf20343a11298ade9208e
parente494650b2cdb6ac7e1eda3da7cf03d4c36f2739a (diff)
downloadfreeipa.git-5f69a06d1a78242a65164a94d752380613e73e44.tar.gz
freeipa.git-5f69a06d1a78242a65164a94d752380613e73e44.tar.xz
freeipa.git-5f69a06d1a78242a65164a94d752380613e73e44.zip
Fix batch command error reporting
The Batch command did not report errors correctly: it reported the text of *all* errors, not just PublicError, used unicode(e) instead of e.strerror (which results in incorrect i18n), and only reported the text of error messages, not their type and code. Fix these problems. Update tests. https://fedorahosted.org/freeipa/ticket/2874 https://fedorahosted.org/freeipa/ticket/2901
-rw-r--r--ipalib/plugins/batch.py11
-rw-r--r--tests/test_xmlrpc/test_batch_plugin.py60
2 files changed, 59 insertions, 12 deletions
diff --git a/ipalib/plugins/batch.py b/ipalib/plugins/batch.py
index 8abad5e1..db9c08f1 100644
--- a/ipalib/plugins/batch.py
+++ b/ipalib/plugins/batch.py
@@ -102,8 +102,6 @@ class batch(Command):
)
result['error']=None
except Exception, e:
- result = dict()
- result['error'] = unicode(e)
if isinstance(e, errors.RequirementError) or \
isinstance(e, errors.CommandError):
self.info(
@@ -113,6 +111,15 @@ class batch(Command):
self.info(
'%s: batch: %s(%s): %s', context.principal, name, ', '.join(api.Command[name]._repr_iter(**params)), e.__class__.__name__
)
+ if isinstance(e, errors.PublicError):
+ reported_error = e
+ else:
+ reported_error = errors.InternalError()
+ result = dict(
+ error=reported_error.strerror,
+ error_code=reported_error.errno,
+ error_name=unicode(type(reported_error).__name__),
+ )
results.append(result)
return dict(count=len(results) , results=results)
diff --git a/tests/test_xmlrpc/test_batch_plugin.py b/tests/test_xmlrpc/test_batch_plugin.py
index d69bfd9c..19728add 100644
--- a/tests/test_xmlrpc/test_batch_plugin.py
+++ b/tests/test_xmlrpc/test_batch_plugin.py
@@ -121,8 +121,16 @@ class test_batch(Declarative):
expected=dict(
count=2,
results=[
- dict(error=u'%s: group not found' % group1),
- dict(error=u'%s: group not found' % group1),
+ dict(
+ error=u'%s: group not found' % group1,
+ error_name=u'NotFound',
+ error_code=4001,
+ ),
+ dict(
+ error=u'%s: group not found' % group1,
+ error_name=u'NotFound',
+ error_code=4001,
+ ),
],
),
),
@@ -137,7 +145,11 @@ class test_batch(Declarative):
expected=dict(
count=2,
results=deepequal_list(
- dict(error=u'%s: group not found' % group1),
+ dict(
+ error=u'%s: group not found' % group1,
+ error_name=u'NotFound',
+ error_code=4001,
+ ),
dict(
value=group1,
summary=u'Added group "testgroup1"',
@@ -180,13 +192,41 @@ class test_batch(Declarative):
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'.*")),
+ dict(
+ error=u"unknown command 'nonexistent_ipa_command'",
+ error_name=u'CommandError',
+ error_code=905,
+ ),
+ dict(
+ error=u"unknown command 'user-del'",
+ error_name=u'CommandError',
+ error_code=905,
+ ),
+ dict(
+ error=u"'method' is required",
+ error_name=u'RequirementError',
+ error_code=3007,
+ ),
+ dict(
+ error=u"'params' is required",
+ error_name=u'RequirementError',
+ error_code=3007,
+ ),
+ dict(
+ error=u"'givenname' is required",
+ error_name=u'RequirementError',
+ error_code=3007,
+ ),
+ dict(
+ error=u"'description' is required",
+ error_name=u'RequirementError',
+ error_code=3007,
+ ),
+ dict(
+ error=Fuzzy(u"invalid 'gid'.*"),
+ error_name=u'ConversionError',
+ error_code=3008,
+ ),
),
),
),