This commit is contained in:
44
tests/test_release_manifest.py
Normal file
44
tests/test_release_manifest.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import importlib.util
|
||||
import json
|
||||
from pathlib import Path
|
||||
import tempfile
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
spec = importlib.util.spec_from_file_location('release_manifest', ROOT / 'scripts/release-manifest.py')
|
||||
release = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(release)
|
||||
|
||||
class ReleaseTests(unittest.TestCase):
|
||||
def test_source_id_is_stable(self):
|
||||
self.assertEqual(release.source_id(), release.source_id())
|
||||
self.assertTrue(release.source_id().startswith('csr-'))
|
||||
|
||||
def test_profile_rejects_stale_binary(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
profile = Path(tmp)
|
||||
base = profile / 'airootfs'
|
||||
(base / 'etc/csr-intake').mkdir(parents=True)
|
||||
(base / 'usr/local/bin').mkdir(parents=True)
|
||||
binary = base / 'usr/local/bin/intake-gui'
|
||||
binary.write_bytes(b'original binary'); binary.chmod(0o755)
|
||||
manifest = {'build_id':'csr-test','binaries':{'intake-gui':{'sha256':release.digest(binary)}}}
|
||||
(base / 'etc/csr-intake/release.json').write_text(json.dumps(manifest))
|
||||
binary.write_bytes(b'stale binary')
|
||||
with self.assertRaisesRegex(ValueError, 'hash mismatch'):
|
||||
release.verify(profile)
|
||||
|
||||
def test_complete_profile_is_verified(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
profile=Path(tmp); base=profile/'airootfs'
|
||||
for file in ['etc/csr-intake/release.json', 'usr/local/bin/intake-gui', 'usr/local/bin/intake-login', 'usr/local/bin/intake-prepare', 'etc/systemd/system/getty@tty1.service.d/autologin.conf', 'etc/systemd/system/multi-user.target.wants/NetworkManager.service']:
|
||||
path=base/file;path.parent.mkdir(parents=True,exist_ok=True);path.write_text('fixture')
|
||||
binary=base/'usr/local/bin/intake-gui';binary.chmod(0o755)
|
||||
(base/'etc/csr-intake/release.json').write_text(json.dumps({'build_id':'csr-test','binaries':{'intake-gui':{'sha256':release.digest(binary)}}}))
|
||||
packages=['networkmanager','curl','ca-certificates','python','usbutils','smartmontools','alsa-utils','ffmpeg','stress-ng','xdg-utils','firefox']
|
||||
(profile/'packages.x86_64').write_text('\n'.join(packages))
|
||||
with patch.object(release.subprocess,'check_output',return_value='GUI csr-test'):
|
||||
release.verify(profile)
|
||||
(profile/'packages.x86_64').write_text('networkmanager')
|
||||
with self.assertRaisesRegex(ValueError,'Missing live package'):
|
||||
release.verify(profile)
|
||||
Reference in New Issue
Block a user