From 8aa2372073990d6aa6e7500caade7d7978bbdd11 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Mon, 21 Jan 2019 10:23:39 +0530 Subject: [PATCH] VMware: Unit test for vmware_guest (#50140) Signed-off-by: Abhijeet Kasurde --- test/units/modules/cloud/vmware/__init__.py | 0 .../test_vmware_guest_with_parameters.json | 106 ++++++++++++++++++ .../modules/cloud/vmware/test_vmware_guest.py | 52 +++++++++ 3 files changed, 158 insertions(+) create mode 100644 test/units/modules/cloud/vmware/__init__.py create mode 100644 test/units/modules/cloud/vmware/test_data/test_vmware_guest_with_parameters.json create mode 100644 test/units/modules/cloud/vmware/test_vmware_guest.py diff --git a/test/units/modules/cloud/vmware/__init__.py b/test/units/modules/cloud/vmware/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/units/modules/cloud/vmware/test_data/test_vmware_guest_with_parameters.json b/test/units/modules/cloud/vmware/test_data/test_vmware_guest_with_parameters.json new file mode 100644 index 00000000000..ce5e27c7762 --- /dev/null +++ b/test/units/modules/cloud/vmware/test_data/test_vmware_guest_with_parameters.json @@ -0,0 +1,106 @@ +[ + [ + { + "name": "sample_vm_001", + "hostname": "esxi01.example.com", + "username": "administrator@vsphere.local", + "password": "Secret@123$%", + "validate_certs": "True" + }, + { + "failed": "True", + "msg": "Unknown error while connecting to vCenter or ESXi API" + } + ], + [ + { + "name": "sample_vm_001" + }, + { + "failed": "True", + "msg": "Hostname parameter is missing." + } + ], + [ + { + "uuid": "52f7b088-357e-bb81-59ec-9d9389c7d89e" + }, + { + "failed": "True", + "msg": "Hostname parameter is missing." + } + ], + [ + { + "name": "sample_vm_001", + "hostname": "esxi01.example.com" + }, + { + "failed": "True", + "msg": "Username parameter is missing." + } + ], + [ + { + "name": "sample_vm_001", + "hostname": "esxi01.example.com", + "username": "administrator@vsphere.local" + }, + { + "failed": "True", + "msg": "Password parameter is missing." + } + ], + [ + { + "name": "sample_vm_001", + "hostname": "esxi01.example.com", + "username": "administrator@vsphere.local", + "password": "Secret@123$%" + }, + { + "failed": "True", + "msg": "Unknown error while connecting to vCenter or ESXi API" + } + ], + [ + { + "name": "sample_vm_001", + "hostname": "esxi01.example.com", + "username": "administrator@vsphere.local", + "password": "Secret@123$%", + "validate_certs": "False" + }, + { + "failed": "True", + "msg": "Unknown error while connecting to vCenter or ESXi API" + } + ], + [ + { + "name": "sample_vm_001", + "hostname": "esxi01.example.com", + "username": "administrator@vsphere.local", + "password": "Secret@123$%", + "port": "8443" + }, + { + "failed": "True", + "msg": "8443" + } + ], + [ + { + "name": "sample_vm_001", + "hostname": "esxi01.example.com", + "username": "administrator@vsphere.local", + "password": "Secret@123$%", + "validate_certs": "True" + }, + { + "test_ssl_context": "True", + "failed": "True", + "msg": "pyVim does not support changing verification mode with python < 2.7.9. Either update python or use validate_certs=false." + } + ] +] diff --git a/test/units/modules/cloud/vmware/test_vmware_guest.py b/test/units/modules/cloud/vmware/test_vmware_guest.py new file mode 100644 index 00000000000..613d680eebd --- /dev/null +++ b/test/units/modules/cloud/vmware/test_vmware_guest.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# +# Copyright: (c) 2018, Ansible Project +# Copyright: (c) 2018, Abhijeet Kasurde +# 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 os +import sys +import pytest +import json + +pyvmomi = pytest.importorskip('pyVmomi') + +if sys.version_info < (2, 7): + pytestmark = pytest.mark.skip("vmware_guest Ansible modules require Python >= 2.7") + + +from ansible.modules.cloud.vmware import vmware_guest + +curr_dir = os.path.dirname(__file__) +test_data_file = open(os.path.join(curr_dir, 'test_data', 'test_vmware_guest_with_parameters.json'), 'r') +TEST_CASES = json.loads(test_data_file.read()) +test_data_file.close() + + +@pytest.mark.parametrize('patch_ansible_module', [{}], indirect=['patch_ansible_module']) +@pytest.mark.usefixtures('patch_ansible_module') +def test_vmware_guest_wo_parameters(capfd): + with pytest.raises(SystemExit): + vmware_guest.main() + out, err = capfd.readouterr() + results = json.loads(out) + assert results['failed'] + assert "one of the following is required: name, uuid" in results['msg'] + + +@pytest.mark.parametrize('patch_ansible_module, testcase', TEST_CASES, indirect=['patch_ansible_module']) +@pytest.mark.usefixtures('patch_ansible_module') +def test_vmware_guest_with_parameters(mocker, capfd, testcase): + if testcase.get('test_ssl_context', None): + class mocked_ssl: + pass + mocker.patch('ansible.module_utils.vmware.ssl', new=mocked_ssl) + + with pytest.raises(SystemExit): + vmware_guest.main() + out, err = capfd.readouterr() + results = json.loads(out) + assert str(results['failed']) == testcase['failed'] + assert testcase['msg'] in results['msg']