mirror of
https://chromium.googlesource.com/chromium/tools/depot_tools.git
synced 2026-01-11 18:51:29 +00:00
siso: enable autoninja to use env variables instead of flags for collector.
For clients with old siso this will not cause any breakage as we kept the flags, and did not introduce any old ones. Eventually everyone should get their collector running. The collector startup will be triggered only for clients with enabled logs collection. Bug: b/455433899 Change-Id: I962bd551c5a1cc6a5f8904e65d24939b6a6a6964
This commit is contained in:
58
siso.py
58
siso.py
@@ -45,14 +45,6 @@ def parse_args(args: list[str]) -> tuple[str, str]:
|
||||
return subcmd, out_dir
|
||||
|
||||
|
||||
# Trivial check if siso contains subcommand and returns its help page
|
||||
# or nothing if subcommand is not present.
|
||||
def _subcommand_help(siso_path: str, subc: str) -> str:
|
||||
return subprocess.run([siso_path, "help", subc],
|
||||
capture_output=True,
|
||||
text=True).stdout
|
||||
|
||||
|
||||
# Fetch PID platform independently of possibly running collector
|
||||
# and kill it.
|
||||
# Return boolean whether the kill was successful or not.
|
||||
@@ -128,8 +120,8 @@ def _kill_collector() -> bool:
|
||||
|
||||
# Start collector when present.
|
||||
# Returns boolean whether collector has started successfully and a potential sockets path.
|
||||
def _start_collector(siso_path: str, sockets_file: Optional[str],
|
||||
project: str) -> bool:
|
||||
def _start_collector(siso_path: str, sockets_file: Optional[str], project: str,
|
||||
env: dict[str, str]) -> bool:
|
||||
class Status(Enum):
|
||||
HEALTHY = 1
|
||||
WRONG_ENDPOINT = 2
|
||||
@@ -182,14 +174,15 @@ def _start_collector(siso_path: str, sockets_file: Optional[str],
|
||||
creationflags = subprocess.CREATE_NEW_PROCESS_GROUP
|
||||
cmd = [siso_path, "collector", "--project", project]
|
||||
if sockets_file:
|
||||
cmd += ["--collector_address", f"unix://{sockets_file}"]
|
||||
env["SISO_COLLECTOR_ADDRESS"] = f"unix://{sockets_file}"
|
||||
else:
|
||||
cmd += ["--collector_address", _OTLP_DEFAULT_TCP_ENDPOINT]
|
||||
env["SISO_COLLECTOR_ADDRESS"] = _OTLP_DEFAULT_TCP_ENDPOINT
|
||||
subprocess.Popen(
|
||||
cmd,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
env=env,
|
||||
creationflags=creationflags,
|
||||
)
|
||||
|
||||
@@ -259,9 +252,6 @@ def apply_telemetry_flags(args: list[str], env: dict[str, str],
|
||||
"enable_cloud_monitoring", "enable_cloud_profiler",
|
||||
"enable_cloud_trace", "enable_cloud_logging"
|
||||
]
|
||||
if "collector_address" in _subcommand_help(siso_path, "collector"):
|
||||
if "collector_address" in _subcommand_help(siso_path, "ninja"):
|
||||
telemetry_flags.append("enable_collector")
|
||||
# Despite go.dev/issue/68312 being fixed, the issue is still reproducible
|
||||
# for googlers. Due to this, the flag is still applied while the
|
||||
# issue is being investigated.
|
||||
@@ -340,39 +330,23 @@ def _resolve_sockets_folder(env: dict[str, str]) -> tuple[str, int]:
|
||||
return path, allowed_length
|
||||
|
||||
|
||||
def _handle_collector_args(siso_path: str, args: list[str],
|
||||
env: dict[str, str]) -> list[str]:
|
||||
parser = argparse.ArgumentParser()
|
||||
# Can only be implicit. enable_collector=true will fail.
|
||||
parser.add_argument("-enable_collector",
|
||||
"--enable_collector",
|
||||
action='store_true',
|
||||
default=False)
|
||||
known_args, _ = parser.parse_known_args(args)
|
||||
if not known_args.enable_collector:
|
||||
return args
|
||||
def _handle_collector(siso_path: str, args: list[str],
|
||||
env: dict[str, str]) -> dict[str, str]:
|
||||
project = _fetch_metrics_project(args, env)
|
||||
lenv = env.copy()
|
||||
if not project:
|
||||
return args
|
||||
lenv.pop("SISO_COLLECTOR_ADDRESS", None)
|
||||
return lenv
|
||||
sockets_file = None
|
||||
if sys.platform in ["darwin", "linux"]:
|
||||
path, remainder_len = _resolve_sockets_folder(env)
|
||||
sockets_file = os.path.join(path, f"{project[:remainder_len]}.sock")
|
||||
|
||||
started = _start_collector(siso_path, sockets_file, project)
|
||||
if started:
|
||||
if sockets_file:
|
||||
args.append(f"--collector_address=unix://{sockets_file}")
|
||||
else:
|
||||
args.append(f"--collector_address={_OTLP_DEFAULT_TCP_ENDPOINT}")
|
||||
else:
|
||||
started = _start_collector(siso_path, sockets_file, project, lenv)
|
||||
if not started:
|
||||
print("Collector never came to life", file=sys.stderr)
|
||||
if "-enable_collector" in args:
|
||||
args.remove("-enable_collector")
|
||||
elif "--enable_collector" in args:
|
||||
args.remove("--enable_collector")
|
||||
args.append("--enable_collector=false")
|
||||
return args
|
||||
lenv.pop("SISO_COLLECTOR_ADDRESS", None)
|
||||
return lenv
|
||||
|
||||
|
||||
def load_sisorc(rcfile: str) -> tuple[list[str], dict[str, list[str]]]:
|
||||
@@ -567,8 +541,8 @@ def main(args: list[str],
|
||||
args[1:], subcmd,
|
||||
should_collect_logs, siso_path,
|
||||
env)
|
||||
processed_args = _handle_collector_args(siso_path,
|
||||
processed_args, env)
|
||||
if should_collect_logs:
|
||||
env = _handle_collector(siso_path, processed_args, env)
|
||||
check_outdir(out_dir)
|
||||
return caffeinate.call([siso_path] + processed_args, env=env)
|
||||
print(
|
||||
|
||||
@@ -74,19 +74,6 @@ def test_apply_sisorc(siso_test_fixture: Any) -> None:
|
||||
]
|
||||
|
||||
|
||||
def test_is_subcommand_present(mocker: Any) -> None:
|
||||
|
||||
def side_effect(_: str, subcmd):
|
||||
if subcmd in ["collector", "ninja"]:
|
||||
return "help page"
|
||||
return ""
|
||||
|
||||
mocker.patch("siso._subcommand_help", side_effect=side_effect)
|
||||
assert siso._subcommand_help("siso_path", "collector")
|
||||
assert siso._subcommand_help("siso_path", "ninja")
|
||||
assert not siso._subcommand_help("siso_path", "unknown")
|
||||
|
||||
|
||||
@pytest.mark.parametrize("args, want", [
|
||||
pytest.param(["ninja", "-C", "out/Default"], [
|
||||
"ninja", "-C", "out/Default", "--metrics_labels",
|
||||
@@ -102,19 +89,6 @@ def test_apply_metrics_labels(args: List[str], want: List[str]) -> None:
|
||||
assert got == want
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def siso_subcmd_present(mocker: Any) -> Generator[None, None, None]:
|
||||
mocker.patch("siso._subcommand_help",
|
||||
return_value="""
|
||||
Starts the OTEL collector daemon.
|
||||
-collector_address string
|
||||
address to listen on for collector. Can be path for unix socket unix:///path/to/socket or host:port. (default "127.0.0.1:4317")
|
||||
-project string
|
||||
cloud project ID. can be set by $SISO_PROJECT
|
||||
""")
|
||||
yield
|
||||
|
||||
|
||||
@pytest.mark.parametrize("args, env, want", [
|
||||
pytest.param(["ninja", "-C", "out/Default"], {},
|
||||
["ninja", "-C", "out/Default"],
|
||||
@@ -127,19 +101,19 @@ Starts the OTEL collector daemon.
|
||||
"--enable_cloud_profiler"
|
||||
],
|
||||
id="some_already_applied_no_env_flags"),
|
||||
pytest.param([
|
||||
"ninja", "-C", "out/Default", "--metrics_project", "some_project"
|
||||
], {}, [
|
||||
"ninja", "-C", "out/Default", "--metrics_project", "some_project",
|
||||
"--enable_cloud_monitoring", "--enable_cloud_profiler",
|
||||
"--enable_cloud_trace", "--enable_cloud_logging", "--enable_collector"
|
||||
],
|
||||
id="metrics_project_set"),
|
||||
pytest.param(
|
||||
["ninja", "-C", "out/Default", "--metrics_project", "some_project"], {},
|
||||
[
|
||||
"ninja", "-C", "out/Default", "--metrics_project", "some_project",
|
||||
"--enable_cloud_monitoring", "--enable_cloud_profiler",
|
||||
"--enable_cloud_trace", "--enable_cloud_logging"
|
||||
],
|
||||
id="metrics_project_set"),
|
||||
pytest.param(["ninja", "-C", "out/Default"],
|
||||
{"RBE_metrics_project": "some_project"}, [
|
||||
"ninja", "-C", "out/Default", "--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler", "--enable_cloud_trace",
|
||||
"--enable_cloud_logging", "--enable_collector"
|
||||
"--enable_cloud_logging"
|
||||
],
|
||||
id="metrics_project_set_thru_env"),
|
||||
pytest.param(["ninja", "-C", "out/Default", "--project", "some_project"],
|
||||
@@ -147,15 +121,14 @@ Starts the OTEL collector daemon.
|
||||
"ninja", "-C", "out/Default", "--project", "some_project",
|
||||
"--enable_cloud_monitoring", "--enable_cloud_profiler",
|
||||
"--enable_cloud_trace", "--enable_cloud_logging",
|
||||
"--enable_collector", "--metrics_project=some_project"
|
||||
"--metrics_project=some_project"
|
||||
],
|
||||
id="cloud_project_set"),
|
||||
pytest.param(["ninja", "-C", "out/Default"],
|
||||
{"SISO_PROJECT": "some_project"}, [
|
||||
"ninja", "-C", "out/Default", "--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler", "--enable_cloud_trace",
|
||||
"--enable_cloud_logging", "--enable_collector",
|
||||
"--metrics_project=some_project"
|
||||
"--enable_cloud_logging", "--metrics_project=some_project"
|
||||
],
|
||||
id="cloud_project_set_thru_env"),
|
||||
pytest.param(
|
||||
@@ -163,19 +136,17 @@ Starts the OTEL collector daemon.
|
||||
{"SISO_PROJECT": "some_project"}, [
|
||||
"ninja", "-C", "out/Default", "--enable_cloud_profiler=false",
|
||||
"--enable_cloud_monitoring", "--enable_cloud_trace",
|
||||
"--enable_cloud_logging", "--enable_collector",
|
||||
"--metrics_project=some_project"
|
||||
"--enable_cloud_logging", "--metrics_project=some_project"
|
||||
],
|
||||
id="respects_set_flags"),
|
||||
])
|
||||
def test_apply_telemetry_flags(siso_subcmd_present: Any, args: List[str],
|
||||
env: Dict[str, str], want: List[str]) -> None:
|
||||
def test_apply_telemetry_flags(args: List[str], env: Dict[str, str],
|
||||
want: List[str]) -> None:
|
||||
got = siso.apply_telemetry_flags(args, env, "siso_path")
|
||||
assert got == want
|
||||
|
||||
|
||||
def test_apply_telemetry_flags_sets_expected_env_var(siso_subcmd_present: Any,
|
||||
mocker: Any) -> None:
|
||||
def test_apply_telemetry_flags_sets_expected_env_var(mocker: Any) -> None:
|
||||
mocker.patch.dict("os.environ", {})
|
||||
args = [
|
||||
"ninja",
|
||||
@@ -187,62 +158,6 @@ def test_apply_telemetry_flags_sets_expected_env_var(siso_subcmd_present: Any,
|
||||
assert env.get("GOOGLE_API_USE_CLIENT_CERTIFICATE") == "false"
|
||||
|
||||
|
||||
def test_apply_telemetry_flags_collector_not_present(mocker: Any) -> None:
|
||||
|
||||
def mock_subcommand(_: str, subcmd: str) -> str:
|
||||
if subcmd == "collector":
|
||||
return ""
|
||||
return "help page"
|
||||
|
||||
mocker.patch("siso._subcommand_help", side_effect=mock_subcommand)
|
||||
args = ["ninja", "-C", "out/Default", "--metrics_project", "some_project"]
|
||||
env = {}
|
||||
want = [
|
||||
"ninja", "-C", "out/Default", "--metrics_project", "some_project",
|
||||
"--enable_cloud_monitoring", "--enable_cloud_profiler",
|
||||
"--enable_cloud_trace", "--enable_cloud_logging"
|
||||
]
|
||||
got = siso.apply_telemetry_flags(args, env, "siso_path")
|
||||
assert got == want
|
||||
|
||||
|
||||
@pytest.mark.parametrize("collector_help, ninja_help, collector_present", [
|
||||
pytest.param("some help", "some help", False, id="all_missing"),
|
||||
pytest.param(
|
||||
"some help", "--collector_address", False, id="ninja_flags_present"),
|
||||
pytest.param(
|
||||
"--collector_address", "some help", False,
|
||||
id="collector_flags_present"),
|
||||
pytest.param("--collector_address",
|
||||
"--collector_address",
|
||||
True,
|
||||
id="all_flags_present"),
|
||||
])
|
||||
def test_apply_telemetry_flags_help_pages(mocker: Any, collector_help: str,
|
||||
ninja_help: str,
|
||||
collector_present: bool) -> None:
|
||||
|
||||
def mock_subcommand(_: str, subcmd: str) -> str:
|
||||
if subcmd == "collector":
|
||||
return collector_help
|
||||
if subcmd == "ninja":
|
||||
return ninja_help
|
||||
return "some help"
|
||||
|
||||
mocker.patch("siso._subcommand_help", side_effect=mock_subcommand)
|
||||
args = ["ninja", "-C", "out/Default", "--metrics_project", "some_project"]
|
||||
env = {}
|
||||
want = [
|
||||
"ninja", "-C", "out/Default", "--metrics_project", "some_project",
|
||||
"--enable_cloud_monitoring", "--enable_cloud_profiler",
|
||||
"--enable_cloud_trace", "--enable_cloud_logging"
|
||||
]
|
||||
if collector_present:
|
||||
want.append("--enable_collector")
|
||||
got = siso.apply_telemetry_flags(args, env, "siso_path")
|
||||
assert got == want
|
||||
|
||||
|
||||
@pytest.mark.parametrize("args, env, want", [
|
||||
pytest.param(
|
||||
["--metrics_project", "proj1"], {}, "proj1", id="metrics_project_arg"),
|
||||
@@ -321,8 +236,7 @@ def test_resolve_sockets_folder(siso_test_fixture: Any, tmp_path: Path,
|
||||
|
||||
|
||||
def test_handle_collector_args_disabled(mocker: Any) -> None:
|
||||
mock_fetch = mocker.patch("siso._fetch_metrics_project",
|
||||
return_value="test-project")
|
||||
mock_fetch = mocker.patch("siso._fetch_metrics_project", return_value="")
|
||||
mock_start_collector = mocker.patch("siso._start_collector")
|
||||
mocker.patch("sys.platform", new="linux")
|
||||
|
||||
@@ -331,10 +245,10 @@ def test_handle_collector_args_disabled(mocker: Any) -> None:
|
||||
env = {"SISO_PROJECT": "test-project"}
|
||||
args = ["ninja", "-C", out_dir]
|
||||
|
||||
result = siso._handle_collector_args(siso_path, args, env)
|
||||
res_env = siso._handle_collector(siso_path, args, env)
|
||||
|
||||
assert result == args
|
||||
mock_fetch.assert_not_called()
|
||||
assert "SISO_COLLECTOR_ADDRESS" not in res_env
|
||||
mock_fetch.assert_called_once_with(args, env)
|
||||
mock_start_collector.assert_not_called()
|
||||
|
||||
|
||||
@@ -342,13 +256,12 @@ def test_handle_collector_args_disabled(mocker: Any) -> None:
|
||||
reason="Skipping Linux-specific test on Windows")
|
||||
def test_handle_collector_args_starts_linux(siso_test_fixture: Any,
|
||||
mocker: Any) -> None:
|
||||
mock_start_collector = mocker.patch("siso._start_collector",
|
||||
return_value=True)
|
||||
mock_start_collector = mocker.patch("siso._start_collector")
|
||||
mocker.patch("sys.platform", new="linux")
|
||||
|
||||
siso_path = "path/to/siso"
|
||||
env = {"SISO_PROJECT": "test-project", "XDG_RUNTIME_DIR": "/tmp/run"}
|
||||
args = ["ninja", "--enable_collector"]
|
||||
args = ["ninja"]
|
||||
|
||||
captured_args = []
|
||||
|
||||
@@ -356,40 +269,43 @@ def test_handle_collector_args_starts_linux(siso_test_fixture: Any,
|
||||
captured_args.append(list(args))
|
||||
return "test-project"
|
||||
|
||||
def start_collector_side_effect(siso_path, sockets_file, project, env):
|
||||
env["SISO_COLLECTOR_ADDRESS"] = f"unix://{sockets_file}"
|
||||
return True
|
||||
|
||||
mock_start_collector.side_effect = start_collector_side_effect
|
||||
mocker.patch("siso._fetch_metrics_project",
|
||||
side_effect=fetch_metrics_project_side_effect)
|
||||
result = siso._handle_collector_args(siso_path, args, env)
|
||||
res_env = siso._handle_collector(siso_path, args, env)
|
||||
|
||||
sockets_file = os.path.join("/tmp", "run", "testuser", "siso",
|
||||
"test-project.sock")
|
||||
assert result == [
|
||||
"ninja", "--enable_collector",
|
||||
f"--collector_address=unix://{sockets_file}"
|
||||
]
|
||||
assert captured_args == [["ninja", "--enable_collector"]]
|
||||
mock_start_collector.assert_called_once_with(siso_path, sockets_file,
|
||||
"test-project")
|
||||
"test-project", res_env)
|
||||
assert res_env["SISO_COLLECTOR_ADDRESS"] == f"unix://{sockets_file}"
|
||||
|
||||
|
||||
def test_handle_collector_args_starts_windows(mocker: Any) -> None:
|
||||
mock_start_collector = mocker.patch("siso._start_collector",
|
||||
return_value=True)
|
||||
mock_start_collector = mocker.patch("siso._start_collector")
|
||||
mock_fetch = mocker.patch("siso._fetch_metrics_project",
|
||||
return_value="test-project")
|
||||
mocker.patch("sys.platform", new="win32")
|
||||
siso_path = "path/to/siso"
|
||||
env = {"SISO_PROJECT": "test-project"}
|
||||
args = ["ninja", "--enable_collector"]
|
||||
args = ["ninja"]
|
||||
|
||||
result = siso._handle_collector_args(siso_path, args, env)
|
||||
def start_collector_side_effect(siso_path, sockets_file, project, env):
|
||||
env["SISO_COLLECTOR_ADDRESS"] = siso._OTLP_DEFAULT_TCP_ENDPOINT
|
||||
return True
|
||||
|
||||
assert result == [
|
||||
"ninja", "--enable_collector",
|
||||
f"--collector_address={siso._OTLP_DEFAULT_TCP_ENDPOINT}"
|
||||
]
|
||||
mock_start_collector.side_effect = start_collector_side_effect
|
||||
|
||||
res_env = siso._handle_collector(siso_path, args, env)
|
||||
|
||||
assert res_env["SISO_COLLECTOR_ADDRESS"] == siso._OTLP_DEFAULT_TCP_ENDPOINT
|
||||
mock_fetch.assert_called_once_with(args, env)
|
||||
mock_start_collector.assert_called_once_with(siso_path, None,
|
||||
"test-project")
|
||||
"test-project", res_env)
|
||||
|
||||
|
||||
@pytest.mark.skipif(sys.platform == "win32",
|
||||
@@ -402,7 +318,7 @@ def test_handle_collector_args_fails(siso_test_fixture: Any,
|
||||
|
||||
siso_path = "path/to/siso"
|
||||
env = {"SISO_PROJECT": "test-project", "XDG_RUNTIME_DIR": "/tmp/run"}
|
||||
args = ["ninja", "--enable_collector"]
|
||||
args = ["ninja"]
|
||||
|
||||
captured_args = []
|
||||
|
||||
@@ -412,14 +328,13 @@ def test_handle_collector_args_fails(siso_test_fixture: Any,
|
||||
|
||||
mocker.patch("siso._fetch_metrics_project",
|
||||
side_effect=fetch_metrics_project_side_effect)
|
||||
result = siso._handle_collector_args(siso_path, args, env)
|
||||
res_env = siso._handle_collector(siso_path, args, env)
|
||||
|
||||
assert result == ["ninja", "--enable_collector=false"]
|
||||
assert captured_args == [["ninja", "--enable_collector"]]
|
||||
assert "SISO_COLLECTOR_ADDRESS" not in res_env
|
||||
sockets_file = os.path.join("/tmp", "run", "testuser", "siso",
|
||||
"test-project.sock")
|
||||
mock_start_collector.assert_called_once_with(siso_path, sockets_file,
|
||||
"test-project")
|
||||
"test-project", res_env)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -509,7 +424,7 @@ def test_start_collector_removes_existing_socket_file(
|
||||
}
|
||||
mocker.patch("siso.json.loads",
|
||||
side_effect=[status_healthy, config, config])
|
||||
siso._start_collector(siso_path, sockets_file, project)
|
||||
siso._start_collector(siso_path, sockets_file, project, {})
|
||||
mock_os_path_exists.assert_called_with(sockets_file)
|
||||
mock_os_remove.assert_called_with(sockets_file)
|
||||
|
||||
@@ -543,7 +458,7 @@ def test_start_collector_remove_socket_file_fails(
|
||||
}
|
||||
mocker.patch("siso.json.loads",
|
||||
side_effect=[status_healthy, config, config])
|
||||
siso._start_collector(siso_path, sockets_file, project)
|
||||
siso._start_collector(siso_path, sockets_file, project, {})
|
||||
|
||||
mock_os_path_exists.assert_called_with(sockets_file)
|
||||
mock_os_remove.assert_called_with(sockets_file)
|
||||
@@ -576,43 +491,41 @@ def test_start_collector_remove_socket_file_fails(
|
||||
],
|
||||
"",
|
||||
id="ninja_with_logs_no_project"),
|
||||
pytest.param(
|
||||
[], {},
|
||||
["ninja", "-C", "out/Default", "--project=test-project"], "ninja",
|
||||
True, {}, [
|
||||
"ninja",
|
||||
"-C",
|
||||
"out/Default",
|
||||
"--project=test-project",
|
||||
"--metrics_labels",
|
||||
f"type=developer,tool=siso,host_os={siso._SYSTEM_DICT.get(sys.platform, sys.platform)}",
|
||||
"--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler",
|
||||
"--enable_cloud_trace",
|
||||
"--enable_cloud_logging",
|
||||
"--enable_collector",
|
||||
"--metrics_project=test-project",
|
||||
],
|
||||
"",
|
||||
id="ninja_with_logs_with_project_in_args"),
|
||||
pytest.param(
|
||||
[], {}, ["ninja", "-C", "out/Default"], "ninja", True,
|
||||
{"SISO_PROJECT": "test-project"},
|
||||
[
|
||||
"ninja",
|
||||
"-C",
|
||||
"out/Default",
|
||||
"--metrics_labels",
|
||||
f"type=developer,tool=siso,host_os={siso._SYSTEM_DICT.get(sys.platform, sys.platform)}",
|
||||
"--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler",
|
||||
"--enable_cloud_trace",
|
||||
"--enable_cloud_logging",
|
||||
"--enable_collector",
|
||||
"--metrics_project=test-project",
|
||||
],
|
||||
"",
|
||||
id="ninja_with_logs_with_project_in_env"),
|
||||
pytest.param(
|
||||
[], {},
|
||||
["ninja", "-C", "out/Default", "--project=test-project"], "ninja",
|
||||
True, {}, [
|
||||
"ninja",
|
||||
"-C",
|
||||
"out/Default",
|
||||
"--project=test-project",
|
||||
"--metrics_labels",
|
||||
f"type=developer,tool=siso,host_os={siso._SYSTEM_DICT.get(sys.platform, sys.platform)}",
|
||||
"--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler",
|
||||
"--enable_cloud_trace",
|
||||
"--enable_cloud_logging",
|
||||
"--metrics_project=test-project",
|
||||
],
|
||||
"",
|
||||
id="ninja_with_logs_with_project_in_args"),
|
||||
pytest.param(
|
||||
[], {}, ["ninja", "-C", "out/Default"], "ninja", True,
|
||||
{"SISO_PROJECT": "test-project"},
|
||||
[
|
||||
"ninja",
|
||||
"-C",
|
||||
"out/Default",
|
||||
"--metrics_labels",
|
||||
f"type=developer,tool=siso,host_os={siso._SYSTEM_DICT.get(sys.platform, sys.platform)}",
|
||||
"--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler",
|
||||
"--enable_cloud_trace",
|
||||
"--enable_cloud_logging",
|
||||
"--metrics_project=test-project",
|
||||
],
|
||||
"",
|
||||
id="ninja_with_logs_with_project_in_env"),
|
||||
pytest.param(
|
||||
["-gflag"], {"ninja": ["-sflag"]}, ["ninja", "-C", "out/Default"],
|
||||
"ninja", False, {}, [
|
||||
@@ -661,32 +574,31 @@ def test_start_collector_remove_socket_file_fails(
|
||||
% shlex.join(["ninja", "-sflag_only", "-C", "out/Default"]),
|
||||
id="with_sisorc_subcmd_flags_only"
|
||||
),
|
||||
pytest.param(
|
||||
["-gflag_tel"],
|
||||
{"ninja": ["-sflag_tel"]},
|
||||
["ninja", "-C", "out/Default"],
|
||||
"ninja",
|
||||
True,
|
||||
{"SISO_PROJECT": "telemetry-project"},
|
||||
[
|
||||
"-gflag_tel",
|
||||
"ninja",
|
||||
"-sflag_tel",
|
||||
"-C",
|
||||
"out/Default",
|
||||
"--metrics_labels",
|
||||
f"type=developer,tool=siso,host_os={siso._SYSTEM_DICT.get(sys.platform, sys.platform)}",
|
||||
"--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler",
|
||||
"--enable_cloud_trace",
|
||||
"--enable_cloud_logging",
|
||||
"--enable_collector",
|
||||
"--metrics_project=telemetry-project",
|
||||
],
|
||||
"depot_tools/siso.py: %s\n"
|
||||
% shlex.join(["-gflag_tel", "ninja", "-sflag_tel", "-C", "out/Default"]),
|
||||
id="with_sisorc_global_and_subcmd_flags_and_telemetry"
|
||||
),
|
||||
pytest.param(
|
||||
["-gflag_tel"],
|
||||
{"ninja": ["-sflag_tel"]},
|
||||
["ninja", "-C", "out/Default"],
|
||||
"ninja",
|
||||
True,
|
||||
{"SISO_PROJECT": "telemetry-project"},
|
||||
[
|
||||
"-gflag_tel",
|
||||
"ninja",
|
||||
"-sflag_tel",
|
||||
"-C",
|
||||
"out/Default",
|
||||
"--metrics_labels",
|
||||
f"type=developer,tool=siso,host_os={siso._SYSTEM_DICT.get(sys.platform, sys.platform)}",
|
||||
"--enable_cloud_monitoring",
|
||||
"--enable_cloud_profiler",
|
||||
"--enable_cloud_trace",
|
||||
"--enable_cloud_logging",
|
||||
"--metrics_project=telemetry-project",
|
||||
],
|
||||
"depot_tools/siso.py: %s\n"
|
||||
% shlex.join(["-gflag_tel", "ninja", "-sflag_tel", "-C", "out/Default"]),
|
||||
id="with_sisorc_global_and_subcmd_flags_and_telemetry"
|
||||
),
|
||||
pytest.param(
|
||||
["-gflag_non_ninja"],
|
||||
{"other_subcmd": ["-sflag_non_ninja"]},
|
||||
@@ -705,9 +617,9 @@ def test_start_collector_remove_socket_file_fails(
|
||||
% shlex.join(["-gflag_non_ninja", "other_subcmd", "-sflag_non_ninja", "-C", "out/Default"]),
|
||||
id="with_sisorc_non_ninja_subcmd"
|
||||
),])
|
||||
def test_process_args(siso_subcmd_present: Any, global_flags: List[str],
|
||||
subcmd_flags: Dict[str, List[str]], args: List[str],
|
||||
subcmd: str, should_collect_logs: bool,
|
||||
def test_process_args(global_flags: List[str], subcmd_flags: Dict[str,
|
||||
List[str]],
|
||||
args: List[str], subcmd: str, should_collect_logs: bool,
|
||||
env: Dict[str, str], want: List[str], want_stderr: str,
|
||||
siso_test_fixture: Any, mocker: Any) -> None:
|
||||
mock_stderr = mocker.patch("sys.stderr", new_callable=io.StringIO)
|
||||
@@ -874,17 +786,17 @@ def test_start_collector_dead_then_healthy(platform: str, creationflags: int,
|
||||
}
|
||||
mock_json_loads.side_effect = [status_healthy, config]
|
||||
|
||||
result = siso._start_collector(siso_path, None, project)
|
||||
env = {}
|
||||
result = siso._start_collector(siso_path, None, project, env)
|
||||
|
||||
assert result
|
||||
m["subprocess_popen"].assert_called_once_with([
|
||||
siso_path, "collector", "--project", project, "--collector_address",
|
||||
siso._OTLP_DEFAULT_TCP_ENDPOINT
|
||||
],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
creationflags=creationflags)
|
||||
m["subprocess_popen"].assert_called_once_with(
|
||||
[siso_path, "collector", "--project", project],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
env=env,
|
||||
creationflags=creationflags)
|
||||
m["kill_collector"].assert_not_called()
|
||||
|
||||
|
||||
@@ -923,17 +835,17 @@ def test_start_collector_unhealthy_then_healthy(
|
||||
config_project_full
|
||||
]
|
||||
|
||||
result = siso._start_collector(siso_path, None, project)
|
||||
env = {}
|
||||
result = siso._start_collector(siso_path, None, project, env)
|
||||
|
||||
assert result
|
||||
m["subprocess_popen"].assert_called_once_with([
|
||||
siso_path, "collector", "--project", project, "--collector_address",
|
||||
siso._OTLP_DEFAULT_TCP_ENDPOINT
|
||||
],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
creationflags=0)
|
||||
m["subprocess_popen"].assert_called_once_with(
|
||||
[siso_path, "collector", "--project", project],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
env=env,
|
||||
creationflags=0)
|
||||
m["kill_collector"].assert_called_once()
|
||||
|
||||
|
||||
@@ -969,7 +881,7 @@ def test_start_collector_already_healthy(start_collector_mocks: Dict[str, Any],
|
||||
status_healthy, config_project_full, config_project_full
|
||||
]
|
||||
|
||||
result = siso._start_collector(siso_path, None, project)
|
||||
result = siso._start_collector(siso_path, None, project, {})
|
||||
|
||||
assert result
|
||||
m["subprocess_popen"].assert_not_called()
|
||||
@@ -986,16 +898,16 @@ def test_start_collector_never_healthy(start_collector_mocks: Dict[str, Any],
|
||||
m["mock_conn"],
|
||||
status_responses=[(404, None)])
|
||||
|
||||
siso._start_collector(siso_path, None, project)
|
||||
env = {}
|
||||
siso._start_collector(siso_path, None, project, env)
|
||||
|
||||
m["subprocess_popen"].assert_called_once_with([
|
||||
siso_path, "collector", "--project", project, "--collector_address",
|
||||
siso._OTLP_DEFAULT_TCP_ENDPOINT
|
||||
],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
creationflags=0)
|
||||
m["subprocess_popen"].assert_called_once_with(
|
||||
[siso_path, "collector", "--project", project],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
env=env,
|
||||
creationflags=0)
|
||||
m["kill_collector"].assert_not_called()
|
||||
|
||||
|
||||
@@ -1034,17 +946,17 @@ def test_start_collector_healthy_after_retries(start_collector_mocks: Dict[str,
|
||||
status_healthy, config_project_full, config_project_full
|
||||
]
|
||||
|
||||
result = siso._start_collector(siso_path, None, project)
|
||||
env = {}
|
||||
result = siso._start_collector(siso_path, None, project, env)
|
||||
|
||||
assert result
|
||||
m["subprocess_popen"].assert_called_once_with([
|
||||
siso_path, "collector", "--project", project, "--collector_address",
|
||||
siso._OTLP_DEFAULT_TCP_ENDPOINT
|
||||
],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
creationflags=0)
|
||||
m["subprocess_popen"].assert_called_once_with(
|
||||
[siso_path, "collector", "--project", project],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
env=env,
|
||||
creationflags=0)
|
||||
m["kill_collector"].assert_not_called()
|
||||
|
||||
|
||||
@@ -1104,17 +1016,17 @@ def test_start_collector_with_sockets_file(
|
||||
status_responses=list(http_status_responses),
|
||||
config_responses=[(200, None)] * 20)
|
||||
|
||||
result = siso._start_collector(siso_path, sockets_file, project)
|
||||
env = {}
|
||||
result = siso._start_collector(siso_path, sockets_file, project, env)
|
||||
|
||||
assert result == expected_result
|
||||
m["subprocess_popen"].assert_called_once_with([
|
||||
siso_path, "collector", "--project", project, "--collector_address",
|
||||
f"unix://{sockets_file}"
|
||||
],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
creationflags=0)
|
||||
m["subprocess_popen"].assert_called_once_with(
|
||||
[siso_path, "collector", "--project", project],
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
start_new_session=True,
|
||||
env=env,
|
||||
creationflags=0)
|
||||
m["kill_collector"].assert_not_called()
|
||||
assert mock_os_exists.call_count == expected_os_exists_calls
|
||||
|
||||
|
||||
Reference in New Issue
Block a user