api: artifacts: Switch over to result_path and artifact_path

For everything still using Bundle{Request,Response}. This will make
the transition to running these APIs inside the chroot easier.

NB: this leaves out BundleVmFiles(), because it uses a unique request
type, and it has a simple implementation than handles outside-chroot
operation just fine.

BUG=b:187787264
TEST=./run_tests
TEST=api/compile_build_api_proto

Change-Id: I0315bd2e83663dfbb752c2a501bb29f4e1af0ed4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4698295
Commit-Queue: Brian Norris <briannorris@chromium.org>
Tested-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/artifacts_unittest.py b/api/controller/artifacts_unittest.py
index 7520acb..9630a6d 100644
--- a/api/controller/artifacts_unittest.py
+++ b/api/controller/artifacts_unittest.py
@@ -42,7 +42,8 @@
         if build_target:
             request.build_target.name = build_target
         if output_dir:
-            request.output_dir = output_dir
+            request.result_path.path.path = str(output_dir)
+            request.result_path.path.location = common_pb2.Path.Location.OUTSIDE
         if chroot:
             request.chroot.path = chroot
 
@@ -63,7 +64,8 @@
         if build_target:
             request.sysroot.build_target.name = build_target
         if output_dir:
-            request.output_dir = output_dir
+            request.result_path.path.path = output_dir
+            request.result_path.path.location = common_pb2.Path.Location.OUTSIDE
         if chroot:
             request.chroot.path = str(chroot)
         if chroot_out:
@@ -137,11 +139,11 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 2)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "path0.tar.xz"),
         )
         self.assertEqual(
-            self.response.artifacts[1].path,
+            self.response.artifacts[1].artifact_path.path,
             os.path.join(self.output_dir, "path1.tar.xz"),
         )
 
@@ -182,7 +184,7 @@
         )
 
         self.assertCountEqual(
-            expected, [a.path for a in self.response.artifacts]
+            expected, [a.artifact_path.path for a in self.response.artifacts]
         )
 
 
@@ -206,7 +208,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "image.zip"),
         )
 
@@ -220,7 +222,10 @@
             self.target_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "image.zip")],
         )
 
@@ -261,7 +266,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "autotest-a.tar.gz"),
         )
 
@@ -287,7 +292,9 @@
 
         # Verify the output proto is being populated correctly.
         self.assertTrue(self.response.artifacts)
-        paths = [artifact.path for artifact in self.response.artifacts]
+        paths = [
+            artifact.artifact_path.path for artifact in self.response.artifacts
+        ]
         self.assertCountEqual(list(files.values()), paths)
 
     def testInvalidOutputDir(self):
@@ -344,7 +351,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "tast_bundles.tar.gz"),
         )
 
@@ -372,7 +379,9 @@
 
         # Make sure the artifact got recorded successfully.
         self.assertTrue(self.response.artifacts)
-        self.assertEqual(expected_archive, self.response.artifacts[0].path)
+        self.assertEqual(
+            expected_archive, self.response.artifacts[0].artifact_path.path
+        )
         # Make sure the service got called correctly.
         bundle_patch.assert_called_once_with(
             self.chroot, self.sysroot, self.output_dir
@@ -399,7 +408,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "firmware.tar.gz"),
         )
 
@@ -415,7 +424,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "firmware.tar.gz")],
         )
 
@@ -448,7 +460,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "fpmcu_unittests.tar.gz"),
         )
 
@@ -465,7 +477,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "fpmcu_unittests.tar.gz")],
         )
 
@@ -500,7 +515,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "ebuild-logs.tar.gz"),
         )
 
@@ -515,7 +530,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "ebuild-logs.tar.gz")],
         )
         self.assertEqual(
@@ -553,7 +571,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "config.yaml"),
         )
 
@@ -566,7 +584,10 @@
             self.sysroot_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, "config.yaml")],
         )
 
@@ -607,6 +628,11 @@
         self.input_proto = artifacts_pb2.BundleRequest()
         self.input_proto.build_target.name = self.target
         self.input_proto.output_dir = self.archive_root
+        self.input_proto.result_path.path.path = self.archive_root
+        self.input_proto.result_path.path.location = (
+            common_pb2.Path.Location.OUTSIDE
+        )
+
         self.output_proto = artifacts_pb2.BundleResponse()
 
         self.PatchObject(constants, "SOURCE_ROOT", new=self.source_root)
@@ -644,15 +670,15 @@
         patch.assert_not_called()
         self.assertEqual(len(self.output_proto.artifacts), 3)
         self.assertEqual(
-            self.output_proto.artifacts[0].path,
+            self.output_proto.artifacts[0].artifact_path.path,
             os.path.join(self.archive_root, "payload1.bin"),
         )
         self.assertEqual(
-            self.output_proto.artifacts[1].path,
+            self.output_proto.artifacts[1].artifact_path.path,
             os.path.join(self.archive_root, "payload1.json"),
         )
         self.assertEqual(
-            self.output_proto.artifacts[2].path,
+            self.output_proto.artifacts[2].artifact_path.path,
             os.path.join(self.archive_root, "payload1.log"),
         )
 
@@ -666,7 +692,7 @@
         )
 
         actual = [
-            os.path.relpath(artifact.path, self.archive_root)
+            os.path.relpath(artifact.artifact_path.path, self.archive_root)
             for artifact in self.output_proto.artifacts
         ]
         expected = ["payload1.bin", "payload2.bin"]
@@ -739,7 +765,12 @@
                 "path": chroot.path if chroot else None,
                 "out_path": str(chroot.out_path) if chroot else None,
             },
-            output_dir=output_dir,
+            result_path=common_pb2.ResultPath(
+                path=common_pb2.Path(
+                    path=output_dir,
+                    location=common_pb2.Path.OUTSIDE,
+                )
+            ),
         )
 
     def testValidateOnly(self):
@@ -771,7 +802,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "simple_chrome.txt"),
         )
 
@@ -862,7 +893,7 @@
 
         self.assertTrue(response.artifacts)
         self.assertCountEqual(
-            expected_files, [a.path for a in response.artifacts]
+            expected_files, [a.artifact_path.path for a in response.artifacts]
         )
 
 
@@ -1029,11 +1060,11 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 2)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, "cpe_report.txt"),
         )
         self.assertEqual(
-            self.response.artifacts[1].path,
+            self.response.artifacts[1].artifact_path.path,
             os.path.join(self.output_dir, "cpe_warnings.txt"),
         )
 
@@ -1051,7 +1082,10 @@
         )
 
         for artifact in self.response.artifacts:
-            self.assertIn(artifact.path, [expected.report, expected.warnings])
+            self.assertIn(
+                artifact.artifact_path.path,
+                [expected.report, expected.warnings],
+            )
 
 
 class BundleGceTarballTest(BundleTestCase):
@@ -1074,7 +1108,7 @@
         patch.assert_not_called()
         self.assertEqual(len(self.response.artifacts), 1)
         self.assertEqual(
-            self.response.artifacts[0].path,
+            self.response.artifacts[0].artifact_path.path,
             os.path.join(self.output_dir, constants.TEST_IMAGE_GCE_TAR),
         )
 
@@ -1092,7 +1126,10 @@
             self.target_request, self.response, self.api_config
         )
         self.assertEqual(
-            [artifact.path for artifact in self.response.artifacts],
+            [
+                artifact.artifact_path.path
+                for artifact in self.response.artifacts
+            ],
             [os.path.join(self.output_dir, constants.TEST_IMAGE_GCE_TAR)],
         )