diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-02-17 13:09:02 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-02-17 13:09:02 +0000 |
commit | 23ac5ff67d7097185fddacbc5ded1d6f5ab352a5 (patch) | |
tree | f1e61abf69544f90c04b041ec1cefa3bc456475c | |
parent | 2950541b3b95fc5af410f5857efb010590f52cd3 (diff) | |
parent | b5732b2e35992a890f5447cb67da91f53a7a2dee (diff) | |
download | oslo-vmware-23ac5ff67d7097185fddacbc5ded1d6f5ab352a5.tar.gz |
Merge "Handle SPBM SecurityError"
-rw-r--r-- | oslo_vmware/exceptions.py | 1 | ||||
-rw-r--r-- | oslo_vmware/service.py | 5 | ||||
-rw-r--r-- | oslo_vmware/tests/test_service.py | 32 |
3 files changed, 37 insertions, 1 deletions
diff --git a/oslo_vmware/exceptions.py b/oslo_vmware/exceptions.py index 32c04e4..e963df2 100644 --- a/oslo_vmware/exceptions.py +++ b/oslo_vmware/exceptions.py @@ -37,6 +37,7 @@ NO_PERMISSION = 'NoPermission' NOT_AUTHENTICATED = 'NotAuthenticated' TASK_IN_PROGRESS = 'TaskInProgress' DUPLICATE_NAME = 'DuplicateName' +SECURITY_ERROR = "SecurityError" class VimException(Exception): diff --git a/oslo_vmware/service.py b/oslo_vmware/service.py index 5e45f7a..e0cc414 100644 --- a/oslo_vmware/service.py +++ b/oslo_vmware/service.py @@ -310,7 +310,10 @@ class Service(object): details = {} if detail: for fault in detail.getChildren(): - fault_list.append(fault.get("type")) + fault_type = fault.get('type') + if fault_type.endswith(exceptions.SECURITY_ERROR): + fault_type = exceptions.NOT_AUTHENTICATED + fault_list.append(fault_type) for child in fault.getChildren(): details[child.name] = child.getText() raise exceptions.VimFaultException(fault_list, fault_string, diff --git a/oslo_vmware/tests/test_service.py b/oslo_vmware/tests/test_service.py index 52aedc2..b2f78cf 100644 --- a/oslo_vmware/tests/test_service.py +++ b/oslo_vmware/tests/test_service.py @@ -197,6 +197,38 @@ class ServiceTest(base.TestCase): mock.call('/Envelope/Body/Fault/detail')] self.assertEqual(exp_calls, doc.childAtPath.call_args_list) + def test_request_handler_with_security_error(self): + managed_object = 'VirtualMachine' + doc = mock.Mock() + + def side_effect(mo, **kwargs): + self.assertEqual(managed_object, mo._type) + self.assertEqual(managed_object, mo.value) + fault = mock.Mock(faultstring="MyFault") + + fault_children = mock.Mock() + fault_children.name = "name" + fault_children.getText.return_value = "value" + child = mock.Mock() + child.get.return_value = 'vim25:SecurityError' + child.getChildren.return_value = [fault_children] + detail = mock.Mock() + detail.getChildren.return_value = [child] + doc.childAtPath.return_value = detail + raise suds.WebFault(fault, doc) + + svc_obj = service.Service() + service_mock = svc_obj.client.service + setattr(service_mock, 'powerOn', side_effect) + + ex = self.assertRaises(exceptions.VimFaultException, svc_obj.powerOn, + managed_object) + + self.assertEqual([exceptions.NOT_AUTHENTICATED], ex.fault_list) + self.assertEqual({'name': 'value'}, ex.details) + self.assertEqual("MyFault", ex.msg) + doc.childAtPath.assertCalledOnceWith('/detail') + def test_request_handler_with_attribute_error(self): managed_object = 'VirtualMachine' svc_obj = service.Service() |