Add GetBuilderMetadata method to Packages controller.

Ran api/compile_build_api_proto. This provides a basic entry point stub
and faux unit tests. Implementation with service methods to follow.

BUG=chromium:1071620
TEST=manual, run_tests

Change-Id: I639bbced2b7d3392fb2fb2d02e9a2a832ea1e2c0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2175017
Commit-Queue: Michael Mortensen <mmortensen@google.com>
Tested-by: Michael Mortensen <mmortensen@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/packages_unittest.py b/api/controller/packages_unittest.py
index 297fba0..722f273 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -471,6 +471,51 @@
     self.assertFalse(self.response.android_target_version)
     self.assertEqual(self.response.platform_version, platform_version)
 
+
+class GetBuilderMetadataTest(cros_test_lib.MockTestCase, ApiConfigMixin):
+  """GetBuilderMetadata tests."""
+
+  def setUp(self):
+    self.response = packages_pb2.GetBuilderMetadataResponse()
+
+  def _GetRequest(self, board=None):
+    """Helper to build out a request."""
+    request = packages_pb2.GetBuilderMetadataRequest()
+
+    if board:
+      request.build_target.name = board
+
+    return request
+
+  def testValidateOnly(self):
+    """Sanity check that a validate only call does not execute any logic."""
+    request = self._GetRequest(board='betty')
+    # TODO(crbug/1071620): Add/check mock for service layer calls.
+    packages_controller.GetBuilderMetadata(request, self.response,
+                                           self.validate_only_config)
+
+  def testMockCall(self):
+    """Test that a mock call does not execute logic, returns mocked value."""
+    request = self._GetRequest(board='betty')
+    # TODO(crbug/1071620): Add/check mock for service layer calls.
+    packages_controller.GetBuilderMetadata(request, self.response,
+                                           self.mock_call_config)
+
+    self.assertEqual(len(self.response.build_target_metadata), 1)
+    self.assertEqual(self.response.build_target_metadata[0].build_target,
+                     request.build_target.name)
+    self.assertEqual(len(self.response.model_metadata), 1)
+    self.assertTrue(self.response.model_metadata[0].model_name)
+    self.assertTrue(self.response.model_metadata[0].ec_firmware_version)
+
+  def testNoBuildTargetFails(self):
+    """No build target argument should fail."""
+    request = self._GetRequest()
+
+    with self.assertRaises(cros_build_lib.DieSystemExit):
+      packages_controller.GetBuilderMetadata(request, self.response,
+                                             self.api_config)
+
 class HasChromePrebuiltTest(cros_test_lib.MockTestCase, ApiConfigMixin):
   """HasChromePrebuilt tests."""