From f4fc1d5c68798ae953cbe8bf9391c27f1f880a23 Mon Sep 17 00:00:00 2001 From: Mika Date: Wed, 7 Jan 2026 16:12:03 +0000 Subject: [PATCH] Add artifact.boot_logger/tests/test_core.py --- artifact.boot_logger/tests/test_core.py | 61 +++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 artifact.boot_logger/tests/test_core.py diff --git a/artifact.boot_logger/tests/test_core.py b/artifact.boot_logger/tests/test_core.py new file mode 100644 index 0000000..34092ce --- /dev/null +++ b/artifact.boot_logger/tests/test_core.py @@ -0,0 +1,61 @@ +import pytest +import types + +# Wir testen die Funktion collect_tsc_data aus dem Modul artifact_boot_logger.main +import artifact_boot_logger.main as main + +def fake_open_read_data(file_map): + class FakeFile: + def __init__(self, text): + self.text = text + def read(self): + return self.text + def __enter__(self): + return self + def __exit__(self, *a): + return False + def fake_open(path, *a, **kw): + return FakeFile(file_map.get(path, '')) + return fake_open + +@pytest.fixture +def mock_environment(monkeypatch): + # Simulierte Daten für dmesg und sysfs + fake_data = { + '/var/log/dmesg': 'TSC: stable within 1ns (check passed)', + '/sys/devices/system/clocksource/clocksource0/current_clocksource': 'tsc', + '/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor': 'performance', + '/sys/devices/virtual/dmi/id/product_uuid': 'test-boot-id', + '/sys/class/dmi/id/sys_vendor': 'QEMU', + } + fake_os_path_exists = lambda p: p in fake_data + monkeypatch.setattr(main.os.path, 'exists', fake_os_path_exists) + monkeypatch.setattr(main, 'open', fake_open_read_data(fake_data)) + monkeypatch.setattr(main.subprocess, 'check_output', lambda cmd, text: fake_data['/var/log/dmesg']) + yield fake_data + +def test_collect_tsc_data_returns_valid_structure(mock_environment): + result = main.collect_tsc_data() + assert isinstance(result, dict) + expected_keys = {'boot_id', 'host_vm', 'pinned', 'governor', 'tsc_status'} + assert expected_keys.issubset(result.keys()) + +def test_tsc_status_extraction(mock_environment): + data = main.collect_tsc_data() + assert data['tsc_status'] in ('stable', 'unstable') + +@pytest.mark.parametrize('governor_text,expected', [ + ('performance', 'performance'), + ('ondemand', 'ondemand'), +]) +def test_governor_detection(monkeypatch, mock_environment, governor_text, expected): + fake_data = dict(mock_environment) + fake_data['/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'] = governor_text + monkeypatch.setattr(main, 'open', fake_open_read_data(fake_data)) + res = main.collect_tsc_data() + assert res['governor'] == expected + +def test_boot_id_and_host_vm_fields(mock_environment): + res = main.collect_tsc_data() + assert isinstance(res['boot_id'], str) + assert res['host_vm'] in ('host', 'vm') \ No newline at end of file