49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
import logging
|
|
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(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 = 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))
|
|
|
|
# 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(temp_dir))
|
|
return temp_dir
|
|
|
|
|
|
@pytest.fixture
|
|
def temp_dir() -> Iterator[Path]:
|
|
with tempfile.TemporaryDirectory(prefix="pytest-", dir=TEMPDIR) as _dirpath:
|
|
yield Path(_dirpath).resolve()
|