BuildAPI: Add unit tests and mocks for Artifacts service.
Also added unit tests for FetchPinnedGuestImages.
BUG=chromium:1000845
TEST=run_tests
Change-Id: Ib8d44b03c0ac849055fb8330fef72b2737efce2f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1937729
Reviewed-by: Alex Klein <saklein@chromium.org>
Tested-by: Michael Mortensen <mmortensen@google.com>
Commit-Queue: Nicolas Boichat <drinkcat@chromium.org>
diff --git a/api/controller/artifacts.py b/api/controller/artifacts.py
index 11d88d9..4a69f6f 100644
--- a/api/controller/artifacts.py
+++ b/api/controller/artifacts.py
@@ -45,7 +45,16 @@
return image_dir
-@faux.all_empty
+def _BundleImageArchivesResponse(input_proto, output_proto, _config):
+ """Add artifact paths to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(input_proto.output_dir,
+ 'path0.tar.xz')
+ output_proto.artifacts.add().path = os.path.join(input_proto.output_dir,
+ 'path1.tar.xz')
+
+
+@faux.success(_BundleImageArchivesResponse)
+@faux.empty_error
@validate.require('build_target.name')
@validate.exists('output_dir')
@validate.validation_complete
@@ -63,7 +72,14 @@
output_proto.artifacts.add().path = os.path.join(output_dir, archive)
-@faux.all_empty
+def _BundleImageZipResponse(input_proto, output_proto, _config):
+ """Add artifact zip files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(input_proto.output_dir,
+ 'image.zip')
+
+
+@faux.success(_BundleImageZipResponse)
+@faux.empty_error
@validate.require('build_target.name', 'output_dir')
@validate.exists('output_dir')
@validate.validation_complete
@@ -85,7 +101,14 @@
output_proto.artifacts.add().path = os.path.join(output_dir, archive)
-@faux.all_empty
+def _BundleTestUpdatePayloadsResponse(input_proto, output_proto, _config):
+ """Add test payload files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(input_proto.output_dir,
+ 'payload1.bin')
+
+
+@faux.success(_BundleTestUpdatePayloadsResponse)
+@faux.empty_error
@validate.require('build_target.name', 'output_dir')
@validate.exists('output_dir')
@validate.validation_complete
@@ -123,7 +146,14 @@
output_proto.artifacts.add().path = payload
-@faux.all_empty
+def _BundleAutotestFilesResponse(input_proto, output_proto, _config):
+ """Add test autotest files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(input_proto.output_dir,
+ 'autotest-a.tar.gz')
+
+
+@faux.success(_BundleAutotestFilesResponse)
+@faux.empty_error
@validate.require('output_dir')
@validate.exists('output_dir')
def BundleAutotestFiles(input_proto, output_proto, config):
@@ -166,7 +196,14 @@
output_proto.artifacts.add().path = archive
-@faux.all_empty
+def _BundleTastFilesResponse(input_proto, output_proto, _config):
+ """Add test tast files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(input_proto.output_dir,
+ 'tast_bundles.tar.gz')
+
+
+@faux.success(_BundleTastFilesResponse)
+@faux.empty_error
@validate.require('output_dir')
@validate.exists('output_dir')
def BundleTastFiles(input_proto, output_proto, config):
@@ -214,7 +251,14 @@
output_proto.artifacts.add().path = archive
-@faux.all_empty
+def _BundlePinnedGuestImagesResponse(input_proto, output_proto, _config):
+ """Add test pinned guest image files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'pinned-guest-images.tar.gz')
+
+
+@faux.success(_BundlePinnedGuestImagesResponse)
+@faux.empty_error
@validate.require('build_target.name', 'output_dir')
@validate.exists('output_dir')
@validate.validation_complete
@@ -241,7 +285,15 @@
output_proto.artifacts.add().path = os.path.join(output_dir, archive)
-@faux.all_empty
+def _FetchPinnedGuestImagesResponse(_input_proto, output_proto, _config):
+ """Add test fetched pinned guest image files to a successful response."""
+ pinned_image = output_proto.pinned_images.add()
+ pinned_image.filename = 'pinned_file.tar.gz'
+ pinned_image.uri = 'https://testuri.com'
+
+
+@faux.success(_FetchPinnedGuestImagesResponse)
+@faux.empty_error
@validate.require('sysroot.path')
@validate.validation_complete
def FetchPinnedGuestImages(input_proto, output_proto, _config):
@@ -265,7 +317,14 @@
pinned_image.uri = pin.uri
-@faux.all_empty
+def _BundleFirmwareResponse(input_proto, output_proto, _config):
+ """Add test firmware image files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'firmware.tar.gz')
+
+
+@faux.success(_BundleFirmwareResponse)
+@faux.empty_error
@validate.require('output_dir', 'sysroot.path')
@validate.exists('output_dir')
@validate.validation_complete
@@ -298,7 +357,14 @@
output_proto.artifacts.add().path = archive
-@faux.all_empty
+def _BundleEbuildLogsResponse(input_proto, output_proto, _config):
+ """Add test log files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'ebuild-logs.tar.gz')
+
+
+@faux.success(_BundleEbuildLogsResponse)
+@faux.empty_error
@validate.exists('output_dir')
def BundleEbuildLogs(input_proto, output_proto, config):
"""Tar the ebuild logs for a build target.
@@ -334,7 +400,14 @@
output_proto.artifacts.add().path = os.path.join(output_dir, archive)
-@faux.all_empty
+def _BundleChromeOSConfigResponse(input_proto, output_proto, _config):
+ """Add test config files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'config.yaml')
+
+
+@faux.success(_BundleChromeOSConfigResponse)
+@faux.empty_error
@validate.exists('output_dir')
@validate.validation_complete
def BundleChromeOSConfig(input_proto, output_proto, _config):
@@ -366,7 +439,14 @@
output_proto.artifacts.add().path = os.path.join(output_dir, chromeos_config)
-@faux.all_empty
+def _BundleSimpleChromeArtifactsResponse(input_proto, output_proto, _config):
+ """Add test simple chrome files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'simple_chrome.txt')
+
+
+@faux.success(_BundleSimpleChromeArtifactsResponse)
+@faux.empty_error
@validate.require('output_dir', 'sysroot.build_target.name', 'sysroot.path')
@validate.exists('output_dir')
@validate.validation_complete
@@ -403,7 +483,14 @@
output_proto.artifacts.add().path = file_name
-@faux.all_empty
+def _BundleVmFilesResponse(input_proto, output_proto, _config):
+ """Add test vm files to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'f1.tar')
+
+
+@faux.success(_BundleVmFilesResponse)
+@faux.empty_error
@validate.require('chroot.path', 'test_results_dir', 'output_dir')
@validate.exists('output_dir')
@validate.validation_complete
@@ -424,17 +511,23 @@
for archive in archives:
output_proto.artifacts.add().path = archive
+def _BundleAFDOGenerationArtifactsResponse(input_proto, output_proto, _config):
+ """Add test tarball AFDO file to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'artifact1')
+
_VALID_ARTIFACT_TYPES = [toolchain_pb2.BENCHMARK_AFDO,
toolchain_pb2.ORDERFILE]
-@faux.all_empty
+@faux.success(_BundleAFDOGenerationArtifactsResponse)
+@faux.empty_error
@validate.require('build_target.name', 'output_dir')
@validate.is_in('artifact_type', _VALID_ARTIFACT_TYPES)
@validate.exists('output_dir')
@validate.exists('chroot.chrome_dir')
@validate.validation_complete
def BundleAFDOGenerationArtifacts(input_proto, output_proto, _config):
- """Generic function for creating tarballs of both AFDO and orerfile.
+ """Generic function for creating tarballs of both AFDO and orderfile.
Args:
input_proto (BundleChromeAFDORequest): The input proto.
@@ -465,7 +558,16 @@
output_proto.artifacts.add().path = file_name
-@faux.all_empty
+def _ExportCpeReportResponse(input_proto, output_proto, _config):
+ """Add test cpe results to a successful response."""
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'cpe_report.txt')
+ output_proto.artifacts.add().path = os.path.join(
+ input_proto.output_dir, 'cpe_warnings.txt')
+
+
+@faux.success(_ExportCpeReportResponse)
+@faux.empty_error
@validate.exists('output_dir')
def ExportCpeReport(input_proto, output_proto, config):
"""Export a CPE report.