buildbucket_v2: Add metadata_url data to Buildbucket

BUG=chromium:954408
TEST=run_tests

Change-Id: I0a1ebe3b16a44783fcc37ff97a2ffa5b859bb544
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1577585
Commit-Queue: Dhanya Ganesh <dhanyaganesh@chromium.org>
Tested-by: Dhanya Ganesh <dhanyaganesh@chromium.org>
Reviewed-by: Evan Hernandez <evanhernandez@chromium.org>
diff --git a/lib/buildbucket_v2.py b/lib/buildbucket_v2.py
index 4f5fbb5..c198ec7 100644
--- a/lib/buildbucket_v2.py
+++ b/lib/buildbucket_v2.py
@@ -62,7 +62,7 @@
     platform_version=None, full_version=None, toolchain_url=None,
     build_type=None, unibuild=None, suite_scheduling=None,
     killed_child_builds=None, board=None, main_firmware_version=None,
-    ec_firmware_version=None):
+    ec_firmware_version=None, metadata_url=None):
   """Update build.output.properties for the current build.
 
   Sends the property values to buildbucket via
@@ -85,6 +85,7 @@
     board: (Optional) board of the build.
     main_firmware_version: (Optional) main firmware version of the build.
     ec_firmware_version: (Optional) ec_firmware version of the build.
+    metadata_url: (Optional) google storage url to metadata.json of the build.
   """
   if critical is not None:
     critical = 1 if critical in [1, True] else 0
@@ -118,6 +119,8 @@
   if ec_firmware_version is not None:
     UpdateSelfBuildPropertiesNonBlocking('ec_firmware_version',
                                          ec_firmware_version)
+  if metadata_url is not None:
+    UpdateSelfBuildPropertiesNonBlocking('metadata_url', metadata_url)
 
 def UpdateBuildMetadata(metadata):
   """Update build.output.properties from a CBuildbotMetadata instance.
@@ -268,6 +271,7 @@
         'full_version': 'full_version',
         'milestone_version': 'milestone_version',
         'toolchain_url': 'toolchain_url',
+        'metadata_url': 'metadata_url',
         'critical': 'important',
         'build_type': 'build_type',
         'summary': 'summary',
@@ -328,7 +332,6 @@
     build_status['build_number'] = None
     build_status['buildbot_generation'] = None
     build_status['waterfall'] = None
-    build_status['metadata_url'] = None
     build_status['deadline'] = None
     # Post-processing some properties.
     if (build_status['status'] is not None and
diff --git a/lib/buildstore.py b/lib/buildstore.py
index 1458bd2..30223c4 100644
--- a/lib/buildstore.py
+++ b/lib/buildstore.py
@@ -357,16 +357,15 @@
         entry ignoring the 'final' value (For example, a build was marked as
         status='aborted' and final='true', a cron job to adjust the finish_time
         will call this method with strict=False).
-
-    Returns:
-      The number of rows that were updated.
     """
     if not self.InitializeClients():
       raise BuildStoreException('BuildStore clients could not be initialized.')
     if self._write_to_cidb:
-      return self.cidb_conn.FinishBuild(
+      self.cidb_conn.FinishBuild(
           build_id, status=status, summary=summary, metadata_url=metadata_url,
           strict=strict)
+    if self._write_to_bb:
+      buildbucket_v2.UpdateSelfCommonBuildProperties(metadata_url=metadata_url)
 
   def FinishChildConfig(self, build_id, child_config, status=None):
     """Marks the given child config as finished with |status|.
diff --git a/lib/buildstore_unittest.py b/lib/buildstore_unittest.py
index 9df8097..2bb2fb3 100644
--- a/lib/buildstore_unittest.py
+++ b/lib/buildstore_unittest.py
@@ -340,7 +340,8 @@
     """Tests the redirect for FinishBuild function."""
     init = self.PatchObject(BuildStore, 'InitializeClients',
                             return_value=True)
-    bs = BuildStore()
+    bs = BuildStore(_write_to_bb=True, _write_to_cidb=True)
+    buildbucket_v2.UpdateSelfCommonBuildProperties = mock.MagicMock()
     bs.cidb_conn = mock.MagicMock()
     status = mock.Mock()
     summary = mock.Mock()
@@ -352,6 +353,8 @@
     bs.cidb_conn.FinishBuild.assert_called_once_with(
         constants.MOCK_BUILD_ID, status=status, summary=summary,
         metadata_url=metadata_url, strict=strict)
+    buildbucket_v2.UpdateSelfCommonBuildProperties.assert_called_once_with(
+        metadata_url=metadata_url)
     init.return_value = False
     with self.assertRaises(buildstore.BuildStoreException):
       bs.FinishBuild(constants.MOCK_BUILD_ID, status=status, summary=summary,