summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-02-17 13:09:02 +0000
committerGerrit Code Review <review@openstack.org>2015-02-17 13:09:02 +0000
commit23ac5ff67d7097185fddacbc5ded1d6f5ab352a5 (patch)
treef1e61abf69544f90c04b041ec1cefa3bc456475c
parent2950541b3b95fc5af410f5857efb010590f52cd3 (diff)
parentb5732b2e35992a890f5447cb67da91f53a7a2dee (diff)
downloadoslo-vmware-23ac5ff67d7097185fddacbc5ded1d6f5ab352a5.tar.gz
Merge "Handle SPBM SecurityError"
-rw-r--r--oslo_vmware/exceptions.py1
-rw-r--r--oslo_vmware/service.py5
-rw-r--r--oslo_vmware/tests/test_service.py32
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()