Revert "nixos-rebuild-ng: {assert_called_with,assert_has_calls} -> {call_args,call_args_list}"

This reverts commit d6e849ee03.

It was a bad idea, the diffs are even worse than before for anything
that has more 2 calls.
This commit is contained in:
Thiago Kenji Okada
2025-02-13 21:23:37 +00:00
parent 761e1f5aa1
commit 52c671bafb
4 changed files with 704 additions and 677 deletions
File diff suppressed because it is too large Load Diff
@@ -1,7 +1,8 @@
import platform
import subprocess
from pathlib import Path
from unittest.mock import Mock, patch
from typing import Any
from unittest.mock import patch
from pytest import MonkeyPatch
@@ -78,9 +79,7 @@ def test_flake_to_attr() -> None:
@patch(get_qualified_name(platform.node), autospec=True)
def test_flake_from_arg(
mock_node: Mock, monkeypatch: MonkeyPatch, tmpdir: Path
) -> None:
def test_flake_from_arg(mock_node: Any, monkeypatch: MonkeyPatch, tmpdir: Path) -> None:
mock_node.return_value = "hostname"
# Flake string
@@ -162,12 +161,11 @@ def test_flake_from_arg(
@patch(get_qualified_name(m.Path.mkdir, m), autospec=True)
def test_profile_from_arg(mock_mkdir: Mock) -> None:
def test_profile_from_arg(mock_mkdir: Any) -> None:
assert m.Profile.from_arg("system") == m.Profile(
"system",
Path("/nix/var/nix/profiles/system"),
)
mock_mkdir.assert_not_called()
assert m.Profile.from_arg("something") == m.Profile(
"something",
@@ -3,7 +3,7 @@ import uuid
from pathlib import Path
from subprocess import PIPE, CompletedProcess
from typing import Any
from unittest.mock import ANY, Mock, call, patch
from unittest.mock import ANY, call, patch
import pytest
from pytest import MonkeyPatch
@@ -20,13 +20,13 @@ from .helpers import get_qualified_name
autospec=True,
return_value=CompletedProcess([], 0, stdout=" \n/path/to/file\n "),
)
def test_build(mock_run: Mock) -> None:
def test_build(mock_run: Any) -> None:
assert n.build(
"config.system.build.attr",
m.BuildAttr("<nixpkgs/nixos>", None),
{"nix_flag": "foo"},
) == Path("/path/to/file")
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix-build",
"<nixpkgs/nixos>",
@@ -38,17 +38,13 @@ def test_build(mock_run: Mock) -> None:
stdout=PIPE,
)
mock_run.reset_mock()
assert n.build(
"config.system.build.attr", m.BuildAttr(Path("file"), "preAttr")
) == Path("/path/to/file")
assert mock_run.call_args_list == [
call(
["nix-build", Path("file"), "--attr", "preAttr.config.system.build.attr"],
stdout=PIPE,
)
]
mock_run.assert_called_with(
["nix-build", Path("file"), "--attr", "preAttr.config.system.build.attr"],
stdout=PIPE,
)
@patch(
@@ -56,7 +52,7 @@ def test_build(mock_run: Mock) -> None:
autospec=True,
return_value=CompletedProcess([], 0, stdout=" \n/path/to/file\n "),
)
def test_build_flake(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) -> None:
def test_build_flake(mock_run: Any, monkeypatch: MonkeyPatch, tmpdir: Path) -> None:
monkeypatch.chdir(tmpdir)
flake = m.Flake.parse(".#hostname")
@@ -65,7 +61,7 @@ def test_build_flake(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) ->
flake,
{"no_link": True, "nix_flag": "foo"},
) == Path("/path/to/file")
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix",
"--extra-experimental-features",
@@ -83,9 +79,7 @@ def test_build_flake(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) ->
@patch(get_qualified_name(n.run_wrapper, n), autospec=True)
@patch(get_qualified_name(n.uuid4, n), autospec=True)
def test_build_remote(
mock_uuid4: Mock, mock_run: Mock, monkeypatch: MonkeyPatch
) -> None:
def test_build_remote(mock_uuid4: Any, mock_run: Any, monkeypatch: MonkeyPatch) -> None:
build_host = m.Remote("user@host", [], None)
monkeypatch.setenv("NIX_SSHOPTS", "--ssh opts")
@@ -114,53 +108,58 @@ def test_build_remote(
instantiate_flags={"inst": True},
copy_flags={"copy": True},
) == Path("/path/to/config")
assert mock_run.call_args_list == [
call(
[
"nix-instantiate",
"<nixpkgs/nixos>",
"--attr",
"preAttr.config.system.build.toplevel",
"--add-root",
n.tmpdir.TMPDIR_PATH / "00000000000000000000000000000001",
"--inst",
],
stdout=PIPE,
),
call(
[
"nix-copy-closure",
"--copy",
"--to",
"user@host",
Path("/path/to/file"),
],
extra_env={"NIX_SSHOPTS": " ".join([*p.SSH_DEFAULT_OPTS, "--ssh opts"])},
),
call(
["mktemp", "-d", "-t", "nixos-rebuild.XXXXX"],
remote=build_host,
stdout=PIPE,
),
call(
[
"nix-store",
"--realise",
Path("/path/to/file"),
"--add-root",
Path("/tmp/tmpdir/00000000000000000000000000000002"),
"--realise",
],
remote=build_host,
stdout=PIPE,
),
call(
["readlink", "-f", "/tmp/tmpdir/config"],
remote=build_host,
stdout=PIPE,
),
call(["rm", "-rf", Path("/tmp/tmpdir")], remote=build_host, check=False),
]
mock_run.assert_has_calls(
[
call(
[
"nix-instantiate",
"<nixpkgs/nixos>",
"--attr",
"preAttr.config.system.build.toplevel",
"--add-root",
n.tmpdir.TMPDIR_PATH / "00000000000000000000000000000001",
"--inst",
],
stdout=PIPE,
),
call(
[
"nix-copy-closure",
"--copy",
"--to",
"user@host",
Path("/path/to/file"),
],
extra_env={
"NIX_SSHOPTS": " ".join([*p.SSH_DEFAULT_OPTS, "--ssh opts"])
},
),
call(
["mktemp", "-d", "-t", "nixos-rebuild.XXXXX"],
remote=build_host,
stdout=PIPE,
),
call(
[
"nix-store",
"--realise",
Path("/path/to/file"),
"--add-root",
Path("/tmp/tmpdir/00000000000000000000000000000002"),
"--realise",
],
remote=build_host,
stdout=PIPE,
),
call(
["readlink", "-f", "/tmp/tmpdir/config"],
remote=build_host,
stdout=PIPE,
),
call(["rm", "-rf", Path("/tmp/tmpdir")], remote=build_host, check=False),
]
)
@patch(
@@ -169,7 +168,7 @@ def test_build_remote(
return_value=CompletedProcess([], 0, stdout=" \n/path/to/file\n "),
)
def test_build_remote_flake(
mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path
mock_run: Any, monkeypatch: MonkeyPatch, tmpdir: Path
) -> None:
monkeypatch.chdir(tmpdir)
flake = m.Flake.parse(".#hostname")
@@ -184,43 +183,47 @@ def test_build_remote_flake(
copy_flags={"copy": True},
flake_build_flags={"build": True},
) == Path("/path/to/file")
assert mock_run.call_args_list == [
call(
[
"nix",
"--extra-experimental-features",
"nix-command flakes",
"eval",
"--raw",
".#nixosConfigurations.hostname.config.system.build.toplevel.drvPath",
"--flake",
],
stdout=PIPE,
),
call(
[
"nix-copy-closure",
"--copy",
"--to",
"user@host",
Path("/path/to/file"),
],
extra_env={"NIX_SSHOPTS": " ".join([*p.SSH_DEFAULT_OPTS, "--ssh opts"])},
),
call(
[
"nix",
"--extra-experimental-features",
"nix-command flakes",
"build",
"/path/to/file^*",
"--print-out-paths",
"--build",
],
remote=build_host,
stdout=PIPE,
),
]
mock_run.assert_has_calls(
[
call(
[
"nix",
"--extra-experimental-features",
"nix-command flakes",
"eval",
"--raw",
".#nixosConfigurations.hostname.config.system.build.toplevel.drvPath",
"--flake",
],
stdout=PIPE,
),
call(
[
"nix-copy-closure",
"--copy",
"--to",
"user@host",
Path("/path/to/file"),
],
extra_env={
"NIX_SSHOPTS": " ".join([*p.SSH_DEFAULT_OPTS, "--ssh opts"])
},
),
call(
[
"nix",
"--extra-experimental-features",
"nix-command flakes",
"build",
"/path/to/file^*",
"--print-out-paths",
"--build",
],
remote=build_host,
stdout=PIPE,
),
]
)
def test_copy_closure(monkeypatch: MonkeyPatch) -> None:
@@ -233,7 +236,7 @@ def test_copy_closure(monkeypatch: MonkeyPatch) -> None:
build_host = m.Remote("user@build.host", [], None)
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
n.copy_closure(closure, target_host)
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix-copy-closure", "--to", "user@target.host", closure],
extra_env={"NIX_SSHOPTS": " ".join(p.SSH_DEFAULT_OPTS)},
)
@@ -241,7 +244,7 @@ def test_copy_closure(monkeypatch: MonkeyPatch) -> None:
monkeypatch.setenv("NIX_SSHOPTS", "--ssh build-opt")
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
n.copy_closure(closure, None, build_host, {"copy_flag": True})
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix-copy-closure", "--copy-flag", "--from", "user@build.host", closure],
extra_env={
"NIX_SSHOPTS": " ".join([*p.SSH_DEFAULT_OPTS, "--ssh build-opt"])
@@ -255,7 +258,7 @@ def test_copy_closure(monkeypatch: MonkeyPatch) -> None:
}
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
n.copy_closure(closure, target_host, build_host, {"copy_flag": True})
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix",
"copy",
@@ -272,24 +275,26 @@ def test_copy_closure(monkeypatch: MonkeyPatch) -> None:
monkeypatch.setattr(n, "WITH_NIX_2_18", False)
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
n.copy_closure(closure, target_host, build_host)
assert mock_run.call_args_list == [
call(
["nix-copy-closure", "--from", "user@build.host", closure],
extra_env=extra_env,
),
call(
["nix-copy-closure", "--to", "user@target.host", closure],
extra_env=extra_env,
),
]
mock_run.assert_has_calls(
[
call(
["nix-copy-closure", "--from", "user@build.host", closure],
extra_env=extra_env,
),
call(
["nix-copy-closure", "--to", "user@target.host", closure],
extra_env=extra_env,
),
]
)
@patch(get_qualified_name(n.run_wrapper, n), autospec=True)
def test_edit(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) -> None:
def test_edit(mock_run: Any, monkeypatch: MonkeyPatch, tmpdir: Path) -> None:
# Flake
flake = m.Flake.parse(f"{tmpdir}#attr")
n.edit(flake, {"commit_lock_file": True})
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix",
"--extra-experimental-features",
@@ -311,7 +316,7 @@ def test_edit(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) -> None:
mp.setenv("EDITOR", "editor")
n.edit(None)
assert mock_run.call_args == call(["editor", default_nix], check=False)
mock_run.assert_called_with(["editor", default_nix], check=False)
@patch(
@@ -328,13 +333,13 @@ def test_edit(mock_run: Mock, monkeypatch: MonkeyPatch, tmpdir: Path) -> None:
""",
),
)
def test_get_build_image_variants(mock_run: Mock, tmp_path: Path) -> None:
def test_get_build_image_variants(mock_run: Any, tmp_path: Path) -> None:
build_attr = m.BuildAttr("<nixpkgs/nixos>", None)
assert n.get_build_image_variants(build_attr) == {
"azure": "nixos-image-azure-25.05.20250102.6df2492-x86_64-linux.vhd",
"vmware": "nixos-image-vmware-25.05.20250102.6df2492-x86_64-linux.vmdk",
}
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix-instantiate",
"--eval",
@@ -352,14 +357,12 @@ def test_get_build_image_variants(mock_run: Mock, tmp_path: Path) -> None:
stdout=PIPE,
)
mock_run.reset_mock()
build_attr = m.BuildAttr(Path(tmp_path), "preAttr")
assert n.get_build_image_variants(build_attr, {"inst_flag": True}) == {
"azure": "nixos-image-azure-25.05.20250102.6df2492-x86_64-linux.vhd",
"vmware": "nixos-image-vmware-25.05.20250102.6df2492-x86_64-linux.vmdk",
}
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix-instantiate",
"--eval",
@@ -393,13 +396,13 @@ def test_get_build_image_variants(mock_run: Mock, tmp_path: Path) -> None:
""",
),
)
def test_get_build_image_variants_flake(mock_run: Mock) -> None:
def test_get_build_image_variants_flake(mock_run: Any) -> None:
flake = m.Flake(Path("flake.nix"), "myAttr")
assert n.get_build_image_variants_flake(flake, {"eval_flag": True}) == {
"azure": "nixos-image-azure-25.05.20250102.6df2492-x86_64-linux.vhd",
"vmware": "nixos-image-vmware-25.05.20250102.6df2492-x86_64-linux.vmdk",
}
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix",
"eval",
@@ -424,7 +427,7 @@ def test_get_nixpkgs_rev() -> None:
side_effect=[CompletedProcess([], 0, "")],
) as mock_run:
assert n.get_nixpkgs_rev(path) is None
assert mock_run.call_args == call(
mock_run.assert_called_with(
["git", "-C", path, "rev-parse", "--short", "HEAD"],
check=False,
capture_output=True,
@@ -451,7 +454,7 @@ def test_get_nixpkgs_rev() -> None:
],
) as mock_run:
assert n.get_nixpkgs_rev(path) == ".git.0f7c82403fd6"
assert mock_run.call_args_list == expected_calls
mock_run.assert_has_calls(expected_calls)
with patch(
get_qualified_name(n.run_wrapper, n),
@@ -462,7 +465,7 @@ def test_get_nixpkgs_rev() -> None:
],
) as mock_run:
assert n.get_nixpkgs_rev(path) == ".git.0f7c82403fd6M"
assert mock_run.call_args_list == expected_calls
mock_run.assert_has_calls(expected_calls)
def test_get_generations(tmp_path: Path) -> None:
@@ -503,7 +506,7 @@ def test_get_generations_from_nix_env(tmp_path: Path) -> None:
m.Generation(id=2083, current=False, timestamp="2024-11-07 22:59:41"),
m.Generation(id=2084, current=True, timestamp="2024-11-07 23:54:17"),
]
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix-env", "-p", path, "--list-generations"],
stdout=PIPE,
remote=None,
@@ -521,7 +524,7 @@ def test_get_generations_from_nix_env(tmp_path: Path) -> None:
m.Generation(id=2083, current=False, timestamp="2024-11-07 22:59:41"),
m.Generation(id=2084, current=True, timestamp="2024-11-07 23:54:17"),
]
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix-env", "-p", path, "--list-generations"],
stdout=PIPE,
remote=remote,
@@ -545,7 +548,7 @@ def test_get_generations_from_nix_env(tmp_path: Path) -> None:
),
],
)
def test_list_generations(mock_get_generations: Mock, tmp_path: Path) -> None:
def test_list_generations(mock_get_generations: Any, tmp_path: Path) -> None:
# Probably better to test this function in a real system, this test is
# mostly to make sure it doesn't break horribly
assert n.list_generations(m.Profile("system", tmp_path)) == [
@@ -571,20 +574,18 @@ def test_list_generations(mock_get_generations: Mock, tmp_path: Path) -> None:
@patch(get_qualified_name(n.run_wrapper, n), autospec=True)
def test_repl(mock_run: Mock) -> None:
def test_repl(mock_run: Any) -> None:
n.repl("attr", m.BuildAttr("<nixpkgs/nixos>", None), {"nix_flag": True})
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix", "repl", "--file", "<nixpkgs/nixos>", "--nix-flag"]
)
n.repl("attr", m.BuildAttr(Path("file.nix"), "myAttr"))
assert mock_run.call_args == call(
["nix", "repl", "--file", Path("file.nix"), "myAttr"]
)
mock_run.assert_called_with(["nix", "repl", "--file", Path("file.nix"), "myAttr"])
@patch(get_qualified_name(n.run_wrapper, n), autospec=True)
def test_repl_flake(mock_run: Mock) -> None:
def test_repl_flake(mock_run: Any) -> None:
n.repl_flake("attr", m.Flake(Path("flake.nix"), "myAttr"), {"nix_flag": True})
# See nixos-rebuild-ng.tests.repl for a better test,
# this is mostly for sanity check
@@ -592,14 +593,14 @@ def test_repl_flake(mock_run: Mock) -> None:
@patch(get_qualified_name(n.run_wrapper, n), autospec=True)
def test_rollback(mock_run: Mock, tmp_path: Path) -> None:
def test_rollback(mock_run: Any, tmp_path: Path) -> None:
path = tmp_path / "test"
path.touch()
profile = m.Profile("system", path)
assert n.rollback(profile, None, False) == profile.path
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix-env", "--rollback", "-p", path],
remote=None,
sudo=False,
@@ -607,7 +608,7 @@ def test_rollback(mock_run: Mock, tmp_path: Path) -> None:
target_host = m.Remote("user@localhost", [], None)
assert n.rollback(profile, target_host, True) == profile.path
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix-env", "--rollback", "-p", path],
remote=target_host,
sudo=True,
@@ -619,10 +620,8 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None:
path.touch()
profile = m.Profile("system", path)
with patch(
get_qualified_name(n.run_wrapper, n),
autospec=True,
return_value=CompletedProcess(
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
mock_run.return_value = CompletedProcess(
[],
0,
stdout=textwrap.dedent("""\
@@ -630,13 +629,12 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None:
2083 2024-11-07 22:59:41
2084 2024-11-07 23:54:17 (current)
"""),
),
) as mock_run:
)
assert (
n.rollback_temporary_profile(m.Profile("system", path), None, False)
== path.parent / "system-2083-link"
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix-env",
"-p",
@@ -653,7 +651,7 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None:
n.rollback_temporary_profile(m.Profile("foo", path), target_host, True)
== path.parent / "foo-2083-link"
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"nix-env",
"-p",
@@ -665,16 +663,13 @@ def test_rollback_temporary_profile(tmp_path: Path) -> None:
sudo=True,
)
with patch(
get_qualified_name(n.run_wrapper, n),
autospec=True,
return_value=CompletedProcess([], 0, stdout=""),
) as mock_run:
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
mock_run.return_value = CompletedProcess([], 0, stdout="")
assert n.rollback_temporary_profile(profile, None, False) is None
@patch(get_qualified_name(n.run_wrapper, n), autospec=True)
def test_set_profile(mock_run: Mock) -> None:
def test_set_profile(mock_run: Any) -> None:
profile_path = Path("/path/to/profile")
config_path = Path("/path/to/config")
n.set_profile(
@@ -684,7 +679,7 @@ def test_set_profile(mock_run: Mock) -> None:
sudo=False,
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
["nix-env", "-p", profile_path, "--set", config_path],
remote=None,
sudo=False,
@@ -692,7 +687,7 @@ def test_set_profile(mock_run: Mock) -> None:
@patch(get_qualified_name(n.run_wrapper, n), autospec=True)
def test_switch_to_configuration(mock_run: Mock, monkeypatch: MonkeyPatch) -> None:
def test_switch_to_configuration(mock_run: Any, monkeypatch: MonkeyPatch) -> None:
profile_path = Path("/path/to/profile")
config_path = Path("/path/to/config")
@@ -707,7 +702,7 @@ def test_switch_to_configuration(mock_run: Mock, monkeypatch: MonkeyPatch) -> No
specialisation=None,
install_bootloader=False,
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
[profile_path / "bin/switch-to-configuration", "switch"],
extra_env={"NIXOS_INSTALL_BOOTLOADER": "0"},
sudo=False,
@@ -741,7 +736,7 @@ def test_switch_to_configuration(mock_run: Mock, monkeypatch: MonkeyPatch) -> No
install_bootloader=True,
specialisation="special",
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
config_path / "specialisation/special/bin/switch-to-configuration",
"test",
@@ -762,17 +757,17 @@ def test_switch_to_configuration(mock_run: Mock, monkeypatch: MonkeyPatch) -> No
],
)
@patch(get_qualified_name(n.Path.is_dir, n), autospec=True, return_value=True)
def test_upgrade_channels(mock_is_dir: Mock, mock_glob: Mock) -> None:
def test_upgrade_channels(mock_is_dir: Any, mock_glob: Any) -> None:
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
n.upgrade_channels(False)
assert mock_run.call_args == call(["nix-channel", "--update", "nixos"], check=False)
mock_run.reset_mock()
mock_run.assert_called_with(["nix-channel", "--update", "nixos"], check=False)
with patch(get_qualified_name(n.run_wrapper, n), autospec=True) as mock_run:
n.upgrade_channels(True)
assert mock_run.call_args_list == [
call(["nix-channel", "--update", "nixos"], check=False),
call(["nix-channel", "--update", "nixos-hardware"], check=False),
call(["nix-channel", "--update", "home-manager"], check=False),
]
mock_run.assert_has_calls(
[
call(["nix-channel", "--update", "nixos"], check=False),
call(["nix-channel", "--update", "nixos-hardware"], check=False),
call(["nix-channel", "--update", "home-manager"], check=False),
]
)
@@ -1,4 +1,5 @@
from unittest.mock import Mock, call, patch
from typing import Any
from unittest.mock import patch
from pytest import MonkeyPatch
@@ -9,9 +10,9 @@ from .helpers import get_qualified_name
@patch(get_qualified_name(p.subprocess.run), autospec=True)
def test_run(mock_run: Mock) -> None:
def test_run(mock_run: Any) -> None:
p.run_wrapper(["test", "--with", "flags"], check=True)
assert mock_run.call_args == call(
mock_run.assert_called_with(
["test", "--with", "flags"],
check=True,
text=True,
@@ -27,7 +28,7 @@ def test_run(mock_run: Mock) -> None:
sudo=True,
extra_env={"FOO": "bar"},
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
["sudo", "test", "--with", "flags"],
check=False,
text=True,
@@ -44,7 +45,7 @@ def test_run(mock_run: Mock) -> None:
check=True,
remote=m.Remote("user@localhost", ["--ssh", "opt"], "password"),
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"ssh",
"--ssh",
@@ -70,7 +71,7 @@ def test_run(mock_run: Mock) -> None:
extra_env={"FOO": "bar"},
remote=m.Remote("user@localhost", ["--ssh", "opt"], "password"),
)
assert mock_run.call_args == call(
mock_run.assert_called_with(
[
"ssh",
"--ssh",