xbuddy: Prepare unittests for move to chromite.

* mock.patch decorator doesn't work for objects imported from
chromite.lib, so use mock.patch.object instead.
* Fix lint errors in android_build and retry.
* After migration to chromite, gs will never be None.
* async will be a new keyword in Python 3.7, so use is_async instead.
'async' is used in devserver code which will also need to be fixed.

BUG=chromium:1003986
TEST=unittests, devserver_integration_test, cros flash

Change-Id: Ida537acc551d38ed1e8c5f2d860ec9bdedf26ced
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/1867889
Tested-by: Achuith Bhandarkar <achuith@chromium.org>
Commit-Queue: Achuith Bhandarkar <achuith@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
diff --git a/devserver.py b/devserver.py
index b4aa7eb..80d842b 100755
--- a/devserver.py
+++ b/devserver.py
@@ -243,8 +243,8 @@
   artifacts, files = _get_artifacts(kwargs)
   dl = _get_downloader(kwargs)
 
-  if (isinstance(dl, downloader.GoogleStorageDownloader) or
-      isinstance(dl, downloader.LocalDownloader)):
+  if (isinstance(dl, (downloader.GoogleStorageDownloader,
+                      downloader.LocalDownloader))):
     factory_class = build_artifact.ChromeOSArtifactFactory
   elif isinstance(dl, downloader.AndroidBuildDownloader):
     factory_class = build_artifact.AndroidArtifactFactory
@@ -751,8 +751,8 @@
       if clean and os.path.exists(dl.GetBuildDir()):
         _Log('Removing %s' % dl.GetBuildDir())
         shutil.rmtree(dl.GetBuildDir())
-      async = kwargs.get('async', False)
-      dl.Download(factory, async=async)
+      is_async = kwargs.get('async', False)
+      dl.Download(factory, is_async=is_async)
     finally:
       with DevServerRoot._staging_thread_count_lock:
         DevServerRoot._staging_thread_count -= 1
@@ -786,7 +786,7 @@
     build_name = kwargs['build_name']
     force_update = _parse_boolean_arg(kwargs, 'force_update')
     full_update = _parse_boolean_arg(kwargs, 'full_update')
-    async = _parse_boolean_arg(kwargs, 'async')
+    is_async = _parse_boolean_arg(kwargs, 'async')
     original_build = _parse_string_arg(kwargs, 'original_build')
     payload_filename = _parse_string_arg(kwargs, 'payload_filename')
     clobber_stateful = _parse_boolean_arg(kwargs, 'clobber_stateful')
@@ -795,7 +795,7 @@
     devserver_url = updater.GetDevserverUrl()
     static_url = updater.GetStaticUrl()
 
-    if async:
+    if is_async:
       path = os.path.dirname(os.path.abspath(__file__))
       execute_file = os.path.join(path, 'cros_update.py')
       args = (AUTO_UPDATE_CMD % (execute_file, host_name, build_name,