[Python-checkins] python/dist/src/Lib/test test_urllibnet.py,1.2,1.3

bcannon@users.sourceforge.net bcannon@users.sourceforge.net
Tue, 13 May 2003 19:18:33 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv16801/Lib/test

Modified Files:
	test_urllibnet.py 
Log Message:
Fleshed out tests for urllib requiring a network connection.

Index: test_urllibnet.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_urllibnet.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** test_urllibnet.py	1 May 2003 17:45:54 -0000	1.2
--- test_urllibnet.py	14 May 2003 02:18:31 -0000	1.3
***************
*** 5,10 ****
  
  import socket
! import urllib2
  import sys
  
  class URLTimeoutTest(unittest.TestCase):
--- 5,12 ----
  
  import socket
! import urllib
  import sys
+ import os
+ import mimetools
  
  class URLTimeoutTest(unittest.TestCase):
***************
*** 19,28 ****
  
      def testURLread(self):
!         f = urllib2.urlopen("http://www.python.org/")
          x = f.read()
  
  def test_main():
      test_support.requires('network')
!     test_support.run_unittest(URLTimeoutTest)
  
  if __name__ == "__main__":
--- 21,148 ----
  
      def testURLread(self):
!         f = urllib.urlopen("http://www.python.org/")
          x = f.read()
  
+ class urlopenNetworkTests(unittest.TestCase):
+     """Tests urllib.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 = urllib.urlopen("http://www.python.org/")
+         for attr in ("read", "readline", "readlines", "fileno", "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_readlines(self):
+         # Test both readline and readlines.
+         open_url = urllib.urlopen("http://www.python.org/")
+         try:
+             self.assert_(isinstance(open_url.readline(), basestring),
+                          "readline did not return a string")
+             self.assert_(isinstance(open_url.readlines(), list),
+                          "readlines did not return a list")
+         finally:
+             open_url.close()
+ 
+     def test_info(self):
+         # Test 'info'.
+         open_url = urllib.urlopen("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 = urllib.urlopen(URL)
+         try:
+             gotten_url = open_url.geturl()
+         finally:
+             open_url.close()
+         self.assertEqual(gotten_url, URL)
+ 
+     def test_fileno(self):
+         # Make sure fd returned by fileno is valid.
+         if hasattr(os, 'fdopen'):
+             open_url = urllib.urlopen("http://www.python.org/")
+             fd = open_url.fileno()
+             FILE = os.fdopen(fd)
+             try:
+                 self.assert_(FILE.read(), "reading from file created using fd "
+                                           "returned by fileno failed")
+             finally:
+                 FILE.close()
+ 
+     def test_bad_address(self):
+         # Make sure proper exception is raised when connecting to a bogus
+         # address.
+         self.assertRaises(IOError,
+                           urllib.urlopen, "http://www.sadflkjsasadf.com/")
+ 
+ class urlretrieveNetworkTests(unittest.TestCase):
+     """Tests urllib.urlretrieve using the network."""
+ 
+     def test_basic(self):
+         # Test basic functionality.
+         file_location,info = urllib.urlretrieve("http://www.python.org/")
+         self.assert_(os.path.exists(file_location), "file location returned by"
+                         " urlretrieve is not a valid path")
+         FILE = file(file_location)
+         try:
+             self.assert_(FILE.read(), "reading from the file location returned "
+                                       "by urlretrieve failed")
+         finally:
+             FILE.close()
+             os.unlink(file_location)
+ 
+     def test_specified_path(self):
+         # Make sure that specifying the location of the file to write to works.
+         file_location,info = urllib.urlretrieve("http://www.python.org/",
+                                                 test_support.TESTFN)
+         self.assertEqual(file_location, test_support.TESTFN)
+         self.assert_(os.path.exists(file_location))
+         FILE = file(file_location)
+         try:
+             self.assert_(FILE.read(), "reading from temporary file failed")
+         finally:
+             FILE.close()
+             os.unlink(file_location)
+ 
+     def test_header(self):
+         # Make sure header returned as 2nd value from urlretrieve is good.
+         file_location, header = urllib.urlretrieve("http://www.python.org/")
+         os.unlink(file_location)
+         self.assert_(isinstance(header, mimetools.Message),
+                      "header is not an instance of mimetools.Message")
+                      
+ 
+ 
  def test_main():
      test_support.requires('network')
!     test_support.run_unittest(URLTimeoutTest,
!                               urlopenNetworkTests,
!                               urlretrieveNetworkTests)
  
  if __name__ == "__main__":