Make URI comparisons safe up to query parameter reordering.
Reviewed in https://codereview.appspot.com/6843073/.
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index 09971f7..9981f23 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -58,6 +58,23 @@
FLAGS.positional_parameters_enforcement = 'EXCEPTION'
+def assertUrisEqual(testcase, expected, actual):
+ """Test that URIs are the same, up to reordering of query parameters."""
+ expected = urlparse.urlparse(expected)
+ actual = urlparse.urlparse(actual)
+ testcase.assertEqual(expected.scheme, actual.scheme)
+ testcase.assertEqual(expected.netloc, actual.netloc)
+ testcase.assertEqual(expected.path, actual.path)
+ testcase.assertEqual(expected.params, actual.params)
+ testcase.assertEqual(expected.fragment, actual.fragment)
+ expected_query = parse_qs(expected.query)
+ actual_query = parse_qs(actual.query)
+ for name in expected_query.keys():
+ testcase.assertEqual(expected_query[name], actual_query[name])
+ for name in actual_query.keys():
+ testcase.assertEqual(expected_query[name], actual_query[name])
+
+
def datafile(filename):
return os.path.join(DATA_DIR, filename)
@@ -342,7 +359,7 @@
request = zoo.animals().insert(media_body=datafile('small.png'))
self.assertEquals('image/png', request.headers['content-type'])
self.assertEquals('PNG', request.body[1:4])
- self.assertEqual(
+ assertUrisEqual(self,
'https://www.googleapis.com/upload/zoo/v1/animals?uploadType=media&alt=json',
request.uri)
@@ -370,7 +387,7 @@
self.assertTrue(request.headers['content-type'].startswith(
'multipart/related'))
self.assertEquals('--==', request.body[0:4])
- self.assertEqual(
+ assertUrisEqual(self,
'https://www.googleapis.com/upload/zoo/v1/animals?uploadType=multipart&alt=json',
request.uri)
@@ -487,7 +504,7 @@
media_upload = MediaFileUpload(datafile('small.png'), resumable=True)
request = zoo.animals().insert(media_body=media_upload, body=None)
- self.assertEqual(
+ assertUrisEqual(self,
'https://www.googleapis.com/upload/zoo/v1/animals?uploadType=resumable&alt=json',
request.uri)