Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
203 changes: 203 additions & 0 deletions test/unit/plugin/test_package_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,19 @@ def default_data_lib():
return PackageDataModel(version_info={"test-ubuntu-package.x86_64": "1.11-1.xx11"})


@pytest.fixture
def multi_package_data_lib():
"""Fixture with multiple packages for testing multiple version mismatches."""
return PackageDataModel(
version_info={
"alternatives.x86_64": "1.30-1.fc41",
"audit-libs.x86_64": "4.0.2-1.fc41",
"authselect.x86_64": "1.5.0-8.fc41",
"authselect-libs.x86_64": "1.5.0-8.fc41",
}
)


def test_no_data(package_analyzer, default_data_lib):
res = package_analyzer.analyze_data(default_data_lib)
assert res.status == ExecutionStatus.NOT_RAN
Expand Down Expand Up @@ -108,3 +121,193 @@ def test_data_multiple_errors_regex(package_analyzer, default_data_lib):
assert "missing-package" in res.message
assert "another-missing" in res.message
assert len(res.events) == 3


def test_data_version_mismatch_exact(package_analyzer, default_data_lib):
"""Exact match: wrong version reported."""
args = PackageAnalyzerArgs(
exp_package_ver={"test-ubuntu-package.x86_64": "130-1.xx11"}, regex_match=False
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 1
assert res.events[0].data == {
"expected_package": "test-ubuntu-package.x86_64",
"expected_version": "130-1.xx11",
"found_version": "1.11-1.xx11",
"found_package": "test-ubuntu-package.x86_64",
"task_name": "PackageAnalyzer",
"task_type": "DATA_ANALYZER",
}


def test_data_key_missing_exact(package_analyzer, default_data_lib):
"""Exact match: key typo so package not found."""
args = PackageAnalyzerArgs(
exp_package_ver={"test-ubuntu-package.x86_64-typo": "1.11-1.xx11"},
regex_match=False,
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 1
assert res.events[0].data == {
"expected_package": "test-ubuntu-package.x86_64-typo",
"expected_version": "1.11-1.xx11",
"found_package": None,
"found_version": None,
"task_name": "PackageAnalyzer",
"task_type": "DATA_ANALYZER",
}


def test_data_key_version_mismatch_exact(package_analyzer, default_data_lib):
"""Exact match: correct key, wrong version."""
args = PackageAnalyzerArgs(
exp_package_ver={"test-ubuntu-package.x86_64": "1.0-1.xx11"}, regex_match=False
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 1
assert res.events[0].data == {
"expected_package": "test-ubuntu-package.x86_64",
"expected_version": "1.0-1.xx11",
"found_version": "1.11-1.xx11",
"found_package": "test-ubuntu-package.x86_64",
"task_name": "PackageAnalyzer",
"task_type": "DATA_ANALYZER",
}


def test_multiple_versions_mismatch(package_analyzer, multi_package_data_lib):
"""Exact match: multiple packages with wrong versions or missing keys."""
args = PackageAnalyzerArgs(
exp_package_ver={
"alternatives.86_64": "1.30-1.fc41",
"audit-libs.x86_64": "4.0.21.fc41",
"authselect.x8_64": "1.5.0-8.fc41",
"authselect-libs.x86_64": "15.0-8.fc41",
},
regex_match=False,
)
res = package_analyzer.analyze_data(multi_package_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 4
assert res.events[1].data == {
"expected_package": "audit-libs.x86_64",
"expected_version": "4.0.21.fc41",
"found_package": "audit-libs.x86_64",
"found_version": "4.0.2-1.fc41",
"task_name": "PackageAnalyzer",
"task_type": "DATA_ANALYZER",
}


def test_data_regex(package_analyzer, default_data_lib):
"""Regex match (default): literal package/version matches."""
args = PackageAnalyzerArgs(exp_package_ver={"test-ubuntu-package.x86_64": "1.11-1.xx11"})
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.OK


def test_data_regex_search(package_analyzer, default_data_lib):
"""Regex match: pattern matches package and version."""
args = PackageAnalyzerArgs(
exp_package_ver={
r"test-ubuntu-package\.x86_64": r"1\.\d+-\d+\.\w+\d+",
},
regex_match=True,
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.OK


def test_data_key_not_found_regex_search(package_analyzer, default_data_lib):
"""Regex match: package pattern matches nothing."""
args = PackageAnalyzerArgs(
exp_package_ver={
r"ThisPackageDoesntExist\w+": r"1\.\d+-\d+\.\w+\d+",
},
regex_match=True,
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 1
assert res.events[0].data == {
"expected_package": r"ThisPackageDoesntExist\w+",
"expected_version": r"1\.\d+-\d+\.\w+\d+",
"found_package": None,
"found_version": None,
"task_name": "PackageAnalyzer",
"task_type": "DATA_ANALYZER",
}


def test_match_any_version(package_analyzer, multi_package_data_lib):
"""Regex match: expected version None means any version; package exists."""
args = PackageAnalyzerArgs(
exp_package_ver={r"authselect.*": None},
regex_match=True,
)
res = package_analyzer.analyze_data(multi_package_data_lib, args=args)
assert res.status == ExecutionStatus.OK


def test_match_any_version_missing(package_analyzer, default_data_lib):
"""Regex match: expected version None but no package matches key pattern."""
args = PackageAnalyzerArgs(
exp_package_ver={r"z.*": None},
regex_match=True,
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 1
assert res.events[0].data == {
"expected_package": "z.*",
"expected_version": None,
"found_package": None,
"found_version": None,
"task_name": "PackageAnalyzer",
"task_type": "DATA_ANALYZER",
}


def test_match_any_version_exact(package_analyzer, multi_package_data_lib):
"""Exact match: expected version None means any version; package exists."""
args = PackageAnalyzerArgs(
exp_package_ver={"authselect.x86_64": None},
regex_match=False,
)
res = package_analyzer.analyze_data(multi_package_data_lib, args=args)
assert res.status == ExecutionStatus.OK


def test_mismatch_any_version_exact(package_analyzer, default_data_lib):
"""Exact match: expected version None but package key not found."""
args = PackageAnalyzerArgs(
exp_package_ver={"uthselect.x86_64": None},
regex_match=False,
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 1
assert res.events[0].data == {
"expected_package": "uthselect.x86_64",
"expected_version": None,
"found_package": None,
"found_version": None,
"task_name": "PackageAnalyzer",
"task_type": "DATA_ANALYZER",
}


def test_bad_regex_compile(package_analyzer, default_data_lib):
"""Invalid regex pattern yields regex compile error."""
args = PackageAnalyzerArgs(
exp_package_ver={r"++": "1.11-1.xx11"},
regex_match=True,
)
res = package_analyzer.analyze_data(default_data_lib, args=args)
assert res.status == ExecutionStatus.ERROR
assert len(res.events) == 1
assert "expected_package_search" in res.events[0].data
assert "expected_version_search" in res.events[0].data