test_push: fix the flaky get_default_build function

The get_default_build method is to get the lastest build to running
tests. However, it will fail 90% of the time because of the devserver
unreachable issue. Change the method to use gsutil to get the lastest
build.

BUG=chromium:641177
TEST=Unittest and test on the testing test_push master.

Change-Id: I33d1dfcf53a871809f4f0ecc1bfdb2febb923230
Reviewed-on: https://chromium-review.googlesource.com/379677
Tested-by: Shuqian Zhao <shuqianz@chromium.org>
Reviewed-by: Dan Shi <dshi@google.com>
Commit-Queue: Shuqian Zhao <shuqianz@chromium.org>
diff --git a/site_utils/test_push.py b/site_utils/test_push.py
index 5d3daf5..0b33794 100755
--- a/site_utils/test_push.py
+++ b/site_utils/test_push.py
@@ -44,19 +44,19 @@
 from autotest_lib.site_utils import gmail_lib
 from autotest_lib.site_utils.suite_scheduler import constants
 
+AUTOTEST_DIR='/usr/local/autotest'
 CONFIG = global_config.global_config
 
 AFE = frontend_wrappers.RetryingAFE(timeout_min=0.5, delay_sec=2)
 
 MAIL_FROM = 'chromeos-test@google.com'
-DEVSERVERS = CONFIG.get_config_value('CROS', 'dev_server', type=list,
-                                     default=[])
-BUILD_REGEX = '^R[\d]+-[\d]+\.[\d]+\.[\d]+$'
+BUILD_REGEX = 'R[\d]+-[\d]+\.[\d]+\.[\d]+'
 RUN_SUITE_COMMAND = 'run_suite.py'
 PUSH_TO_PROD_SUITE = 'push_to_prod'
 DUMMY_SUITE = 'dummy'
 AU_SUITE = 'paygen_au_canary'
 DEFAULT_TIMEOUT_MIN_FOR_SUITE_JOB = 30
+IMAGE_BUCKET = CONFIG.get_config_value('CROS', 'image_storage_server')
 
 SUITE_JOB_START_INFO_REGEX = ('^.*Created suite job:.*'
                               'tab_id=view_job&object_id=(\d+)$')
@@ -124,29 +124,24 @@
     host.close()
 
 
-def get_default_build(devserver=None, board='gandof'):
+def get_default_build(board='gandof'):
     """Get the default build to be used for test.
 
-    @param devserver: devserver used to look for latest staged build. If value
-                      is None, all devservers in config will be tried.
     @param board: Name of board to be tested, default is gandof.
     @return: Build to be tested, e.g., gandof-release/R36-5881.0.0
     """
-    LATEST_BUILD_URL_PATTERN = '%s/latestbuild?target=%s-release'
     build = None
-    if not devserver:
-        for server in DEVSERVERS:
-            url = LATEST_BUILD_URL_PATTERN % (server, board)
-            build = urllib2.urlopen(url).read()
-            if build and re.match(BUILD_REGEX, build):
-                return '%s-release/%s' % (board, build)
+    cmd = ('%s/cli/atest stable_version list --board=%s -w cautotest' %
+           (AUTOTEST_DIR, board))
+    result = subprocess.check_output(cmd, shell=True).strip()
+    build = re.search(BUILD_REGEX, result)
+    if build:
+        return '%s-release/%s' % (board, build.group(0))
 
-    # If no devserver has any build staged for the given board, use the stable
-    # build in config.
+    # If fail to get stable version from cautotest, use that defined in config
     build = CONFIG.get_config_value('CROS', 'stable_cros_version')
     return '%s-release/%s' % (board, build)
 
-
 def parse_arguments():
     """Parse arguments for test_push tool.
 
@@ -173,9 +168,6 @@
     parser.add_argument('-e', '--email', dest='email', default=None,
                         help='Email address for the notification to be sent to '
                              'after the script finished running.')
-    parser.add_argument('-d', '--devserver', dest='devserver',
-                        default=None,
-                        help='devserver to find what\'s the latest build.')
     parser.add_argument('-t', '--timeout_min', dest='timeout_min', type=int,
                         default=DEFAULT_TIMEOUT_MIN_FOR_SUITE_JOB,
                         help='Time in mins to wait before abort the jobs we '
@@ -186,11 +178,9 @@
 
     # Get latest canary build as default build.
     if not arguments.build:
-        arguments.build = get_default_build(arguments.devserver,
-                                            arguments.board)
+        arguments.build = get_default_build(arguments.board)
     if not arguments.shard_build:
-        arguments.shard_build = get_default_build(arguments.devserver,
-                                                  arguments.shard_board)
+        arguments.shard_build = get_default_build(arguments.shard_board)
 
     return arguments
 
diff --git a/site_utils/test_push_unittest.py b/site_utils/test_push_unittest.py
index 8636a7a..5837a06 100755
--- a/site_utils/test_push_unittest.py
+++ b/site_utils/test_push_unittest.py
@@ -62,9 +62,9 @@
         urllib2.urlopen(mox.IgnoreArg()).AndReturn(response)
 
         self.mox.StubOutWithMock(test_push, 'get_default_build')
-        test_push.get_default_build(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
+        test_push.get_default_build(mox.IgnoreArg()).AndReturn(
                 'stumpy-release/R36-5881-0.0')
-        test_push.get_default_build(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
+        test_push.get_default_build(mox.IgnoreArg()).AndReturn(
                 'quawks-release/R36-5881-0.0')
 
         self.mox.StubOutWithMock(test_push, 'check_dut_image')