In this directory we generate all the files that we need to load nixpkgs. This seems more robust than all those environment variables that may or not may be set.
96 lines
2.3 KiB
Python
96 lines
2.3 KiB
Python
import os
|
|
import sys
|
|
from typing import Union
|
|
|
|
import pytest
|
|
import pytest_subprocess.fake_process
|
|
from pytest_subprocess import utils
|
|
|
|
import clan_cli
|
|
from clan_cli.dirs import flake_registry
|
|
from clan_cli.ssh import cli
|
|
|
|
|
|
def test_no_args(
|
|
capsys: pytest.CaptureFixture, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
monkeypatch.setattr(sys, "argv", ["", "ssh"])
|
|
with pytest.raises(SystemExit):
|
|
clan_cli.main()
|
|
captured = capsys.readouterr()
|
|
assert captured.err.startswith("usage:")
|
|
|
|
|
|
# using fp fixture from pytest-subprocess
|
|
def test_ssh_no_pass(
|
|
fp: pytest_subprocess.fake_process.FakeProcess, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
host = "somehost"
|
|
user = "user"
|
|
if os.environ.get("IN_NIX_SANDBOX"):
|
|
monkeypatch.delenv("IN_NIX_SANDBOX")
|
|
cmd: list[Union[str, utils.Any]] = [
|
|
"nix",
|
|
"shell",
|
|
"--extra-experimental-features",
|
|
"nix-command flakes",
|
|
"--flake-registry",
|
|
str(flake_registry()),
|
|
"nixpkgs#tor",
|
|
"nixpkgs#openssh",
|
|
"-c",
|
|
"torify",
|
|
"ssh",
|
|
"-o",
|
|
"UserKnownHostsFile=/dev/null",
|
|
"-o",
|
|
"StrictHostKeyChecking=no",
|
|
f"{user}@{host}",
|
|
fp.any(),
|
|
]
|
|
fp.register(cmd)
|
|
cli.ssh(
|
|
host=host,
|
|
user=user,
|
|
)
|
|
assert fp.call_count(cmd) == 1
|
|
|
|
|
|
def test_ssh_with_pass(
|
|
fp: pytest_subprocess.fake_process.FakeProcess, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
host = "somehost"
|
|
user = "user"
|
|
if os.environ.get("IN_NIX_SANDBOX"):
|
|
monkeypatch.delenv("IN_NIX_SANDBOX")
|
|
cmd: list[Union[str, utils.Any]] = [
|
|
"nix",
|
|
"shell",
|
|
"--extra-experimental-features",
|
|
"nix-command flakes",
|
|
"--flake-registry",
|
|
str(flake_registry()),
|
|
"nixpkgs#tor",
|
|
"nixpkgs#openssh",
|
|
"nixpkgs#sshpass",
|
|
"-c",
|
|
"torify",
|
|
"sshpass",
|
|
"-p",
|
|
fp.any(),
|
|
]
|
|
fp.register(cmd)
|
|
cli.ssh(
|
|
host=host,
|
|
user=user,
|
|
password="XXX",
|
|
)
|
|
assert fp.call_count(cmd) == 1
|
|
|
|
|
|
def test_qrcode_scan(fp: pytest_subprocess.fake_process.FakeProcess) -> None:
|
|
cmd: list[Union[str, utils.Any]] = [fp.any()]
|
|
fp.register(cmd, stdout="https://test.test")
|
|
result = cli.qrcode_scan("test.png")
|
|
assert result == "https://test.test"
|