ci: Improve pipeline unit test test_derive_docker_image_matrix

This commit is contained in:
Marian Koop 2026-07-28 01:25:13 +02:00 committed by mkoop-ni
parent 943692b9c7
commit a3d8778a84
3 changed files with 40 additions and 7 deletions

View File

@ -44,6 +44,8 @@ SECTION_DATA_MAP = {
def _parse_matrix_string(raw_value: str) -> dict[str, dict[str, Any]]:
if not raw_value:
return {}
parsed = ast.literal_eval(raw_value)
if not isinstance(parsed, dict):
raise ValueError("Expected matrix content to parse as a dict")

View File

@ -1,6 +1,6 @@
4.10.0_20260711.1
rnd-docker-ci/ni/rfsdr/
{'Fedora-42-builder':{'buildOSName':'fedora42','dockerImageName':'uhd-builder-fedora42','releaseName':'42'}, 'Fedora-43-builder':{'buildOSName':'fedora43','dockerImageName':'uhd-builder-fedora43','releaseName':'43'}, 'Fedora-44-builder':{'buildOSName':'fedora44','dockerImageName':'uhd-builder-fedora44','releaseName':'44'}, 'Ubuntu-2004-builder':{'buildOSName':'ubuntu2004','dockerImageName':'uhd-builder-ubuntu2004','releaseName':'focal'}, 'Ubuntu-2204-builder':{'buildOSName':'ubuntu2204','dockerImageName':'uhd-builder-ubuntu2204','releaseName':'jammy'}, 'Ubuntu-2404-builder':{'buildOSName':'ubuntu2404','dockerImageName':'uhd-builder-ubuntu2404','releaseName':'noble'}, 'Ubuntu-2510-builder':{'buildOSName':'ubuntu2510','dockerImageName':'uhd-builder-ubuntu2510','releaseName':'questing'}}
4.10.0_20260727.3
rnd-docker-pre/ni/rfsdr/
{'VS2022-x64-py310-builder':{'buildOSName':'win-vs22-v143-x64-py310','dockerImageName':'uhd-builder-vs2022-v143-x64-py310','cmakeCompiler':'Visual Studio 17 2022','cmakeArch':'x64','vsArch':'x64','vsYear':'2022','pythonVersion':'python310'}, 'VS2022-x64-py312-builder':{'buildOSName':'win-vs22-v143-x64-py312','dockerImageName':'uhd-builder-vs2022-v143-x64-py312','cmakeCompiler':'Visual Studio 17 2022','cmakeArch':'x64','vsArch':'x64','vsYear':'2022','pythonVersion':'python312'}, 'VS2026-x64-py310-builder':{'buildOSName':'win-vs26-v145-x64-py310','dockerImageName':'uhd-builder-vs2026-v145-x64-py310','cmakeCompiler':'Visual Studio 18 2026','cmakeArch':'x64','vsArch':'x64','vsYear':'2026','pythonVersion':'python310'}, 'VS2026-x64-py312-builder':{'buildOSName':'win-vs26-v145-x64-py312','dockerImageName':'uhd-builder-vs2026-v145-x64-py312','cmakeCompiler':'Visual Studio 18 2026','cmakeArch':'x64','vsArch':'x64','vsYear':'2026','pythonVersion':'python312'}}
{'macOS-15-x64':{'buildOSName':'macOS-15-x64', 'macOSVersionDemand':'15', 'macOSArchDemand': 'X64'}}
{}

View File

@ -19,6 +19,7 @@ import ast
import subprocess
import sys
import unittest
import warnings
from pathlib import Path
from typing import Optional
@ -59,17 +60,43 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
self.fixture = self.__class__.fixture
self.using_artifact_override = ARTIFACT_FILE_OVERRIDE is not None
self.artifact_data = self.parse_docker_image_names_file(self.fixture)
self._warn_for_empty_optional_matrices()
def _warn_for_empty_optional_matrices(self) -> None:
"""Warn if expected matrix sections are present but empty."""
line_map = {
"linux_matrix": 3,
"win_matrix": 4,
"macos_builders": 5,
}
for key, line_no in line_map.items():
value = self.artifact_data.get(key)
if isinstance(value, dict) and not value:
warnings.warn(
f"DockerImageNames line {line_no} ({key}) is an empty dict; "
"tests requiring populated matrix entries may be skipped.",
UserWarning,
)
def _skip_if_matrix_empty(self, key: str, line_no: int) -> None:
"""Skip tests that need populated matrix content when section is empty."""
value = self.artifact_data.get(key)
if isinstance(value, dict) and not value:
warnings.warn(
f"Skipping test because DockerImageNames line {line_no} ({key}) is empty.",
UserWarning,
)
self.skipTest(f"Empty matrix at line {line_no}: {key}")
def test_parses_fixture_file(self):
"""Parse the fixture and expose expected top-level fields."""
if self.using_artifact_override:
self.assertTrue(self.artifact_data["docker_build_number"])
else:
self.assertEqual(self.artifact_data["docker_build_number"], "4.10.0_20260711.1")
self.assertTrue(self.artifact_data["docker_build_number"])
self._skip_if_matrix_empty("linux_matrix", 3)
self.assertIn("Ubuntu-2404-builder", self.artifact_data["linux_matrix"])
def test_derives_deb_matrix_from_linux_matrix(self):
"""Derive Ubuntu deb matrix using releaseName from linux matrix entries."""
self._skip_if_matrix_empty("linux_matrix", 3)
matrix = self.derive_package_matrix(self.artifact_data, os_name="linux", package="deb")
self.assertIn("Ubuntu-2204-builder", matrix)
self.assertIn("Ubuntu-2404-builder", matrix)
@ -79,6 +106,7 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
def test_derives_rpm_matrix_from_linux_matrix(self):
"""Derive Fedora rpm matrix using releaseName from linux matrix entries."""
self._skip_if_matrix_empty("linux_matrix", 3)
matrix = self.derive_package_matrix(self.artifact_data, os_name="linux", package="rpm")
self.assertIn("Fedora-42-builder", matrix)
self.assertEqual(matrix["Fedora-42-builder"]["fedoraReleaseName"], "42")
@ -86,6 +114,7 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
def test_filter_out_matches_release_name(self):
"""Exclude entries when filter-out matches a derived release field."""
self._skip_if_matrix_empty("linux_matrix", 3)
matrix = self.derive_package_matrix(
self.artifact_data,
os_name="linux",
@ -103,6 +132,7 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
def test_build_type_derivation_with_filter_out(self):
"""Build type returns linux matrix and honors filter_out by releaseName."""
self._skip_if_matrix_empty("linux_matrix", 3)
matrix = self.derive_typed_matrix(
self.artifact_data,
target_type="build",
@ -123,6 +153,7 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
def test_source_type_select_returns_single_entry(self):
"""Source type should return a single selected Ubuntu entry."""
self._skip_if_matrix_empty("linux_matrix", 3)
matrix = self.derive_typed_matrix(
self.artifact_data,
target_type="source",