api+sysroot: Retrieve logdir for build target
Current implementation retrieves the PORTAGE_LOGDIR envvar for the host,
not for the build target associated with the sysroot.
BUG=b:204816060
TEST=./run_tests
Change-Id: I1b0593ae12362036d267b97f36c175174a022359
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3440381
Reviewed-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Lizzy Presland <zland@google.com>
Tested-by: Lizzy Presland <zland@google.com>
Auto-Submit: Lizzy Presland <zland@google.com>
diff --git a/api/controller/controller_util_unittest.py b/api/controller/controller_util_unittest.py
index def3080..4a26066 100644
--- a/api/controller/controller_util_unittest.py
+++ b/api/controller/controller_util_unittest.py
@@ -4,6 +4,8 @@
"""controller_util unittests."""
+import glob
+
from chromite.api.controller import controller_util
from chromite.api.gen.chromite.api import build_api_test_pb2
from chromite.api.gen.chromite.api import sysroot_pb2
@@ -13,8 +15,7 @@
from chromite.lib import cros_test_lib
from chromite.lib.parser import package_info
from chromite.lib.chroot_lib import Chroot
-from chromite.lib.sysroot_lib import Sysroot
-from chromite.lib.sysroot_lib import PackageInstallError
+from chromite.lib import sysroot_lib
class ParseChrootTest(cros_test_lib.MockTestCase):
@@ -54,7 +55,7 @@
"""test successful handling case."""
path = '/build/rare_pokemon'
sysroot_message = sysroot_pb2.Sysroot(path=path)
- expected = Sysroot(path=path)
+ expected = sysroot_lib.Sysroot(path=path)
result = controller_util.ParseSysroot(sysroot_message)
self.assertEqual(expected, result)
@@ -232,15 +233,57 @@
assert pkg_info.cpvr == 'foo/bar-1.2.3-r4'
-def test_retrieve_package_log_paths():
- error = PackageInstallError(
+def test_retrieve_package_log_paths(monkeypatch):
+ class MockSysroot():
+ """Mock implementation of sysroot."""
+ def __init__(self, path):
+ pass
+ @property
+ def portage_logdir(self):
+ return '/path/to/sysroot/logdir'
+
+ old_time = '20210609-162000'
+ new_time = '20220420-131200'
+ def mock_glob(glob_path):
+ return [glob_path.replace('*', old_time),
+ glob_path.replace('*', new_time)]
+
+ monkeypatch.setattr(sysroot_lib, 'Sysroot', MockSysroot)
+ monkeypatch.setattr(glob, 'glob', mock_glob)
+ error = sysroot_lib.PackageInstallError(
msg='Failed to install 3 packages',
result=cros_build_lib.CommandResult(),
packages=[package_info.parse('foo/bar%d-1.0-r1' % num)
for num in range(1, 4)])
output_proto = sysroot_pb2.InstallPackagesResponse()
- target_sysroot = Sysroot(path='/path/to/sysroot')
controller_util.retrieve_package_log_paths(error,
output_proto,
- target_sysroot)
+ sysroot_lib.Sysroot('/'))
assert len(output_proto.failed_package_data) == 3
+ for pd in output_proto.failed_package_data:
+ assert pd.log_path.path != ''
+ assert new_time in pd.log_path.path
+
+
+def test_retrieve_package_log_paths_not_found(monkeypatch):
+ class MockSysroot():
+ """Mock implementation of sysroot."""
+ def __init__(self, path):
+ pass
+ @property
+ def portage_logdir(self):
+ return '/path/to/sysroot/logdir'
+
+ monkeypatch.setattr(sysroot_lib, 'Sysroot', MockSysroot)
+ error = sysroot_lib.PackageInstallError(
+ msg='Failed to install 3 packages',
+ result=cros_build_lib.CommandResult(),
+ packages=[package_info.parse('foo/bar%d-1.0-r1' % num)
+ for num in range(1, 4)])
+ output_proto = sysroot_pb2.InstallPackagesResponse()
+ controller_util.retrieve_package_log_paths(error,
+ output_proto,
+ sysroot_lib.Sysroot('/'))
+ assert len(output_proto.failed_package_data) == 3
+ for pd in output_proto.failed_package_data:
+ assert pd.log_path.path == ''