ironic/ironic/tests/unit/drivers/modules/ucs/test_helper.py
PollyZ 86666e7bc0 Improve tests for driver's parse_driver_info()
There are some unit tests for drivers that test internal.parse_driver_info
methods, but they only check if the information is returned using assertIsNotNone
instead of the actual value of the information.

Update those tests to check the expected value using assertEqual.

Closes-Bug #1594410

Change-Id: I67148d72e961d1b674de8dfe1b7a5078416a7a89
2016-06-27 16:15:05 -05:00

161 lines
7.1 KiB
Python

# Copyright 2015, Cisco Systems.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Test class for common methods used by UCS modules."""
import mock
from oslo_utils import importutils
from ironic.common import exception
from ironic.conductor import task_manager
from ironic.db import api as dbapi
from ironic.drivers.modules.ucs import helper as ucs_helper
from ironic.tests.unit.conductor import mgr_utils
from ironic.tests.unit.db import base as db_base
from ironic.tests.unit.db import utils as db_utils
from ironic.tests.unit.objects import utils as obj_utils
ucs_error = importutils.try_import('UcsSdk.utils.exception')
INFO_DICT = db_utils.get_test_ucs_info()
class UcsValidateParametersTestCase(db_base.DbTestCase):
def setUp(self):
super(UcsValidateParametersTestCase, self).setUp()
mgr_utils.mock_the_extension_manager(driver="fake_ucs")
self.node = obj_utils.create_test_node(self.context,
driver='fake_ucs',
driver_info=INFO_DICT)
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
self.helper = ucs_helper.CiscoUcsHelper(task)
def test_parse_driver_info(self):
info = ucs_helper.parse_driver_info(self.node)
self.assertEqual(INFO_DICT['ucs_address'], info['ucs_address'])
self.assertEqual(INFO_DICT['ucs_username'], info['ucs_username'])
self.assertEqual(INFO_DICT['ucs_password'], info['ucs_password'])
self.assertEqual(INFO_DICT['ucs_service_profile'],
info['ucs_service_profile'])
def test_parse_driver_info_missing_address(self):
del self.node.driver_info['ucs_address']
self.assertRaises(exception.MissingParameterValue,
ucs_helper.parse_driver_info, self.node)
def test_parse_driver_info_missing_username(self):
del self.node.driver_info['ucs_username']
self.assertRaises(exception.MissingParameterValue,
ucs_helper.parse_driver_info, self.node)
def test_parse_driver_info_missing_password(self):
del self.node.driver_info['ucs_password']
self.assertRaises(exception.MissingParameterValue,
ucs_helper.parse_driver_info, self.node)
def test_parse_driver_info_missing_service_profile(self):
del self.node.driver_info['ucs_service_profile']
self.assertRaises(exception.MissingParameterValue,
ucs_helper.parse_driver_info, self.node)
@mock.patch('ironic.drivers.modules.ucs.helper.ucs_helper',
spec_set=True, autospec=True)
def test_connect_ucsm(self, mock_helper):
mock_helper.generate_ucsm_handle.return_value = (True, mock.Mock())
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
self.helper.connect_ucsm()
mock_helper.generate_ucsm_handle.assert_called_once_with(
task.node.driver_info['ucs_address'],
task.node.driver_info['ucs_username'],
task.node.driver_info['ucs_password']
)
@mock.patch('ironic.drivers.modules.ucs.helper.ucs_helper',
spec_set=True, autospec=True)
def test_connect_ucsm_fail(self, mock_helper):
side_effect = ucs_error.UcsConnectionError(
message='connecting to ucsm',
error='failed')
mock_helper.generate_ucsm_handle.side_effect = side_effect
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
self.assertRaises(exception.UcsConnectionError,
self.helper.connect_ucsm
)
mock_helper.generate_ucsm_handle.assert_called_once_with(
task.node.driver_info['ucs_address'],
task.node.driver_info['ucs_username'],
task.node.driver_info['ucs_password']
)
@mock.patch('ironic.drivers.modules.ucs.helper',
autospec=True)
def test_logout(self, mock_helper):
self.helper.logout()
class UcsCommonMethodsTestcase(db_base.DbTestCase):
def setUp(self):
super(UcsCommonMethodsTestcase, self).setUp()
self.dbapi = dbapi.get_instance()
mgr_utils.mock_the_extension_manager(driver="fake_ucs")
self.node = obj_utils.create_test_node(self.context,
driver='fake_ucs',
driver_info=INFO_DICT.copy())
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
self.helper = ucs_helper.CiscoUcsHelper(task)
@mock.patch('ironic.drivers.modules.ucs.helper.ucs_helper', autospec=True)
@mock.patch('ironic.drivers.modules.ucs.helper.CiscoUcsHelper',
autospec=True)
def test_requires_ucs_client_ok_logout(self, mc_helper, mock_ucs_helper):
mock_helper = mc_helper.return_value
mock_helper.logout.return_value = None
mock_working_function = mock.Mock()
mock_working_function.__name__ = "Working"
mock_working_function.return_valure = "Success"
mock_ucs_helper.generate_ucsm_handle.return_value = (True, mock.Mock())
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
wont_error = ucs_helper.requires_ucs_client(
mock_working_function)
wont_error(wont_error, task)
mock_helper.logout.assert_called_once_with()
@mock.patch('ironic.drivers.modules.ucs.helper.ucs_helper', autospec=True)
@mock.patch('ironic.drivers.modules.ucs.helper.CiscoUcsHelper',
autospec=True)
def test_requires_ucs_client_fail_logout(self, mc_helper, mock_ucs_helper):
mock_helper = mc_helper.return_value
mock_helper.logout.return_value = None
mock_broken_function = mock.Mock()
mock_broken_function.__name__ = "Broken"
mock_broken_function.side_effect = exception.IronicException()
mock_ucs_helper.generate_ucsm_handle.return_value = (True, mock.Mock())
with task_manager.acquire(self.context, self.node.uuid,
shared=True) as task:
will_error = ucs_helper.requires_ucs_client(mock_broken_function)
self.assertRaises(exception.IronicException,
will_error, will_error, task)
mock_helper.logout.assert_called_once_with()