[autotest] Re-land "Put dev server error strings in exceptions"

We've been ignoring error messages coming back from the dev server.
Strip out the HTML that comes in (some of) them and wrap them
in exceptions.

This reverts commit 0dcf3a4c80b66d7598f3d7391bc1f9bf5492d8e2.

BUG=chromium-os:30279
TEST=unit
TEST=use atest suite create to run a suite that doesn't exist on build that doesn't exist.

Change-Id: I9d684d8b1c959d17c4b17082ef6892112b860493
Reviewed-on: https://gerrit.chromium.org/gerrit/22847
Reviewed-by: Scott Zawalski <scottz@chromium.org>
Tested-by: Chris Masone <cmasone@chromium.org>
Commit-Ready: Chris Masone <cmasone@chromium.org>
diff --git a/server/cros/control_file_getter.py b/server/cros/control_file_getter.py
index 3ec4ac0..711fa3c 100644
--- a/server/cros/control_file_getter.py
+++ b/server/cros/control_file_getter.py
@@ -193,12 +193,12 @@
         |self._dev_server|.  Populates |self._files| with that list
         and then returns paths (under the autotest dir) to them.
 
-        @return A list of control file paths.  None on failure.
+        @return A list of control file paths.
         @throws NoControlFileList if there is an error while listing.
         """
         try:
             return self._dev_server.list_control_files(self._build)
-        except urllib2.HTTPError as e:
+        except dev_server.DevServerException as e:
             raise error.NoControlFileList(e)
 
 
@@ -214,5 +214,5 @@
         """
         try:
             return self._dev_server.get_control_file(self._build, test_path)
-        except urllib2.HTTPError as e:
+        except dev_server.DevServerException as e:
             raise error.ControlFileNotFound(e)
diff --git a/server/cros/control_file_getter_unittest.py b/server/cros/control_file_getter_unittest.py
index a9ffa97..a91e4d1 100644
--- a/server/cros/control_file_getter_unittest.py
+++ b/server/cros/control_file_getter_unittest.py
@@ -11,7 +11,6 @@
 import mox
 import StringIO
 import unittest
-import urllib2
 
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib.cros import dev_server
@@ -27,11 +26,7 @@
     _BUILD = 'fake/build'
     _FILES = ['a/b/control', 'b/c/control']
     _CONTENTS = 'Multi-line\nControl File Contents\n'
-    _403 = urllib2.HTTPError(url='',
-                             code=httplib.FORBIDDEN,
-                             msg='',
-                             hdrs=None,
-                             fp=None)
+    _403 = dev_server.DevServerException('HTTP 403 Forbidden!')
 
     def setUp(self):
         super(DevServerGetterTest, self).setUp()
diff --git a/server/cros/dynamic_suite.py b/server/cros/dynamic_suite.py
index 703a59a..63a6285 100644
--- a/server/cros/dynamic_suite.py
+++ b/server/cros/dynamic_suite.py
@@ -260,10 +260,12 @@
                                         num=num):
 
         # Ensure that the image's artifacts have completed downloading.
-        ds = dev_server.DevServer.create()
-        if not ds.finish_download(build):
-            raise error.AsynchronousBuildFailure(
-                "Server error completing staging for " + build)
+        try:
+            ds = dev_server.DevServer.create()
+            ds.finish_download(build)
+        except dev_server.DevServerException as e:
+            raise error.AsynchronousBuildFailure(e)
+
         timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
         utils.write_keyval(job.resultdir,
                            {'artifact_finished_time': timestamp})