Retry fetching Gold JSON data.

It occasionally times out on the bots.

Change-Id: Ie33d77c0e07f932c374c2ca670f982faeed29659
Reviewed-on: https://pdfium-review.googlesource.com/c/43310
Commit-Queue: Lei Zhang <thestig@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/testing/tools/gold.py b/testing/tools/gold.py
index 86aea74..6905c96 100644
--- a/testing/tools/gold.py
+++ b/testing/tools/gold.py
@@ -71,17 +71,22 @@
     cl_number_str = self._properties.get('issue', None)
     url = GOLD_BASELINE_URL + ('/' + cl_number_str if cl_number_str else '')
 
-    try:
-      response = urllib2.urlopen(url, timeout=2)
-      c_type = response.headers.get('Content-type', '')
-      EXPECTED_CONTENT_TYPE = 'application/json'
-      if c_type != EXPECTED_CONTENT_TYPE:
-        raise ValueError('Invalid content type. Got %s instead of %s' % (
-            c_type, EXPECTED_CONTENT_TYPE))
-      json_data = response.read()
-    except (urllib2.HTTPError, urllib2.URLError) as e:
-      print ('Error: Unable to read skia gold json from %s: %s' % (url, e))
-      return None
+    json_data = ''
+    RETRIES = 5
+    attempts = 0
+    while not json_data and attempts < RETRIES:
+      try:
+        response = urllib2.urlopen(url, timeout=2)
+        c_type = response.headers.get('Content-type', '')
+        EXPECTED_CONTENT_TYPE = 'application/json'
+        if c_type != EXPECTED_CONTENT_TYPE:
+          raise ValueError('Invalid content type. Got %s instead of %s' % (
+              c_type, EXPECTED_CONTENT_TYPE))
+        json_data = response.read()
+        attempts += 1
+      except (urllib2.HTTPError, urllib2.URLError) as e:
+        print ('Error: Unable to read skia gold json from %s: %s' % (url, e))
+        return None
 
     try:
       data = json.loads(json_data)