diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-03-17 12:06:33 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-03-17 12:06:33 +0000 |
commit | 6cc755d2647c5530014c6941786b1bd54490e222 (patch) | |
tree | 4867df06fe2ad10586f3b83096aaaada4a945a20 | |
parent | 9bbd868d83abb32f2e56f6f26d367d80969767f7 (diff) | |
parent | d50fad849975c7fb2f8ea6395df455759f55949f (diff) | |
download | nova-6cc755d2647c5530014c6941786b1bd54490e222.tar.gz |
Merge "VMWare: bug fix for Vim exception handling" into stable/havana
-rwxr-xr-x | nova/tests/virt/vmwareapi/test_vmwareapi.py | 43 | ||||
-rw-r--r-- | nova/tests/virt/vmwareapi/test_vmwareapi_volumeops.py | 8 | ||||
-rw-r--r-- | nova/virt/vmwareapi/driver.py | 12 | ||||
-rw-r--r-- | nova/virt/vmwareapi/vim.py | 10 |
4 files changed, 59 insertions, 14 deletions
diff --git a/nova/tests/virt/vmwareapi/test_vmwareapi.py b/nova/tests/virt/vmwareapi/test_vmwareapi.py index 746a851c66..f01439f45c 100755 --- a/nova/tests/virt/vmwareapi/test_vmwareapi.py +++ b/nova/tests/virt/vmwareapi/test_vmwareapi.py @@ -22,9 +22,12 @@ Test suite for VMwareAPI. """ import contextlib +import copy + import mock import mox from oslo.config import cfg +import suds from nova import block_device from nova.compute import api as compute_api @@ -138,6 +141,46 @@ class VMwareSessionTestCase(test.NoDBTestCase): *args, **kwargs) +class fake_vm_ref(object): + def __init__(self): + self.value = 4 + self._type = 'VirtualMachine' + + +class fake_service_content(object): + def __init__(self): + self.ServiceContent = vmwareapi_fake.DataObject() + self.ServiceContent.fake = 'fake' + + +class VMwareSudsTest(test.NoDBTestCase): + + def setUp(self): + super(VMwareSudsTest, self).setUp() + + def new_client_init(self, url, **kwargs): + return + + mock.patch.object(suds.client.Client, + '__init__', new=new_client_init).start() + self.vim = self._vim_create() + self.addCleanup(mock.patch.stopall) + + def _vim_create(self): + + def fake_retrieve_service_content(fake): + return fake_service_content() + + self.stubs.Set(vim.Vim, 'retrieve_service_content', + fake_retrieve_service_content) + return vim.Vim() + + def test_exception_with_deepcopy(self): + self.assertIsNotNone(self.vim) + self.assertRaises(error_util.VimException, + copy.deepcopy, self.vim) + + class VMwareAPIConfTestCase(test.NoDBTestCase): """Unit tests for VMWare API configurations.""" def setUp(self): diff --git a/nova/tests/virt/vmwareapi/test_vmwareapi_volumeops.py b/nova/tests/virt/vmwareapi/test_vmwareapi_volumeops.py index a4eefd11c8..3d5d831380 100644 --- a/nova/tests/virt/vmwareapi/test_vmwareapi_volumeops.py +++ b/nova/tests/virt/vmwareapi/test_vmwareapi_volumeops.py @@ -27,11 +27,17 @@ from nova.virt.vmwareapi import volumeops class VMwareVolumeOpsTestCase(test.NoDBTestCase): def setUp(self): + + def fake_del(): + return + super(VMwareVolumeOpsTestCase, self).setUp() vmwareapi_fake.reset() stubs.set_stubs(self.stubs) - self._session = driver.VMwareAPISession() + self.stubs.Set(self._session, '__del__', + fake_del) + self._volumeops = volumeops.VMwareVolumeOps(self._session) self.instance = {'name': 'fake_name', 'uuid': 'fake_uuid'} diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py index c61ab63f35..21d5860c57 100644 --- a/nova/virt/vmwareapi/driver.py +++ b/nova/virt/vmwareapi/driver.py @@ -808,16 +808,8 @@ class VMwareAPISession(object): def __del__(self): """Logs-out the session.""" - # Logout to avoid un-necessary increase in session count at the - # ESX host - try: - # May not have been able to connect to VC, so vim is still None - if self.vim: - self.vim.Logout(self.vim.get_service_content().sessionManager) - except Exception as excep: - # It is just cautionary on our part to do a logout in del just - # to ensure that the session is not left active. - LOG.debug(excep) + if hasattr(self, 'vim') and self.vim: + self.vim.Logout(self.vim.get_service_content().sessionManager) def _is_vim_object(self, module): """Check if the module is a VIM Object instance.""" diff --git a/nova/virt/vmwareapi/vim.py b/nova/virt/vmwareapi/vim.py index 5928eb45f9..4b64e66f21 100644 --- a/nova/virt/vmwareapi/vim.py +++ b/nova/virt/vmwareapi/vim.py @@ -93,8 +93,10 @@ class Vim: self.url = Vim.get_soap_url(protocol, host) self.client = suds.client.Client(self.wsdl_url, location=self.url, plugins=[VIMMessagePlugin()]) - self._service_content = self.RetrieveServiceContent( - "ServiceInstance") + self._service_content = self.retrieve_service_content() + + def retrieve_service_content(self): + return self.RetrieveServiceContent("ServiceInstance") @staticmethod def get_wsdl_url(protocol, host_name): @@ -162,7 +164,9 @@ class Vim: return response # Catch the VimFaultException that is raised by the fault # check of the SOAP response - except error_util.VimFaultException as excep: + except error_util.VimFaultException: + raise + except suds.MethodNotFound: raise except suds.WebFault as excep: doc = excep.document |