deploy_chrome: Retry test binary deployment

Tries the file copying in _DeployTestBinaries up to 3 times since
copying can fail due to rsync flakily getting a broken pipe.

BUG=chromium:1141618
TEST=Ran scripts/deploy_chrome_unittest.py

Change-Id: Iacc1f0fe3686030d8467c8476c08bba191ade848
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2508467
Commit-Queue: Achuith Bhandarkar <achuith@chromium.org>
Tested-by: Achuith Bhandarkar <achuith@chromium.org>
Reviewed-by: Achuith Bhandarkar <achuith@chromium.org>
Auto-Submit: Brian Sheedy <bsheedy@chromium.org>
diff --git a/scripts/deploy_chrome.py b/scripts/deploy_chrome.py
index 7473393..70466ba 100644
--- a/scripts/deploy_chrome.py
+++ b/scripts/deploy_chrome.py
@@ -41,6 +41,7 @@
 from chromite.lib import osutils
 from chromite.lib import parallel
 from chromite.lib import remote_access as remote
+from chromite.lib import retry_util
 from chromite.lib import timeout_util
 from gn_helpers import gn_helpers
 
@@ -383,8 +384,12 @@
         self.tempdir, os.path.basename(_CHROME_TEST_BIN_DIR))
     _PrepareStagingDir(self.options, self.tempdir, staging_dir,
                        copy_paths=binaries_to_copy)
-    self.device.CopyToDevice(
-        staging_dir, os.path.dirname(_CHROME_TEST_BIN_DIR), mode='rsync')
+    # Deploying can occasionally run into issues with rsync getting a broken
+    # pipe, so retry several times. See crbug.com/1141618 for more
+    # information.
+    retry_util.RetryException(
+        None, 3, self.device.CopyToDevice, staging_dir,
+        os.path.dirname(_CHROME_TEST_BIN_DIR), mode='rsync')
 
   def _CheckConnection(self):
     try: