Skip to content

Commit a5cffb2

Browse files
Jaspal SinghJaspal Singh
authored andcommitted
addressed review comments
1 parent 2ef3d1c commit a5cffb2

File tree

4 files changed

+34
-21
lines changed

4 files changed

+34
-21
lines changed

nodescraper/plugins/inband/kernel/kernel_collector.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,14 @@ class KernelCollector(InBandDataCollector[KernelDataModel, None]):
4141
CMD = "sh -c 'uname -a'"
4242

4343
def _parse_kernel_version(self, uname_a: str) -> Optional[str]:
44-
"""ExtractS the kernel release (`uname -r`) from `uname -a` output.
44+
"""Extract the kernel release from `uname -a` output.
4545
46+
Args:
47+
uname_a (str): The full output string from the `uname -a` command.
4648
47-
The kernel_release is normally the 2nd index. If that
48-
fails, fall back to a regex looking for a dotted release string.
49+
Returns:
50+
Optional[str]: The parsed kernel release (e.g., "5.13.0-30-generic")
51+
if found, otherwise None.
4952
"""
5053
if not uname_a:
5154
return None
@@ -73,7 +76,7 @@ def collect_data(
7376
"""
7477

7578
kernel = None
76-
kernel_info = None
79+
kernel_info = ""
7780

7881
if self.system_info.os_family == OSFamily.WINDOWS:
7982
res = self._run_sut_cmd(self.CMD_WINDOWS)
@@ -86,11 +89,16 @@ def collect_data(
8689
if res.exit_code == 0:
8790
if res.stdout:
8891
kernel = res.stdout
89-
parts = kernel.split()
90-
if len(parts) == 1:
91-
kernel_info = None
92-
else:
93-
kernel_info = self._parse_kernel_version(kernel)
92+
parsed_info = self._parse_kernel_version(kernel)
93+
kernel_info = parsed_info if parsed_info is not None else ""
94+
if not kernel_info:
95+
self._log_event(
96+
category=EventCategory.OS,
97+
description="Could not extract kernel version from 'uname -a'",
98+
data={"command": res.command, "exit_code": res.exit_code},
99+
priority=EventPriority.ERROR,
100+
console_log=True,
101+
)
94102
else:
95103
kernel = None
96104
if res.exit_code != 0:

nodescraper/plugins/inband/kernel/kerneldata.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@
2323
# SOFTWARE.
2424
#
2525
###############################################################################
26-
from typing import Optional
2726

2827
from nodescraper.models import DataModel
2928

3029

3130
class KernelDataModel(DataModel):
3231
kernel_version: str
33-
kernel_info: Optional[str] = None
32+
kernel_info: str

test/unit/plugin/test_kernel_analyzer.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,19 @@
3535

3636
@pytest.fixture
3737
def model_obj():
38-
return KernelDataModel(kernel_version="5.13.0-30-generic")
38+
return KernelDataModel(
39+
kernel_version="Linux MockSystem 5.13.0-30-generic #1 XYZ Day Month 10 15:19:13 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux",
40+
kernel_info="5.13.0-30-generic",
41+
)
3942

4043

4144
@pytest.fixture
4245
def config():
4346
return {
4447
"kernel_name": [
45-
"5.13.0-30-generic",
46-
"5.15.0-31-generic",
47-
"5.18.0-32-generic",
48+
"Linux MockSystem 5.13.0-30-generic #1 XYZ Day Month 10 15:19:13 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux",
49+
"Linux MockSystem1 5.15.0-31-generic #39 XYZA Day MonthX 10 24:19:13 IST 2024 x86_64 GNU/Linux",
50+
"Linux MockSystem2 5.18.0-32-generic #178 XYZaB Day MonthY 10 15:06:11 PDT 2024 Linux",
4851
],
4952
"invalid": "invalid",
5053
}
@@ -118,14 +121,14 @@ def test_invalid_kernel_config(system_info, model_obj, config):
118121

119122

120123
def test_match_regex(system_info, model_obj):
121-
args = KernelAnalyzerArgs(exp_kernel=[r"5.13.\d-\d+-[\w]+"], regex_match=True)
124+
args = KernelAnalyzerArgs(exp_kernel=[r".*5\.13\.\d+-\d+-[\w-]+.*"], regex_match=True)
122125
analyzer = KernelAnalyzer(system_info)
123126
result = analyzer.analyze_data(model_obj, args)
124127
assert result.status == ExecutionStatus.OK
125128

126129

127130
def test_mismatch_regex(system_info, model_obj):
128-
args = KernelAnalyzerArgs(exp_kernel=[r"4.3.\d-\d+-[\w]+"], regex_match=True)
131+
args = KernelAnalyzerArgs(exp_kernel=[r".*4\.13\.\d+-\d+-[\w-]+.*"], regex_match=True)
129132
analyzer = KernelAnalyzer(system_info)
130133
result = analyzer.analyze_data(model_obj, args)
131134

test/unit/plugin/test_kernel_collector.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,25 @@ def test_run_windows(collector, conn_mock):
5353

5454
result, data = collector.collect_data()
5555

56-
assert data == KernelDataModel(kernel_version="10.0.19041.1237")
56+
assert data == KernelDataModel(kernel_version="10.0.19041.1237", kernel_info="")
5757
assert result.status == ExecutionStatus.OK
5858

5959

6060
def test_run_linux(collector, conn_mock):
6161
collector.system_info.os_family = OSFamily.LINUX
6262
conn_mock.run_command.return_value = CommandArtifact(
6363
exit_code=0,
64-
stdout="5.4.0-88-generic",
64+
stdout="Linux MockSystem 5.13.0-30-generic #1 XYZ Day Month 10 15:19:13 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux",
6565
stderr="",
66-
command="sh -c 'uname -r'",
66+
command="sh -c 'uname -a'",
6767
)
6868

6969
result, data = collector.collect_data()
7070

71-
assert data == KernelDataModel(kernel_version="5.4.0-88-generic")
71+
assert data == KernelDataModel(
72+
kernel_version="Linux MockSystem 5.13.0-30-generic #1 XYZ Day Month 10 15:19:13 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux",
73+
kernel_info="5.13.0-30-generic",
74+
)
7275
assert result.status == ExecutionStatus.OK
7376

7477

0 commit comments

Comments
 (0)