Skip to content

Commit bd8fd09

Browse files
committed
[runtests] Converted usage of urllib2 to requests
This should help with the py3 support down the line.
1 parent 385fc8d commit bd8fd09

File tree

1 file changed

+46
-65
lines changed

1 file changed

+46
-65
lines changed

runtests.py

Lines changed: 46 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import time
2626
import traceback
2727
import unittest
28-
import urllib2
2928
import urlparse
3029

3130
from lxml import html
@@ -59,14 +58,6 @@
5958
GIT_DEFAULT_BRANCH = 'main'
6059

6160

62-
class HttpNoRedirectHandler(urllib2.HTTPRedirectHandler):
63-
64-
def redirect_request(self, req, fp, code, msg, headers, newurl):
65-
raise urllib2.HTTPError(req.get_full_url(), code, msg, headers, fp)
66-
67-
urllib2.install_opener(urllib2.build_opener(HttpNoRedirectHandler()))
68-
69-
7061
def d(*args):
7162
"""
7263
Return an absolute path where the given arguments are joined and
@@ -252,8 +243,8 @@ def startTracd(cls, **kwargs):
252243
waittime = 0.1
253244
for _ in range(5):
254245
try:
255-
urllib2.urlopen(u())
256-
except urllib2.URLError:
246+
requests.get(u())
247+
except requests.ConnectionError:
257248
time.sleep(waittime)
258249
waittime *= 2
259250
else:
@@ -312,8 +303,9 @@ def openGitHubHook(n=1, reponame='', payload=None):
312303
if not payload:
313304
payload = TracGitHubTests.makeGitHubHookPayload(n, reponame)
314305
url = u('github', reponame) if reponame else u('github')
315-
request = urllib2.Request(url, json.dumps(payload), HEADERS)
316-
return urllib2.urlopen(request)
306+
response = requests.post(url, json=payload, headers=HEADERS, allow_redirects=False)
307+
response.raise_for_status()
308+
return response.text
317309

318310

319311
class GitHubBrowserTests(TracGitHubTests):
@@ -322,13 +314,9 @@ def assertRequestRedirects(self, url, redirection, status=302):
322314
A custom assertion to check that requesting the given url (GET) returns a redirection
323315
response (302 by default) pointed to the given redirection URL.
324316
"""
325-
try:
326-
urllib2.urlopen(url)
327-
except urllib2.HTTPError as exc:
328-
self.assertEqual(exc.code, status)
329-
self.assertEqual(exc.headers['Location'], redirection)
330-
else:
331-
self.fail("URL didn't redirect")
317+
response = requests.get(url, allow_redirects=False)
318+
self.assertEqual(response.status_code, status)
319+
self.assertEqual(response.headers['Location'], redirection)
332320

333321
def testLinkToChangeset(self):
334322
self.makeGitCommit(GIT, 'myfile', 'for browser tests')
@@ -375,12 +363,12 @@ def testNonGitHubLinkToPath(self):
375363
self.assertEqual(response.status_code, 200)
376364

377365
def testBadChangeset(self):
378-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 404: Not Found$'):
379-
urllib2.urlopen(u('changeset/1234567890'))
366+
response = requests.get(u('changeset/1234567890'))
367+
self.assertEqual(response.status_code, 404)
380368

381369
def testBadUrl(self):
382-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 404: Not Found$'):
383-
urllib2.urlopen(u('changesetnosuchurl'))
370+
response = requests.get(u('changesetnosuchurl'))
371+
self.assertEqual(response.status_code, 404)
384372

385373
def testTimelineFiltering(self):
386374
self.makeGitBranch(GIT, 'stable/2.0')
@@ -395,7 +383,7 @@ def testTimelineFiltering(self):
395383
self.makeGitCommit(ALTGIT, 'myfile', 'timeline 6\n', 'msg 6', 'unstable/2.0')
396384
self.openGitHubHook(3)
397385
self.openGitHubHook(3, 'alt')
398-
html = urllib2.urlopen(u('timeline')).read()
386+
html = requests.get(u('timeline')).text
399387
self.assertTrue('msg 1' in html)
400388
self.assertTrue('msg 2' in html)
401389
self.assertTrue('msg 3' in html)
@@ -439,7 +427,8 @@ def testOauthInvalidState(self):
439427
self.assertEqual(response.status_code, 302)
440428

441429
response = session.get(
442-
u('github/oauth') + '?code=01234567890123456789&state=wrong_state',
430+
u('github/oauth'),
431+
params={'code': '01234567890123456789', 'state': 'wrong_state'},
443432
allow_redirects=False)
444433
self.assertEqual(response.status_code, 302)
445434
self.assertEqual(response.headers['Location'], u())
@@ -456,7 +445,7 @@ def testOauthInvalidStateWithoutSession(self):
456445
# OAuth callback requests without state must still fail.
457446

