Add controller calls to fill out ModelMetadata using service calls.

BUG=chromium:1071620
TEST=manual, run_tests

Change-Id: Ia09f2a6a547460f36484ce309ad84b1f1f52903d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2220161
Tested-by: Michael Mortensen <mmortensen@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
Commit-Queue: Michael Mortensen <mmortensen@google.com>
diff --git a/api/controller/packages_unittest.py b/api/controller/packages_unittest.py
index 354d7cc..2d76a2e 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -566,6 +566,30 @@
     fingerprints = ['fingerprint1', 'fingerprint2']
     self.PatchObject(packages_service, 'find_fingerprints',
                      return_value=fingerprints)
+    # Patch packages.get_models, packages.get_all_firmware_versions,
+    # and packages.get_key_id for calls needed by model_metadata.
+    model_list = ['pyro', 'reef']
+    all_fw_versions = {
+        'pyro': packages_service.FirmwareVersions(
+            'pyro',
+            'Google_Pyro.9042.87.1',
+            'Google_Pyro.9042.110.0',
+            'pyro_v1.1.5900-ab1ee51',
+            'pyro_v1.1.5909-bd1f0c9'),
+        'reef': packages_service.FirmwareVersions(
+            'reef',
+            'Google_Reef.9042.87.1',
+            'Google_Reef.9042.110.0',
+            'reef_v1.1.5900-ab1ee51',
+            'reef_v1.1.5909-bd1f0c9')
+    }
+    self.PatchObject(packages_service, 'get_all_firmware_versions',
+                     return_value=all_fw_versions)
+    self.PatchObject(packages_service, 'get_models',
+                     return_value=model_list)
+    self.PatchObject(packages_service, 'get_key_id',
+                     return_value='key')
+
     request = self._GetRequest(board='betty')
     packages_controller.GetBuilderMetadata(request, self.response,
                                            self.api_config)
@@ -605,6 +629,34 @@
     self.assertEqual(
         self.response.build_target_metadata[0].fingerprints,
         fingerprints)
+    self.assertEqual(
+        len(self.response.model_metadata), 2)
+    self.assertEqual(
+        self.response.model_metadata[0].model_name, 'pyro')
+    self.assertEqual(
+        self.response.model_metadata[0].ec_firmware_version,
+        'pyro_v1.1.5909-bd1f0c9')
+    self.assertEqual(
+        self.response.model_metadata[0].firmware_key_id, 'key')
+    self.assertEqual(
+        self.response.model_metadata[0].main_readonly_firmware_version,
+        'Google_Pyro.9042.87.1')
+    self.assertEqual(
+        self.response.model_metadata[0].main_readwrite_firmware_version,
+        'Google_Pyro.9042.110.0')
+    self.assertEqual(
+        self.response.model_metadata[1].model_name, 'reef')
+    self.assertEqual(
+        self.response.model_metadata[1].ec_firmware_version,
+        'reef_v1.1.5909-bd1f0c9')
+    self.assertEqual(
+        self.response.model_metadata[1].firmware_key_id, 'key')
+    self.assertEqual(
+        self.response.model_metadata[1].main_readonly_firmware_version,
+        'Google_Reef.9042.87.1')
+    self.assertEqual(
+        self.response.model_metadata[1].main_readwrite_firmware_version,
+        'Google_Reef.9042.110.0')
 
 
 class HasChromePrebuiltTest(cros_test_lib.MockTestCase, ApiConfigMixin):