Skip to content

Commit 9a5625d

Browse files
committed
added utests
1 parent bf4917b commit 9a5625d

File tree

3 files changed

+94
-1
lines changed

3 files changed

+94
-1
lines changed

nodescraper/plugins/inband/sysctl/sysctl_collector.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ def collect_data(
9292
category=EventCategory.OS,
9393
description="Sysctl settings not read",
9494
priority=EventPriority.CRITICAL,
95-
console_log=True,
9695
)
9796
self.result.message = "Sysctl settings not read"
9897
self.result.status = ExecutionStatus.ERROR
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import pytest
2+
3+
from nodescraper.enums import ExecutionStatus
4+
from nodescraper.plugins.inband.sysctl.analyzer_args import SysctlAnalyzerArgs
5+
from nodescraper.plugins.inband.sysctl.sysctl_analyzer import SysctlAnalyzer
6+
from nodescraper.plugins.inband.sysctl.sysctldata import SysctlDataModel
7+
8+
9+
@pytest.fixture
10+
def analyzer(system_info):
11+
return SysctlAnalyzer(system_info=system_info)
12+
13+
14+
@pytest.fixture
15+
def correct_data():
16+
return SysctlDataModel(
17+
vm_swappiness=1,
18+
vm_numa_balancing=2,
19+
vm_oom_kill_allocating_task=3,
20+
vm_compaction_proactiveness=4,
21+
vm_compact_unevictable_allowed=5,
22+
vm_extfrag_threshold=6,
23+
vm_zone_reclaim_mode=7,
24+
vm_dirty_background_ratio=8,
25+
vm_dirty_ratio=9,
26+
vm_dirty_writeback_centisecs=10,
27+
kernel_numa_balancing=11,
28+
)
29+
30+
31+
def test_analyzer_all_match(analyzer, correct_data):
32+
args = SysctlAnalyzerArgs.build_from_model(correct_data)
33+
result = analyzer.analyze_data(correct_data, args)
34+
assert result.status == ExecutionStatus.OK
35+
36+
37+
def test_analyzer_mismatch(analyzer, correct_data):
38+
args = SysctlAnalyzerArgs(exp_vm_swappiness=3, exp_vm_numa_balancing=4)
39+
result = analyzer.analyze_data(correct_data, args)
40+
assert result.status == ExecutionStatus.ERROR
41+
assert "Sysctl parameters mismatch detected" in result.message
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from types import SimpleNamespace
2+
3+
import pytest
4+
5+
from nodescraper.enums import EventCategory, EventPriority, ExecutionStatus, OSFamily
6+
from nodescraper.plugins.inband.sysctl.sysctl_collector import SysctlCollector
7+
from nodescraper.plugins.inband.sysctl.sysctldata import SysctlDataModel
8+
9+
10+
@pytest.fixture
11+
def linux_sysctl_collector(system_info, conn_mock):
12+
system_info.os_family = OSFamily.LINUX
13+
return SysctlCollector(system_info, conn_mock)
14+
15+
16+
def make_artifact(cmd, exit_code, stdout):
17+
return SimpleNamespace(command=cmd, exit_code=exit_code, stdout=stdout, stderr="")
18+
19+
20+
def test_collect_data_all_fields_success(linux_sysctl_collector):
21+
sysctl_fields = SysctlDataModel.model_fields.keys()
22+
responses = [
23+
make_artifact(f"sysctl -n {f.replace('_', '.', 1)}", 0, "111") for f in sysctl_fields
24+
]
25+
26+
linux_sysctl_collector._run_sut_cmd = lambda cmd, seq=responses: seq.pop(0)
27+
28+
result, data = linux_sysctl_collector.collect_data()
29+
30+
assert result.status == ExecutionStatus.OK
31+
assert isinstance(data, SysctlDataModel)
32+
for field in SysctlDataModel.model_fields:
33+
assert getattr(data, field) == 111
34+
35+
event = result.events[-1]
36+
assert event.category == "SYSCTL_READ"
37+
assert event.priority == EventPriority.INFO.value
38+
assert result.message == "SYSCTL data collected"
39+
40+
41+
def test_collect_data_all_fail(linux_sysctl_collector):
42+
def always_fail(cmd):
43+
return make_artifact(cmd, 1, "")
44+
45+
linux_sysctl_collector._run_sut_cmd = always_fail
46+
result, data = linux_sysctl_collector.collect_data()
47+
48+
assert result.status == ExecutionStatus.ERROR
49+
assert data is None
50+
51+
evt = result.events[0]
52+
assert evt.category == EventCategory.OS.value
53+
assert "Sysctl settings not read" in result.message

0 commit comments

Comments
 (0)