mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 19:11:08 +00:00
96 lines
3.7 KiB
Python
96 lines
3.7 KiB
Python
import os
|
|
import re
|
|
import shutil
|
|
import socket
|
|
import subprocess
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
SESSION = Path(__file__).resolve().parents[1] / "linuxfs/overlay/usr/local/bin/droiddeck-session"
|
|
|
|
STEAM = ["mangohud.Ab3dE6gH", ".com.valvesoftware.Steam.x1Y2z3/", "steam_chrome_shmem_uid10480_0", "steamADfAnd/"]
|
|
CHROMIUM = ["scoped_dir3yu9Xt/SingletonSocket"]
|
|
APPIMAGE = ["droiddeck-appimage.19PoOD"]
|
|
BUS = ["dbus-1zWfOP1IaR="]
|
|
KDE = ["plasma-csd-generator.BVWIWA/"]
|
|
STALE = STEAM + CHROMIUM + APPIMAGE + BUS + KDE
|
|
KEPT = ["droiddeck-mangohud.conf", ".X11-unix/", "steamworks", "steamABCDEF/inside", "notes.txt",
|
|
"mangohud.conf", ".wine-10480/", "dbus-1zWfOP1IaR.log", "dbus-notasocket",
|
|
"plasma-csd-generator.CQGZSw/kept"]
|
|
|
|
|
|
def sweep_function(tmp):
|
|
match = re.search(r"^clear_stale_tmp\(\) \{\n.*?^\}\n", SESSION.read_text(), re.M | re.S)
|
|
return match.group(0).replace("find /tmp ", "find %s " % tmp)
|
|
|
|
|
|
class SessionTmpTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.root = Path(tempfile.mkdtemp())
|
|
self.addCleanup(shutil.rmtree, self.root, True)
|
|
self.tmp = self.root / "tmp"
|
|
self.tmp.mkdir()
|
|
for name in STALE + KEPT:
|
|
path = self.tmp / name
|
|
if name.endswith("/"):
|
|
path.mkdir(parents=True)
|
|
elif name.endswith("="):
|
|
listener = socket.socket(socket.AF_UNIX)
|
|
listener.bind(str(self.tmp / name[:-1]))
|
|
listener.close()
|
|
else:
|
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
path.write_text("x")
|
|
self.bin = self.root / "bin"
|
|
self.bin.mkdir()
|
|
|
|
def sweep(self, running=""):
|
|
pgrep = self.bin / "pgrep"
|
|
pgrep.write_text("#!/bin/sh\nprintf '%s' '" + running + "'\n")
|
|
pgrep.chmod(0o755)
|
|
env = dict(os.environ, PATH="%s:%s" % (self.bin, os.environ["PATH"]))
|
|
return subprocess.run(["bash", "-c", sweep_function(self.tmp) + "clear_stale_tmp"], env=env,
|
|
capture_output=True, text=True, timeout=30, check=True).stdout
|
|
|
|
def exists(self, name):
|
|
return os.path.lexists(self.tmp / name.rstrip("=").split("/")[0])
|
|
|
|
def test_what_killed_sessions_left_goes_and_nothing_else(self):
|
|
self.assertEqual("== /tmp: cleared 8 entries earlier sessions left\n", self.sweep())
|
|
for name in STALE:
|
|
self.assertFalse(self.exists(name), name)
|
|
for name in KEPT:
|
|
self.assertTrue((self.tmp / name).exists(), name)
|
|
|
|
def kept_while(self, running, owned):
|
|
self.sweep(running)
|
|
for name in STALE:
|
|
self.assertEqual(name in owned, self.exists(name), name)
|
|
|
|
def test_a_running_client_keeps_its_own(self):
|
|
self.kept_while("1234 /root/.local/share/Steam/steamrtarm64/steam -gamepadui\n", STEAM)
|
|
|
|
def test_a_running_chromium_keeps_its_singleton(self):
|
|
self.kept_while("88 /opt/Heroic/heroic --type=renderer --enable-features=x\n", CHROMIUM)
|
|
|
|
def test_a_running_appimage_keeps_its_stamp(self):
|
|
self.kept_while("77 /bin/bash /usr/local/bin/droiddeck-appimage-run /root/Apps/X.AppImage\n", APPIMAGE)
|
|
|
|
def test_a_running_session_bus_keeps_its_socket(self):
|
|
self.kept_while("66 dbus-daemon --config-file=/usr/share/dbus-1/session.conf --nofork --session\n", BUS)
|
|
|
|
def test_the_system_bus_is_not_a_session_bus(self):
|
|
self.kept_while("55 dbus-daemon --config-file=/usr/local/share/droiddeck/system-bus.conf --nofork\n", [])
|
|
|
|
def test_a_running_desktop_keeps_its_decorations(self):
|
|
self.kept_while("44 kwin_wayland --xwayland\n", KDE)
|
|
|
|
def test_a_clean_tmp_says_nothing(self):
|
|
self.sweep()
|
|
self.assertEqual("", self.sweep())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|