Merge "Verify common server in Generic driver on startup"

This commit is contained in:
Jenkins 2015-10-08 16:41:33 +00:00 committed by Gerrit Code Review
commit 06dc65b81b
2 changed files with 51 additions and 2 deletions

View File

@ -169,7 +169,6 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
def check_for_setup_error(self):
"""Returns an error if prerequisites aren't met."""
pass
def do_setup(self, context):
"""Any initialization the generic driver does while starting."""
@ -177,6 +176,12 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
self.compute_api = compute.API()
self.volume_api = volume.API()
self._setup_helpers()
if not self.driver_handles_share_servers:
# Verify availability of common server
share_server = self.service_instance_manager.get_common_server()
if not self._is_share_server_active(context, share_server):
raise exception.ManilaException(
_("Service VM is not available. %s") % share_server)
def _setup_helpers(self):
"""Initializes protocol-specific NAS drivers."""

View File

@ -224,14 +224,58 @@ class GenericShareDriverTestCase(test.TestCase):
self.mock_error_log = self.mock_object(generic.LOG, 'error')
self.mock_exception_log = self.mock_object(generic.LOG, 'exception')
def test_do_setup(self):
@ddt.data(True, False)
def test_do_setup_with_dhss(self, dhss):
CONF.set_default('driver_handles_share_servers', dhss)
fake_server = {'id': 'fake_server_id'}
self.mock_object(volume, 'API')
self.mock_object(compute, 'API')
self.mock_object(self._driver, '_setup_helpers')
self.mock_object(
self._driver,
'_is_share_server_active', mock.Mock(return_value=True))
self.mock_object(
self._driver.service_instance_manager,
'get_common_server', mock.Mock(return_value=fake_server))
self._driver.do_setup(self._context)
volume.API.assert_called_once_with()
compute.API.assert_called_once_with()
self._driver._setup_helpers.assert_called_once_with()
if not dhss:
self._driver.service_instance_manager.get_common_server.\
assert_called_once_with()
self._driver._is_share_server_active.assert_called_once_with(
self._context, fake_server)
else:
self.assertFalse(
self._driver.service_instance_manager.get_common_server.called)
self.assertFalse(self._driver._is_share_server_active.called)
def test_do_setup_dhss_false_server_not_active(self):
CONF.set_default('driver_handles_share_servers', False)
fake_server = {'id': 'fake_server_id'}
self.mock_object(volume, 'API')
self.mock_object(compute, 'API')
self.mock_object(self._driver, '_setup_helpers')
self.mock_object(
self._driver,
'_is_share_server_active', mock.Mock(return_value=False))
self.mock_object(
self._driver.service_instance_manager,
'get_common_server', mock.Mock(return_value=fake_server))
self.assertRaises(
exception.ManilaException, self._driver.do_setup, self._context)
volume.API.assert_called_once_with()
compute.API.assert_called_once_with()
self._driver._setup_helpers.assert_called_once_with()
self._driver.service_instance_manager.get_common_server.\
assert_called_once_with()
self._driver._is_share_server_active.assert_called_once_with(
self._context, fake_server)
def test_setup_helpers(self):
self._driver._helpers = {}