Files
DroidDeck/tools/tests/test_session_assets.py
T

53 lines
2.4 KiB
Python

import importlib.util
from pathlib import Path
import tempfile
import unittest
from zipfile import ZipFile
spec = importlib.util.spec_from_file_location(
'check_session_assets', Path(__file__).resolve().parents[1] / 'release/check_session_assets.py')
assets = importlib.util.module_from_spec(spec)
spec.loader.exec_module(assets)
class SessionAssetsTest(unittest.TestCase):
def setUp(self):
self.temp = tempfile.TemporaryDirectory()
self.addCleanup(self.temp.cleanup)
self.root = Path(self.temp.name)
self.overlay = self.root / 'overlay'
self.helper = self.overlay / 'usr/local/bin/droiddeck-login1'
self.helper.parent.mkdir(parents=True)
self.helper.write_bytes(b'current helper')
self.apk = self.root / 'app.apk'
self.name = 'assets/linuxfs/usr/local/bin/droiddeck-login1'
def test_missing_required_helper_rejects_cached_bundle(self):
with ZipFile(self.apk, 'w') as package:
package.writestr('classes.dex', b'classes')
self.assertEqual(['missing ' + self.name], assets.check(self.apk, self.overlay))
def test_stale_helper_rejects_cached_bundle(self):
with ZipFile(self.apk, 'w') as package:
package.writestr(self.name, b'old helper')
self.assertEqual(['stale ' + self.name], assets.check(self.apk, self.overlay))
def test_current_helper_passes(self):
with ZipFile(self.apk, 'w') as package:
package.writestr(self.name, self.helper.read_bytes())
self.assertEqual([], assets.check(self.apk, self.overlay))
def test_bundled_helper_must_also_be_extracted(self):
self.assertEqual(['not extracted at session start: usr/local/bin/droiddeck-login1'],
assets.check_extraction(self.overlay, ''))
mapping = '"usr/local/bin/droiddeck-login1" to "usr/local/bin/droiddeck-login1"'
self.assertEqual([], assets.check_extraction(self.overlay, mapping))
def test_helper_extracted_under_another_name_counts(self):
mapping = '"usr/local/bin/droiddeck-login1" to "usr/local/bin/login1"'
self.assertEqual([], assets.check_extraction(self.overlay, mapping))
mapping = '"usr/local/bin/droiddeck-login1" to "usr/local/bin/sub/login1"'
self.assertEqual(['not extracted at session start: usr/local/bin/droiddeck-login1'],
assets.check_extraction(self.overlay, mapping))