458447
response = session.get(
459-
u('github/oauth') + '?code=01234567890123456789',
448+
u('github/oauth'), params={'code': '01234567890123456789'},
460449
allow_redirects=False)
461450
self.assertEqual(response.status_code, 302)
462451
self.assertEqual(response.headers['Location'], u())
@@ -934,20 +923,20 @@ def testPreferredEmailCaseInsensitive(self):
934923
class GitHubPostCommitHookTests(TracGitHubTests):
935924

936925
def testDefaultRepository(self):
937-
output = self.openGitHubHook(0).read()
926+
output = self.openGitHubHook(0)
938927
self.assertEqual(output, "Running hook on (default)\n"
939928
"* Updating clone\n"
940929
"* Synchronizing with clone\n")
941930

942931
def testAlternativeRepository(self):
943-
output = self.openGitHubHook(0, 'alt').read()
932+
output = self.openGitHubHook(0, 'alt')
944933
self.assertEqual(output, "Running hook on alt\n"
945934
"* Updating clone\n"
946935
"* Synchronizing with clone\n")
947936

948937
def testCommit(self):
949938
self.makeGitCommit(GIT, 'foo', 'foo content\n')
950-
output = self.openGitHubHook().read()
939+
output = self.openGitHubHook()
951940
self.assertRegexpMatches(output, r"Running hook on \(default\)\n"
952941
r"\* Updating clone\n"
953942
r"\* Synchronizing with clone\n"
@@ -956,7 +945,7 @@ def testCommit(self):
956945
def testMultipleCommits(self):
957946
self.makeGitCommit(GIT, 'bar', 'bar content\n')
958947
self.makeGitCommit(GIT, 'bar', 'more bar content\n')
959-
output = self.openGitHubHook(2).read()
948+
output = self.openGitHubHook(2)
960949
self.assertRegexpMatches(output, r"Running hook on \(default\)\n"
961950
r"\* Updating clone\n"
962951
r"\* Synchronizing with clone\n"
@@ -967,7 +956,7 @@ def testCommitOnBranch(self):
967956
self.makeGitCommit(ALTGIT, 'stable', 'stable branch\n', branch='stable/1.0')
968957
self.makeGitBranch(ALTGIT, 'unstable/1.0')
969958
self.makeGitCommit(ALTGIT, 'unstable', 'unstable branch\n', branch='unstable/1.0')
970-
output = self.openGitHubHook(2, 'alt').read()
959+
output = self.openGitHubHook(2, 'alt')
971960
self.assertRegexpMatches(output, r"Running hook on alt\n"
972961
r"\* Updating clone\n"
973962
r"\* Synchronizing with clone\n"
@@ -978,9 +967,8 @@ def testUnknownCommit(self):
978967
# Emulate self.openGitHubHook to use a non-existent commit id
979968
random_id = ''.join(random.choice('0123456789abcdef') for _ in range(40))
980969
payload = {'commits': [{'id': random_id, 'message': '', 'distinct': True}]}
981-
request = urllib2.Request(u('github'), json.dumps(payload), HEADERS)
982-
output = urllib2.urlopen(request).read()
983-
self.assertRegexpMatches(output, r"Running hook on \(default\)\n"
970+
response = requests.post(u('github'), json=payload, headers=HEADERS)
971+
self.assertRegexpMatches(response.text, r"Running hook on \(default\)\n"
984972
r"\* Updating clone\n"
985973
r"\* Synchronizing with clone\n"
986974
r"\* Unknown commit [0-9a-f]{40}\n")
@@ -1050,34 +1038,29 @@ def testComplexNotification(self):
10501038
def testPing(self):
10511039
payload = {'zen': "Readability counts."}
10521040
headers = {'Content-Type': 'application/json', 'X-GitHub-Event': 'ping'}
1053-
request = urllib2.Request(u('github'), json.dumps(payload), headers)
1054-
output = urllib2.urlopen(request).read()
1055-
self.assertEqual(output, "Readability counts.")
1041+
response = requests.post(u('github'), json=payload, headers=headers)
1042+
self.assertEqual(response.text, "Readability counts.")
10561043

10571044
def testUnknownEvent(self):
10581045
headers = {'Content-Type': 'application/json', 'X-GitHub-Event': 'pull'}
1059-
request = urllib2.Request(u('github'), json.dumps({}), headers)
1060-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 400: Bad Request$'):
1061-
urllib2.urlopen(request)
1046+
response = requests.post(u('github'), json={}, headers=headers)
1047+
self.assertEqual(response.status_code, 400)
10621048

10631049
def testBadMethod(self):
1064-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 405: Method Not Allowed$'):
1065-
urllib2.urlopen(u('github'))
1050+
response = requests.get(u('github'))
1051+
self.assertEqual(response.status_code, 405)
10661052

10671053
def testBadPayload(self):
1068-
request = urllib2.Request(u('github'), 'foobar', HEADERS)
1069-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 400: Bad Request$'):
1070-
urllib2.urlopen(request)
1054+
response = requests.post(u('github'), data='foobar', headers=HEADERS)
1055+
self.assertEqual(response.status_code, 400)
10711056

10721057
def testBadRepository(self):
1073-
request = urllib2.Request(u('github/nosuchrepo'), '{}', HEADERS)
1074-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 400: Bad Request$'):
1075-
urllib2.urlopen(request)
1058+
response = requests.post(u('github/nosuchrepo'), data='{}', headers=HEADERS)
1059+
self.assertEqual(response.status_code, 400)
10761060

10771061
def testBadUrl(self):
1078-
request = urllib2.Request(u('githubnosuchurl'), '{}', HEADERS)
1079-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 404: Not Found$'):
1080-
urllib2.urlopen(request)
1062+
response = requests.post(u('githubnosuchurl'), data='{}', headers=HEADERS)
1063+
self.assertEqual(response.status_code, 404)
10811064

10821065

10831066
class GitHubPostCommitHookWithSignedWebHookTests(TracGitHubTests):
@@ -1092,21 +1075,19 @@ def setUpClass(cls):
10921075
def testUnsignedPing(self):
10931076
payload = {'zen': "Readability counts."}
10941077
headers = {'Content-Type': 'application/json', 'X-GitHub-Event': 'ping'}
1095-
request = urllib2.Request(u('github'), json.dumps(payload), headers)
1096-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 403: Forbidden$'):
1097-
urllib2.urlopen(request).read()
1078+
response = requests.post(u('github'), json=payload, headers=headers)
1079+
self.assertEqual(response.status_code, 403)
10981080

10991081
def testSignedPing(self):
11001082
# Correct signature can be generated with OpenSSL:
1101-
# $> printf '{"zen": "Echo me"}\n' | openssl dgst -sha256 -hmac $webhook_secret
1083+
# $> printf '{"zen": "Echo me"}' | openssl dgst -sha256 -hmac $webhook_secret
11021084
payload = {'zen': "Echo me"}
1103-
signature = "sha256=cacc93c2df1b21313e16d8690fc21e56229b6a9525e7016db38bdf9bad708fed"
1085+
signature = "sha256=68aef42937ffd24dd0b98d00d84b1551784c00932ab4ae22055a916264e194df"
11041086
headers = {'Content-Type': 'application/json',
11051087
'X-GitHub-Event': 'ping',
11061088
'X-Hub-Signature': signature}
1107-
request = urllib2.Request(u('github'), json.dumps(payload) + '\n', headers)
1108-
output = urllib2.urlopen(request).read()
1109-
self.assertEqual(output, "Echo me")
1089+
response = requests.post(u('github'), json=payload, headers=headers)
1090+
self.assertEqual(response.text, "Echo me")
11101091

11111092

11121093
class GitHubPostCommitHookWithUpdateHookTests(TracGitHubTests):
@@ -1145,7 +1126,7 @@ def tearDownClass(cls):
11451126
def testUpdateHook(self):
11461127
self.makeGitCommit(GIT, 'foo', 'foo content\n')
11471128
payload = self.makeGitHubHookPayload()
1148-
output = self.openGitHubHook(payload=payload).read()
1129+
output = self.openGitHubHook(payload=payload)
11491130
self.assertRegexpMatches(output, r"Running hook on \(default\)\n"
11501131
r"\* Updating clone\n"
11511132
r"\* Synchronizing with clone\n"
@@ -1157,15 +1138,15 @@ def testUpdateHookExecFailure(self):
11571138
os.chmod(d(UPDATEHOOK), 0o644)
11581139
self.makeGitCommit(GIT, 'bar', 'bar content\n')
11591140
payload = self.makeGitHubHookPayload()
1160-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 500: Internal Server Error$'):
1161-
output = self.openGitHubHook(payload=payload).read()
1141+
with self.assertRaisesRegexp(requests.HTTPError, r'^500 Server Error: Internal Server Error'):
1142+
output = self.openGitHubHook(payload=payload)
11621143

11631144
def testUpdateHookFailure(self):
11641145
self.createFailingUpdateHook()
11651146
self.makeGitCommit(GIT, 'baz', 'baz content\n')
11661147
payload = self.makeGitHubHookPayload()
1167-
with self.assertRaisesRegexp(urllib2.HTTPError, r'^HTTP Error 500: Internal Server Error$'):
1168-
output = self.openGitHubHook(payload=payload).read()
1148+
with self.assertRaisesRegexp(requests.HTTPError, r'^500 Server Error: Internal Server Error'):
1149+
output = self.openGitHubHook(payload=payload)
11691150

11701151

11711152
class GitHubBrowserWithCacheTests(GitHubBrowserTests):

0 commit comments

Comments
 (0)