mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
7.1 KiB
Python
202 lines
7.1 KiB
Python
# 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 pathlib
|
|
import json
|
|
|
|
import pytest
|
|
|
|
from ansible.module_utils.facts.hardware import freebsd
|
|
from ansible.module_utils.facts.sysctl import get_sysctl
|
|
|
|
|
|
class TestFreeBSDHardwareFacts:
|
|
fixtures = pathlib.Path(__file__).parent / "fixtures"
|
|
|
|
def _get_mock_sysctl_data(self):
|
|
return (self.fixtures / "sysctl_freebsd.txt").read_text()
|
|
|
|
def _get_mock_dmesg_data(self):
|
|
return (self.fixtures / "dmesg_freebsd.txt").read_text()
|
|
|
|
@pytest.fixture()
|
|
def mocked_module(self, mocker, request):
|
|
request.cls.module = mocker.MagicMock()
|
|
yield request.cls.module
|
|
|
|
def test_get_dmi_facts(self, mocker, mocked_module):
|
|
freebsd_hardware = freebsd.FreeBSDHardware(mocked_module)
|
|
mocker.patch.object(
|
|
mocked_module,
|
|
"get_bin_path",
|
|
side_effect=[
|
|
"/usr/local/sbin/dmidecode",
|
|
],
|
|
)
|
|
expected_dmi_facts = {
|
|
"bios_date": "2024-05-10",
|
|
"bios_vendor": "American Megatrends Inc.",
|
|
"bios_version": "1.2.3",
|
|
"board_asset_tag": "MyAssetTag1",
|
|
"board_name": "Motherboard X399",
|
|
"board_serial": "1234ABCD-EFGH-5678",
|
|
"board_vendor": "Gigabyte Technology Co., Ltd.",
|
|
"board_version": "A00",
|
|
"chassis_asset_tag": "MyChassisTag",
|
|
"chassis_serial": "9876-FEDC-BA09",
|
|
"chassis_vendor": "InWin Development Inc.",
|
|
"chassis_version": "Not Available",
|
|
"form_factor": "8 (Tower)",
|
|
"product_name": "ProBook 450 G8",
|
|
"product_serial": "CDEFG1234567890A",
|
|
"product_uuid": "123e4567-e89b-12d3-a456-426655440000",
|
|
"product_version": "Not Available",
|
|
"system_vendor": "Hewlett-Packard",
|
|
}
|
|
side_effect_list = [(0, i, "") for i in expected_dmi_facts.values()]
|
|
|
|
mocker.patch.object(mocked_module, "run_command", side_effect=side_effect_list)
|
|
|
|
dmi_facts = freebsd_hardware.get_dmi_facts()
|
|
assert dmi_facts == expected_dmi_facts
|
|
|
|
def test_get_cpu_facts(self, mocker, mocked_module):
|
|
mocker.patch.object(
|
|
mocked_module,
|
|
"get_bin_path",
|
|
side_effect=[
|
|
"/sbin/sysctl",
|
|
"/sbin/dmesg",
|
|
],
|
|
)
|
|
mocker.patch.object(
|
|
mocked_module,
|
|
"run_command",
|
|
side_effect=[
|
|
(0, self._get_mock_sysctl_data(), ""),
|
|
(0, self._get_mock_dmesg_data(), ""),
|
|
],
|
|
)
|
|
|
|
freebsd_hardware = freebsd.FreeBSDHardware(mocked_module)
|
|
freebsd_hardware.sysctl = get_sysctl(mocked_module, ["hw", "vm.stats"])
|
|
|
|
cpu_facts = freebsd_hardware.get_cpu_facts()
|
|
expected_cpu_facts = {
|
|
"processor": [
|
|
"Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz (2893.05-MHz K8-class CPU)"
|
|
],
|
|
"processor_cores": "2",
|
|
"processor_count": "4",
|
|
}
|
|
assert cpu_facts == expected_cpu_facts
|
|
|
|
def test_get_memory_facts(self, mocked_module):
|
|
mocked_module.get_bin_path.side_effect = [
|
|
"/sbin/sysctl",
|
|
"/usr/sbin/swapinfo",
|
|
]
|
|
|
|
mocked_swapinfo_k_output = (self.fixtures / "swapinfo_freebsd.txt").read_text()
|
|
mocked_module.run_command.side_effect = [
|
|
(0, self._get_mock_sysctl_data(), ""),
|
|
(0, mocked_swapinfo_k_output, ""),
|
|
]
|
|
freebsd_hardware = freebsd.FreeBSDHardware(mocked_module)
|
|
freebsd_hardware.sysctl = get_sysctl(mocked_module, ["hw", "vm.stats"])
|
|
|
|
memory_facts = freebsd_hardware.get_memory_facts()
|
|
expected_memory_facts = {
|
|
"memtotal_mb": 3967,
|
|
"memfree_mb": 267,
|
|
"swapfree_mb": 1024,
|
|
"swaptotal_mb": 1024,
|
|
}
|
|
assert memory_facts == expected_memory_facts
|
|
|
|
def test_get_uptime_facts(self, mocked_module):
|
|
freebsd_hardware = freebsd.FreeBSDHardware(mocked_module)
|
|
mocked_module.run_command.return_value = (
|
|
0,
|
|
b"\xc0\xa0\x05f\x00\x00\x00\x00\xac-\x05\x00\x00\x00\x00\x00",
|
|
"",
|
|
)
|
|
uptime_facts = freebsd_hardware.get_uptime_facts()
|
|
assert "uptime_seconds" in uptime_facts
|
|
|
|
def _mock_get_statvfs_output(self, mount_point):
|
|
mount_info = {
|
|
"/": {
|
|
"size_total": 494384795648,
|
|
"size_available": 331951407104,
|
|
"block_size": 1048576,
|
|
"block_total": 120699413,
|
|
"block_available": 81042824,
|
|
"block_used": 39656589,
|
|
"inode_total": 3242116715,
|
|
"inode_available": 3241712960,
|
|
"inode_used": 403755,
|
|
}
|
|
}
|
|
return mount_info.get(mount_point, {})
|
|
|
|
def test_get_mount_facts(self, mocker, mocked_module):
|
|
freebsd_hardware = freebsd.FreeBSDHardware(mocked_module)
|
|
mocked_fstab_output = (self.fixtures / "fstab_freebsd.txt").read_text()
|
|
mocker.patch(
|
|
"ansible.module_utils.facts.hardware.freebsd.get_file_content",
|
|
return_value=mocked_fstab_output,
|
|
)
|
|
mocker.patch(
|
|
"ansible.module_utils.facts.hardware.freebsd.get_mount_size",
|
|
side_effect=self._mock_get_statvfs_output,
|
|
)
|
|
|
|
fstab_facts = freebsd_hardware.get_mount_facts()
|
|
expected_fstab_facts = {
|
|
"mounts": [
|
|
{
|
|
"mount": "/",
|
|
"device": "/dev/gpt/rootfs",
|
|
"fstype": "ufs",
|
|
"options": "rw",
|
|
"size_total": 494384795648,
|
|
"size_available": 331951407104,
|
|
"block_size": 1048576,
|
|
"block_total": 120699413,
|
|
"block_available": 81042824,
|
|
"block_used": 39656589,
|
|
"inode_total": 3242116715,
|
|
"inode_available": 3241712960,
|
|
"inode_used": 403755,
|
|
},
|
|
{
|
|
"mount": "none",
|
|
"device": "/dev/gpt/swapfs",
|
|
"fstype": "swap",
|
|
"options": "sw",
|
|
},
|
|
{
|
|
"mount": "/boot/efi",
|
|
"device": "/dev/gpt/efiesp",
|
|
"fstype": "msdosfs",
|
|
"options": "rw",
|
|
},
|
|
]
|
|
}
|
|
assert fstab_facts == expected_fstab_facts
|
|
|
|
def test_get_device_facts(self, mocker):
|
|
dev_dir = (self.fixtures / "devices_freebsd.txt").read_text().split()
|
|
with open(self.fixtures / "expected_devices_freebsd.txt", "r") as fd:
|
|
expected_dev_dir = json.load(fd)
|
|
|
|
mocker.patch("os.path.isdir", return_value=True)
|
|
mocker.patch("os.listdir", return_value=dev_dir)
|
|
|
|
freebsd_hardware = freebsd.FreeBSDHardware(None)
|
|
facts = freebsd_hardware.get_device_facts()
|
|
assert facts == expected_dev_dir
|