mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-04-18 01:41:35 +00:00
Initial commit
This commit is contained in:
commit
aebc1b03fd
4861 changed files with 812621 additions and 0 deletions
0
tests/unit/module_utils/net_tools/__init__.py
Normal file
0
tests/unit/module_utils/net_tools/__init__.py
Normal file
0
tests/unit/module_utils/net_tools/netbox/__init__.py
Normal file
0
tests/unit/module_utils/net_tools/netbox/__init__.py
Normal file
152
tests/unit/module_utils/net_tools/netbox/test_netbox_utils.py
Normal file
152
tests/unit/module_utils/net_tools/netbox/test_netbox_utils.py
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright: (c) 2019, Bruno Inec (@sweenu) <bruno@inec.fr>
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
import pytest
|
||||
|
||||
from ansible_collections.netbox.netbox.plugins.module_utils.net_tools.netbox.netbox_utils import (
|
||||
QUERY_TYPES,
|
||||
_build_diff,
|
||||
create_netbox_object,
|
||||
delete_netbox_object,
|
||||
update_netbox_object,
|
||||
normalize_data,
|
||||
)
|
||||
|
||||
|
||||
def test_normalize_data():
|
||||
assert "name" not in QUERY_TYPES
|
||||
assert QUERY_TYPES.get("rack") == "slug"
|
||||
assert QUERY_TYPES.get("primary_ip") != "slug"
|
||||
|
||||
raw_data = {
|
||||
"name": "Some name",
|
||||
"primary_ip": "10.3.72.74/31",
|
||||
"rack": "Some rack",
|
||||
}
|
||||
normalized_data = raw_data.copy()
|
||||
normalized_data["rack"] = "some-rack"
|
||||
|
||||
assert normalize_data(raw_data) == normalized_data
|
||||
|
||||
|
||||
def test_build_diff():
|
||||
before = "The state before"
|
||||
after = {"A": "more", "complicated": "state"}
|
||||
diff = _build_diff(before=before, after=after)
|
||||
assert diff == {"before": before, "after": after}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def nb_obj_mock(mocker):
|
||||
serialized_object = {"The serialized": "object"}
|
||||
nb_obj = mocker.Mock(name="nb_obj_mock")
|
||||
nb_obj.delete.return_value = True
|
||||
nb_obj.update.return_value = True
|
||||
nb_obj.update.side_effect = serialized_object.update
|
||||
nb_obj.serialize.return_value = serialized_object
|
||||
|
||||
return nb_obj
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def endpoint_mock(mocker, nb_obj_mock):
|
||||
endpoint = mocker.Mock(name="endpoint_mock")
|
||||
endpoint.create.return_value = nb_obj_mock
|
||||
|
||||
return endpoint
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def on_creation_diff():
|
||||
return _build_diff(before={"state": "absent"}, after={"state": "present"})
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def on_deletion_diff():
|
||||
return _build_diff(before={"state": "present"}, after={"state": "absent"})
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def data():
|
||||
return {"name": "Some Netbox object name"}
|
||||
|
||||
|
||||
def test_create_netbox_object(endpoint_mock, data, on_creation_diff):
|
||||
return_value = endpoint_mock.create().serialize()
|
||||
|
||||
serialized_obj, diff = create_netbox_object(
|
||||
endpoint_mock, data, check_mode=False
|
||||
)
|
||||
assert endpoint_mock.create.called_once_with(data)
|
||||
assert serialized_obj == return_value
|
||||
assert diff == on_creation_diff
|
||||
|
||||
|
||||
def test_create_netbox_object_in_check_mode(endpoint_mock, data, on_creation_diff):
|
||||
serialized_obj, diff = create_netbox_object(
|
||||
endpoint_mock, data, check_mode=True
|
||||
)
|
||||
assert endpoint_mock.create.not_called()
|
||||
assert serialized_obj == data
|
||||
assert diff == on_creation_diff
|
||||
|
||||
|
||||
def test_delete_netbox_object(nb_obj_mock, on_deletion_diff):
|
||||
serialized_obj, diff = delete_netbox_object(nb_obj_mock, check_mode=False)
|
||||
assert nb_obj_mock.delete.called_once()
|
||||
assert serialized_obj == nb_obj_mock.serialize()
|
||||
assert diff == on_deletion_diff
|
||||
|
||||
|
||||
def test_delete_netbox_object_in_check_mode(nb_obj_mock, on_deletion_diff):
|
||||
serialized_obj, diff = delete_netbox_object(nb_obj_mock, check_mode=True)
|
||||
assert nb_obj_mock.delete.not_called()
|
||||
assert serialized_obj == nb_obj_mock.serialize()
|
||||
assert diff == on_deletion_diff
|
||||
|
||||
|
||||
def test_update_netbox_object_no_changes(nb_obj_mock):
|
||||
unchanged_data = nb_obj_mock.serialize()
|
||||
serialized_obj, diff = update_netbox_object(nb_obj_mock, unchanged_data, check_mode=True)
|
||||
assert nb_obj_mock.update.not_called()
|
||||
assert serialized_obj == unchanged_data
|
||||
assert diff is None
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def changed_serialized_obj(nb_obj_mock):
|
||||
changed_serialized_obj = nb_obj_mock.serialize().copy()
|
||||
changed_serialized_obj[list(changed_serialized_obj.keys())[0]] += " (modified)"
|
||||
|
||||
return changed_serialized_obj
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def on_update_diff(nb_obj_mock, changed_serialized_obj):
|
||||
return _build_diff(before=nb_obj_mock.serialize().copy(), after=changed_serialized_obj)
|
||||
|
||||
|
||||
def test_update_netbox_object_with_changes(
|
||||
nb_obj_mock, changed_serialized_obj, on_update_diff
|
||||
):
|
||||
serialized_obj, diff = update_netbox_object(
|
||||
nb_obj_mock, changed_serialized_obj, check_mode=False
|
||||
)
|
||||
assert nb_obj_mock.update.called_once_with(changed_serialized_obj)
|
||||
assert serialized_obj == nb_obj_mock.serialize()
|
||||
assert diff == on_update_diff
|
||||
|
||||
|
||||
def test_update_netbox_object_with_changes_in_check_mode(
|
||||
nb_obj_mock, changed_serialized_obj, on_update_diff
|
||||
):
|
||||
updated_serialized_obj = nb_obj_mock.serialize().copy()
|
||||
updated_serialized_obj.update(changed_serialized_obj)
|
||||
|
||||
serialized_obj, diff = update_netbox_object(
|
||||
nb_obj_mock, changed_serialized_obj, check_mode=True
|
||||
)
|
||||
assert nb_obj_mock.update.not_called()
|
||||
|
||||
assert serialized_obj == updated_serialized_obj
|
||||
assert diff == on_update_diff
|
||||
0
tests/unit/module_utils/net_tools/nios/__init__.py
Normal file
0
tests/unit/module_utils/net_tools/nios/__init__.py
Normal file
251
tests/unit/module_utils/net_tools/nios/test_api.py
Normal file
251
tests/unit/module_utils/net_tools/nios/test_api.py
Normal file
|
|
@ -0,0 +1,251 @@
|
|||
# (c) 2018 Red Hat, Inc.
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
import copy
|
||||
|
||||
from ansible_collections.community.general.tests.unit.compat import unittest
|
||||
from ansible_collections.community.general.tests.unit.compat.mock import patch, MagicMock, Mock
|
||||
from ansible_collections.community.general.plugins.module_utils.net_tools.nios import api
|
||||
|
||||
|
||||
class TestNiosApi(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestNiosApi, self).setUp()
|
||||
|
||||
self.module = MagicMock(name='AnsibleModule')
|
||||
self.module.check_mode = False
|
||||
self.module.params = {'provider': None}
|
||||
|
||||
self.mock_connector = patch('ansible_collections.community.general.plugins.module_utils.net_tools.nios.api.get_connector')
|
||||
self.mock_connector.start()
|
||||
|
||||
def tearDown(self):
|
||||
super(TestNiosApi, self).tearDown()
|
||||
|
||||
self.mock_connector.stop()
|
||||
|
||||
def test_get_provider_spec(self):
|
||||
provider_options = ['host', 'username', 'password', 'validate_certs', 'silent_ssl_warnings',
|
||||
'http_request_timeout', 'http_pool_connections',
|
||||
'http_pool_maxsize', 'max_retries', 'wapi_version', 'max_results']
|
||||
res = api.WapiBase.provider_spec
|
||||
self.assertIsNotNone(res)
|
||||
self.assertIn('provider', res)
|
||||
self.assertIn('options', res['provider'])
|
||||
returned_options = res['provider']['options']
|
||||
self.assertEqual(sorted(provider_options), sorted(returned_options.keys()))
|
||||
|
||||
def _get_wapi(self, test_object):
|
||||
wapi = api.WapiModule(self.module)
|
||||
wapi.get_object = Mock(name='get_object', return_value=test_object)
|
||||
wapi.create_object = Mock(name='create_object')
|
||||
wapi.update_object = Mock(name='update_object')
|
||||
wapi.delete_object = Mock(name='delete_object')
|
||||
return wapi
|
||||
|
||||
def test_wapi_no_change(self):
|
||||
self.module.params = {'provider': None, 'state': 'present', 'name': 'default',
|
||||
'comment': 'test comment', 'extattrs': None}
|
||||
|
||||
test_object = [
|
||||
{
|
||||
"comment": "test comment",
|
||||
"_ref": "networkview/ZG5zLm5ldHdvcmtfdmlldyQw:default/true",
|
||||
"name": self.module._check_type_dict().__getitem__(),
|
||||
"extattrs": {}
|
||||
}
|
||||
]
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertFalse(res['changed'])
|
||||
|
||||
def test_wapi_change(self):
|
||||
self.module.params = {'provider': None, 'state': 'present', 'name': 'default',
|
||||
'comment': 'updated comment', 'extattrs': None}
|
||||
|
||||
test_object = [
|
||||
{
|
||||
"comment": "test comment",
|
||||
"_ref": "networkview/ZG5zLm5ldHdvcmtfdmlldyQw:default/true",
|
||||
"name": "default",
|
||||
"extattrs": {}
|
||||
}
|
||||
]
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertTrue(res['changed'])
|
||||
wapi.update_object.called_once_with(test_object)
|
||||
|
||||
def test_wapi_change_false(self):
|
||||
self.module.params = {'provider': None, 'state': 'present', 'name': 'default',
|
||||
'comment': 'updated comment', 'extattrs': None, 'fqdn': 'foo'}
|
||||
|
||||
test_object = [
|
||||
{
|
||||
"comment": "test comment",
|
||||
"_ref": "networkview/ZG5zLm5ldHdvcmtfdmlldyQw:default/true",
|
||||
"name": "default",
|
||||
"extattrs": {}
|
||||
}
|
||||
]
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"fqdn": {"ib_req": True, 'update': False},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertTrue(res['changed'])
|
||||
wapi.update_object.called_once_with(test_object)
|
||||
|
||||
def test_wapi_extattrs_change(self):
|
||||
self.module.params = {'provider': None, 'state': 'present', 'name': 'default',
|
||||
'comment': 'test comment', 'extattrs': {'Site': 'update'}}
|
||||
|
||||
ref = "networkview/ZG5zLm5ldHdvcmtfdmlldyQw:default/true"
|
||||
|
||||
test_object = [{
|
||||
"comment": "test comment",
|
||||
"_ref": ref,
|
||||
"name": "default",
|
||||
"extattrs": {'Site': {'value': 'test'}}
|
||||
}]
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
kwargs = copy.deepcopy(test_object[0])
|
||||
kwargs['extattrs']['Site']['value'] = 'update'
|
||||
kwargs['name'] = self.module._check_type_dict().__getitem__()
|
||||
del kwargs['_ref']
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertTrue(res['changed'])
|
||||
wapi.update_object.assert_called_once_with(ref, kwargs)
|
||||
|
||||
def test_wapi_extattrs_nochange(self):
|
||||
self.module.params = {'provider': None, 'state': 'present', 'name': 'default',
|
||||
'comment': 'test comment', 'extattrs': {'Site': 'test'}}
|
||||
|
||||
test_object = [{
|
||||
"comment": "test comment",
|
||||
"_ref": "networkview/ZG5zLm5ldHdvcmtfdmlldyQw:default/true",
|
||||
"name": self.module._check_type_dict().__getitem__(),
|
||||
"extattrs": {'Site': {'value': 'test'}}
|
||||
}]
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertFalse(res['changed'])
|
||||
|
||||
def test_wapi_create(self):
|
||||
self.module.params = {'provider': None, 'state': 'present', 'name': 'ansible',
|
||||
'comment': None, 'extattrs': None}
|
||||
|
||||
test_object = None
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertTrue(res['changed'])
|
||||
wapi.create_object.assert_called_once_with('testobject', {'name': self.module._check_type_dict().__getitem__()})
|
||||
|
||||
def test_wapi_delete(self):
|
||||
self.module.params = {'provider': None, 'state': 'absent', 'name': 'ansible',
|
||||
'comment': None, 'extattrs': None}
|
||||
|
||||
ref = "networkview/ZG5zLm5ldHdvcmtfdmlldyQw:ansible/false"
|
||||
|
||||
test_object = [{
|
||||
"comment": "test comment",
|
||||
"_ref": ref,
|
||||
"name": "ansible",
|
||||
"extattrs": {'Site': {'value': 'test'}}
|
||||
}]
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertTrue(res['changed'])
|
||||
wapi.delete_object.assert_called_once_with(ref)
|
||||
|
||||
def test_wapi_strip_network_view(self):
|
||||
self.module.params = {'provider': None, 'state': 'present', 'name': 'ansible',
|
||||
'comment': 'updated comment', 'extattrs': None,
|
||||
'network_view': 'default'}
|
||||
|
||||
test_object = [{
|
||||
"comment": "test comment",
|
||||
"_ref": "view/ZG5zLm5ldHdvcmtfdmlldyQw:ansible/true",
|
||||
"name": "ansible",
|
||||
"extattrs": {},
|
||||
"network_view": "default"
|
||||
}]
|
||||
|
||||
test_spec = {
|
||||
"name": {"ib_req": True},
|
||||
"network_view": {"ib_req": True},
|
||||
"comment": {},
|
||||
"extattrs": {}
|
||||
}
|
||||
|
||||
kwargs = test_object[0].copy()
|
||||
ref = kwargs.pop('_ref')
|
||||
kwargs['comment'] = 'updated comment'
|
||||
kwargs['name'] = self.module._check_type_dict().__getitem__()
|
||||
del kwargs['network_view']
|
||||
del kwargs['extattrs']
|
||||
|
||||
wapi = self._get_wapi(test_object)
|
||||
res = wapi.run('testobject', test_spec)
|
||||
|
||||
self.assertTrue(res['changed'])
|
||||
wapi.update_object.assert_called_once_with(ref, kwargs)
|
||||
Loading…
Add table
Add a link
Reference in a new issue