Patch #1627441: close sockets properly in urllib2.

This commit is contained in:
Georg Brandl 2007-01-21 10:35:10 +00:00
parent b84c13792d
commit dd7b0525e9
5 changed files with 63 additions and 6 deletions

View file

@ -64,6 +64,27 @@ class AuthTests(unittest.TestCase):
# urllib2.urlopen, "http://evil:thing@example.com")
class CloseSocketTest(unittest.TestCase):
def test_close(self):
import socket, httplib, gc
# calling .close() on urllib2's response objects should close the
# underlying socket
# delve deep into response to fetch socket._socketobject
response = urllib2.urlopen("http://www.python.org/")
abused_fileobject = response.fp
self.assert_(abused_fileobject.__class__ is socket._fileobject)
httpresponse = abused_fileobject._sock
self.assert_(httpresponse.__class__ is httplib.HTTPResponse)
fileobject = httpresponse.fp
self.assert_(fileobject.__class__ is socket._fileobject)
self.assert_(not fileobject.closed)
response.close()
self.assert_(fileobject.closed)
class urlopenNetworkTests(unittest.TestCase):
"""Tests urllib2.urlopen using the network.
@ -263,8 +284,12 @@ class OtherNetworkTests(unittest.TestCase):
def test_main():
test_support.requires("network")
test_support.run_unittest(URLTimeoutTest, urlopenNetworkTests,
AuthTests, OtherNetworkTests)
test_support.run_unittest(URLTimeoutTest,
urlopenNetworkTests,
AuthTests,
OtherNetworkTests,
CloseSocketTest,
)
if __name__ == "__main__":
test_main()