swarming_lib: Remove SWARMING_TASK_ID from cmds.

If SWARMING_TASK_ID is present when running swarming proxy commands,
the proxy will try to make use of it. This fails for swarming builds,
since the swarming build instance and lab swarming proxy instance are
fully independent.

BUG=chromium:821227
TEST=Unittests + cros tryjob --swarming -g XX samus-release-tryjob

Change-Id: I1cf18ef83b3b9e442ba7d5da63002a6d62fdf258
Reviewed-on: https://chromium-review.googlesource.com/961532
Commit-Ready: Don Garrett <dgarrett@chromium.org>
Tested-by: Don Garrett <dgarrett@chromium.org>
Reviewed-by: Don Garrett <dgarrett@chromium.org>
(cherry picked from commit 4cb4f50661ba05e369653216c4f82d13026937ac)
Reviewed-on: https://chromium-review.googlesource.com/1038483
diff --git a/cbuildbot/commands_unittest.py b/cbuildbot/commands_unittest.py
index fbf14a6..01332b5 100644
--- a/cbuildbot/commands_unittest.py
+++ b/cbuildbot/commands_unittest.py
@@ -422,7 +422,7 @@
       cmd_result = self.RunHWTestSuite()
     self.assertEqual(cmd_result, (None, None))
     self.assertCommandCalled(self.create_cmd, capture_output=True,
-                             combine_stdout_stderr=True)
+                             combine_stdout_stderr=True, env=mock.ANY)
     self.assertIn(self.JOB_ID_OUTPUT, '\n'.join(output.GetStdoutLines()))
 
   def testRunHWTestSuiteMaximal(self):
@@ -458,9 +458,9 @@
                                        subsystems=self._subsystems)
     self.assertEqual(cmd_result, (None, None))
     self.assertCommandCalled(self.create_cmd, capture_output=True,
-                             combine_stdout_stderr=True)
+                             combine_stdout_stderr=True, env=mock.ANY)
     self.assertCommandCalled(self.wait_cmd, capture_output=True,
-                             combine_stdout_stderr=True)
+                             combine_stdout_stderr=True, env=mock.ANY)
     self.assertIn(self.WAIT_OUTPUT, '\n'.join(output.GetStdoutLines()))
     self.assertIn(self.JOB_ID_OUTPUT, '\n'.join(output.GetStdoutLines()))
 
@@ -509,7 +509,7 @@
       cmd_result = self.RunHWTestSuite(wait_for_results=True)
       self.assertIsInstance(cmd_result.to_raise, failures_lib.TestLabFailure)
       self.assertCommandCalled(self.json_dump_cmd, capture_output=True,
-                               combine_stdout_stderr=True)
+                               combine_stdout_stderr=True, env=mock.ANY)
 
   def testRunHWTestBoardNotAvailable(self):
     """Test RunHWTestSuite when BOARD_NOT_AVAILABLE is returned."""
@@ -563,9 +563,9 @@
     with self.OutputCapturer() as output:
       self.RunHWTestSuite(wait_for_results=self._wait_for_results)
       self.assertCommandCalled(self.create_cmd, capture_output=True,
-                               combine_stdout_stderr=True)
+                               combine_stdout_stderr=True, env=mock.ANY)
       self.assertCommandCalled(self.wait_cmd, capture_output=True,
-                               combine_stdout_stderr=True)
+                               combine_stdout_stderr=True, env=mock.ANY)
       self.assertIn(self.WAIT_RETRY_OUTPUT.strip(),
                     '\n'.join(output.GetStdoutLines()))
       self.assertIn(self.WAIT_OUTPUT, '\n'.join(output.GetStdoutLines()))
@@ -612,9 +612,9 @@
       with self.OutputCapturer() as output:
         self.RunHWTestSuite(wait_for_results=self._wait_for_results)
         self.assertCommandCalled(self.create_cmd, capture_output=True,
-                                 combine_stdout_stderr=True)
+                                 combine_stdout_stderr=True, env=mock.ANY)
         self.assertCommandCalled(self.json_dump_cmd, capture_output=True,
-                                 combine_stdout_stderr=True)
+                                 combine_stdout_stderr=True, env=mock.ANY)
         self.assertIn(self.JOB_ID_OUTPUT, '\n'.join(output.GetStdoutLines()))
         self.assertIn(self.JSON_OUTPUT, '\n'.join(output.GetStdoutLines()))
 
diff --git a/cbuildbot/swarming_lib.py b/cbuildbot/swarming_lib.py
index 76f098b..324ea2b 100644
--- a/cbuildbot/swarming_lib.py
+++ b/cbuildbot/swarming_lib.py
@@ -90,6 +90,10 @@
     swarming_cmd += ['--']
     swarming_cmd += cmd
 
+    # Ensure SWARMING_TASK_ID is unset in env. See crbug.com/821227.
+    kwargs.setdefault('env', os.environ.copy())
+    kwargs['env'].pop('SWARMING_TASK_ID', None)
+
     try:
       result = None
       while True:
diff --git a/cbuildbot/swarming_lib_unittest b/cbuildbot/swarming_lib_unittest
new file mode 120000
index 0000000..72196ce
--- /dev/null
+++ b/cbuildbot/swarming_lib_unittest
@@ -0,0 +1 @@
+../scripts/wrapper.py
\ No newline at end of file
diff --git a/cbuildbot/swarming_lib_unittest.py b/cbuildbot/swarming_lib_unittest.py
new file mode 100644
index 0000000..bd037f2
--- /dev/null
+++ b/cbuildbot/swarming_lib_unittest.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Copyright 2018 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Unit tests for swarming_lib module."""
+
+from __future__ import print_function
+
+from chromite.cbuildbot import swarming_lib
+from chromite.lib import cros_build_lib_unittest
+
+
+class SwarmingLibTest(cros_build_lib_unittest.RunCommandTestCase):
+  """Unit test of swarming_lib module."""
+
+  def testEnv(self):
+    """Validate that 'SWARMING_TASK_ID' is removed from swarming cmds."""
+    swarming_lib.RunSwarmingCommand(['cmd'], 'test-server')
+    swarming_lib.RunSwarmingCommand(['cmd'], 'test-server',
+                                    env={'SWARMING_TASK_ID': 'foo'})
+
+    for _, kwargs in self.rc.call_args_list:
+      self.assertIn('env', kwargs)
+      self.assertNotIn('SWARMING_TASK_ID', kwargs['env'])