import os import subprocess import tempfile import unittest ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..") STUBBED = ("launchctl", "lsof", "defaults", "osascript", "pgrep", "pkill", "curl") SSH_ENVS = ({"SSH_CONNECTION": "10.0.0.2 50000 10.0.0.1 22"}, {"SSH_TTY": "/dev/ttys009"}) class RefuseOverSsh(unittest.TestCase): """Только охранная проверка: реальная установка в этих тестах не запускается.""" def assert_refused(self, *cmd): for extra in SSH_ENVS: with self.subTest(cmd=cmd, env=extra), tempfile.TemporaryDirectory() as home, \ tempfile.TemporaryDirectory() as stubs: # второй рубеж: даже если охрана не сработает, системные команды — заглушки for name in STUBBED: path = os.path.join(stubs, name) with open(path, "w") as f: f.write("#!/bin/sh\nexit 1\n") os.chmod(path, 0o755) env = {k: v for k, v in os.environ.items() if k not in ("SSH_CONNECTION", "SSH_TTY")} env.update(HOME=home, PATH=stubs + os.pathsep + env.get("PATH", ""), **extra) r = subprocess.run(["bash", *cmd], cwd=ROOT, env=env, capture_output=True, text=True) self.assertNotEqual(r.returncode, 0) self.assertIn("за самим Mac", r.stdout + r.stderr) self.assertEqual(os.listdir(home), []) def test_install_refuses_over_ssh(self): self.assert_refused("install.sh") def test_uninstall_refuses_over_ssh(self): self.assert_refused("uninstall.sh") self.assert_refused("uninstall.sh", "--purge") if __name__ == "__main__": unittest.main()