From 9055965606d18763e97524bd03bcf392b0f3fb08 Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Fri, 7 Nov 2025 10:17:04 -0600 Subject: [PATCH 1/8] DCERR-505 --- nodescraper/plugins/inband/kernel/kernel_collector.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodescraper/plugins/inband/kernel/kernel_collector.py b/nodescraper/plugins/inband/kernel/kernel_collector.py index e84973ff..ca82881c 100644 --- a/nodescraper/plugins/inband/kernel/kernel_collector.py +++ b/nodescraper/plugins/inband/kernel/kernel_collector.py @@ -37,7 +37,7 @@ class KernelCollector(InBandDataCollector[KernelDataModel, None]): DATA_MODEL = KernelDataModel CMD_WINDOWS = "wmic os get Version /Value" - CMD = "sh -c 'uname -r'" + CMD = "sh -c 'uname -a'" def collect_data( self, From 3714efe323ba1bf8de758db9bfd1b8d68f250891 Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Mon, 10 Nov 2025 12:55:49 -0600 Subject: [PATCH 2/8] added kernel version parsing code --- .../plugins/inband/kernel/kernel_collector.py | 25 ++++++++++++++++++- .../plugins/inband/kernel/kerneldata.py | 5 +++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/nodescraper/plugins/inband/kernel/kernel_collector.py b/nodescraper/plugins/inband/kernel/kernel_collector.py index ca82881c..c9a7e029 100644 --- a/nodescraper/plugins/inband/kernel/kernel_collector.py +++ b/nodescraper/plugins/inband/kernel/kernel_collector.py @@ -23,6 +23,7 @@ # SOFTWARE. # ############################################################################### +import re from typing import Optional from nodescraper.base import InBandDataCollector @@ -39,6 +40,27 @@ class KernelCollector(InBandDataCollector[KernelDataModel, None]): CMD_WINDOWS = "wmic os get Version /Value" CMD = "sh -c 'uname -a'" + def _parse_kernel_version(self, uname_a: str) -> Optional[str]: + """ExtractS the kernel release (`uname -r`) from `uname -a` output. + + + The kernel_release is normally the 2nd index. If that + fails, fall back to a regex looking for a dotted release string. + """ + if not uname_a: + return None + + result = uname_a.strip().split() + if len(result) >= 3: + return result[2] + + # if some change in output look for a version-like string (e.g. 4.18.0-553.el8_10.x86_64) + match = re.search(r"\d+\.\d+\.\d+[\w\-\.]*", uname_a) + if match: + return match.group(0) + + return None + def collect_data( self, args=None, @@ -61,6 +83,7 @@ def collect_data( res = self._run_sut_cmd(self.CMD) if res.exit_code == 0: kernel = res.stdout + kernel_version = self._parse_kernel_version(kernel) if res.exit_code != 0: self._log_event( @@ -72,7 +95,7 @@ def collect_data( ) if kernel: - kernel_data = KernelDataModel(kernel_version=kernel) + kernel_data = KernelDataModel(kernel_info=kernel, kernel_version=kernel_version) self._log_event( category="KERNEL_READ", description="Kernel version read", diff --git a/nodescraper/plugins/inband/kernel/kerneldata.py b/nodescraper/plugins/inband/kernel/kerneldata.py index edaa30e5..45e06939 100644 --- a/nodescraper/plugins/inband/kernel/kerneldata.py +++ b/nodescraper/plugins/inband/kernel/kerneldata.py @@ -23,8 +23,11 @@ # SOFTWARE. # ############################################################################### +from typing import Optional + from nodescraper.models import DataModel class KernelDataModel(DataModel): - kernel_version: str + kernel_info: str + kernel_version: Optional[str] = None From dcba1233c4e93b2370311daad19418c286a59d88 Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Mon, 10 Nov 2025 15:53:33 -0600 Subject: [PATCH 3/8] failure fixes --- .../plugins/inband/kernel/kernel_collector.py | 17 +++++++++++++---- nodescraper/plugins/inband/kernel/kerneldata.py | 4 ++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/nodescraper/plugins/inband/kernel/kernel_collector.py b/nodescraper/plugins/inband/kernel/kernel_collector.py index c9a7e029..de54c739 100644 --- a/nodescraper/plugins/inband/kernel/kernel_collector.py +++ b/nodescraper/plugins/inband/kernel/kernel_collector.py @@ -73,6 +73,8 @@ def collect_data( """ kernel = None + kernel_info = None + if self.system_info.os_family == OSFamily.WINDOWS: res = self._run_sut_cmd(self.CMD_WINDOWS) if res.exit_code == 0: @@ -82,9 +84,15 @@ def collect_data( else: res = self._run_sut_cmd(self.CMD) if res.exit_code == 0: - kernel = res.stdout - kernel_version = self._parse_kernel_version(kernel) - + if res.stdout: + kernel = res.stdout + parts = kernel.split() + if len(parts) == 1: + kernel_info = None + else: + kernel_info = self._parse_kernel_version(kernel) + else: + kernel = None if res.exit_code != 0: self._log_event( category=EventCategory.OS, @@ -95,7 +103,8 @@ def collect_data( ) if kernel: - kernel_data = KernelDataModel(kernel_info=kernel, kernel_version=kernel_version) + + kernel_data = KernelDataModel(kernel_version=kernel, kernel_info=kernel_info) self._log_event( category="KERNEL_READ", description="Kernel version read", diff --git a/nodescraper/plugins/inband/kernel/kerneldata.py b/nodescraper/plugins/inband/kernel/kerneldata.py index 45e06939..65fc6671 100644 --- a/nodescraper/plugins/inband/kernel/kerneldata.py +++ b/nodescraper/plugins/inband/kernel/kerneldata.py @@ -29,5 +29,5 @@ class KernelDataModel(DataModel): - kernel_info: str - kernel_version: Optional[str] = None + kernel_version: str + kernel_info: Optional[str] = None From 2c4de74c3343ff42bc0a588d1c812fee3496bd8f Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Wed, 12 Nov 2025 11:16:36 -0600 Subject: [PATCH 4/8] addressed review comments --- .../plugins/inband/kernel/kernel_collector.py | 26 ++++++++++++------- .../plugins/inband/kernel/kerneldata.py | 3 +-- test/unit/plugin/test_kernel_analyzer.py | 15 ++++++----- test/unit/plugin/test_kernel_collector.py | 11 +++++--- 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/nodescraper/plugins/inband/kernel/kernel_collector.py b/nodescraper/plugins/inband/kernel/kernel_collector.py index de54c739..1db8b395 100644 --- a/nodescraper/plugins/inband/kernel/kernel_collector.py +++ b/nodescraper/plugins/inband/kernel/kernel_collector.py @@ -41,11 +41,14 @@ class KernelCollector(InBandDataCollector[KernelDataModel, None]): CMD = "sh -c 'uname -a'" def _parse_kernel_version(self, uname_a: str) -> Optional[str]: - """ExtractS the kernel release (`uname -r`) from `uname -a` output. + """Extract the kernel release from `uname -a` output. + Args: + uname_a (str): The full output string from the `uname -a` command. - The kernel_release is normally the 2nd index. If that - fails, fall back to a regex looking for a dotted release string. + Returns: + Optional[str]: The parsed kernel release (e.g., "5.13.0-30-generic") + if found, otherwise None. """ if not uname_a: return None @@ -73,7 +76,7 @@ def collect_data( """ kernel = None - kernel_info = None + kernel_info = "" if self.system_info.os_family == OSFamily.WINDOWS: res = self._run_sut_cmd(self.CMD_WINDOWS) @@ -86,11 +89,16 @@ def collect_data( if res.exit_code == 0: if res.stdout: kernel = res.stdout - parts = kernel.split() - if len(parts) == 1: - kernel_info = None - else: - kernel_info = self._parse_kernel_version(kernel) + parsed_info = self._parse_kernel_version(kernel) + kernel_info = parsed_info if parsed_info is not None else "" + if not kernel_info: + self._log_event( + category=EventCategory.OS, + description="Could not extract kernel version from 'uname -a'", + data={"command": res.command, "exit_code": res.exit_code}, + priority=EventPriority.ERROR, + console_log=True, + ) else: kernel = None if res.exit_code != 0: diff --git a/nodescraper/plugins/inband/kernel/kerneldata.py b/nodescraper/plugins/inband/kernel/kerneldata.py index 65fc6671..8bca45b2 100644 --- a/nodescraper/plugins/inband/kernel/kerneldata.py +++ b/nodescraper/plugins/inband/kernel/kerneldata.py @@ -23,11 +23,10 @@ # SOFTWARE. # ############################################################################### -from typing import Optional from nodescraper.models import DataModel class KernelDataModel(DataModel): kernel_version: str - kernel_info: Optional[str] = None + kernel_info: str diff --git a/test/unit/plugin/test_kernel_analyzer.py b/test/unit/plugin/test_kernel_analyzer.py index 7d9c7d0a..6361bb78 100644 --- a/test/unit/plugin/test_kernel_analyzer.py +++ b/test/unit/plugin/test_kernel_analyzer.py @@ -35,16 +35,19 @@ @pytest.fixture def model_obj(): - return KernelDataModel(kernel_version="5.13.0-30-generic") + return KernelDataModel( + 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", + kernel_info="5.13.0-30-generic", + ) @pytest.fixture def config(): return { "kernel_name": [ - "5.13.0-30-generic", - "5.15.0-31-generic", - "5.18.0-32-generic", + "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", + "Linux MockSystem1 5.15.0-31-generic #39 XYZA Day MonthX 10 24:19:13 IST 2024 x86_64 GNU/Linux", + "Linux MockSystem2 5.18.0-32-generic #178 XYZaB Day MonthY 10 15:06:11 PDT 2024 Linux", ], "invalid": "invalid", } @@ -118,14 +121,14 @@ def test_invalid_kernel_config(system_info, model_obj, config): def test_match_regex(system_info, model_obj): - args = KernelAnalyzerArgs(exp_kernel=[r"5.13.\d-\d+-[\w]+"], regex_match=True) + args = KernelAnalyzerArgs(exp_kernel=[r".*5\.13\.\d+-\d+-[\w-]+.*"], regex_match=True) analyzer = KernelAnalyzer(system_info) result = analyzer.analyze_data(model_obj, args) assert result.status == ExecutionStatus.OK def test_mismatch_regex(system_info, model_obj): - args = KernelAnalyzerArgs(exp_kernel=[r"4.3.\d-\d+-[\w]+"], regex_match=True) + args = KernelAnalyzerArgs(exp_kernel=[r".*4\.13\.\d+-\d+-[\w-]+.*"], regex_match=True) analyzer = KernelAnalyzer(system_info) result = analyzer.analyze_data(model_obj, args) diff --git a/test/unit/plugin/test_kernel_collector.py b/test/unit/plugin/test_kernel_collector.py index d9261ad9..f150f961 100644 --- a/test/unit/plugin/test_kernel_collector.py +++ b/test/unit/plugin/test_kernel_collector.py @@ -53,7 +53,7 @@ def test_run_windows(collector, conn_mock): result, data = collector.collect_data() - assert data == KernelDataModel(kernel_version="10.0.19041.1237") + assert data == KernelDataModel(kernel_version="10.0.19041.1237", kernel_info="") assert result.status == ExecutionStatus.OK @@ -61,14 +61,17 @@ def test_run_linux(collector, conn_mock): collector.system_info.os_family = OSFamily.LINUX conn_mock.run_command.return_value = CommandArtifact( exit_code=0, - stdout="5.4.0-88-generic", + 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", stderr="", - command="sh -c 'uname -r'", + command="sh -c 'uname -a'", ) result, data = collector.collect_data() - assert data == KernelDataModel(kernel_version="5.4.0-88-generic") + assert data == KernelDataModel( + 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", + kernel_info="5.13.0-30-generic", + ) assert result.status == ExecutionStatus.OK From 1a76e3e7f28897888eaa2272dacdafb0291b49b5 Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Fri, 14 Nov 2025 14:52:57 -0600 Subject: [PATCH 5/8] variable fixes and output handling --- .../plugins/inband/kernel/kernel_collector.py | 45 ++++++++++--------- .../plugins/inband/kernel/kerneldata.py | 2 +- test/unit/plugin/test_kernel_collector.py | 6 +-- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/nodescraper/plugins/inband/kernel/kernel_collector.py b/nodescraper/plugins/inband/kernel/kernel_collector.py index 1db8b395..5faf54aa 100644 --- a/nodescraper/plugins/inband/kernel/kernel_collector.py +++ b/nodescraper/plugins/inband/kernel/kernel_collector.py @@ -76,31 +76,28 @@ def collect_data( """ kernel = None - kernel_info = "" + kernel_info = None if self.system_info.os_family == OSFamily.WINDOWS: res = self._run_sut_cmd(self.CMD_WINDOWS) if res.exit_code == 0: - kernel = [line for line in res.stdout.splitlines() if "Version=" in line][0].split( - "=" - )[1] + kernel_info = [line for line in res.stdout.splitlines() if "Version=" in line][ + 0 + ].split("=")[1] else: res = self._run_sut_cmd(self.CMD) if res.exit_code == 0: - if res.stdout: - kernel = res.stdout - parsed_info = self._parse_kernel_version(kernel) - kernel_info = parsed_info if parsed_info is not None else "" - if not kernel_info: - self._log_event( - category=EventCategory.OS, - description="Could not extract kernel version from 'uname -a'", - data={"command": res.command, "exit_code": res.exit_code}, - priority=EventPriority.ERROR, - console_log=True, - ) - else: - kernel = None + kernel_info = res.stdout + kernel = self._parse_kernel_version(kernel_info) + if not kernel: + self._log_event( + category=EventCategory.OS, + description="Could not extract kernel version from 'uname -a'", + data={"command": res.command, "exit_code": res.exit_code}, + priority=EventPriority.ERROR, + console_log=True, + ) + if res.exit_code != 0: self._log_event( category=EventCategory.OS, @@ -110,9 +107,9 @@ def collect_data( console_log=True, ) - if kernel: + if kernel_info: - kernel_data = KernelDataModel(kernel_version=kernel, kernel_info=kernel_info) + kernel_data = KernelDataModel(kernel_info=kernel_info, kernel_version=kernel) self._log_event( category="KERNEL_READ", description="Kernel version read", @@ -122,6 +119,10 @@ def collect_data( else: kernel_data = None - self.result.message = f"Kernel: {kernel}" if kernel else "Kernel not found" - self.result.status = ExecutionStatus.OK if kernel else ExecutionStatus.ERROR + self.result.message = ( + "Kernel not found" + if not kernel_info + else f"Kernel info: {kernel_info} | Kernel version: {kernel if kernel else 'Kernel version not found'}" + ) + self.result.status = ExecutionStatus.OK if kernel_info else ExecutionStatus.ERROR return self.result, kernel_data diff --git a/nodescraper/plugins/inband/kernel/kerneldata.py b/nodescraper/plugins/inband/kernel/kerneldata.py index 8bca45b2..9e974a77 100644 --- a/nodescraper/plugins/inband/kernel/kerneldata.py +++ b/nodescraper/plugins/inband/kernel/kerneldata.py @@ -28,5 +28,5 @@ class KernelDataModel(DataModel): - kernel_version: str kernel_info: str + kernel_version: str | None = None diff --git a/test/unit/plugin/test_kernel_collector.py b/test/unit/plugin/test_kernel_collector.py index f150f961..de54ba7b 100644 --- a/test/unit/plugin/test_kernel_collector.py +++ b/test/unit/plugin/test_kernel_collector.py @@ -53,7 +53,7 @@ def test_run_windows(collector, conn_mock): result, data = collector.collect_data() - assert data == KernelDataModel(kernel_version="10.0.19041.1237", kernel_info="") + assert data == KernelDataModel(kernel_info="10.0.19041.1237", kernel_version=None) assert result.status == ExecutionStatus.OK @@ -69,8 +69,8 @@ def test_run_linux(collector, conn_mock): result, data = collector.collect_data() assert data == KernelDataModel( - 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", - kernel_info="5.13.0-30-generic", + kernel_info="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", + kernel_version="5.13.0-30-generic", ) assert result.status == ExecutionStatus.OK From 759f42559a28aabe915c85411c78f6f50ae20d41 Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Fri, 14 Nov 2025 15:13:31 -0600 Subject: [PATCH 6/8] pre commit error fixes --- nodescraper/plugins/inband/kernel/analyzer_args.py | 2 +- nodescraper/plugins/inband/kernel/kernel_analyzer.py | 8 ++++---- test/unit/plugin/test_kernel_analyzer.py | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/nodescraper/plugins/inband/kernel/analyzer_args.py b/nodescraper/plugins/inband/kernel/analyzer_args.py index e8f4cd61..eab86c95 100644 --- a/nodescraper/plugins/inband/kernel/analyzer_args.py +++ b/nodescraper/plugins/inband/kernel/analyzer_args.py @@ -61,4 +61,4 @@ def build_from_model(cls, datamodel: KernelDataModel) -> "KernelAnalyzerArgs": Returns: KernelAnalyzerArgs: instance of analyzer args class """ - return cls(exp_kernel=datamodel.kernel_version) + return cls(exp_kernel=datamodel.kernel_info) diff --git a/nodescraper/plugins/inband/kernel/kernel_analyzer.py b/nodescraper/plugins/inband/kernel/kernel_analyzer.py index 1ff4e45a..faa4181c 100644 --- a/nodescraper/plugins/inband/kernel/kernel_analyzer.py +++ b/nodescraper/plugins/inband/kernel/kernel_analyzer.py @@ -68,23 +68,23 @@ def analyze_data( priority=EventPriority.ERROR, ) continue - if regex_data.match(data.kernel_version): + if regex_data.match(data.kernel_info): self.result.message = "Kernel matches expected" self.result.status = ExecutionStatus.OK return self.result - elif data.kernel_version == kernel: + elif data.kernel_info == kernel: self.result.message = "Kernel matches expected" self.result.status = ExecutionStatus.OK return self.result self.result.message = ( - f"Kernel mismatch! Expected: {args.exp_kernel}, actual: {data.kernel_version}" + f"Kernel mismatch! Expected: {args.exp_kernel}, actual: {data.kernel_info}" ) self.result.status = ExecutionStatus.ERROR self._log_event( category=EventCategory.OS, description=f"{self.result.message}", - data={"expected": args.exp_kernel, "actual": data.kernel_version}, + data={"expected": args.exp_kernel, "actual": data.kernel_info}, priority=EventPriority.CRITICAL, console_log=True, ) diff --git a/test/unit/plugin/test_kernel_analyzer.py b/test/unit/plugin/test_kernel_analyzer.py index 6361bb78..9aed4da3 100644 --- a/test/unit/plugin/test_kernel_analyzer.py +++ b/test/unit/plugin/test_kernel_analyzer.py @@ -36,8 +36,8 @@ @pytest.fixture def model_obj(): return KernelDataModel( - 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", - kernel_info="5.13.0-30-generic", + kernel_info="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", + kernel_version="5.13.0-30-generic", ) @@ -86,7 +86,7 @@ def test_no_config_data(system_info, model_obj): def test_invalid_kernel(system_info, model_obj, config): args = KernelAnalyzerArgs(exp_kernel=config["kernel_name"]) - model_obj.kernel_version = "some_invalid" + model_obj.kernel_info = "some_invalid" analyzer = KernelAnalyzer(system_info) result = analyzer.analyze_data(model_obj, args=args) From e4333aa55257caa2c443a7bb0dc7f7d231e9b85d Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Tue, 18 Nov 2025 11:20:57 -0600 Subject: [PATCH 7/8] kernel and doc py 3.9 fixes --- .../ext_nodescraper_plugins/sample/sample_collector.py | 4 +++- nodescraper/plugins/inband/kernel/kernel_collector.py | 9 +++++---- nodescraper/plugins/inband/kernel/kerneldata.py | 2 +- test/unit/plugin/test_kernel_collector.py | 4 +++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py b/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py index 3a860ab9..85f82912 100644 --- a/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py +++ b/docs/node-scraper-external/ext_nodescraper_plugins/sample/sample_collector.py @@ -1,3 +1,5 @@ +from typing import Optional + from nodescraper.base import InBandDataCollector from nodescraper.enums import ExecutionStatus from nodescraper.models import TaskResult @@ -9,7 +11,7 @@ class SampleCollector(InBandDataCollector[SampleDataModel, None]): DATA_MODEL = SampleDataModel - def collect_data(self, args=None) -> tuple[TaskResult, SampleDataModel | None]: + def collect_data(self, args=None) -> tuple[TaskResult, Optional[SampleDataModel]]: sample_data = SampleDataModel(some_str="example123") self.result.message = "Collector ran successfully" self.result.status = ExecutionStatus.OK diff --git a/nodescraper/plugins/inband/kernel/kernel_collector.py b/nodescraper/plugins/inband/kernel/kernel_collector.py index 5faf54aa..a9ac81ad 100644 --- a/nodescraper/plugins/inband/kernel/kernel_collector.py +++ b/nodescraper/plugins/inband/kernel/kernel_collector.py @@ -81,9 +81,10 @@ def collect_data( if self.system_info.os_family == OSFamily.WINDOWS: res = self._run_sut_cmd(self.CMD_WINDOWS) if res.exit_code == 0: - kernel_info = [line for line in res.stdout.splitlines() if "Version=" in line][ - 0 - ].split("=")[1] + kernel_info = res.stdout + kernel = [line for line in res.stdout.splitlines() if "Version=" in line][0].split( + "=" + )[1] else: res = self._run_sut_cmd(self.CMD) if res.exit_code == 0: @@ -107,7 +108,7 @@ def collect_data( console_log=True, ) - if kernel_info: + if kernel_info and kernel: kernel_data = KernelDataModel(kernel_info=kernel_info, kernel_version=kernel) self._log_event( diff --git a/nodescraper/plugins/inband/kernel/kerneldata.py b/nodescraper/plugins/inband/kernel/kerneldata.py index 9e974a77..45f521eb 100644 --- a/nodescraper/plugins/inband/kernel/kerneldata.py +++ b/nodescraper/plugins/inband/kernel/kerneldata.py @@ -29,4 +29,4 @@ class KernelDataModel(DataModel): kernel_info: str - kernel_version: str | None = None + kernel_version: str diff --git a/test/unit/plugin/test_kernel_collector.py b/test/unit/plugin/test_kernel_collector.py index de54ba7b..b1f26257 100644 --- a/test/unit/plugin/test_kernel_collector.py +++ b/test/unit/plugin/test_kernel_collector.py @@ -53,7 +53,9 @@ def test_run_windows(collector, conn_mock): result, data = collector.collect_data() - assert data == KernelDataModel(kernel_info="10.0.19041.1237", kernel_version=None) + assert data == KernelDataModel( + kernel_info="Version=10.0.19041.1237", kernel_version="10.0.19041.1237" + ) assert result.status == ExecutionStatus.OK From ca195b44f87312dd7225bdbd3e19e9006aeb7511 Mon Sep 17 00:00:00 2001 From: Jaspal Singh Date: Tue, 18 Nov 2025 15:40:43 -0600 Subject: [PATCH 8/8] analyzer fix --- nodescraper/plugins/inband/kernel/kernel_analyzer.py | 8 ++++---- test/unit/plugin/test_kernel_analyzer.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/nodescraper/plugins/inband/kernel/kernel_analyzer.py b/nodescraper/plugins/inband/kernel/kernel_analyzer.py index faa4181c..1ff4e45a 100644 --- a/nodescraper/plugins/inband/kernel/kernel_analyzer.py +++ b/nodescraper/plugins/inband/kernel/kernel_analyzer.py @@ -68,23 +68,23 @@ def analyze_data( priority=EventPriority.ERROR, ) continue - if regex_data.match(data.kernel_info): + if regex_data.match(data.kernel_version): self.result.message = "Kernel matches expected" self.result.status = ExecutionStatus.OK return self.result - elif data.kernel_info == kernel: + elif data.kernel_version == kernel: self.result.message = "Kernel matches expected" self.result.status = ExecutionStatus.OK return self.result self.result.message = ( - f"Kernel mismatch! Expected: {args.exp_kernel}, actual: {data.kernel_info}" + f"Kernel mismatch! Expected: {args.exp_kernel}, actual: {data.kernel_version}" ) self.result.status = ExecutionStatus.ERROR self._log_event( category=EventCategory.OS, description=f"{self.result.message}", - data={"expected": args.exp_kernel, "actual": data.kernel_info}, + data={"expected": args.exp_kernel, "actual": data.kernel_version}, priority=EventPriority.CRITICAL, console_log=True, ) diff --git a/test/unit/plugin/test_kernel_analyzer.py b/test/unit/plugin/test_kernel_analyzer.py index 9aed4da3..81785abd 100644 --- a/test/unit/plugin/test_kernel_analyzer.py +++ b/test/unit/plugin/test_kernel_analyzer.py @@ -45,9 +45,9 @@ def model_obj(): def config(): return { "kernel_name": [ - "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", - "Linux MockSystem1 5.15.0-31-generic #39 XYZA Day MonthX 10 24:19:13 IST 2024 x86_64 GNU/Linux", - "Linux MockSystem2 5.18.0-32-generic #178 XYZaB Day MonthY 10 15:06:11 PDT 2024 Linux", + "5.13.0-30-generic", + "5.15.0-31-generic", + "5.18.0-32-generic", ], "invalid": "invalid", } @@ -86,7 +86,7 @@ def test_no_config_data(system_info, model_obj): def test_invalid_kernel(system_info, model_obj, config): args = KernelAnalyzerArgs(exp_kernel=config["kernel_name"]) - model_obj.kernel_info = "some_invalid" + model_obj.kernel_version = "some_invalid" analyzer = KernelAnalyzer(system_info) result = analyzer.analyze_data(model_obj, args=args)