This patch moves some tests from test_urllib2_net to test_urllib2_localnet.
The moved tests use a local server rather than going out to external servers.

Accepts patch from issue2429.

Contributed by Jerry Seutter & Michael Foord (fuzzyman) at PyCon 2008.
diff --git a/Lib/test/test_urllib2net.py b/Lib/test/test_urllib2net.py
index 3329822..1ebaf8f 100644
--- a/Lib/test/test_urllib2net.py
+++ b/Lib/test/test_urllib2net.py
@@ -24,20 +24,6 @@
     raise last_exc
 
 
-class URLTimeoutTest(unittest.TestCase):
-
-    TIMEOUT = 10.0
-
-    def setUp(self):
-        socket.setdefaulttimeout(self.TIMEOUT)
-
-    def tearDown(self):
-        socket.setdefaulttimeout(None)
-
-    def testURLread(self):
-        f = _urlopen_with_retry("http://www.python.org/")
-        x = f.read()
-
 
 class AuthTests(unittest.TestCase):
     """Tests urllib2 authentication features."""
@@ -99,68 +85,6 @@
         response.close()
         self.assert_(fileobject.closed)
 
-class urlopenNetworkTests(unittest.TestCase):
-    """Tests urllib2.urlopen using the network.
-
-    These tests are not exhaustive.  Assuming that testing using files does a
-    good job overall of some of the basic interface features.  There are no
-    tests exercising the optional 'data' and 'proxies' arguments.  No tests
-    for transparent redirection have been written.
-
-    setUp is not used for always constructing a connection to
-    http://www.python.org/ since there a few tests that don't use that address
-    and making a connection is expensive enough to warrant minimizing unneeded
-    connections.
-
-    """
-
-    def test_basic(self):
-        # Simple test expected to pass.
-        open_url = _urlopen_with_retry("http://www.python.org/")
-        for attr in ("read", "close", "info", "geturl"):
-            self.assert_(hasattr(open_url, attr), "object returned from "
-                            "urlopen lacks the %s attribute" % attr)
-        try:
-            self.assert_(open_url.read(), "calling 'read' failed")
-        finally:
-            open_url.close()
-
-    def test_info(self):
-        # Test 'info'.
-        open_url = _urlopen_with_retry("http://www.python.org/")
-        try:
-            info_obj = open_url.info()
-        finally:
-            open_url.close()
-            self.assert_(isinstance(info_obj, mimetools.Message),
-                         "object returned by 'info' is not an instance of "
-                         "mimetools.Message")
-            self.assertEqual(info_obj.getsubtype(), "html")
-
-    def test_geturl(self):
-        # Make sure same URL as opened is returned by geturl.
-        URL = "http://www.python.org/"
-        open_url = _urlopen_with_retry(URL)
-        try:
-            gotten_url = open_url.geturl()
-        finally:
-            open_url.close()
-        self.assertEqual(gotten_url, URL)
-
-    def test_bad_address(self):
-        # Make sure proper exception is raised when connecting to a bogus
-        # address.
-        self.assertRaises(IOError,
-                          # SF patch 809915:  In Sep 2003, VeriSign started
-                          # highjacking invalid .com and .net addresses to
-                          # boost traffic to their own site.  This test
-                          # started failing then.  One hopes the .invalid
-                          # domain will be spared to serve its defined
-                          # purpose.
-                          # urllib2.urlopen, "http://www.sadflkjsasadf.com/")
-                          urllib2.urlopen, "http://www.python.invalid./")
-
-
 class OtherNetworkTests(unittest.TestCase):
     def setUp(self):
         if 0:  # for debugging
@@ -168,13 +92,6 @@
             logger = logging.getLogger("test_urllib2net")
             logger.addHandler(logging.StreamHandler())
 
-    def test_range (self):
-        req = urllib2.Request("http://www.python.org",
-                              headers={'Range': 'bytes=20-39'})
-        result = _urlopen_with_retry(req)
-        data = result.read()
-        self.assertEqual(len(data), 20)
-
     # XXX The rest of these tests aren't very good -- they don't check much.
     # They do sometimes catch some major disasters, though.
 
@@ -202,16 +119,6 @@
         finally:
             os.remove(TESTFN)
 
-    def test_http(self):
-        urls = [
-            'http://www.espn.com/', # redirect
-            'http://www.python.org/Spanish/Inquistion/',
-            ('http://www.python.org/cgi-bin/faqw.py',
-             'query=pythonistas&querytype=simple&casefold=yes&req=search', None),
-            'http://www.python.org/',
-            ]
-        self._test_urls(urls, self._extra_handlers())
-
     # XXX Following test depends on machine configurations that are internal
     # to CNRI.  Need to set up a public server with the right authentication
     # configuration for test purposes.
@@ -279,6 +186,7 @@
 
         return handlers
 
+
 class TimeoutTest(unittest.TestCase):
     def test_http_basic(self):
         u = _urlopen_with_retry("http://www.python.org")
@@ -327,9 +235,7 @@
 
 def test_main():
     test_support.requires("network")
-    test_support.run_unittest(URLTimeoutTest,
-                              urlopenNetworkTests,
-                              AuthTests,
+    test_support.run_unittest(AuthTests,
                               OtherNetworkTests,
                               CloseSocketTest,
                               TimeoutTest,