Files
feresaria/scripts/tests/test_portal_install.py
T

56 lines
2.7 KiB
Python

"""Exercise portal upgrade preflight against temporary installation files."""
from pathlib import Path
import subprocess
import tempfile
import unittest
REPO = Path(__file__).resolve().parents[2]
LEGACY = ('[D-BUS Service]\n'
'Name=org.freedesktop.impl.portal.desktop.ferese\n'
'Exec=/usr/local/lib/ferese/current/xdg-desktop-portal-ferese\n')
class PortalInstallTest(unittest.TestCase):
def preflight(self, service=None, unit=None):
script = (REPO / 'scripts/install-session.sh').read_text()
start = script.index('service=/usr/local/share/dbus-1/services/')
script = script[start:script.index('session_target=', start)]
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
if service is not None:
(root / 'activation.service').write_text(service)
if unit is not None:
(root / 'portal.service').write_text(unit)
script = script.replace(
'service=/usr/local/share/dbus-1/services/org.freedesktop.impl.portal.desktop.ferese.service',
'service="$TEST_ROOT/activation.service"')
script = script.replace('$(basename "$service")',
'org.freedesktop.impl.portal.desktop.ferese.service')
script = script.replace(
'portal_unit=/usr/local/lib/systemd/user/xdg-desktop-portal-ferese.service',
'portal_unit="$TEST_ROOT/portal.service"')
return subprocess.run(['bash', '-eu', '-c', script],
env={'repo_dir': str(REPO), 'TEST_ROOT': directory},
capture_output=True, text=True)
def test_accepts_fresh_install_and_previous_activation_file(self):
self.assertEqual(self.preflight().returncode, 0)
self.assertEqual(self.preflight(LEGACY).returncode, 0)
def test_accepts_current_managed_files(self):
service = (REPO / 'packaging/portal/org.freedesktop.impl.portal.desktop.ferese.service').read_text()
unit = (REPO / 'packaging/systemd/xdg-desktop-portal-ferese.service').read_text()
self.assertEqual(self.preflight(service, unit).returncode, 0)
def test_preserves_modified_activation_and_systemd_files(self):
result = self.preflight(LEGACY.replace('/usr/local/lib/ferese/current/', '/custom/'))
self.assertNotEqual(result.returncode, 0)
self.assertIn('Unmanaged portal service', result.stderr)
result = self.preflight(LEGACY, '[Service]\nExecStart=/custom/portal\n')
self.assertNotEqual(result.returncode, 0)
self.assertIn('Unmanaged portal unit', result.stderr)
if __name__ == '__main__':
unittest.main()