Adds extra fields to the test job offload notification.

BUG=chromium:660913
TEST=Unitest and Manual.

Change-Id: Id83f3a9fd1254e919c6486e55615e6d009ea06f5
Previous-Reviewed-on: https://chromium-review.googlesource.com/406447
(cherry picked from commit 2b00d9feb7b4fc3b151896b868c0f6c9e8019fed)
Reviewed-on: https://chromium-review.googlesource.com/406743
Reviewed-by: Moises Osorio <moisesosorio@chromium.org>
Reviewed-by: Michael Tang <ntang@chromium.org>
Commit-Queue: Michael Tang <ntang@chromium.org>
Tested-by: Michael Tang <ntang@chromium.org>
Trybot-Ready: Michael Tang <ntang@chromium.org>
diff --git a/client/common_lib/site_utils.py b/client/common_lib/site_utils.py
index a633d80..872afcd 100644
--- a/client/common_lib/site_utils.py
+++ b/client/common_lib/site_utils.py
@@ -149,6 +149,11 @@
     return None
 
 
+def get_default_interface_mac_address():
+    """Returns the default moblab MAC address."""
+    return get_interface_mac_address(MOBLAB_ETH)
+
+
 def get_interface_mac_address(interface):
     """Return the MAC address of a given interface.
 
diff --git a/site_utils/gs_offloader.py b/site_utils/gs_offloader.py
index 4114c7a..f4373bd 100755
--- a/site_utils/gs_offloader.py
+++ b/site_utils/gs_offloader.py
@@ -43,7 +43,7 @@
 
 import job_directories
 import pubsub_utils
-from autotest_lib.client.common_lib import global_config
+from autotest_lib.client.common_lib import global_config, site_utils
 from autotest_lib.client.common_lib.cros.graphite import autotest_stats
 from autotest_lib.scheduler import email_manager
 from chromite.lib import parallel
@@ -132,6 +132,15 @@
 _PUBSUB_TOPIC = global_config.global_config.get_config_value(
         'CROS', 'cloud_notification_topic::', type='string', default=None)
 
+
+# Test upload pubsub notification attributes
+NOTIFICATION_ATTR_VERSION = 'version'
+NOTIFICATION_ATTR_GCS_URI = 'gcs_uri'
+NOTIFICATION_ATTR_MOBLAB_MAC = 'moblab_mac_address'
+NOTIFICATION_ATTR_MOBLAB_ID = 'moblab_id'
+NOTIFICATION_VERSION = '1'
+
+
 # the message data for new test result notification.
 NEW_TEST_RESULT_MESSAGE = 'NEW_TEST_RESULT'
 
@@ -431,7 +440,11 @@
     data = base64.b64encode(NEW_TEST_RESULT_MESSAGE)
     msg_payload = {'data': data}
     msg_attributes = {}
-    msg_attributes['gcs_uri'] = gs_path
+    msg_attributes[NOTIFICATION_ATTR_GCS_URI] = gs_path
+    msg_attributes[NOTIFICATION_ATTR_VERSION] = NOTIFICATION_VERSION
+    msg_attributes[NOTIFICATION_ATTR_MOBLAB_MAC] = \
+        site_utils.get_default_interface_mac_address()
+    msg_attributes[NOTIFICATION_ATTR_MOBLAB_ID] = site_utils.get_moblab_id()
     msg_payload['attributes'] = msg_attributes
 
     return msg_payload
diff --git a/site_utils/gs_offloader_unittest.py b/site_utils/gs_offloader_unittest.py
index 7eca0d9..b8bf584 100644
--- a/site_utils/gs_offloader_unittest.py
+++ b/site_utils/gs_offloader_unittest.py
@@ -20,7 +20,7 @@
 import gs_offloader
 import job_directories
 
-from autotest_lib.client.common_lib import global_config
+from autotest_lib.client.common_lib import global_config, site_utils
 from autotest_lib.client.common_lib import time_utils
 from autotest_lib.client.common_lib import utils
 from autotest_lib.scheduler import email_manager
@@ -492,10 +492,30 @@
 
     def test_create_test_result_notification(self):
         """Tests the test result notification message."""
+        self.mox.StubOutWithMock(site_utils, 'get_moblab_id')
+        self.mox.StubOutWithMock(site_utils,
+                                 'get_default_interface_mac_address')
+        site_utils.get_default_interface_mac_address().AndReturn(
+            '1c:dc:d1:11:01:e1')
+        site_utils.get_moblab_id().AndReturn(
+            'c8386d92-9ad1-11e6-80f5-111111111111')
+        self.mox.ReplayAll()
         msg = gs_offloader._create_test_result_notification('gs://test_bucket')
         self.assertEquals(base64.b64encode(
             gs_offloader.NEW_TEST_RESULT_MESSAGE), msg['data'])
-        self.assertEquals('gs://test_bucket', msg['attributes']['gcs_uri'])
+        self.assertEquals(
+            gs_offloader.NOTIFICATION_VERSION,
+            msg['attributes'][gs_offloader.NOTIFICATION_ATTR_VERSION])
+        self.assertEquals(
+            '1c:dc:d1:11:01:e1',
+            msg['attributes'][gs_offloader.NOTIFICATION_ATTR_MOBLAB_MAC])
+        self.assertEquals(
+            'c8386d92-9ad1-11e6-80f5-111111111111',
+            msg['attributes'][gs_offloader.NOTIFICATION_ATTR_MOBLAB_ID])
+        self.assertEquals(
+            'gs://test_bucket',
+            msg['attributes'][gs_offloader.NOTIFICATION_ATTR_GCS_URI])
+        self.mox.VerifyAll()
 
 
 class _MockJob(object):