Fix unit tests to succeed on any PYTHONHASHSEED
Many tests rely on order of parameters in URL query, but queries are constructed from dicts and order of parameters is non-deterministic. The issue doesn't occur if PYTHONHASHSEED stays constant, but breaks if random. The fix is needed for tox>1.7 and Py3. Closes-Bug: 1348818 Change-Id: I01145df689e90ccd6100fa82092ba3ed222af8fc
This commit is contained in:
@@ -23,6 +23,7 @@ from mox3 import mox
|
||||
from oslotest import base
|
||||
import requests
|
||||
import six
|
||||
import six.moves.urllib.parse as urlparse
|
||||
|
||||
from neutronclient.common import constants
|
||||
from neutronclient.common import exceptions
|
||||
@@ -85,7 +86,13 @@ class MyUrlComparator(mox.Comparator):
|
||||
self.client = client
|
||||
|
||||
def equals(self, rhs):
|
||||
return str(self) == rhs
|
||||
lhsp = urlparse.urlparse(self.lhs)
|
||||
rhsp = urlparse.urlparse(rhs)
|
||||
|
||||
return (lhsp.scheme == rhsp.scheme and
|
||||
lhsp.netloc == rhsp.netloc and
|
||||
lhsp.path == rhsp.path and
|
||||
urlparse.parse_qs(lhsp.query) == urlparse.parse_qs(rhsp.query))
|
||||
|
||||
def __str__(self):
|
||||
if self.client and self.client.format != FORMAT:
|
||||
@@ -408,7 +415,8 @@ class CLITestV20Base(base.BaseTestCase):
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', TOKEN)).AndReturn((MyResp(200), resstr1))
|
||||
self.client.httpclient.request(
|
||||
end_url(path, fake_query, format=self.format), 'GET',
|
||||
MyUrlComparator(end_url(path, fake_query, format=self.format),
|
||||
self.client), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', TOKEN)).AndReturn((MyResp(200), resstr2))
|
||||
@@ -571,7 +579,8 @@ class ClientV2TestJson(CLITestV20Base):
|
||||
self.client.httpclient.auth_token = 'token'
|
||||
|
||||
self.client.httpclient.request(
|
||||
end_url('/test', query=expect_query, format=self.format),
|
||||
MyUrlComparator(end_url(
|
||||
'/test', query=expect_query, format=self.format), self.client),
|
||||
'PUT', body='',
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', 'token')
|
||||
).AndReturn((MyResp(400, reason='An error'), ''))
|
||||
|
@@ -36,7 +36,7 @@ class CLITestV20Agent(test_cli20.CLITestV20Base):
|
||||
self.assertEqual(1, len(returned_agents))
|
||||
ag = returned_agents[0]
|
||||
self.assertEqual(3, len(ag))
|
||||
self.assertEqual("alive", ag.keys()[2])
|
||||
self.assertIn("alive", ag.keys())
|
||||
|
||||
def test_list_agents_field(self):
|
||||
contents = {'agents': [{'alive': True}]}
|
||||
|
@@ -118,7 +118,9 @@ class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
||||
args = ['-c', 'id', '--', '--id', 'myfakeid']
|
||||
path = getattr(self.client, resources + "_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
test_cli20.MyUrlComparator(test_cli20.end_url(path, query),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token',
|
||||
@@ -202,7 +204,9 @@ class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
||||
resp = (test_cli20.MyResp(200), resstr)
|
||||
path = getattr(self.client, resources + '_path')
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, query), self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(resp)
|
||||
@@ -312,7 +316,9 @@ class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
||||
args = ['-c', 'id', '--', '--id', 'myfakeid']
|
||||
path = getattr(self.client, resources + "_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, query), self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token',
|
||||
@@ -377,7 +383,9 @@ class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
||||
path = getattr(self.client, resources + "_path")
|
||||
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, query), self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
@@ -496,7 +504,8 @@ class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
||||
def mox_calls(path, data):
|
||||
filters, response = self._build_test_data(data)
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, 'fields=id&fields=cidr' + filters),
|
||||
test_cli20.MyUrlComparator(test_cli20.end_url(
|
||||
path, 'fields=id&fields=cidr' + filters), self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
@@ -518,8 +527,10 @@ class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
||||
filters, response = self._build_test_data(data)
|
||||
self.client._check_uri_length(mox.IgnoreArg()).AndReturn(None)
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path,
|
||||
'fields=id&fields=cidr%s' % filters),
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(
|
||||
path, 'fields=id&fields=cidr%s' % filters),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
|
@@ -274,7 +274,10 @@ class CLITestV20PortJSON(test_cli20.CLITestV20Base):
|
||||
query = query and query + '&device_id=%s' or 'device_id=%s'
|
||||
path = getattr(self.client, resources + "_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query % myid), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, query % myid),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
|
@@ -235,7 +235,10 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
|
||||
resp = (test_cli20.MyResp(200), resstr)
|
||||
path = getattr(self.client, resources + '_path')
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, query),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(resp)
|
||||
|
@@ -44,7 +44,10 @@ class CLITestNameorID(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&id=" + _id), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&id=" + _id),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
@@ -61,12 +64,18 @@ class CLITestNameorID(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&id=" + _id), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&id=" + _id),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr1))
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + _id), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&name=" + _id),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
@@ -83,7 +92,10 @@ class CLITestNameorID(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
@@ -100,7 +112,10 @@ class CLITestNameorID(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
@@ -118,7 +133,10 @@ class CLITestNameorID(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name), 'GET',
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name),
|
||||
self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
@@ -140,8 +158,9 @@ class CLITestNameorID(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "security_groups_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=%s&tenant_id=%s" %
|
||||
(name, project)),
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&name=%s&tenant_id=%s" %
|
||||
(name, project)), self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
@@ -162,8 +181,9 @@ class CLITestNameorID(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "security_groups_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=%s&tenant_id=%s" %
|
||||
(name, project)),
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path, "fields=id&name=%s&tenant_id=%s" %
|
||||
(name, project)), self.client),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
|
Reference in New Issue
Block a user