summaryrefslogtreecommitdiff
path: root/test/units/plugins
diff options
context:
space:
mode:
authorSandeep Bandi <sandeepb@avinetworks.com>2019-07-24 21:05:04 +0530
committerNathaniel Case <ncase@redhat.com>2019-07-24 11:35:04 -0400
commit1d82d25ea299f1c6f7a1343ff92c3ff6b332c156 (patch)
treeb76caf9c57d46f6efb706df543245a18ca034218 /test/units/plugins
parentf988c23f822f2ceba51e9d9b0c7a87087e767e26 (diff)
downloadansible-1d82d25ea299f1c6f7a1343ff92c3ff6b332c156.tar.gz
Adding Avi ansible lookup module (#58667)
* Adding Avi ansible lookup module (cherry picked from commit 77b8951f68cbc889e6595b2a359ca27b84a43c0d) * Added description for examples * Added debug logs and unit tests * Fix __builtin__ import and restting super * Fix pep8 errors * Updated as per review comments on IP address
Diffstat (limited to 'test/units/plugins')
-rw-r--r--test/units/plugins/lookup/fixtures/avi.json104
-rw-r--r--test/units/plugins/lookup/test_avi.py92
2 files changed, 196 insertions, 0 deletions
diff --git a/test/units/plugins/lookup/fixtures/avi.json b/test/units/plugins/lookup/fixtures/avi.json
new file mode 100644
index 0000000000..ae89ca689c
--- /dev/null
+++ b/test/units/plugins/lookup/fixtures/avi.json
@@ -0,0 +1,104 @@
+{
+ "mock_single_obj": {
+ "_last_modified": "",
+ "cloud_ref": "https://192.0.2.132/api/cloud/cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "dhcp_enabled": true,
+ "exclude_discovered_subnets": false,
+ "name": "PG-123",
+ "synced_from_se": true,
+ "tenant_ref": "https://192.0.2.132/api/tenant/admin",
+ "url": "https://192.0.2.132/api/network/dvportgroup-2084-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "uuid": "dvportgroup-2084-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vcenter_dvs": true,
+ "vimgrnw_ref": "https://192.0.2.132/api/vimgrnwruntime/dvportgroup-2084-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vrf_context_ref": "https://192.0.2.132/api/vrfcontext/vrfcontext-31f1b55f-319c-44eb-862f-69d79ffdf295"
+ },
+ "mock_multiple_obj": {
+ "results": [
+ {
+ "_last_modified": "",
+ "cloud_ref": "https://192.0.2.132/api/cloud/cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "dhcp_enabled": true,
+ "exclude_discovered_subnets": false,
+ "name": "J-PG-0682",
+ "synced_from_se": true,
+ "tenant_ref": "https://192.0.2.132/api/tenant/admin",
+ "url": "https://192.0.2.132/api/network/dvportgroup-2084-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "uuid": "dvportgroup-2084-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vcenter_dvs": true,
+ "vimgrnw_ref": "https://192.0.2.132/api/vimgrnwruntime/dvportgroup-2084-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vrf_context_ref": "https://192.0.2.132/api/vrfcontext/vrfcontext-31f1b55f-319c-44eb-862f-69d79ffdf295"
+ },
+ {
+ "_last_modified": "",
+ "cloud_ref": "https://192.0.2.132/api/cloud/cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "dhcp_enabled": true,
+ "exclude_discovered_subnets": false,
+ "name": "J-PG-0231",
+ "synced_from_se": true,
+ "tenant_ref": "https://192.0.2.132/api/tenant/admin",
+ "url": "https://192.0.2.132/api/network/dvportgroup-1627-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "uuid": "dvportgroup-1627-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vcenter_dvs": true,
+ "vimgrnw_ref": "https://192.0.2.132/api/vimgrnwruntime/dvportgroup-1627-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vrf_context_ref": "https://192.0.2.132/api/vrfcontext/vrfcontext-31f1b55f-319c-44eb-862f-69d79ffdf295"
+ },
+ {
+ "_last_modified": "",
+ "cloud_ref": "https://192.0.2.132/api/cloud/cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "dhcp_enabled": true,
+ "exclude_discovered_subnets": false,
+ "name": "J-PG-0535",
+ "synced_from_se": true,
+ "tenant_ref": "https://192.0.2.132/api/tenant/admin",
+ "url": "https://192.0.2.132/api/network/dvportgroup-1934-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "uuid": "dvportgroup-1934-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vcenter_dvs": true,
+ "vimgrnw_ref": "https://192.0.2.132/api/vimgrnwruntime/dvportgroup-1934-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vrf_context_ref": "https://192.0.2.132/api/vrfcontext/vrfcontext-31f1b55f-319c-44eb-862f-69d79ffdf295"
+ },
+ {
+ "_last_modified": "",
+ "cloud_ref": "https://192.0.2.132/api/cloud/cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "dhcp_enabled": true,
+ "exclude_discovered_subnets": false,
+ "name": "J-PG-0094",
+ "synced_from_se": true,
+ "tenant_ref": "https://192.0.2.132/api/tenant/admin",
+ "url": "https://192.0.2.132/api/network/dvportgroup-1458-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "uuid": "dvportgroup-1458-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vcenter_dvs": true,
+ "vimgrnw_ref": "https://192.0.2.132/api/vimgrnwruntime/dvportgroup-1458-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vrf_context_ref": "https://192.0.2.132/api/vrfcontext/vrfcontext-31f1b55f-319c-44eb-862f-69d79ffdf295"
+ },
+ {
+ "_last_modified": "",
+ "cloud_ref": "https://192.0.2.132/api/cloud/cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "dhcp_enabled": true,
+ "exclude_discovered_subnets": false,
+ "name": "J-PG-0437",
+ "synced_from_se": true,
+ "tenant_ref": "https://192.0.2.132/api/tenant/admin",
+ "url": "https://192.0.2.132/api/network/dvportgroup-1836-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "uuid": "dvportgroup-1836-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vcenter_dvs": true,
+ "vimgrnw_ref": "https://192.0.2.132/api/vimgrnwruntime/dvportgroup-1836-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vrf_context_ref": "https://192.0.2.132/api/vrfcontext/vrfcontext-31f1b55f-319c-44eb-862f-69d79ffdf295"
+ },
+ {
+ "_last_modified": "",
+ "cloud_ref": "https://192.0.2.132/api/cloud/cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "dhcp_enabled": true,
+ "exclude_discovered_subnets": false,
+ "name": "J-PG-0673",
+ "synced_from_se": true,
+ "tenant_ref": "https://192.0.2.132/api/tenant/admin",
+ "url": "https://192.0.2.132/api/network/dvportgroup-2075-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "uuid": "dvportgroup-2075-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vcenter_dvs": true,
+ "vimgrnw_ref": "https://192.0.2.132/api/vimgrnwruntime/dvportgroup-2075-cloud-4d063be1-99c2-44cf-8b28-977bd970524c",
+ "vrf_context_ref": "https://192.0.2.132/api/vrfcontext/vrfcontext-31f1b55f-319c-44eb-862f-69d79ffdf295"
+ }
+ ]
+ }
+}
diff --git a/test/units/plugins/lookup/test_avi.py b/test/units/plugins/lookup/test_avi.py
new file mode 100644
index 0000000000..4619cba735
--- /dev/null
+++ b/test/units/plugins/lookup/test_avi.py
@@ -0,0 +1,92 @@
+# -*- coding: utf-8 -*-
+# (c) 2019, Sandeep Bandi <sandeepb@avinetworks.com>
+#
+# This file is part of Ansible
+#
+# Ansible 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.
+#
+# Ansible 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 Ansible. If not, see <http://www.gnu.org/licenses/>.
+
+# Make coding more python3-ish
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+import os
+import pytest
+import json
+
+from units.compat.mock import patch, MagicMock
+
+from ansible.errors import AnsibleError
+from ansible.plugins.loader import lookup_loader
+from ansible.plugins.lookup import avi
+
+
+try:
+ import builtins as __builtin__
+except ImportError:
+ import __builtin__
+
+
+fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures')
+
+with open(fixture_path + '/avi.json') as json_file:
+ data = json.load(json_file)
+
+
+@pytest.fixture
+def dummy_credentials():
+ dummy_credentials = {}
+ dummy_credentials['controller'] = "192.0.2.13"
+ dummy_credentials['username'] = "admin"
+ dummy_credentials['password'] = "password"
+ dummy_credentials['api_version'] = "17.2.14"
+ dummy_credentials['tenant'] = 'admin'
+ return dummy_credentials
+
+
+@pytest.fixture
+def super_switcher(scope="function", autouse=True):
+ # Mocking the inbuilt super as it is used in ApiSession initialization
+ original_super = __builtin__.super
+ __builtin__.super = MagicMock()
+ yield
+ # Revert the super to default state
+ __builtin__.super = original_super
+
+
+def test_lookup_multiple_obj(dummy_credentials):
+ avi_lookup = lookup_loader.get('avi')
+ avi_mock = MagicMock()
+ avi_mock.return_value.get.return_value.json.return_value = data["mock_multiple_obj"]
+ with patch.object(avi, 'ApiSession', avi_mock):
+ retval = avi_lookup.run([], {}, avi_credentials=dummy_credentials,
+ obj_type="network")
+ assert retval == data["mock_multiple_obj"]["results"]
+
+
+def test_lookup_single_obj(dummy_credentials):
+ avi_lookup = lookup_loader.get('avi')
+ avi_mock = MagicMock()
+ avi_mock.return_value.get_object_by_name.return_value = data["mock_single_obj"]
+ with patch.object(avi, 'ApiSession', avi_mock):
+ retval = avi_lookup.run([], {}, avi_credentials=dummy_credentials,
+ obj_type="network", obj_name='PG-123')
+ assert retval[0] == data["mock_single_obj"]
+
+
+def test_invalid_lookup(dummy_credentials):
+ avi_lookup = lookup_loader.get('avi')
+ avi_mock = MagicMock()
+ with pytest.raises(AnsibleError):
+ with patch.object(avi, 'ApiSession', avi_mock):
+ avi_lookup.run([], {}, avi_credentials=dummy_credentials)