From 5b231bbbdb2c0b4b4e1b20f49012cdb4cb0b88a2 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Tue, 3 Dec 2024 07:33:30 -0800 Subject: [PATCH] test coverage for virtual/sysctl.py (#84356) * test coverage for virtual/sysctl.py Signed-off-by: Abhijeet Kasurde --- .../module_utils/facts/virtual/sysctl.py | 19 +-- .../module_utils/facts/virtual/test_sysctl.py | 144 ++++++++++++++++++ 2 files changed, 147 insertions(+), 16 deletions(-) create mode 100644 test/units/module_utils/facts/virtual/test_sysctl.py diff --git a/lib/ansible/module_utils/facts/virtual/sysctl.py b/lib/ansible/module_utils/facts/virtual/sysctl.py index 649f335ad72..6bf1d74d661 100644 --- a/lib/ansible/module_utils/facts/virtual/sysctl.py +++ b/lib/ansible/module_utils/facts/virtual/sysctl.py @@ -1,24 +1,11 @@ -# 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 . - +# Copyright: Contributors to the Ansible project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import annotations import re -class VirtualSysctlDetectionMixin(object): +class VirtualSysctlDetectionMixin: def detect_sysctl(self): self.sysctl_path = self.module.get_bin_path('sysctl') diff --git a/test/units/module_utils/facts/virtual/test_sysctl.py b/test/units/module_utils/facts/virtual/test_sysctl.py new file mode 100644 index 00000000000..5e4d09265b0 --- /dev/null +++ b/test/units/module_utils/facts/virtual/test_sysctl.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- + +# Copyright: Contributors to the Ansible project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import annotations + +import pytest + +from ansible.module_utils.facts.virtual.sysctl import VirtualSysctlDetectionMixin + + +class MockVirtualSysctl(VirtualSysctlDetectionMixin): + def __init__(self, module): + self.module = module + + +@pytest.mark.parametrize("expected_path", ["/usr/sbin/sysctl", "/sbin/sysctl"]) +def test_detect_sysctl(mocker, expected_path): + module = mocker.Mock() + module.get_bin_path.return_value = expected_path + mixin = MockVirtualSysctl(module=module) + mixin.detect_sysctl() + + assert mixin.sysctl_path == expected_path + + +@pytest.mark.parametrize( + ("virt_product", "expected_guest"), + [ + pytest.param( + "KVM", + "kvm", + id="KVM-all-caps", + ), + pytest.param( + "kvm", + "kvm", + id="kvm", + ), + pytest.param( + "Bochs", + "kvm", + id="Bochs", + ), + pytest.param( + "SmartDC", + "kvm", + id="SmartDC", + ), + pytest.param( + "VMware", + "VMware", + id="VMware", + ), + pytest.param( + "VirtualBox", + "virtualbox", + id="VirtualBox", + ), + pytest.param( + "HVM domU", + "xen", + id="Xen-HVM", + ), + pytest.param( + "XenPVH", + "xen", + id="Xen-PVH", + ), + pytest.param( + "XenPV", + "xen", + id="Xen-PV", + ), + pytest.param( + "XenPVHVM", + "xen", + id="Xen-PVHVM", + ), + pytest.param( + "Hyper-V", + "Hyper-V", + id="Hyper-V", + ), + pytest.param( + "Parallels", + "parallels", + id="Parallels", + ), + pytest.param( + "RHEV Hypervisor", + "RHEV", + id="RHEV", + ), + pytest.param( + "1", + "jails", + id="Jails", + ), + ], +) +def test_detect_virt_product(mocker, virt_product, expected_guest): + module = mocker.Mock() + module.get_bin_path.return_value = "/usr/bin/sysctl" + module.run_command.return_value = (0, virt_product, "") + mixin = MockVirtualSysctl(module=module) + guest_facts = mixin.detect_virt_product("security.jail.jailed") + expected = { + "virtualization_role": "guest", + "virtualization_tech_guest": set([expected_guest]), + "virtualization_tech_host": set(), + "virtualization_type": expected_guest, + } + assert guest_facts == expected + + +@pytest.mark.parametrize( + ("virt_product", "expected_guest"), + [ + pytest.param( + "QEMU", + "kvm", + id="QEMU", + ), + pytest.param( + "OpenBSD", + "vmm", + id="OpenBSD-vmm", + ), + ], +) +def test_detect_virt_vendor(mocker, virt_product, expected_guest): + module = mocker.Mock() + module.get_bin_path.return_value = "/usr/bin/sysctl" + module.run_command.return_value = (0, virt_product, "") + mixin = MockVirtualSysctl(module=module) + guest_facts = mixin.detect_virt_vendor("security.jail.jailed") + expected = { + "virtualization_role": "guest", + "virtualization_tech_guest": set([expected_guest]), + "virtualization_tech_host": set(), + "virtualization_type": expected_guest, + } + assert guest_facts == expected