-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathtest_e2e_harness_cli_path.py
More file actions
116 lines (88 loc) · 4.34 KB
/
Copy pathtest_e2e_harness_cli_path.py
File metadata and controls
116 lines (88 loc) · 4.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
"""Unit tests for the E2E harness's pinned CLI preparation."""
from __future__ import annotations
import pytest
from copilot import CopilotClient, RuntimeConnection
from e2e import conftest
from e2e.testharness import context
class TestGetCliPathForTests:
def test_env_var_takes_precedence(self, tmp_path, monkeypatch):
cli = tmp_path / "custom-cli.js"
cli.write_text("// custom entrypoint\n")
monkeypatch.setenv("COPILOT_CLI_PATH", str(cli))
assert context.get_cli_path_for_tests() == str(cli.resolve())
def test_prepares_the_pinned_runtime(self, tmp_path, monkeypatch):
monkeypatch.delenv("COPILOT_CLI_PATH", raising=False)
cli = tmp_path / "copilot"
cli.write_text("runtime\n")
class Result:
returncode = 0
stdout = f"{cli}\n"
stderr = ""
monkeypatch.setattr(context.subprocess, "run", lambda *args, **kwargs: Result())
assert context._prepare_pinned_cli(tmp_path) == str(cli.resolve())
def test_preparation_failure_includes_command_error(self, tmp_path, monkeypatch):
class Result:
returncode = 1
stdout = ""
stderr = "download failed"
monkeypatch.setattr(context.subprocess, "run", lambda *args, **kwargs: Result())
with pytest.raises(RuntimeError) as excinfo:
context._prepare_pinned_cli(tmp_path)
assert "download failed" in str(excinfo.value)
def test_runtime_checkout_requires_selected_cli_without_preparing_published(self, monkeypatch):
monkeypatch.delenv("COPILOT_CLI_PATH", raising=False)
monkeypatch.setenv("COPILOT_RUNTIME_SOURCE", "checkout")
monkeypatch.setattr(
context,
"_prepare_pinned_cli",
lambda *_args: pytest.fail("published preparation must not run"),
)
with pytest.raises(RuntimeError, match="COPILOT_CLI_PATH"):
context.get_cli_path_for_tests()
def test_inprocess_environment_reuses_prepared_runtime(tmp_path, monkeypatch):
cli = tmp_path / "copilot-runtime"
cli.write_text("runtime\n")
test_context = context.E2ETestContext()
test_context.cli_path = str(cli)
test_context.work_dir = str(tmp_path)
monkeypatch.setattr(test_context, "get_env", lambda: {"HTTPS_PROXY": "https://proxy"})
monkeypatch.delenv("COPILOT_CLI_PATH", raising=False)
try:
test_context._apply_inprocess_environment()
assert context.os.environ["COPILOT_CLI_PATH"] == str(cli)
finally:
test_context._restore_inprocess_environment()
@pytest.mark.parametrize("skip_download", ["1", "true", "yes"])
def test_inprocess_collection_preserves_offline_runtime_override(
tmp_path, monkeypatch, skip_download
):
cli = tmp_path / "copilot-runtime"
cli.write_text("runtime\n")
runtime = tmp_path / "runtime.node"
runtime.write_text("native runtime\n")
monkeypatch.setenv("COPILOT_CLI_PATH", str(cli))
monkeypatch.setenv("COPILOT_SKIP_CLI_DOWNLOAD", skip_download)
monkeypatch.setenv("COPILOT_HMAC_KEY", "secret")
monkeypatch.setenv("CAPI_HMAC_KEY", "secret")
conftest._neutralize_inprocess_environment()
assert context.get_cli_path_for_tests() == str(cli.resolve())
client = CopilotClient(connection=RuntimeConnection.for_inprocess())
assert client._inprocess_runtime_path == str(runtime)
assert client._cli_path_source == "environment"
assert "COPILOT_HMAC_KEY" not in context.os.environ
assert "CAPI_HMAC_KEY" not in context.os.environ
def test_inprocess_collection_rejects_incomplete_offline_runtime(tmp_path, monkeypatch):
cli = tmp_path / "copilot-runtime"
cli.write_text("runtime\n")
monkeypatch.setenv("COPILOT_CLI_PATH", str(cli))
monkeypatch.setenv("COPILOT_SKIP_CLI_DOWNLOAD", "1")
conftest._neutralize_inprocess_environment()
with pytest.raises(RuntimeError, match="In-process runtime library not found next to"):
CopilotClient(connection=RuntimeConnection.for_inprocess())
def test_inprocess_collection_keeps_public_runtime_selection_behavior(tmp_path, monkeypatch):
cli = tmp_path / "copilot-runtime"
cli.write_text("runtime\n")
monkeypatch.setenv("COPILOT_CLI_PATH", str(cli))
monkeypatch.delenv("COPILOT_SKIP_CLI_DOWNLOAD", raising=False)
conftest._neutralize_inprocess_environment()
assert "COPILOT_CLI_PATH" not in context.os.environ