diff --git a/Lib/test/support.py b/Lib/test/support.py
index 73c4228..d16b32a 100644
--- a/Lib/test/support.py
+++ b/Lib/test/support.py
@@ -33,6 +33,7 @@
            "reap_children", "cpython_only", "check_impl_detail", "get_attribute",
            "swap_item", "swap_attr"]
 
+
 class Error(Exception):
     """Base class for regression test exceptions."""
 
@@ -444,12 +445,29 @@
 def open_urlresource(url, *args, **kw):
     import urllib.request, urllib.parse
 
-    requires('urlfetch')
+    check = kw.pop('check', None)
+
     filename = urllib.parse.urlparse(url)[2].split('/')[-1] # '/': it's URL!
 
     fn = os.path.join(os.path.dirname(__file__), "data", filename)
+
+    def check_valid_file(fn):
+        f = open(fn, *args, **kw)
+        if check is None:
+            return f
+        elif check(f):
+            f.seek(0)
+            return f
+        f.close()
+
     if os.path.exists(fn):
-        return open(fn, *args, **kw)
+        f = check_valid_file(fn)
+        if f is not None:
+            return f
+        unlink(fn)
+
+    # Verify the requirement before downloading the file
+    requires('urlfetch')
 
     print('\tfetching %s ...' % url, file=get_original_stdout())
     f = urllib.request.urlopen(url, timeout=15)
@@ -461,7 +479,12 @@
                 s = f.read()
     finally:
         f.close()
-    return open(fn, *args, **kw)
+
+    f = check_valid_file(fn)
+    if f is not None:
+        return f
+    raise TestFailed('invalid resource "%s"' % fn)
+
 
 class WarningsRecorder(object):
     """Convenience wrapper for the warnings list returned on
diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py
index 19fe48d..13219e7 100644
--- a/Lib/test/test_normalization.py
+++ b/Lib/test/test_normalization.py
@@ -9,14 +9,9 @@
 TESTDATAFILE = "NormalizationTest.txt"
 TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE
 
-# Verify we have the correct version of the test data file.
-TESTDATAPATH = os.path.join(os.path.dirname(__file__), "data", TESTDATAFILE)
-if os.path.exists(TESTDATAPATH):
-    f = open(TESTDATAPATH, encoding='utf-8')
-    l = f.readline()
-    f.close()
-    if not unidata_version in l:
-        os.unlink(testdatafile)
+def check_version(testfile):
+    hdr = testfile.readline()
+    return unidata_version in hdr
 
 class RangeError(Exception):
     pass
@@ -42,13 +37,15 @@
 
 class NormalizationTest(unittest.TestCase):
     def test_main(self):
+        part = None
         part1_data = {}
         # Hit the exception early
         try:
-            open_urlresource(TESTDATAURL, encoding="utf-8")
+            testdata = open_urlresource(TESTDATAURL, encoding="utf-8",
+                                        check=check_version)
         except (IOError, HTTPException):
             self.skipTest("Could not retrieve " + TESTDATAURL)
-        for line in open_urlresource(TESTDATAURL, encoding="utf-8"):
+        for line in testdata:
             if '#' in line:
                 line = line.split('#')[0]
             line = line.strip()
