|
@@ -0,0 +1,94 @@
|
|
|
|
+#!/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()
|