Files
DroidDeck/tools/tests/test_session_tmp.py
T
2026-10-13 21:27:42 -04:00

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()