From c429b41d2e55faa1c25773f9eab31440e839883e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 19 Mar 2025 18:26:47 +0100 Subject: [PATCH] pytests: use /tmp on macos to avoid unix socket issues --- pkgs/clan-cli/tests/fixtures_flakes.py | 9 ++--- pkgs/clan-cli/tests/temporary_dir.py | 50 ++++++++++++++------------ 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/pkgs/clan-cli/tests/fixtures_flakes.py b/pkgs/clan-cli/tests/fixtures_flakes.py index 4fe8a1d24..5d3944b9c 100644 --- a/pkgs/clan-cli/tests/fixtures_flakes.py +++ b/pkgs/clan-cli/tests/fixtures_flakes.py @@ -16,6 +16,7 @@ from clan_cli.locked_open import locked_open from clan_cli.nix import nix_test_store from fixture_error import FixtureError from root import CLAN_CORE +from temporary_dir import TEMPDIR log = logging.getLogger(__name__) @@ -209,13 +210,13 @@ class ClanFlake: @pytest.fixture(scope="session") def minimal_flake_template() -> Iterator[ClanFlake]: with ( - tempfile.TemporaryDirectory(prefix="flake-") as _home, + tempfile.TemporaryDirectory(prefix="minimal-flake-", dir=TEMPDIR) as _dirpath, pytest.MonkeyPatch.context() as mp, ): - home = Path(_home).resolve() - mp.setenv("HOME", str(home)) + temporary_home = Path(_dirpath).resolve() + mp.setenv("HOME", str(temporary_home)) flake = ClanFlake( - temporary_home=home, + temporary_home=temporary_home, flake_template=clan_templates(TemplateType.CLAN) / "minimal", ) flake.init_from_template() diff --git a/pkgs/clan-cli/tests/temporary_dir.py b/pkgs/clan-cli/tests/temporary_dir.py index 36ae5bc84..c6d5ce2f8 100644 --- a/pkgs/clan-cli/tests/temporary_dir.py +++ b/pkgs/clan-cli/tests/temporary_dir.py @@ -3,42 +3,46 @@ import os import tempfile from collections.abc import Iterator from pathlib import Path +from sys import platform import pytest log = logging.getLogger(__name__) +TEMPDIR = None +# macOS' default temporary directory is too long for unix sockets +# This can break applications such as gpg-agent +if platform == "darwin": + TEMPDIR = Path("/tmp") + + @pytest.fixture -def temporary_home(monkeypatch: pytest.MonkeyPatch) -> Iterator[Path]: - with tempfile.TemporaryDirectory(prefix="pytest-home-") as _dirpath: - dirpath = Path(_dirpath).resolve() - xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR") - monkeypatch.setenv("HOME", str(dirpath)) - monkeypatch.setenv("XDG_CONFIG_HOME", str(dirpath / ".config")) +def temporary_home(temp_dir: Path, monkeypatch: pytest.MonkeyPatch) -> Path: + xdg_runtime_dir = os.getenv("XDG_RUNTIME_DIR") + monkeypatch.setenv("HOME", str(temp_dir)) + monkeypatch.setenv("XDG_CONFIG_HOME", str(temp_dir / ".config")) - runtime_dir = dirpath / "xdg-runtime-dir" - runtime_dir.mkdir() - runtime_dir.chmod(0o700) + runtime_dir = temp_dir / "xdg-runtime-dir" + runtime_dir.mkdir() + runtime_dir.chmod(0o700) - gpgdir = runtime_dir / "gpgagent" - gpgdir.mkdir() - gpgdir.chmod(0o700) - monkeypatch.setenv("GPG_AGENT_INFO", str(gpgdir)) + gpgdir = runtime_dir / "gpgagent" + gpgdir.mkdir() + gpgdir.chmod(0o700) + monkeypatch.setenv("GPG_AGENT_INFO", str(gpgdir)) - # Iterate over all environment variables - for key, value in os.environ.items(): - if xdg_runtime_dir and value.startswith(xdg_runtime_dir): - monkeypatch.setenv( - key, value.replace(xdg_runtime_dir, str(runtime_dir)) - ) + # Iterate over all environment variables + for key, value in os.environ.items(): + if xdg_runtime_dir and value.startswith(xdg_runtime_dir): + monkeypatch.setenv(key, value.replace(xdg_runtime_dir, str(runtime_dir))) - monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir)) - monkeypatch.chdir(str(dirpath)) - yield dirpath + monkeypatch.setenv("XDG_RUNTIME_DIR", str(runtime_dir)) + monkeypatch.chdir(str(temp_dir)) + return temp_dir @pytest.fixture def temp_dir() -> Iterator[Path]: - with tempfile.TemporaryDirectory(prefix="pytest-") as _dirpath: + with tempfile.TemporaryDirectory(prefix="pytest-", dir=TEMPDIR) as _dirpath: yield Path(_dirpath).resolve()