23 Commits

Author SHA1 Message Date
4c9cd00c90 fix: remove incorrect port-in-use check for reverse tunnels
The `_is_port_in_use` bind check was wrong for `-R` tunnels: local_port is
the forward target (e.g. a Docker container), so it should be listening,
not free. Drop the check — autossh doesn't require the target to be
reachable at startup.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 18:00:11 +08:00
f218f3ebc2 fix: clean stale pid on remove, use shlex.split for ssh_options 2026-05-21 13:13:25 +08:00
1792eab55d test: add integration tests for full tunnel lifecycle 2026-05-21 13:07:15 +08:00
4b0e81c556 test: add integration tests for full tunnel lifecycle
Exercises the complete PID file lifecycle end-to-end using a real subprocess
with a fake autossh (sleep 60 script), covering start, stop, status, stale PID
cleanup, restart, and idempotency scenarios.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 13:01:40 +08:00
c365e668a5 fix: stale stop message, add restart/start-all/stop-all tests 2026-05-21 12:59:04 +08:00
179e3b2b5c feat: add CLI lifecycle commands (start, stop, restart, status, check)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 12:47:32 +08:00
2bb08e92c7 fix: single load in remove, use dataclasses.replace in config_cmd, add remove-running test 2026-05-21 12:45:08 +08:00
9e9ba66f1f fix: remove unused TunnelConfig and ensure_dirs imports from test_cli_config.py 2026-05-21 12:37:50 +08:00
daaffd8291 feat: add CLI config management commands (init, add, remove, list, show, config)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 12:34:09 +08:00
06452f48fe feat: add display formatting helpers 2026-05-21 12:30:21 +08:00
d1c61ee930 fix: remove unused subprocess import from test_check.py 2026-05-21 12:29:22 +08:00
005be7b31c feat: add SSH connectivity check
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 12:25:16 +08:00
522fa1b57e fix: remove unused subprocess import, guard logs dir in start_tunnel 2026-05-21 12:24:20 +08:00
5218431349 feat: add tunnel start/stop with PID file tracking
Implements build_autossh_cmd, start_tunnel, and stop_tunnel in process.py.
Adds _reap() helper to handle zombie processes in test environments where
the parent process is long-lived (SIGKILL leaves zombies unless waitpid is called).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 12:19:06 +08:00
8a2e4b6cc0 fix: correct PermissionError handling in is_process_alive, add corrupt PID test 2026-05-21 12:15:19 +08:00
6416f8a8e2 feat: add PID file utilities and tunnel status detection
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 12:10:37 +08:00
62414399b1 fix: clean up config.py unused imports, null-YAML safety, and add non-default roundtrip test 2026-05-21 12:08:56 +08:00
53133ccb67 feat: add TunnelConfig dataclass and YAML I/O
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 11:31:19 +08:00
113cc994b1 chore: add .gitignore and remove cached pycache
- Created .gitignore with standard Python patterns
- Removed committed __pycache__/__init__.cpython-314.pyc from git tracking

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 11:29:32 +08:00
4070533a68 chore: add uv.lock 2026-05-21 11:22:37 +08:00
0408fc2f7d feat: scaffold autossh-mgr project structure 2026-05-21 11:22:27 +08:00
e6fc5db85a Add autossh-mgr implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 21:34:04 +08:00
84514afe57 Add autossh-mgr design spec
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 21:19:25 +08:00