diff options
author | Jack Rosenthal <jrosenth@chromium.org> | 2021-08-24 10:53:53 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-08-25 23:31:02 +0000 |
commit | 90b361b076ee67982a561555c34086d33239a935 (patch) | |
tree | 522900a5e0945b741d46ff7bfa22316a07c0af93 /zephyr/zmake/tests/test_reexec.py | |
parent | 341000b01fffb1bd1ef6f7e53ff94443c0c37cf0 (diff) | |
download | chrome-ec-90b361b076ee67982a561555c34086d33239a935.tar.gz |
zephyr: zmake: add re-exec logic
Add some logic to re-exec zmake when running inside of a chroot and we
find the source code available (to reduce the number of times we have
to update the chroot).
Note: we also discussed adding a chroot-upgrade-required warning
logic. This is actually a separate idea so will be handled in a
separate CL.
BUG=b:197636145
BRANCH=none
TEST=unit tests
Signed-off-by: Jack Rosenthal <jrosenth@chromium.org>
Change-Id: I26ecbb9a575f22c8667a1928e4bd5836f6fd4fe1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3114503
Reviewed-by: Yuval Peress <peress@chromium.org>
Diffstat (limited to 'zephyr/zmake/tests/test_reexec.py')
-rw-r--r-- | zephyr/zmake/tests/test_reexec.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/zephyr/zmake/tests/test_reexec.py b/zephyr/zmake/tests/test_reexec.py new file mode 100644 index 0000000000..9f25b5a834 --- /dev/null +++ b/zephyr/zmake/tests/test_reexec.py @@ -0,0 +1,59 @@ +# Copyright 2021 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Test the zmake re-exec functionality.""" + +import os +import sys +import unittest.mock as mock + +import pytest + +import zmake.__main__ as main + + +@pytest.fixture +def fake_env(monkeypatch): + environ = {} + monkeypatch.setattr(os, "environ", environ) + return environ + + +@pytest.fixture +def mock_execve(): + with mock.patch("os.execve", autospec=True) as mocked_function: + yield mocked_function + + +def test_out_of_chroot(fake_env, mock_execve): + # When CROS_WORKON_SRCROOT is not set, we should not re-exec. + main.maybe_reexec(["--help"]) + mock_execve.assert_not_called() + + +def test_pythonpath_set(fake_env, mock_execve): + # With PYTHONPATH set, we should not re-exec. + fake_env["CROS_WORKON_SRCROOT"] = "/mnt/host/source" + fake_env["PYTHONPATH"] = "/foo/bar/baz" + main.maybe_reexec(["--help"]) + mock_execve.assert_not_called() + + +def test_zmake_does_not_exist(fake_env, mock_execve): + # When zmake is not at src/platform/ec/zephyr/zmake, don't re-exec. + fake_env["CROS_WORKON_SRCROOT"] = "/this/does/not/exist" + main.maybe_reexec(["--help"]) + mock_execve.assert_not_called() + + +def test_zmake_reexec(fake_env, mock_execve): + # Nothing else applies? The re-exec should happen. + fake_env["CROS_WORKON_SRCROOT"] = "/mnt/host/source" + main.maybe_reexec(["--help"]) + new_env = dict(fake_env) + new_env["PYTHONPATH"] = "/mnt/host/source/src/platform/ec/zephyr/zmake" + mock_execve.assert_called_once_with( + sys.executable, + [sys.executable, "-m", "zmake", "--help"], + new_env, + ) |