diff --git a/bazel/labgrid/client/common.py b/bazel/labgrid/client/common.py index f8d9c5027a329733d4b0725c7ff6055cb151e8be..3995fa48478cdfecc227211faa0dad68eab091ba 100644 --- a/bazel/labgrid/client/common.py +++ b/bazel/labgrid/client/common.py @@ -35,4 +35,4 @@ def labgrid_client(*args, env=None, timeout=10, output_as_yaml=True, url=""): return yaml.safe_load(process.stdout) return process.stdout else: - return {} + return {} if output_as_yaml else "" diff --git a/bazel/labgrid/local/BUILD.bazel b/bazel/labgrid/local/BUILD.bazel index d67d53fcdb6c2531669e21c0813aa2838a63a48e..0575aeac3131b46e04c67f95f4f504d5f4cdf3ec 100644 --- a/bazel/labgrid/local/BUILD.bazel +++ b/bazel/labgrid/local/BUILD.bazel @@ -15,6 +15,7 @@ py_library( visibility = [ "//bazel/labgrid/client:__pkg__", "//bazel/labgrid/local:__pkg__", + "//bazel/labgrid/manager:__pkg__", ], deps = [ "//labgrid:pkg", diff --git a/bazel/labgrid/manager/BUILD.bazel b/bazel/labgrid/manager/BUILD.bazel index 7b66fd3021d70473625ae0eada4a83fd1c12c979..ae381a0cb2d44bfd5d71cfee07b9060b23f3b534 100644 --- a/bazel/labgrid/manager/BUILD.bazel +++ b/bazel/labgrid/manager/BUILD.bazel @@ -1,4 +1,4 @@ -load("@rules_python//python:defs.bzl", "py_library") +load("@rules_python//python:defs.bzl", "py_library", "py_test") py_library( name = "manager", @@ -42,3 +42,17 @@ py_library( "@rules_python//python/runfiles", ], ) + +py_test( + name = "test", + size = "small", + srcs = ["test.py"], + visibility = ["//visibility:public"], + deps = [ + ":acquire", + ":reserve", + "//bazel/labgrid/client", + "//bazel/labgrid/local", + "@rules_python//python/runfiles", + ], +) diff --git a/bazel/labgrid/manager/test.py b/bazel/labgrid/manager/test.py new file mode 100644 index 0000000000000000000000000000000000000000..0a1e87e6ac484cc7185599f19c0856a7f6e3b347 --- /dev/null +++ b/bazel/labgrid/manager/test.py @@ -0,0 +1,86 @@ +from unittest import TestCase, main + +from bazel.labgrid.local import harness +from bazel.labgrid.client import labgrid_client +from bazel.labgrid.manager.reserve import manager as reserve_manager +from bazel.labgrid.manager.acquire import manager as acquire_manager +from bazel.labgrid.manager import Data + + +class ManagersTestCase(TestCase): + @classmethod + def setUpClass(cls) -> None: + cls.place = "test_place" + cls.host = "test_host" + cls.user = "test_user" + cls.__cm = harness(tags={"device": "fake"}, place=cls.place) + cls.harness = cls.__cm.__enter__() + + @classmethod + def tearDownClass(cls) -> None: + cls.__cm.__exit__(None, None, None) + + def client(self, *args: str) -> str: + env = {"LG_COORDINATOR": self.harness.coordinator_url} + return labgrid_client(*args, env=env, output_as_yaml=False) + + def test_reserve_manager(self) -> None: + stdout = self.client("reservations") + self.assertEqual(stdout, "") + + env = { + "BZL_LG_TAGS": "device=fake", + "LG_COORDINATOR": self.harness.coordinator_url, + } + with reserve_manager(Data(env=env)): + stdout = self.client("reservations") + self.assertIn("state: allocated", stdout) + self.assertIn(f"main: {self.place}", stdout) + + stdout = self.client("reservations") + self.assertEqual(stdout, "") + + def test_acquire_manager(self) -> None: + stdout = self.client("-vv", "places") + self.assertIn("acquired: None", stdout) + + env = { + "LG_PLACE": self.place, + "LG_COORDINATOR": self.harness.coordinator_url, + "LG_HOSTNAME": self.host, + "LG_USERNAME": self.user, + } + + with acquire_manager(Data(env=env)): + stdout = self.client("-vv", "places") + self.assertIn(f"acquired: {self.host}/{self.user}", stdout) + + stdout = self.client("-vv", "places") + self.assertIn("acquired: None", stdout) + + def test_reserve_then_acquire_manager(self) -> None: + stdout = self.client("reservations") + self.assertEqual(stdout, "") + + env = { + "BZL_LG_TAGS": "device=fake", + "LG_COORDINATOR": self.harness.coordinator_url, + "LG_HOSTNAME": self.host, + "LG_USERNAME": self.user, + } + with reserve_manager(Data(env=env)) as reserve_env: + with acquire_manager(reserve_env): + stdout = self.client("-vv", "places") + self.assertIn(f"acquired: {self.host}/{self.user}", stdout) + + # Place no longer acquired. + stdout = self.client("-vv", "places") + self.assertIn("acquired: None", stdout) + + # No Reservations. + stdout = self.client("reservations") + self.assertEqual(stdout, "") + + +if __name__ == "__main__": + main()