mongo/bazel/wrapper_hook/install_modules_test.py
Daniel Moody 670f1f2eb5 SERVER-124059 fix nested bazel wrapper python installs (#51811)
GitOrigin-RevId: 6c8022df8625f61340036f7db6b4e1fbbb9ae7e1
2026-04-15 19:15:04 +00:00

64 lines
2.5 KiB
Python

"""Unit tests for bazel.wrapper_hook.install_modules."""
import os
import unittest
from unittest import mock
from bazel.wrapper_hook import install_modules
class BootstrapModulesTest(unittest.TestCase):
def test_second_phase_only_reapplies_python_path(self):
with (
mock.patch.dict(
os.environ,
{install_modules.MODULES_READY_ENV: "1"},
clear=True,
),
mock.patch.object(install_modules, "setup_python_path") as mock_setup,
mock.patch.object(install_modules, "install_modules") as mock_install,
mock.patch.object(install_modules.os, "execve") as mock_execve,
):
install_modules.bootstrap_modules("bazel", ["bazel", "build", "//:lint"])
mock_setup.assert_called_once_with()
mock_install.assert_not_called()
mock_execve.assert_not_called()
def test_first_phase_returns_without_reexec_when_no_install_needed(self):
with (
mock.patch.dict(os.environ, {}, clear=True),
mock.patch.object(
install_modules, "install_modules", return_value=False
) as mock_install,
mock.patch.object(install_modules.os, "execve") as mock_execve,
):
install_modules.bootstrap_modules("bazel", ["bazel", "build", "//:lint"])
mock_install.assert_called_once_with("bazel", ["bazel", "build", "//:lint"])
mock_execve.assert_not_called()
def test_first_phase_reexecs_after_nested_install(self):
argv = ["wrapper_hook.py", "bazel", "build", "//:lint"]
with (
mock.patch.dict(os.environ, {}, clear=True),
mock.patch.object(
install_modules, "install_modules", return_value=True
) as mock_install,
mock.patch.object(install_modules.os, "execve") as mock_execve,
mock.patch.object(install_modules.sys, "executable", "/tmp/repo-python"),
mock.patch.object(install_modules.sys, "argv", argv),
):
install_modules.bootstrap_modules("bazel", argv[1:])
mock_install.assert_called_once_with("bazel", argv[1:])
mock_execve.assert_called_once()
exec_path, exec_argv, exec_env = mock_execve.call_args.args
self.assertEqual(exec_path, "/tmp/repo-python")
self.assertEqual(exec_argv, ["/tmp/repo-python", *argv])
self.assertEqual(exec_env[install_modules.MODULES_READY_ENV], "1")
if __name__ == "__main__":
unittest.main()