from __future__ import annotations from pathlib import Path from sshctl.export.permissions import check_permissions, fix_ssh_permissions def test_check_permissions_ok(tmp_path: Path) -> None: ssh_dir = tmp_path / ".ssh" ssh_dir.mkdir(mode=0o700) (ssh_dir / "config").write_text("Host test\n", encoding="utf-8") (ssh_dir / "config").chmod(0o600) (ssh_dir / "keys.p").mkdir(mode=0o700) (ssh_dir / "keys.p" / "key.pub").write_text("ssh-ed25519 AAA...") (ssh_dir / "keys.p" / "key.pub").chmod(0o644) issues = check_permissions(ssh_dir) total = sum(len(v) for v in issues.values()) assert total == 0 def test_fix_permissions(tmp_path: Path) -> None: ssh_dir = tmp_path / ".ssh" ssh_dir.mkdir(mode=0o755) (ssh_dir / "config").write_text("Host test\n", encoding="utf-8") (ssh_dir / "config").chmod(0o644) (ssh_dir / "id_rsa").write_text("private key data") (ssh_dir / "id_rsa").chmod(0o644) counts = fix_ssh_permissions(ssh_dir) assert counts["dirs"] >= 1 assert counts["private"] >= 1 assert (ssh_dir / "config").stat().st_mode & 0o777 == 0o600 assert (ssh_dir / "id_rsa").stat().st_mode & 0o777 == 0o600