64 lines
2.6 KiB
Python
64 lines
2.6 KiB
Python
import shlex
|
|
from pathlib import Path
|
|
import tempfile
|
|
import unittest
|
|
|
|
from hydra import image
|
|
|
|
|
|
class BrandingTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.tmp = tempfile.TemporaryDirectory()
|
|
self.addCleanup(self.tmp.cleanup)
|
|
self.root = Path(self.tmp.name) / 'rootfs'
|
|
self.root.mkdir()
|
|
version = '6.18.54-gentoo-dist-bin'
|
|
(self.root / 'lib/modules' / version).mkdir(parents=True)
|
|
(self.root / 'boot').mkdir()
|
|
(self.root / 'boot' / ('vmlinuz-' + version)).write_text('kernel')
|
|
tmpfiles = self.root / 'usr/lib/tmpfiles.d'
|
|
tmpfiles.mkdir(parents=True)
|
|
for name, content in (
|
|
('home.conf', 'Q /home 0755 - - -\nq /srv 0755 - - -\n'),
|
|
('portables.conf', 'Q /var/lib/portables 0700\n'),
|
|
('systemd-nspawn.conf', 'Q /var/lib/machines 0700 - - -\n'),
|
|
):
|
|
(tmpfiles / name).write_text(content)
|
|
|
|
def release(self):
|
|
return dict(line.split('=', 1)[0:1] + shlex.split(line.split('=', 1)[1])
|
|
for line in (self.root / 'etc/os-release').read_text().splitlines()
|
|
if line and not line.startswith('#'))
|
|
|
|
def test_export_brands_derivative_without_rewriting_packaged_gentoo_metadata(self):
|
|
vendor = self.root / 'usr/lib/os-release'
|
|
vendor.parent.mkdir(parents=True, exist_ok=True)
|
|
original = "NAME='Gentoo'\nID=gentoo\nPRETTY_NAME='Gentoo Linux'\nVERSION_ID=2.18\nHOME_URL='https://www.gentoo.org/'\n"
|
|
vendor.write_text(original)
|
|
(self.root / 'etc').mkdir()
|
|
(self.root / 'etc/os-release').symlink_to('../usr/lib/os-release')
|
|
|
|
image.configure_rootfs(self.root, Path(__file__).resolve().parents[1])
|
|
|
|
self.assertEqual(self.release(), {
|
|
'NAME': 'Hydra OS', 'PRETTY_NAME': 'Hydra OS', 'ID': 'hydra-os',
|
|
'ID_LIKE': 'gentoo', 'VERSION_ID': '2.18',
|
|
'HOME_URL': 'https://www.gentoo.org/',
|
|
})
|
|
self.assertFalse((self.root / 'etc/os-release').is_symlink())
|
|
self.assertEqual(vendor.read_text(), original)
|
|
self.assertEqual((self.root / 'etc/hostname').read_text(), 'hydra-os\n')
|
|
|
|
def test_export_can_brand_minimal_payload_without_os_release(self):
|
|
image.configure_rootfs(self.root, Path(__file__).resolve().parents[1])
|
|
|
|
self.assertTrue((self.root / 'etc/os-release').is_file())
|
|
self.assertEqual(self.release(), {
|
|
'NAME': 'Hydra OS', 'PRETTY_NAME': 'Hydra OS',
|
|
'ID': 'hydra-os', 'ID_LIKE': 'gentoo',
|
|
})
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|