mirror of
https://github.com/EttusResearch/uhd.git
synced 2026-10-25 17:36:10 +00:00
ci: Improve pipeline unit test test_derive_docker_image_matrix
This commit is contained in:
parent
943692b9c7
commit
a3d8778a84
@ -44,6 +44,8 @@ SECTION_DATA_MAP = {
|
|||||||
|
|
||||||
|
|
||||||
def _parse_matrix_string(raw_value: str) -> dict[str, dict[str, Any]]:
|
def _parse_matrix_string(raw_value: str) -> dict[str, dict[str, Any]]:
|
||||||
|
if not raw_value:
|
||||||
|
return {}
|
||||||
parsed = ast.literal_eval(raw_value)
|
parsed = ast.literal_eval(raw_value)
|
||||||
if not isinstance(parsed, dict):
|
if not isinstance(parsed, dict):
|
||||||
raise ValueError("Expected matrix content to parse as a dict")
|
raise ValueError("Expected matrix content to parse as a dict")
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
4.10.0_20260711.1
|
4.10.0_20260727.3
|
||||||
rnd-docker-ci/ni/rfsdr/
|
rnd-docker-pre/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'}}
|
|
||||||
{'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'}}
|
{'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'}}
|
{'macOS-15-x64':{'buildOSName':'macOS-15-x64', 'macOSVersionDemand':'15', 'macOSArchDemand': 'X64'}}
|
||||||
{}
|
{}
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import ast
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
import warnings
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
@ -59,17 +60,43 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
|
|||||||
self.fixture = self.__class__.fixture
|
self.fixture = self.__class__.fixture
|
||||||
self.using_artifact_override = ARTIFACT_FILE_OVERRIDE is not None
|
self.using_artifact_override = ARTIFACT_FILE_OVERRIDE is not None
|
||||||
self.artifact_data = self.parse_docker_image_names_file(self.fixture)
|
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):
|
def test_parses_fixture_file(self):
|
||||||
"""Parse the fixture and expose expected top-level fields."""
|
"""Parse the fixture and expose expected top-level fields."""
|
||||||
if self.using_artifact_override:
|
self.assertTrue(self.artifact_data["docker_build_number"])
|
||||||
self.assertTrue(self.artifact_data["docker_build_number"])
|
self._skip_if_matrix_empty("linux_matrix", 3)
|
||||||
else:
|
|
||||||
self.assertEqual(self.artifact_data["docker_build_number"], "4.10.0_20260711.1")
|
|
||||||
self.assertIn("Ubuntu-2404-builder", self.artifact_data["linux_matrix"])
|
self.assertIn("Ubuntu-2404-builder", self.artifact_data["linux_matrix"])
|
||||||
|
|
||||||
def test_derives_deb_matrix_from_linux_matrix(self):
|
def test_derives_deb_matrix_from_linux_matrix(self):
|
||||||
"""Derive Ubuntu deb matrix using releaseName from linux matrix entries."""
|
"""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")
|
matrix = self.derive_package_matrix(self.artifact_data, os_name="linux", package="deb")
|
||||||
self.assertIn("Ubuntu-2204-builder", matrix)
|
self.assertIn("Ubuntu-2204-builder", matrix)
|
||||||
self.assertIn("Ubuntu-2404-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):
|
def test_derives_rpm_matrix_from_linux_matrix(self):
|
||||||
"""Derive Fedora rpm matrix using releaseName from linux matrix entries."""
|
"""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")
|
matrix = self.derive_package_matrix(self.artifact_data, os_name="linux", package="rpm")
|
||||||
self.assertIn("Fedora-42-builder", matrix)
|
self.assertIn("Fedora-42-builder", matrix)
|
||||||
self.assertEqual(matrix["Fedora-42-builder"]["fedoraReleaseName"], "42")
|
self.assertEqual(matrix["Fedora-42-builder"]["fedoraReleaseName"], "42")
|
||||||
@ -86,6 +114,7 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
|
|||||||
|
|
||||||
def test_filter_out_matches_release_name(self):
|
def test_filter_out_matches_release_name(self):
|
||||||
"""Exclude entries when filter-out matches a derived release field."""
|
"""Exclude entries when filter-out matches a derived release field."""
|
||||||
|
self._skip_if_matrix_empty("linux_matrix", 3)
|
||||||
matrix = self.derive_package_matrix(
|
matrix = self.derive_package_matrix(
|
||||||
self.artifact_data,
|
self.artifact_data,
|
||||||
os_name="linux",
|
os_name="linux",
|
||||||
@ -103,6 +132,7 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
|
|||||||
|
|
||||||
def test_build_type_derivation_with_filter_out(self):
|
def test_build_type_derivation_with_filter_out(self):
|
||||||
"""Build type returns linux matrix and honors filter_out by releaseName."""
|
"""Build type returns linux matrix and honors filter_out by releaseName."""
|
||||||
|
self._skip_if_matrix_empty("linux_matrix", 3)
|
||||||
matrix = self.derive_typed_matrix(
|
matrix = self.derive_typed_matrix(
|
||||||
self.artifact_data,
|
self.artifact_data,
|
||||||
target_type="build",
|
target_type="build",
|
||||||
@ -123,6 +153,7 @@ class DeriveDockerImageMatrixTests(unittest.TestCase):
|
|||||||
|
|
||||||
def test_source_type_select_returns_single_entry(self):
|
def test_source_type_select_returns_single_entry(self):
|
||||||
"""Source type should return a single selected Ubuntu entry."""
|
"""Source type should return a single selected Ubuntu entry."""
|
||||||
|
self._skip_if_matrix_empty("linux_matrix", 3)
|
||||||
matrix = self.derive_typed_matrix(
|
matrix = self.derive_typed_matrix(
|
||||||
self.artifact_data,
|
self.artifact_data,
|
||||||
target_type="source",
|
target_type="source",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user