b060d0ccba
* Initial commit for integration of HPE OneView resources with Ansible Core. Adding FC Network and FC Network Fact modules and unit tests, and OneView base class for all OV resources.
137 lines
5.1 KiB
Python
137 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (2016-2017) Hewlett Packard Enterprise Development LP
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import yaml
|
|
from mock import Mock, patch
|
|
from oneview_module_loader import ONEVIEW_MODULE_UTILS_PATH
|
|
from hpOneView.oneview_client import OneViewClient
|
|
|
|
|
|
class OneViewBaseTestCase(object):
|
|
mock_ov_client_from_json_file = None
|
|
testing_class = None
|
|
mock_ansible_module = None
|
|
mock_ov_client = None
|
|
testing_module = None
|
|
EXAMPLES = None
|
|
|
|
def configure_mocks(self, test_case, testing_class):
|
|
"""
|
|
Preload mocked OneViewClient instance and AnsibleModule
|
|
Args:
|
|
test_case (object): class instance (self) that are inheriting from OneViewBaseTestCase
|
|
testing_class (object): class being tested
|
|
"""
|
|
self.testing_class = testing_class
|
|
|
|
# Define OneView Client Mock (FILE)
|
|
patcher_json_file = patch.object(OneViewClient, 'from_json_file')
|
|
test_case.addCleanup(patcher_json_file.stop)
|
|
self.mock_ov_client_from_json_file = patcher_json_file.start()
|
|
|
|
# Define OneView Client Mock
|
|
self.mock_ov_client = self.mock_ov_client_from_json_file.return_value
|
|
|
|
# Define Ansible Module Mock
|
|
patcher_ansible = patch(ONEVIEW_MODULE_UTILS_PATH + '.AnsibleModule')
|
|
test_case.addCleanup(patcher_ansible.stop)
|
|
mock_ansible_module = patcher_ansible.start()
|
|
self.mock_ansible_module = Mock()
|
|
mock_ansible_module.return_value = self.mock_ansible_module
|
|
|
|
self.__set_module_examples()
|
|
|
|
def test_main_function_should_call_run_method(self):
|
|
self.mock_ansible_module.params = {'config': 'config.json'}
|
|
|
|
main_func = getattr(self.testing_module, 'main')
|
|
|
|
with patch.object(self.testing_class, "run") as mock_run:
|
|
main_func()
|
|
mock_run.assert_called_once()
|
|
|
|
def __set_module_examples(self):
|
|
# Load scenarios from module examples (Also checks if it is a valid yaml)
|
|
ansible = __import__('ansible')
|
|
testing_module = self.testing_class.__module__.split('.')[-1]
|
|
self.testing_module = getattr(ansible.modules.remote_management.hpe, testing_module)
|
|
|
|
try:
|
|
# Load scenarios from module examples (Also checks if it is a valid yaml)
|
|
self.EXAMPLES = yaml.load(self.testing_module.EXAMPLES, yaml.SafeLoader)
|
|
|
|
except yaml.scanner.ScannerError:
|
|
message = "Something went wrong while parsing yaml from {}.EXAMPLES".format(self.testing_class.__module__)
|
|
raise Exception(message)
|
|
|
|
|
|
class FactsParamsTestCase(OneViewBaseTestCase):
|
|
"""
|
|
FactsParamsTestCase has common test for classes that support pass additional
|
|
parameters when retrieving all resources.
|
|
"""
|
|
|
|
def configure_client_mock(self, resorce_client):
|
|
"""
|
|
Args:
|
|
resorce_client: Resource client that is being called
|
|
"""
|
|
self.resource_client = resorce_client
|
|
|
|
def __validations(self):
|
|
if not self.testing_class:
|
|
raise Exception("Mocks are not configured, you must call 'configure_mocks' before running this test.")
|
|
|
|
if not self.resource_client:
|
|
raise Exception(
|
|
"Mock for the client not configured, you must call 'configure_client_mock' before running this test.")
|
|
|
|
def test_should_get_all_using_filters(self):
|
|
self.__validations()
|
|
self.resource_client.get_all.return_value = []
|
|
|
|
params_get_all_with_filters = dict(
|
|
config='config.json',
|
|
name=None,
|
|
params={
|
|
'start': 1,
|
|
'count': 3,
|
|
'sort': 'name:descending',
|
|
'filter': 'purpose=General',
|
|
'query': 'imported eq true'
|
|
})
|
|
self.mock_ansible_module.params = params_get_all_with_filters
|
|
|
|
self.testing_class().run()
|
|
|
|
self.resource_client.get_all.assert_called_once_with(start=1, count=3, sort='name:descending',
|
|
filter='purpose=General',
|
|
query='imported eq true')
|
|
|
|
def test_should_get_all_without_params(self):
|
|
self.__validations()
|
|
self.resource_client.get_all.return_value = []
|
|
|
|
params_get_all_with_filters = dict(
|
|
config='config.json',
|
|
name=None
|
|
)
|
|
self.mock_ansible_module.params = params_get_all_with_filters
|
|
|
|
self.testing_class().run()
|
|
|
|
self.resource_client.get_all.assert_called_once_with()
|