import os import unittest from pathlib import Path os.environ.setdefault("DJANGO_SETTINGS_MODULE", "archivebox.settings") from archivebox.machine.models import Process class TestProcessRuntimePaths(unittest.TestCase): def test_hook_processes_use_isolated_runtime_dir(self): process = Process( process_type=Process.TypeChoices.HOOK, pwd="/tmp/archive/example/chrome", cmd=["node", "/plugins/chrome/on_Snapshot__11_chrome_wait.js", "--url=https://example.com"], ) expected_dir = Path("/tmp/archive/example/chrome/.hooks/on_Snapshot__11_chrome_wait.js") self.assertEqual(process.runtime_dir, expected_dir) self.assertEqual(process.stdout_file, expected_dir / "stdout.log") self.assertEqual(process.stderr_file, expected_dir / "stderr.log") self.assertEqual(process.pid_file, expected_dir / "process.pid") def test_non_hook_processes_keep_runtime_files_in_pwd(self): process = Process( process_type=Process.TypeChoices.WORKER, pwd="/tmp/archive/example", cmd=["archivebox", "run", "--snapshot-id", "123"], ) expected_dir = Path("/tmp/archive/example") self.assertEqual(process.runtime_dir, expected_dir) self.assertEqual(process.stdout_file, expected_dir / "stdout.log") self.assertEqual(process.stderr_file, expected_dir / "stderr.log") self.assertEqual(process.pid_file, expected_dir / "process.pid")