Declare logger metadata test build output

This commit is contained in:
Dom
2026-10-25 02:06:43 -05:00
parent 4b30638588
commit 286641c1fe
3 changed files with 43 additions and 1 deletions
+1 -1
View File
@@ -1 +1 @@
{"protected_inventory_sha256": "434ce73a81cd90850d90ab823a722d421bdb4c070e8d32beaaef0d7bf48c2d76", "schema_version": 1}
{"protected_inventory_sha256": "cfaabf7b3685cfb3b93666605271972ef753096ae8c1c787a7ae5a42c627fbe2", "schema_version": 1}
+4
View File
@@ -167,6 +167,10 @@
"recipe": "openpilot/system/loggerd/SConscript",
"required_tracked": true
},
"openpilot/system/loggerd/tests/test_model_metadata": {
"recipe": "openpilot/system/loggerd/SConscript",
"required_tracked": false
},
"openpilot/tools/replay/libmedia_mux.so": {
"recipe": "openpilot/tools/replay/SConscript",
"required_tracked": true
@@ -59,6 +59,44 @@ class BuildIdentityTests(unittest.TestCase):
path.write_bytes(b'unregistered artifact')
self.assertFalse(helper.same_build_inputs(first, helper.build_identity(self.root)))
def test_logger_metadata_test_is_an_exact_optional_build_output(self):
name = 'openpilot/system/loggerd/tests/test_model_metadata'
recipe = 'openpilot/system/loggerd/SConscript'
self.assertEqual(self.inventory.get(name), {'recipe': recipe, 'required_tracked': False})
output = self.root / name
source = self.root / (name + '.cc')
source.write_text('native test source\n')
subprocess.run([*GIT, 'rm', '--cached', name], cwd=self.root, check=True, capture_output=True)
subprocess.run([*GIT, 'add', str(source.relative_to(self.root))], cwd=self.root, check=True)
subprocess.run([*GIT, '-c', 'user.name=Test', '-c', 'user.email=test@example.com', 'commit', '-qm', 'Untracked native test output'],
cwd=self.root, check=True)
output.chmod(0o755)
built = helper.build_identity(self.root)
self.assertNotIn(name, built['inputs']['untracked'])
self.assertEqual(built['declared_outputs'][name], helper.file_record(output))
self.assertIn(name + '.cc', built['inputs']['tracked_inputs'])
self.assertIn(recipe, built['inputs']['recipes'])
output.unlink()
checkout = helper.build_identity(self.root)
self.assertIsNone(checkout['declared_outputs'][name])
self.assertTrue(helper.same_build_inputs(built, checkout))
output.write_bytes(b'independently rebuilt native test')
rebuilt = helper.build_identity(self.root)
self.assertTrue(helper.same_build_inputs(built, rebuilt))
self.assertNotEqual(built['declared_outputs'][name]['sha256'], rebuilt['declared_outputs'][name]['sha256'])
self.assertNotEqual(built, rebuilt) # Per-job before/after still fails closed.
for path in (source, self.root / recipe):
original = path.read_bytes()
path.write_bytes(b'changed input')
self.assertFalse(helper.same_build_inputs(built, helper.build_identity(self.root)))
path.write_bytes(original)
output.with_name(output.name + '_other').write_bytes(b'undeclared neighboring output')
self.assertFalse(helper.same_build_inputs(built, helper.build_identity(self.root)))
forged = copy.deepcopy(built)
del forged['declared_outputs'][name]
with self.assertRaises(ValueError):
helper.same_build_inputs(built, forged)
def test_missing_declared_artifact_is_denied(self):
(self.root / 'msgq_repo/msgq/ipc_pyx.so').unlink()
with self.assertRaises(ValueError):