Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add tests
  • Loading branch information
wheelerlaw authored and orsenthil committed Apr 21, 2023
commit 510cf5d79cfd4b0a37b8b26a7a1894450d1067d5
58 changes: 45 additions & 13 deletions Lib/test/test_urllib2.py
Original file line number Diff line number Diff line change
Expand Up @@ -483,8 +483,17 @@ def build_test_opener(*handler_instances):
opener.add_handler(h)
return opener

class MockHTTPHandler(urllib.request.HTTPHandler):
# Very simple mock HTTP handler with no special behavior other than using a mock HTTP connection

class MockHTTPHandler(urllib.request.BaseHandler):
def __init__(self, debuglevel=None):
super(MockHTTPHandler, self).__init__(debuglevel=debuglevel)
self.httpconn = MockHTTPClass()

def http_open(self, req):
return self.do_open(self.httpconn, req)

class MockHTTPHandlerRedirect(urllib.request.BaseHandler):
# useful for testing redirections and auth
# sends supplied headers and code as first response
# sends 200 OK as second response
Expand Down Expand Up @@ -512,12 +521,12 @@ def http_open(self, req):
return MockResponse(200, "OK", msg, "", req.get_full_url())


class MockHTTPSHandler(urllib.request.AbstractHTTPHandler):
class MockHTTPSHandler(urllib.request.HTTPSHandler):
# Useful for testing the Proxy-Authorization request by verifying the
# properties of httpcon

def __init__(self, debuglevel=0):
urllib.request.AbstractHTTPHandler.__init__(self, debuglevel=debuglevel)
def __init__(self, debuglevel=None, context=None, check_hostname=None):
super(MockHTTPSHandler, self).__init__(debuglevel, context, check_hostname)
self.httpconn = MockHTTPClass()

def https_open(self, req):
Expand Down Expand Up @@ -1048,7 +1057,30 @@ def test_http_body_array(self):
newreq = h.do_request_(req)
self.assertEqual(int(newreq.get_header('Content-length')),16)

def test_http_handler_debuglevel(self):
def test_http_handler_global_debuglevel(self):
http.client.HTTPConnection.debuglevel = 1
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use a with mock.patch.object(http.client.HTTPConnection, 'debuglevel, 1): style block to set this so that it is undone after the test. same below. I also suggest using a value other than 1 so that it is more obviously correlated with the specific test and not a default from elsewhere.

o = OpenerDirector()
h = MockHTTPHandler()
o.add_handler(h)
o.open("http://www.example.com")
self.assertEqual(h._debuglevel, 1)

def test_http_handler_local_debuglevel(self):
o = OpenerDirector()
h = MockHTTPHandler(debuglevel=1)
o.add_handler(h)
o.open("http://www.example.com")
self.assertEqual(h._debuglevel, 1)

def test_https_handler_global_debuglevel(self):
http.client.HTTPSConnection.debuglevel = 1
o = OpenerDirector()
h = MockHTTPSHandler()
o.add_handler(h)
o.open("https://www.example.com")
self.assertEqual(h._debuglevel, 1)

def test_https_handler_local_debuglevel(self):
o = OpenerDirector()
h = MockHTTPSHandler(debuglevel=1)
o.add_handler(h)
Expand Down Expand Up @@ -1289,7 +1321,7 @@ def test_cookie_redirect(self):

cj = CookieJar()
interact_netscape(cj, "http://www.example.com/", "spam=eggs")
hh = MockHTTPHandler(302, "Location: http://www.cracker.com/\r\n\r\n")
hh = MockHTTPHandlerRedirect(302, "Location: http://www.cracker.com/\r\n\r\n")
hdeh = urllib.request.HTTPDefaultErrorHandler()
hrh = urllib.request.HTTPRedirectHandler()
cp = urllib.request.HTTPCookieProcessor(cj)
Expand All @@ -1299,7 +1331,7 @@ def test_cookie_redirect(self):

def test_redirect_fragment(self):
redirected_url = 'http://www.example.com/index.html#OK\r\n\r\n'
hh = MockHTTPHandler(302, 'Location: ' + redirected_url)
hh = MockHTTPHandlerRedirect(302, 'Location: ' + redirected_url)
hdeh = urllib.request.HTTPDefaultErrorHandler()
hrh = urllib.request.HTTPRedirectHandler()
o = build_test_opener(hh, hdeh, hrh)
Expand Down Expand Up @@ -1484,7 +1516,7 @@ def check_basic_auth(self, headers, realm):
password_manager = MockPasswordManager()
auth_handler = urllib.request.HTTPBasicAuthHandler(password_manager)
body = '\r\n'.join(headers) + '\r\n\r\n'
http_handler = MockHTTPHandler(401, body)
http_handler = MockHTTPHandlerRedirect(401, body)
opener.add_handler(auth_handler)
opener.add_handler(http_handler)
self._test_basic_auth(opener, auth_handler, "Authorization",
Expand Down Expand Up @@ -1544,7 +1576,7 @@ def test_proxy_basic_auth(self):
password_manager = MockPasswordManager()
auth_handler = urllib.request.ProxyBasicAuthHandler(password_manager)
realm = "ACME Networks"
http_handler = MockHTTPHandler(
http_handler = MockHTTPHandlerRedirect(
407, 'Proxy-Authenticate: Basic realm="%s"\r\n\r\n' % realm)
opener.add_handler(auth_handler)
opener.add_handler(http_handler)
Expand Down Expand Up @@ -1588,7 +1620,7 @@ def http_error_401(self, *args, **kwds):
digest_handler = TestDigestAuthHandler(password_manager)
basic_handler = TestBasicAuthHandler(password_manager)
realm = "ACME Networks"
http_handler = MockHTTPHandler(
http_handler = MockHTTPHandlerRedirect(
401, 'WWW-Authenticate: Basic realm="%s"\r\n\r\n' % realm)
opener.add_handler(basic_handler)
opener.add_handler(digest_handler)
Expand All @@ -1608,7 +1640,7 @@ def test_unsupported_auth_digest_handler(self):
opener = OpenerDirector()
# While using DigestAuthHandler
digest_auth_handler = urllib.request.HTTPDigestAuthHandler(None)
http_handler = MockHTTPHandler(
http_handler = MockHTTPHandlerRedirect(
401, 'WWW-Authenticate: Kerberos\r\n\r\n')
opener.add_handler(digest_auth_handler)
opener.add_handler(http_handler)
Expand All @@ -1618,7 +1650,7 @@ def test_unsupported_auth_basic_handler(self):
# While using BasicAuthHandler
opener = OpenerDirector()
basic_auth_handler = urllib.request.HTTPBasicAuthHandler(None)
http_handler = MockHTTPHandler(
http_handler = MockHTTPHandlerRedirect(
401, 'WWW-Authenticate: NTLM\r\n\r\n')
opener.add_handler(basic_auth_handler)
opener.add_handler(http_handler)
Expand Down Expand Up @@ -1705,7 +1737,7 @@ def test_basic_prior_auth_send_after_first_success(self):
opener = OpenerDirector()
opener.add_handler(auth_prior_handler)

http_handler = MockHTTPHandler(
http_handler = MockHTTPHandlerRedirect(
401, 'WWW-Authenticate: Basic realm="%s"\r\n\r\n' % None)
opener.add_handler(http_handler)

Expand Down