diff --git a/downloader.py b/downloader.py
old mode 100755
new mode 100644
index 8afdda9..4138b09
--- a/downloader.py
+++ b/downloader.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python2
 # -*- coding: utf-8 -*-
 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
@@ -18,6 +17,15 @@
 import threading
 from datetime import datetime
 
+try:
+  import android_build
+except ImportError:
+  # Ignore android_build import failure. This is to support devserver running
+  # inside a ChromeOS device triggered by cros flash. Most ChromeOS test images
+  # do not have google-api-python-client module and they don't need to support
+  # Android updating, therefore, ignore the import failure here.
+  android_build = None
+
 import build_artifact
 import common_util
 import log_util
@@ -27,19 +35,9 @@
 
 try:
   from chromite.lib import gs
-except ImportError as e:
+except ImportError:
   gs = None
 
-try:
-  import android_build
-except ImportError as e:
-  # Ignore android_build import failure. This is to support devserver running
-  # inside a ChromeOS device triggered by cros flash. Most ChromeOS test images
-  # do not have google-api-python-client module and they don't need to support
-  # Android updating, therefore, ignore the import failure here.
-  android_build = None
-
-
 class DownloaderException(Exception):
   """Exception that aggregates all exceptions raised during async download.
 
@@ -107,7 +105,7 @@
   def TouchTimestampForStaged(directory_path):
     file_name = os.path.join(directory_path, Downloader._TIMESTAMP_FILENAME)
     # Easiest python version of |touch file_name|
-    with file(file_name, 'a'):
+    with open(file_name, 'a'):
       os.utime(file_name, None)
 
   @staticmethod
diff --git a/downloader_unittest.py b/downloader_unittest.py
index 0082f75..f6dbe98 100755
--- a/downloader_unittest.py
+++ b/downloader_unittest.py
@@ -8,22 +8,22 @@
 
 from __future__ import print_function
 
-import mox
 import os
 import shutil
 import tempfile
 import unittest
 
+import mock
+
 import build_artifact
 import downloader
 
 
-# pylint: disable=W0212,E1120
-class DownloaderTestBase(mox.MoxTestBase):
+# pylint: disable=protected-access,no-value-for-parameter
+class DownloaderTestBase(unittest.TestCase):
   """Downloader Unittests."""
 
   def setUp(self):
-    mox.MoxTestBase.setUp(self)
     self._work_dir = tempfile.mkdtemp('downloader-test')
     self.board = 'x86-mario-release'
     self.build = 'R17-1413.0.0-a1-b1346'
@@ -34,31 +34,28 @@
   def tearDown(self):
     shutil.rmtree(self._work_dir, ignore_errors=True)
 
-  def _SimpleDownloadOfTestSuites(self, downloader_instance):
+  @mock.patch('downloader.Downloader._DownloadArtifactsSerially')
+  @mock.patch('downloader.Downloader._DownloadArtifactsInBackground')
+  def _SimpleDownloadOfTestSuites(self, downloader_instance, bg_mock,
+                                  serial_mock):
     """Helper to verify test_suites are downloaded correctly.
 
     Args:
       downloader_instance: Downloader object to test with.
+      bg_mock: background download method mock.
+      serial_mock: serial download method mock.
     """
     factory = build_artifact.ChromeOSArtifactFactory(
         downloader_instance.GetBuildDir(), ['test_suites'],
         None, downloader_instance.GetBuild())
-    self.mox.StubOutWithMock(downloader.Downloader,
-                             '_DownloadArtifactsSerially')
-    self.mox.StubOutWithMock(downloader.Downloader,
-                             '_DownloadArtifactsInBackground')
 
-    downloader.Downloader._DownloadArtifactsInBackground(mox.In(mox.IsA(
-        build_artifact.AutotestTarball)))
-    downloader.Downloader._DownloadArtifactsSerially(
-        [mox.IsA(build_artifact.BundledArtifact)], no_wait=True)
-    self.mox.ReplayAll()
     downloader_instance.Download(factory)
     # Sanity check the timestamp file exists.
+    install_dir = os.path.join(self._work_dir, self.board, self.build)
     self.assertTrue(os.path.exists(
-        os.path.join(self._work_dir, self.board, self.build,
-                     downloader.Downloader._TIMESTAMP_FILENAME)))
-    self.mox.VerifyAll()
+        os.path.join(install_dir, downloader.Downloader._TIMESTAMP_FILENAME)))
+    serial_mock.assert_called()
+    bg_mock.assert_called()
 
   def testSimpleDownloadOfTestSuitesFromGS(self):
     """Basic test_suites test.
@@ -81,22 +78,18 @@
     self._SimpleDownloadOfTestSuites(
         downloader.LocalDownloader(self._work_dir, self.local_path))
 
-  def _DownloadSymbolsHelper(self, downloader_instance):
+  @mock.patch('downloader.Downloader._DownloadArtifactsSerially')
+  @mock.patch('downloader.Downloader._DownloadArtifactsInBackground')
+  def _DownloadSymbolsHelper(self, downloader_instance, bg_mock, serial_mock):
     """Basic symbols download."""
     factory = build_artifact.ChromeOSArtifactFactory(
         downloader_instance.GetBuildDir(), ['symbols'],
         None, downloader_instance.GetBuild())
 
-    self.mox.StubOutWithMock(downloader.Downloader,
-                             '_DownloadArtifactsSerially')
     # Should not get called but mocking so that we know it wasn't called.
-    self.mox.StubOutWithMock(downloader.Downloader,
-                             '_DownloadArtifactsInBackground')
-    downloader.Downloader._DownloadArtifactsSerially(
-        [mox.IsA(build_artifact.BundledArtifact)], no_wait=True)
-    self.mox.ReplayAll()
     downloader_instance.Download(factory)
-    self.mox.VerifyAll()
+    serial_mock.assert_called()
+    bg_mock.assert_not_called()
 
   def testDownloadSymbolsFromGS(self):
     """Basic symbols download from Google Storage."""
@@ -112,11 +105,10 @@
         downloader.LocalDownloader(self._work_dir, self.local_path))
 
 
-class AndroidDownloaderTestBase(mox.MoxTestBase):
+class AndroidDownloaderTestBase(unittest.TestCase):
   """Android Downloader Unittests."""
 
   def setUp(self):
-    mox.MoxTestBase.setUp(self)
     self._work_dir = tempfile.mkdtemp('downloader-test')
     self.branch = 'release'
     self.target = 'shamu-userdebug'
@@ -125,27 +117,23 @@
   def tearDown(self):
     shutil.rmtree(self._work_dir, ignore_errors=True)
 
-  def testDownloadFromAndroidBuildServer(self):
+  @mock.patch('downloader.Downloader._DownloadArtifactsSerially')
+  @mock.patch('downloader.Downloader._DownloadArtifactsInBackground')
+  def testDownloadFromAndroidBuildServer(self, bg_mock, serial_mock):
     """Basic test to check download from Android's build server works."""
     downloader_instance = downloader.AndroidBuildDownloader(
         self._work_dir, self.branch, self.build_id, self.target)
     factory = build_artifact.AndroidArtifactFactory(
         downloader_instance.GetBuildDir(), ['fastboot'],
         None, downloader_instance.GetBuild())
-    self.mox.StubOutWithMock(downloader.Downloader,
-                             '_DownloadArtifactsSerially')
-    self.mox.StubOutWithMock(downloader.Downloader,
-                             '_DownloadArtifactsInBackground')
 
-    downloader.Downloader._DownloadArtifactsSerially(
-        [mox.IsA(build_artifact.Artifact)], no_wait=True)
-    self.mox.ReplayAll()
     downloader_instance.Download(factory)
     # Sanity check the timestamp file exists.
     self.assertTrue(os.path.exists(
         os.path.join(self._work_dir, self.branch, self.target, self.build_id,
                      downloader.Downloader._TIMESTAMP_FILENAME)))
-    self.mox.VerifyAll()
+    serial_mock.assert_called()
+    bg_mock.assert_not_called()
 
 
 if __name__ == '__main__':
