49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
"""SSH and test setup utilities"""
|
|
|
|
import subprocess
|
|
from typing import NamedTuple
|
|
|
|
from .nix_setup import setup_nix_in_nix
|
|
from .port import find_free_port, setup_port_forwarding
|
|
|
|
|
|
class TestEnvironment(NamedTuple):
|
|
host_port: int
|
|
ssh_key: str
|
|
flake_dir: str
|
|
|
|
|
|
def setup_test_environment(
|
|
target,
|
|
temp_dir: str,
|
|
closure_info: str,
|
|
assets_ssh_privkey: str,
|
|
clan_core_for_checks: str,
|
|
) -> TestEnvironment:
|
|
"""Set up common test environment including SSH, port forwarding, and flake setup
|
|
|
|
Returns:
|
|
TestEnvironment with host_port, ssh_key, and flake_dir
|
|
"""
|
|
# Run setup function
|
|
setup_nix_in_nix(closure_info)
|
|
|
|
host_port = find_free_port()
|
|
target.wait_for_unit("sshd.service")
|
|
target.wait_for_open_port(22)
|
|
|
|
setup_port_forwarding(target, host_port)
|
|
|
|
ssh_key = os.path.join(temp_dir, "id_ed25519")
|
|
with open(ssh_key, "w") as f:
|
|
with open(assets_ssh_privkey) as src:
|
|
f.write(src.read())
|
|
os.chmod(ssh_key, 0o600)
|
|
|
|
# Copy test flake to temp directory
|
|
flake_dir = os.path.join(temp_dir, "test-flake")
|
|
subprocess.run(["cp", "-r", clan_core_for_checks, flake_dir], check=True)
|
|
subprocess.run(["chmod", "-R", "+w", flake_dir], check=True)
|
|
|
|
return TestEnvironment(host_port, ssh_key, flake_dir)
|