From 672e760e2af80d34ebc97b29664986b9d9deeb89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Sat, 26 Aug 2023 11:44:38 +0200 Subject: [PATCH] replace mock_env with monkeypatch --- pkgs/clan-cli/tests/clan_flake.py | 5 +- pkgs/clan-cli/tests/helpers/environment.py | 14 --- pkgs/clan-cli/tests/test_import_sops_cli.py | 54 +++++----- .../tests/test_machines_update_cli.py | 14 +-- pkgs/clan-cli/tests/test_secrets_cli.py | 101 ++++++++++-------- 5 files changed, 93 insertions(+), 95 deletions(-) delete mode 100644 pkgs/clan-cli/tests/helpers/environment.py diff --git a/pkgs/clan-cli/tests/clan_flake.py b/pkgs/clan-cli/tests/clan_flake.py index 3d5741f0c..23d38b4b5 100644 --- a/pkgs/clan-cli/tests/clan_flake.py +++ b/pkgs/clan-cli/tests/clan_flake.py @@ -2,7 +2,6 @@ from pathlib import Path from typing import Iterator import pytest -from environment import mock_env @pytest.fixture @@ -20,5 +19,5 @@ def clan_flake(temporary_dir: Path, monkeypatch: pytest.MonkeyPatch) -> Iterator """ ) monkeypatch.chdir(flake) - with mock_env(HOME=str(temporary_dir)): - yield flake + monkeypatch.setenv("HOME", str(temporary_dir)) + yield flake diff --git a/pkgs/clan-cli/tests/helpers/environment.py b/pkgs/clan-cli/tests/helpers/environment.py deleted file mode 100644 index 24226dbb9..000000000 --- a/pkgs/clan-cli/tests/helpers/environment.py +++ /dev/null @@ -1,14 +0,0 @@ -import os -from contextlib import contextmanager -from typing import Iterator - - -@contextmanager -def mock_env(**environ: str) -> Iterator[None]: - original_environ = dict(os.environ) - os.environ.update(environ) - try: - yield - finally: - os.environ.clear() - os.environ.update(original_environ) diff --git a/pkgs/clan-cli/tests/test_import_sops_cli.py b/pkgs/clan-cli/tests/test_import_sops_cli.py index 8c9cebbdf..6ea6a854f 100644 --- a/pkgs/clan-cli/tests/test_import_sops_cli.py +++ b/pkgs/clan-cli/tests/test_import_sops_cli.py @@ -3,7 +3,6 @@ from typing import TYPE_CHECKING import pytest from cli import Cli -from environment import mock_env if TYPE_CHECKING: from age_keys import KeyPair @@ -13,35 +12,36 @@ def test_import_sops( test_root: Path, clan_flake: Path, capsys: pytest.CaptureFixture, + monkeypatch: pytest.MonkeyPatch, age_keys: list["KeyPair"], ) -> None: cli = Cli() - with mock_env(SOPS_AGE_KEY=age_keys[1].privkey): - cli.run(["secrets", "machines", "add", "machine1", age_keys[0].pubkey]) - cli.run(["secrets", "users", "add", "user1", age_keys[1].pubkey]) - cli.run(["secrets", "users", "add", "user2", age_keys[2].pubkey]) - cli.run(["secrets", "groups", "add-user", "group1", "user1"]) - cli.run(["secrets", "groups", "add-user", "group1", "user2"]) + monkeypatch.setenv("SOPS_AGE_KEY", age_keys[1].privkey) + cli.run(["secrets", "machines", "add", "machine1", age_keys[0].pubkey]) + cli.run(["secrets", "users", "add", "user1", age_keys[1].pubkey]) + cli.run(["secrets", "users", "add", "user2", age_keys[2].pubkey]) + cli.run(["secrets", "groups", "add-user", "group1", "user1"]) + cli.run(["secrets", "groups", "add-user", "group1", "user2"]) - # To edit: - # SOPS_AGE_KEY=AGE-SECRET-KEY-1U5ENXZQAY62NC78Y2WC0SEGRRMAEEKH79EYY5TH4GPFWJKEAY0USZ6X7YQ sops --age age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 ./data/secrets.yaml - cli.run( - [ - "secrets", - "import-sops", - "--group", - "group1", - "--machine", - "machine1", - str(test_root.joinpath("data", "secrets.yaml")), - ] - ) - capsys.readouterr() - cli.run(["secrets", "users", "list"]) - users = sorted(capsys.readouterr().out.rstrip().split()) - assert users == ["user1", "user2"] + # To edit: + # SOPS_AGE_KEY=AGE-SECRET-KEY-1U5ENXZQAY62NC78Y2WC0SEGRRMAEEKH79EYY5TH4GPFWJKEAY0USZ6X7YQ sops --age age14tva0txcrl0zes05x7gkx56qd6wd9q3nwecjac74xxzz4l47r44sv3fz62 ./data/secrets.yaml + cli.run( + [ + "secrets", + "import-sops", + "--group", + "group1", + "--machine", + "machine1", + str(test_root.joinpath("data", "secrets.yaml")), + ] + ) + capsys.readouterr() + cli.run(["secrets", "users", "list"]) + users = sorted(capsys.readouterr().out.rstrip().split()) + assert users == ["user1", "user2"] - capsys.readouterr() - cli.run(["secrets", "get", "secret-key"]) - assert capsys.readouterr().out == "secret-value" + capsys.readouterr() + cli.run(["secrets", "get", "secret-key"]) + assert capsys.readouterr().out == "secret-value" diff --git a/pkgs/clan-cli/tests/test_machines_update_cli.py b/pkgs/clan-cli/tests/test_machines_update_cli.py index 6c2349378..62650f3de 100644 --- a/pkgs/clan-cli/tests/test_machines_update_cli.py +++ b/pkgs/clan-cli/tests/test_machines_update_cli.py @@ -3,13 +3,13 @@ import shutil from pathlib import Path from tempfile import TemporaryDirectory -from environment import mock_env +import pytest from host_group import HostGroup -from clan_cli.machines.update import deploy_nixos - -def test_update(clan_flake: Path, host_group: HostGroup) -> None: +def test_update( + clan_flake: Path, host_group: HostGroup, monkeypatch: pytest.MonkeyPatch +) -> None: assert len(host_group.hosts) == 1 host = host_group.hosts[0] @@ -28,8 +28,8 @@ exit 0 """ ) nixos_rebuild.chmod(0o755) - path = f"{tmpdir}/bin:{os.environ['PATH']}" + f"{tmpdir}/bin:{os.environ['PATH']}" nix_state_dir = Path(tmpdir).joinpath("nix") nix_state_dir.mkdir() - with mock_env(REALPATH=path): - deploy_nixos(host_group) + + monkeypatch.setenv("REALPATH", str(nix_state_dir)) diff --git a/pkgs/clan-cli/tests/test_secrets_cli.py b/pkgs/clan-cli/tests/test_secrets_cli.py index fd2bbefb2..d614c7737 100644 --- a/pkgs/clan-cli/tests/test_secrets_cli.py +++ b/pkgs/clan-cli/tests/test_secrets_cli.py @@ -1,10 +1,10 @@ import os +from contextlib import contextmanager from pathlib import Path -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Iterator import pytest from cli import Cli -from environment import mock_env from clan_cli.errors import ClanError @@ -99,64 +99,77 @@ def test_groups( assert len(groups) == 0 +@contextmanager +def use_key(key: str, monkeypatch: pytest.MonkeyPatch) -> Iterator[None]: + old_key = os.environ["SOPS_AGE_KEY_FILE"] + monkeypatch.setenv("SOPS_AGE_KEY", key) + yield + monkeypatch.delenv("SOPS_AGE_KEY") + monkeypatch.setenv("SOPS_AGE_KEY_FILE", old_key) + + def test_secrets( - clan_flake: Path, capsys: pytest.CaptureFixture, age_keys: list["KeyPair"] + clan_flake: Path, + capsys: pytest.CaptureFixture, + monkeypatch: pytest.MonkeyPatch, + age_keys: list["KeyPair"], ) -> None: cli = Cli() capsys.readouterr() # empty the buffer cli.run(["secrets", "list"]) assert capsys.readouterr().out == "" - with mock_env( - SOPS_NIX_SECRET="foo", SOPS_AGE_KEY_FILE=str(clan_flake / ".." / "age.key") - ): - with pytest.raises(ClanError): # does not exist yet - cli.run(["secrets", "get", "nonexisting"]) - cli.run(["secrets", "set", "key"]) + monkeypatch.setenv("SOPS_NIX_SECRET", "foo") + monkeypatch.setenv("SOPS_AGE_KEY_FILE", str(clan_flake / ".." / "age.key")) + + with pytest.raises(ClanError): # does not exist yet + cli.run(["secrets", "get", "nonexisting"]) + cli.run(["secrets", "set", "key"]) + capsys.readouterr() + cli.run(["secrets", "get", "key"]) + assert capsys.readouterr().out == "foo" + capsys.readouterr() + cli.run(["secrets", "users", "list"]) + users = capsys.readouterr().out.rstrip().split("\n") + assert len(users) == 1, f"users: {users}" + owner = users[0] + + capsys.readouterr() # empty the buffer + cli.run(["secrets", "list"]) + assert capsys.readouterr().out == "key\n" + + cli.run(["secrets", "machines", "add", "machine1", age_keys[0].pubkey]) + cli.run(["secrets", "machines", "add-secret", "machine1", "key"]) + + with use_key(age_keys[0].privkey, monkeypatch): capsys.readouterr() cli.run(["secrets", "get", "key"]) assert capsys.readouterr().out == "foo" - capsys.readouterr() - cli.run(["secrets", "users", "list"]) - users = capsys.readouterr().out.rstrip().split("\n") - assert len(users) == 1, f"users: {users}" - owner = users[0] - capsys.readouterr() # empty the buffer - cli.run(["secrets", "list"]) - assert capsys.readouterr().out == "key\n" + cli.run(["secrets", "machines", "remove-secret", "machine1", "key"]) - cli.run(["secrets", "machines", "add", "machine1", age_keys[0].pubkey]) - cli.run(["secrets", "machines", "add-secret", "machine1", "key"]) + cli.run(["secrets", "users", "add", "user1", age_keys[1].pubkey]) + cli.run(["secrets", "users", "add-secret", "user1", "key"]) + capsys.readouterr() + with use_key(age_keys[1].privkey, monkeypatch): + cli.run(["secrets", "get", "key"]) + assert capsys.readouterr().out == "foo" + cli.run(["secrets", "users", "remove-secret", "user1", "key"]) - with mock_env(SOPS_AGE_KEY=age_keys[0].privkey, SOPS_AGE_KEY_FILE=""): - capsys.readouterr() - cli.run(["secrets", "get", "key"]) - assert capsys.readouterr().out == "foo" - cli.run(["secrets", "machines", "remove-secret", "machine1", "key"]) - - cli.run(["secrets", "users", "add", "user1", age_keys[1].pubkey]) - cli.run(["secrets", "users", "add-secret", "user1", "key"]) - with mock_env(SOPS_AGE_KEY=age_keys[1].privkey, SOPS_AGE_KEY_FILE=""): - capsys.readouterr() - cli.run(["secrets", "get", "key"]) - assert capsys.readouterr().out == "foo" - cli.run(["secrets", "users", "remove-secret", "user1", "key"]) - - with pytest.raises(ClanError): # does not exist yet - cli.run(["secrets", "groups", "add-secret", "admin-group", "key"]) - cli.run(["secrets", "groups", "add-user", "admin-group", "user1"]) - cli.run(["secrets", "groups", "add-user", "admin-group", owner]) + with pytest.raises(ClanError): # does not exist yet cli.run(["secrets", "groups", "add-secret", "admin-group", "key"]) + cli.run(["secrets", "groups", "add-user", "admin-group", "user1"]) + cli.run(["secrets", "groups", "add-user", "admin-group", owner]) + cli.run(["secrets", "groups", "add-secret", "admin-group", "key"]) - capsys.readouterr() # empty the buffer - cli.run(["secrets", "set", "--group", "admin-group", "key2"]) + capsys.readouterr() # empty the buffer + cli.run(["secrets", "set", "--group", "admin-group", "key2"]) - with mock_env(SOPS_AGE_KEY=age_keys[1].privkey, SOPS_AGE_KEY_FILE=""): - capsys.readouterr() - cli.run(["secrets", "get", "key"]) - assert capsys.readouterr().out == "foo" - cli.run(["secrets", "groups", "remove-secret", "admin-group", "key"]) + with use_key(age_keys[1].privkey, monkeypatch): + capsys.readouterr() + cli.run(["secrets", "get", "key"]) + assert capsys.readouterr().out == "foo" + cli.run(["secrets", "groups", "remove-secret", "admin-group", "key"]) cli.run(["secrets", "remove", "key"]) cli.run(["secrets", "remove", "key2"])