[PATCH v2 16/18] oeqa/selftest: Add test for lifecycle scope classification

Stefano Tondo
2026-02-21T05:10:43Z

Add a selftest that verifies lifecycle scope classification correctly
assigns runtime scope to dependency relationships. The test builds
'acl' and checks that its SPDX package data contains
LifecycleScopedRelationship objects with runtime scope, verifying
that implicit shared library dependencies (e.g., glibc) are captured.

Signed-off-by: Stefano Tondo <stefano.tondo.ext@siemens.com>
---
meta/lib/oeqa/selftest/cases/spdx.py | 39 ++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)

diff --git a/meta/lib/oeqa/selftest/cases/spdx.py b/meta/lib/oeqa/selftest/cases/spdx.py
index 9a0ef526d2..a01d8d567f 100644
--- a/meta/lib/oeqa/selftest/cases/spdx.py
+++ b/meta/lib/oeqa/selftest/cases/spdx.py
@@ -489,3 +489,42 @@ class SPDX30Check(SPDX3CheckBase, OESelftestTestCase):
r'\d',
f"Version '{version}' for package '{name}' should contain digits"
)
+
+ def test_lifecycle_scope_dependencies(self):
+ """Test that lifecycle scope classification assigns runtime scope."""
+ objset = self.check_recipe_spdx(
+ "acl",
+ "{DEPLOY_DIR_SPDX}/{SSTATE_PKGARCH}/packages/package-acl.spdx.json",
+ )
+
+ # Find runtime-scoped dependency relationships
+ runtime_rels = []
+ for rel in objset.foreach_type(oe.spdx30.LifecycleScopedRelationship):
+ if (rel.relationshipType == oe.spdx30.RelationshipType.dependsOn and
+ rel.scope == oe.spdx30.LifecycleScopeType.runtime):
+ runtime_rels.append(rel)
+
+ self.assertGreater(
+ len(runtime_rels), 0,
+ "Expected runtime-scoped dependency relationships for acl"
+ )
+
+ # Verify dependencies reference other packages via link IDs
+ all_dep_ids = []
+ for rel in runtime_rels:
+ for to_elem in rel.to:
+ dep_id = to_elem._id if hasattr(to_elem, '_id') else str(to_elem)
+ all_dep_ids.append(dep_id)
+
+ self.assertGreater(
+ len(all_dep_ids), 0,
+ "Runtime dependency relationships should reference target packages"
+ )
+
+ # Verify implicit glibc dependency is captured (auto-detected
+ # shared library dependency)
+ has_glibc = any('glibc' in dep_id for dep_id in all_dep_ids)
+ self.assertTrue(
+ has_glibc,
+ f"Expected glibc in runtime dependencies. Found IDs: {all_dep_ids}"
+ )
--
2.53.0