Skip to content

Commit cab2e73

Browse files
committed
utest updates
1 parent d8aafc8 commit cab2e73

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed

test/unit/plugin/test_amdsmi_collector.py

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,27 @@
3131

3232
from nodescraper.enums.systeminteraction import SystemInteractionLevel
3333
from nodescraper.plugins.inband.amdsmi.amdsmi_collector import AmdSmiCollector
34+
from nodescraper.plugins.inband.amdsmi.amdsmidata import AmdSmiDataModel
35+
from nodescraper.plugins.inband.amdsmi.collector_args import AmdSmiCollectorArgs
36+
37+
38+
def test_collector_args_instantiation():
39+
"""Test AmdSmiCollectorArgs can be instantiated with and without cper_file_path"""
40+
41+
args2 = AmdSmiCollectorArgs(cper_file_path="/path/to/test.cper")
42+
assert args2.cper_file_path == "/path/to/test.cper"
43+
44+
45+
def test_data_model_cper_afid_field():
46+
"""Test AmdSmiDataModel accepts cper_afid field"""
47+
data1 = AmdSmiDataModel(cper_afid=12345)
48+
assert data1.cper_afid == 12345
49+
50+
data2 = AmdSmiDataModel()
51+
assert data2.cper_afid is None
52+
53+
data3 = AmdSmiDataModel(**{"cper_afid": 99999})
54+
assert data3.cper_afid == 99999
3455

3556

3657
def make_cmd_result(stdout: str, stderr: str = "", exit_code: int = 0) -> MagicMock:
@@ -483,3 +504,116 @@ def mock_single_json(cmd: str) -> MagicMock:
483504
assert isinstance(result, list)
484505
assert len(result) == 1
485506
assert result[0]["tool"] == "amdsmi"
507+
508+
509+
def test_get_cper_afid_success(conn_mock, system_info, monkeypatch):
510+
"""Test successful AFID retrieval from CPER file"""
511+
512+
def mock_run_sut_cmd(cmd: str) -> MagicMock:
513+
if "which amd-smi" in cmd:
514+
return make_cmd_result("/usr/bin/amd-smi")
515+
if "ras --afid --cper-file" in cmd:
516+
return make_cmd_result("12345\n")
517+
return make_cmd_result("")
518+
519+
c = AmdSmiCollector(
520+
system_info=system_info,
521+
system_interaction_level=SystemInteractionLevel.PASSIVE,
522+
connection=conn_mock,
523+
)
524+
monkeypatch.setattr(c, "_run_sut_cmd", mock_run_sut_cmd)
525+
526+
afid = c._get_cper_afid("/path/to/test.cper")
527+
528+
assert afid is not None
529+
assert afid == 12345
530+
531+
532+
def test_get_cper_afid_invalid_output(conn_mock, system_info, monkeypatch):
533+
"""Test AFID retrieval with invalid/non-integer output"""
534+
535+
def mock_run_sut_cmd(cmd: str) -> MagicMock:
536+
if "which amd-smi" in cmd:
537+
return make_cmd_result("/usr/bin/amd-smi")
538+
if "ras --afid --cper-file" in cmd:
539+
return make_cmd_result("not_a_number\n")
540+
return make_cmd_result("")
541+
542+
c = AmdSmiCollector(
543+
system_info=system_info,
544+
system_interaction_level=SystemInteractionLevel.PASSIVE,
545+
connection=conn_mock,
546+
)
547+
monkeypatch.setattr(c, "_run_sut_cmd", mock_run_sut_cmd)
548+
549+
afid = c._get_cper_afid("/path/to/test.cper")
550+
551+
assert afid is None
552+
553+
554+
def test_get_cper_afid_command_failure(conn_mock, system_info, monkeypatch):
555+
"""Test AFID retrieval when command fails"""
556+
557+
def mock_run_sut_cmd(cmd: str) -> MagicMock:
558+
if "which amd-smi" in cmd:
559+
return make_cmd_result("/usr/bin/amd-smi")
560+
if "ras --afid --cper-file" in cmd:
561+
return make_cmd_result("", stderr="Error: file not found", exit_code=1)
562+
return make_cmd_result("")
563+
564+
c = AmdSmiCollector(
565+
system_info=system_info,
566+
system_interaction_level=SystemInteractionLevel.PASSIVE,
567+
connection=conn_mock,
568+
)
569+
monkeypatch.setattr(c, "_run_sut_cmd", mock_run_sut_cmd)
570+
571+
# _run_amd_smi returns None on non-zero exit code
572+
afid = c._get_cper_afid("/path/to/test.cper")
573+
574+
assert afid is None
575+
576+
577+
def test_collect_data_with_cper_file(conn_mock, system_info, mock_commands):
578+
"""Test collect_data with cper_file_path argument"""
579+
from nodescraper.plugins.inband.amdsmi.collector_args import AmdSmiCollectorArgs
580+
581+
c = AmdSmiCollector(
582+
system_info=system_info,
583+
system_interaction_level=SystemInteractionLevel.PASSIVE,
584+
connection=conn_mock,
585+
)
586+
587+
# Add mock for AFID command
588+
original_mock = mock_commands
589+
590+
def extended_mock(cmd: str) -> MagicMock:
591+
if "ras --afid --cper-file" in cmd:
592+
return make_cmd_result("99999\n")
593+
return original_mock(cmd)
594+
595+
c._run_sut_cmd = extended_mock
596+
597+
args = AmdSmiCollectorArgs(cper_file_path="/path/to/test.cper")
598+
result, data = c.collect_data(args)
599+
600+
assert result is not None
601+
assert data is not None
602+
assert data.cper_afid == 99999
603+
604+
605+
def test_collect_data_without_cper_file(conn_mock, system_info, mock_commands):
606+
"""Test collect_data without cper_file_path argument"""
607+
608+
c = AmdSmiCollector(
609+
system_info=system_info,
610+
system_interaction_level=SystemInteractionLevel.PASSIVE,
611+
connection=conn_mock,
612+
)
613+
c._run_sut_cmd = mock_commands
614+
615+
result, data = c.collect_data()
616+
617+
assert result is not None
618+
assert data is not None
619+
assert data.cper_afid is None

0 commit comments

Comments
 (0)