api: packages.py: Proto field None guards.
Add more guards again setting proto fields to None. Add tests
for the firmware versions fields.
BUG=b:244265121
TEST=run_tests
Change-Id: I112edcafd06649f43a4d512ef36f92641711259b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/3866297
Tested-by: Alex Klein <saklein@chromium.org>
Auto-Submit: Alex Klein <saklein@chromium.org>
Reviewed-by: Sergey Frolov <sfrolov@google.com>
Commit-Queue: Jim Pollock <jmpollock@chromium.org>
diff --git a/api/controller/packages_unittest.py b/api/controller/packages_unittest.py
index 052d278..556a0e4 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -541,17 +541,15 @@
packages_controller.GetBuilderMetadata(request, self.response,
self.api_config)
- def testGetBuilderMetadata(self):
- """Verify basic return values."""
- android_version = 'android_test_version'
+ def _patch_all(self, android_version, android_branch, android_target,
+ fw_versions, fingerprints):
+ """Patch everything that hasn't been broken out yet."""
android_version_mock = self.PatchObject(packages_service,
'determine_android_version',
return_value=android_version)
- android_branch = 'android_test_branch'
android_branch_mock = self.PatchObject(packages_service,
'determine_android_branch',
return_value=android_branch)
- android_target = 'android_test_target'
android_target_mock = self.PatchObject(packages_service,
'determine_android_target',
return_value=android_target)
@@ -563,20 +561,92 @@
self.PatchObject(portage_util, 'GetPackageDependencies',
return_value=package_result)
+ self.PatchObject(packages_service, 'get_firmware_versions',
+ return_value=fw_versions)
+ self.PatchObject(packages_service, 'find_fingerprints',
+ return_value=fingerprints)
+
+ return android_version_mock, android_branch_mock, android_target_mock
+
+ def _patch_get_all_firmware(self, all_fw_versions):
+ """Patch get_all_firmware_versions and related functions."""
+ # Patch packages.get_models, packages.get_all_firmware_versions,
+ # and packages.get_key_id for calls needed by model_metadata.
+ model_list = list(all_fw_versions.keys())
+ 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')
+
+ def testNoFirmware(self):
+ """Test no firmware versions handled well."""
+ android_version = 'android_test_version'
+ android_branch = 'android_test_branch'
+ android_target = 'android_test_target'
+ fw_versions = packages_service.FirmwareVersions(
+ None, None, None, None, None)
+ fingerprints = ['fingerprint1', 'fingerprint2']
+ self._patch_all(android_version, android_branch, android_target,
+ fw_versions, fingerprints)
+
+ all_fw_versions = {
+ 'pyro': packages_service.FirmwareVersions(
+ 'pyro', None, None, None, None),
+ 'reef': packages_service.FirmwareVersions(
+ 'reef', None, None, None, None),
+ }
+ self._patch_get_all_firmware(all_fw_versions)
+
+ request = self._GetRequest(board='betty')
+ packages_controller.GetBuilderMetadata(request, self.response,
+ self.api_config)
+
+ self.assertFalse(
+ self.response.build_target_metadata[0].main_firmware_version)
+ self.assertFalse(
+ self.response.build_target_metadata[0].ec_firmware_version)
+
+ self.assertEqual(
+ self.response.model_metadata[0].model_name, 'pyro')
+ self.assertFalse(
+ self.response.model_metadata[0].ec_firmware_version)
+ self.assertEqual(
+ self.response.model_metadata[0].firmware_key_id, 'key')
+ self.assertFalse(
+ self.response.model_metadata[0].main_readonly_firmware_version)
+ self.assertFalse(
+ self.response.model_metadata[0].main_readwrite_firmware_version)
+ self.assertEqual(
+ self.response.model_metadata[1].model_name, 'reef')
+ self.assertFalse(
+ self.response.model_metadata[1].ec_firmware_version)
+ self.assertEqual(
+ self.response.model_metadata[1].firmware_key_id, 'key')
+ self.assertFalse(
+ self.response.model_metadata[1].main_readonly_firmware_version)
+ self.assertFalse(
+ self.response.model_metadata[1].main_readwrite_firmware_version)
+
+ def testGetBuilderMetadata(self):
+ """Verify basic return values."""
+ android_version = 'android_test_version'
+ android_branch = 'android_test_branch'
+ android_target = 'android_test_target'
fw_versions = packages_service.FirmwareVersions(
None,
'Google_Caroline.7820.263.0',
'Google_Caroline.7820.286.0',
'caroline_v1.9.357-ac5c7b4',
'caroline_v1.9.370-e8b9bd2')
- self.PatchObject(packages_service, 'get_firmware_versions',
- return_value=fw_versions)
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']
+
+ android_version_mock, android_branch_mock, android_target_mock = (
+ self._patch_all(android_version, android_branch, android_target,
+ fw_versions, fingerprints)
+ )
+
all_fw_versions = {
'pyro': packages_service.FirmwareVersions(
'pyro',
@@ -591,12 +661,7 @@
'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')
+ self._patch_get_all_firmware(all_fw_versions)
request = self._GetRequest(board='betty')
packages_controller.GetBuilderMetadata(request, self.response,