#!/usr/bin/env vpython3 # Copyright 2023 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # [VPYTHON:BEGIN] # python_version: "3.8" # [VPYTHON:END] """Tests for Bazel launcher.""" import os from pathlib import Path import site import sys import unittest DEPOT_TOOLS_DIR = Path(__file__).resolve().parent.parent site.addsitedir(DEPOT_TOOLS_DIR) import bazel from testing_support import trial_dir class FindCrosUnittest(trial_dir.TestCase): """Test the _find_bazel_cros function.""" def setUp(self): """Create the checkout and chromite files.""" super().setUp() self.checkout_dir = Path(self.root_dir) / "chromiumos" self.chromite_dir = self.checkout_dir / "chromite" self.launcher = self.chromite_dir / "bin" / "bazel" self.launcher.parent.mkdir(exist_ok=True, parents=True) self.launcher.write_bytes(b"") self.launcher.chmod(0o775) self.orig_dir = Path.cwd() def tearDown(self): os.chdir(self.orig_dir) super().tearDown() def test_at_checkout_base(self): """Test we find the launcher at the base of the checkout.""" os.chdir(self.checkout_dir) self.assertEqual(bazel._find_bazel_cros(), self.launcher) def test_in_checkout_subdir(self): """Test we find the launcher in a subdir of the checkout.""" os.chdir(self.chromite_dir) self.assertEqual(bazel._find_bazel_cros(), self.launcher) def test_out_of_checkout(self): """Test we don't find the launcher outside of the checkout.""" os.chdir(self.root_dir) self.assertIsNone(bazel._find_bazel_cros()) class FindPathUnittest(trial_dir.TestCase): """Test the _find_next_bazel_in_path function.""" def setUp(self): """Create the checkout and chromite files.""" super().setUp() self.bin_dir = Path(self.root_dir) / "bin" self.bin_dir.mkdir(exist_ok=True, parents=True) self.orig_path = os.environ.get("PATH", os.defpath) # DEPOT_TOOLS_DIR is located twice in PATH for spice. os.environ["PATH"] = os.pathsep.join([ str(DEPOT_TOOLS_DIR), str(self.bin_dir), str(DEPOT_TOOLS_DIR), ]) def tearDown(self): """Restore actions from setUp().""" os.environ["PATH"] = self.orig_path def test_not_in_path(self): """Test we don't find anything in PATH when not present.""" self.assertIsNone(bazel._find_next_bazel_in_path()) def test_in_path(self): """Test we find the next Bazel in PATH when present.""" if sys.platform == "win32": launcher = self.bin_dir / "bazel.exe" else: launcher = self.bin_dir / "bazel" launcher.write_bytes(b"") launcher.chmod(0o755) self.assertEqual(bazel._find_next_bazel_in_path(), launcher) if __name__ == '__main__': unittest.main()