rewrite phase 1
This commit is contained in:
@@ -1,12 +1,154 @@
|
||||
import os
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).parents[1]
|
||||
|
||||
def test_dotnet_wrapper_uses_persistent_runtime_directories() -> None:
|
||||
root = Path(__file__).parents[1]
|
||||
script = (root / "install-scripts" / "dotnet").read_text()
|
||||
|
||||
assert "export DOTNET_ROOT=" in script
|
||||
assert "/tmp/agentci-dotnet" not in script
|
||||
assert "DEV_TOOLS_DIR/runtime/dotnet" in script
|
||||
assert "NUGET_PACKAGES" in script
|
||||
assert 'export HOME="$DOTNET_CLI_HOME"' in script
|
||||
def executable(path: Path, content: str) -> None:
|
||||
path.write_text(content)
|
||||
path.chmod(0o755)
|
||||
|
||||
|
||||
def test_python_installer_configures_uv_and_stable_python_links(tmp_path: Path) -> None:
|
||||
fake_bin = tmp_path / "fake-bin"
|
||||
fake_bin.mkdir()
|
||||
tools = tmp_path / "tools"
|
||||
uv_log = tmp_path / "uv.log"
|
||||
executable(
|
||||
fake_bin / "uv",
|
||||
"""#!/bin/sh
|
||||
set -eu
|
||||
{
|
||||
printf 'UV_NO_CONFIG=%s\n' "$UV_NO_CONFIG"
|
||||
printf 'UV_PYTHON_INSTALL_DIR=%s\n' "$UV_PYTHON_INSTALL_DIR"
|
||||
printf 'UV_PYTHON_BIN_DIR=%s\n' "$UV_PYTHON_BIN_DIR"
|
||||
printf 'UV_PYTHON_INSTALL_BIN=%s\n' "$UV_PYTHON_INSTALL_BIN"
|
||||
printf 'args=%s %s %s\n' "$1" "$2" "$3"
|
||||
} > "$FAKE_UV_LOG"
|
||||
minor=$(printf '%s' "$3" | cut -d. -f1,2)
|
||||
mkdir -p "$UV_PYTHON_INSTALL_DIR" "$UV_PYTHON_BIN_DIR"
|
||||
cat > "$UV_PYTHON_BIN_DIR/python$minor" <<'PYTHON'
|
||||
#!/bin/sh
|
||||
printf '%s\n' 'Python fake'
|
||||
PYTHON
|
||||
chmod 0755 "$UV_PYTHON_BIN_DIR/python$minor"
|
||||
""",
|
||||
)
|
||||
environment = {
|
||||
**os.environ,
|
||||
"PATH": f"{fake_bin}:{os.environ['PATH']}",
|
||||
"DEV_TOOLS_DIR": str(tools),
|
||||
"PYTHON_VERSION": "3.13.7",
|
||||
"FAKE_UV_LOG": str(uv_log),
|
||||
}
|
||||
|
||||
result = subprocess.run(
|
||||
["/bin/sh", str(ROOT / "install-scripts" / "python")],
|
||||
env=environment,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
check=False,
|
||||
)
|
||||
|
||||
assert result.returncode == 0, result.stderr
|
||||
assert result.stdout == "Python fake\n"
|
||||
assert uv_log.read_text().splitlines() == [
|
||||
"UV_NO_CONFIG=1",
|
||||
f"UV_PYTHON_INSTALL_DIR={tools / 'python'}",
|
||||
f"UV_PYTHON_BIN_DIR={tools / 'bin'}",
|
||||
"UV_PYTHON_INSTALL_BIN=1",
|
||||
"args=python install 3.13.7",
|
||||
]
|
||||
assert (tools / "bin" / "python").readlink() == Path("python3.13")
|
||||
assert (tools / "bin" / "python3").readlink() == Path("python3.13")
|
||||
|
||||
|
||||
def test_dotnet_installer_builds_persistent_runtime_wrapper_without_network(
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
fake_bin = tmp_path / "fake-bin"
|
||||
fake_bin.mkdir()
|
||||
tools = tmp_path / "tools"
|
||||
installer_log = tmp_path / "installer.log"
|
||||
dotnet_log = tmp_path / "dotnet.log"
|
||||
executable(
|
||||
fake_bin / "python3",
|
||||
"""#!/bin/sh
|
||||
set -eu
|
||||
[ "$1" = - ]
|
||||
cat > "$2" <<'INSTALLER'
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
printf '%s\n' "$@" > "$FAKE_INSTALLER_LOG"
|
||||
install_dir=
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
--install-dir) install_dir=$2; shift 2 ;;
|
||||
*) shift ;;
|
||||
esac
|
||||
done
|
||||
mkdir -p "$install_dir"
|
||||
cat > "$install_dir/dotnet" <<'DOTNET'
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
printf '%s|%s|%s|%s|%s|%s\n' \
|
||||
"$*" "$DOTNET_ROOT" "$DOTNET_CLI_HOME" "$NUGET_PACKAGES" \
|
||||
"$NUGET_HTTP_CACHE_PATH" "$HOME" >> "$FAKE_DOTNET_LOG"
|
||||
DOTNET
|
||||
chmod 0755 "$install_dir/dotnet"
|
||||
INSTALLER
|
||||
""",
|
||||
)
|
||||
environment = {
|
||||
**os.environ,
|
||||
"PATH": f"{fake_bin}:{os.environ['PATH']}",
|
||||
"DEV_TOOLS_DIR": str(tools),
|
||||
"DOTNET_CHANNEL": "10.0",
|
||||
"FAKE_INSTALLER_LOG": str(installer_log),
|
||||
"FAKE_DOTNET_LOG": str(dotnet_log),
|
||||
}
|
||||
|
||||
result = subprocess.run(
|
||||
["/bin/sh", str(ROOT / "install-scripts" / "dotnet")],
|
||||
env=environment,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
check=False,
|
||||
)
|
||||
|
||||
assert result.returncode == 0, result.stderr
|
||||
assert installer_log.read_text().splitlines() == [
|
||||
"--channel",
|
||||
"10.0",
|
||||
"--install-dir",
|
||||
str(tools / "dotnet"),
|
||||
"--no-path",
|
||||
]
|
||||
wrapper = tools / "bin" / "dotnet"
|
||||
assert os.access(wrapper, os.X_OK)
|
||||
|
||||
wrapped = subprocess.run(
|
||||
[wrapper, "--version"],
|
||||
env=environment,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=10,
|
||||
check=False,
|
||||
)
|
||||
|
||||
assert wrapped.returncode == 0, wrapped.stderr
|
||||
calls = dotnet_log.read_text().splitlines()
|
||||
assert calls[0].split("|")[0] == "--info"
|
||||
assert calls[1].split("|") == [
|
||||
"--version",
|
||||
str(tools / "dotnet"),
|
||||
str(tools / "runtime" / "dotnet" / "home"),
|
||||
str(tools / "runtime" / "dotnet" / "nuget" / "packages"),
|
||||
str(tools / "runtime" / "dotnet" / "nuget" / "http-cache"),
|
||||
str(tools / "runtime" / "dotnet" / "home"),
|
||||
]
|
||||
assert (tools / "runtime" / "dotnet" / "home").is_dir()
|
||||
assert (tools / "runtime" / "dotnet" / "nuget" / "packages").is_dir()
|
||||
|
||||
Reference in New Issue
Block a user