[autotest] Loop over urllib2 reads of the RPC responses.

Recently some json RPC responses are being cut off at 4096 bytes.
In an attempt to solve this problem, we will try to do multiple
reads of the urlfile until no data is returned.

BUG=chromium:606071
TEST=suite support still works in moblab.

Change-Id: Iea04d48599deb21716b23cadff324fd3816118ad
Reviewed-on: https://chromium-review.googlesource.com/342841
Reviewed-by: Simran Basi <sbasi@chromium.org>
Tested-by: Simran Basi <sbasi@chromium.org>
diff --git a/frontend/afe/json_rpc/proxy.py b/frontend/afe/json_rpc/proxy.py
index 1e1df4c..3d0325d 100644
--- a/frontend/afe/json_rpc/proxy.py
+++ b/frontend/afe/json_rpc/proxy.py
@@ -19,6 +19,7 @@
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 """
 
+import logging
 import os
 import socket
 import urllib2
@@ -111,10 +112,20 @@
         default_timeout = socket.getdefaulttimeout()
         if not default_timeout:
             # If default timeout is None, socket will never time out.
-            respdata = urllib2.urlopen(request).read()
+            urlfile = urllib2.urlopen(request)
         else:
             timeout = max(min_rpc_timeout, default_timeout)
-            respdata = urllib2.urlopen(request, timeout=timeout).read()
+            urlfile = urllib2.urlopen(request, timeout=timeout)
+        # Keep calling read on the urlfile to ensure all bytes are received.
+        respdata = b''
+        chunk = urlfile.read()
+        while len(chunk) != 0:
+            respdata += chunk
+            chunk = urlfile.read()
+            # TODO (sbasi): crbug.com/606071 Remove logging once json decode
+            # errors stop occuring.
+            if len(chunk) != 0:
+                logging.debug('Proxy required multiple reads to receive data.')
         try:
             resp = decoder.JSONDecoder().decode(respdata)
         except ValueError: