Build API: Add ArtifactsService/BundleSimpleChromeArtifacts.
BUG=chromium:905032, b:131230967
TEST=run_tests, new tests
Cq-Depend: chromium:1592723
Change-Id: I365570034dd12920945cb9cd3f846726896af32e
Reviewed-on: https://chromium-review.googlesource.com/1582611
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Alex Klein <saklein@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Evan Hernandez <evanhernandez@chromium.org>
diff --git a/api/controller/artifacts_unittest.py b/api/controller/artifacts_unittest.py
index 580ab84..b46046d 100644
--- a/api/controller/artifacts_unittest.py
+++ b/api/controller/artifacts_unittest.py
@@ -18,6 +18,7 @@
from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
from chromite.lib import osutils
+from chromite.service import artifacts as artifacts_svc
class BundleTestCase(cros_test_lib.MockTestCase):
@@ -246,6 +247,96 @@
artifacts.BundleTestUpdatePayloads(self.input_proto, self.output_proto)
+class BundleSimpleChromeArtifactsTest(cros_test_lib.MockTempDirTestCase):
+ """BundleSimpleChromeArtifacts tests."""
+
+ def setUp(self):
+ self.chroot_dir = os.path.join(self.tempdir, 'chroot_dir')
+ self.sysroot_path = '/sysroot'
+ self.sysroot_dir = os.path.join(self.chroot_dir, 'sysroot')
+ osutils.SafeMakedirs(self.sysroot_dir)
+ self.output_dir = os.path.join(self.tempdir, 'output_dir')
+ osutils.SafeMakedirs(self.output_dir)
+
+ self.does_not_exist = os.path.join(self.tempdir, 'does_not_exist')
+
+ def _GetRequest(self, chroot=None, sysroot=None, build_target=None,
+ output_dir=None):
+ """Helper to create a request message instance.
+
+ Args:
+ chroot (str): The chroot path.
+ sysroot (str): The sysroot path.
+ build_target (str): The build target name.
+ output_dir (str): The output directory.
+ """
+ return artifacts_pb2.BundleRequest(
+ sysroot={'path': sysroot, 'build_target': {'name': build_target}},
+ chroot={'path': chroot}, output_dir=output_dir)
+
+ def _GetResponse(self):
+ return artifacts_pb2.BundleResponse()
+
+ def testNoBuildTarget(self):
+ """Test no build target fails."""
+ request = self._GetRequest(chroot=self.chroot_dir,
+ sysroot=self.sysroot_path,
+ output_dir=self.output_dir)
+ response = self._GetResponse()
+ with self.assertRaises(cros_build_lib.DieSystemExit):
+ artifacts.BundleSimpleChromeArtifacts(request, response)
+
+ def testNoSysroot(self):
+ """Test no sysroot fails."""
+ request = self._GetRequest(build_target='board', output_dir=self.output_dir)
+ response = self._GetResponse()
+ with self.assertRaises(cros_build_lib.DieSystemExit):
+ artifacts.BundleSimpleChromeArtifacts(request, response)
+
+ def testSysrootDoesNotExist(self):
+ """Test no sysroot fails."""
+ request = self._GetRequest(build_target='board', output_dir=self.output_dir,
+ sysroot=self.does_not_exist)
+ response = self._GetResponse()
+ with self.assertRaises(cros_build_lib.DieSystemExit):
+ artifacts.BundleSimpleChromeArtifacts(request, response)
+
+ def testNoOutputDir(self):
+ """Test no output dir fails."""
+ request = self._GetRequest(chroot=self.chroot_dir,
+ sysroot=self.sysroot_path,
+ build_target='board')
+ response = self._GetResponse()
+ with self.assertRaises(cros_build_lib.DieSystemExit):
+ artifacts.BundleSimpleChromeArtifacts(request, response)
+
+ def testOutputDirDoesNotExist(self):
+ """Test no output dir fails."""
+ request = self._GetRequest(chroot=self.chroot_dir,
+ sysroot=self.sysroot_path,
+ build_target='board',
+ output_dir=self.does_not_exist)
+ response = self._GetResponse()
+ with self.assertRaises(cros_build_lib.DieSystemExit):
+ artifacts.BundleSimpleChromeArtifacts(request, response)
+
+ def testOutputHandling(self):
+ """Test response output."""
+ files = ['file1', 'file2', 'file3']
+ expected_files = [os.path.join(self.output_dir, f) for f in files]
+ self.PatchObject(artifacts_svc, 'BundleSimpleChromeArtifacts',
+ return_value=expected_files)
+ request = self._GetRequest(chroot=self.chroot_dir,
+ sysroot=self.sysroot_path,
+ build_target='board', output_dir=self.output_dir)
+ response = self._GetResponse()
+
+ artifacts.BundleSimpleChromeArtifacts(request, response)
+
+ self.assertTrue(response.artifacts)
+ self.assertItemsEqual(expected_files, [a.path for a in response.artifacts])
+
+
class BundleVmFilesTest(cros_test_lib.MockTestCase):
"""BuildVmFiles tests."""