Updated Branches: refs/heads/trunk b232da3e6 -> cd5731c9a
Add assertUrlContainsQueryParams method to MockHttpTestCase class and modify affected tests to use it. Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/cd5731c9 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/cd5731c9 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/cd5731c9 Branch: refs/heads/trunk Commit: cd5731c9aee1ba8e06a8f692de0c4be453e8817c Parents: b232da3 Author: Tomaz Muraus <[email protected]> Authored: Tue Nov 5 11:00:14 2013 +0000 Committer: Tomaz Muraus <[email protected]> Committed: Tue Nov 5 11:01:06 2013 +0000 ---------------------------------------------------------------------- libcloud/test/__init__.py | 28 +++++++++++++++++++++++++ libcloud/test/compute/test_ec2.py | 37 +++++++++++----------------------- 2 files changed, 40 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/cd5731c9/libcloud/test/__init__.py ---------------------------------------------------------------------- diff --git a/libcloud/test/__init__.py b/libcloud/test/__init__.py index 68fdae2..cd09e42 100644 --- a/libcloud/test/__init__.py +++ b/libcloud/test/__init__.py @@ -20,6 +20,7 @@ from libcloud.utils.py3 import httplib from libcloud.utils.py3 import StringIO from libcloud.utils.py3 import urlparse from libcloud.utils.py3 import parse_qs +from libcloud.utils.py3 import parse_qsl from libcloud.utils.py3 import u from libcloud.utils.py3 import unittest2_required @@ -222,6 +223,33 @@ class MockHttpTestCase(MockHttp, unittest.TestCase): def runTest(self): pass + def assertUrlContainsQueryParams(self, url, expected_params, strict=False): + """ + Assert that provided url contains provided query parameters. + + :param url: URL to assert. + :type url: ``str`` + + :param expected_params: Dictionary of expected query parameters. + :type expected_params: ``dict`` + + :param strict: Assert that provided url contains only expected_params. + (defaults to ``False``) + :type strict: ``bool`` + """ + question_mark_index = url.find('?') + + if question_mark_index != -1: + url = url[question_mark_index + 1:] + + params = dict(parse_qsl(url)) + + if strict: + self.assertDictEqual(params, expected_params) + else: + for key, value in expected_params.items(): + self.assertEqual(params[key], value) + class StorageMockHttp(MockHttp): def putrequest(self, method, action): http://git-wip-us.apache.org/repos/asf/libcloud/blob/cd5731c9/libcloud/test/compute/test_ec2.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_ec2.py b/libcloud/test/compute/test_ec2.py index 9bfbfca..0840446 100644 --- a/libcloud/test/compute/test_ec2.py +++ b/libcloud/test/compute/test_ec2.py @@ -20,7 +20,6 @@ import sys from datetime import datetime from libcloud.utils.py3 import httplib -from libcloud.utils.py3 import parse_qsl from libcloud.compute.drivers.ec2 import EC2NodeDriver from libcloud.compute.drivers.ec2 import EC2USWestNodeDriver @@ -729,32 +728,22 @@ class EC2MockHttp(MockHttpTestCase): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _ex_security_groups_RunInstances(self, method, url, body, headers): - # Need to remove '/?' - url = url[2:] - params = dict(parse_qsl(url)) - - self.assertEqual(params['SecurityGroup.1'], 'group1') - self.assertEqual(params['SecurityGroup.1'], 'group1') + self.assertUrlContainsQueryParams(url, {'SecurityGroup.1': 'group1'}) + self.assertUrlContainsQueryParams(url, {'SecurityGroup.2': 'group2'}) body = self.fixtures.load('run_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _create_ex_blockdevicemappings_RunInstances(self, method, url, body, headers): - # Need to remove '/?' - url = url[2:] - parameters = dict(parse_qsl(url)) - self.assertEqual(parameters['BlockDeviceMapping.1.DeviceName'], - '/dev/sda1') - self.assertEqual(parameters['BlockDeviceMapping.1.Ebs.VolumeSize'], - '10') - self.assertEqual(parameters['BlockDeviceMapping.2.DeviceName'], - '/dev/sdb') - self.assertEqual(parameters['BlockDeviceMapping.2.VirtualName'], - 'ephemeral0') - self.assertEqual(parameters['BlockDeviceMapping.3.DeviceName'], - '/dev/sdc') - self.assertEqual(parameters['BlockDeviceMapping.3.VirtualName'], - 'ephemeral1') + expected_params = { + 'BlockDeviceMapping.1.DeviceName': '/dev/sda1', + 'BlockDeviceMapping.1.Ebs.VolumeSize': '10', + 'BlockDeviceMapping.2.DeviceName': '/dev/sdb', + 'BlockDeviceMapping.2.VirtualName': 'ephemeral0', + 'BlockDeviceMapping.3.DeviceName': '/dev/sdc', + 'BlockDeviceMapping.3.VirtualName': 'ephemeral1' + } + self.assertUrlContainsQueryParams(url, expected_params) body = self.fixtures.load('run_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) @@ -868,9 +857,7 @@ class EC2MockHttp(MockHttpTestCase): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DeleteKeypair(self, method, url, body, headers): - url = url[2:] - params = dict(parse_qsl(url)) - self.assertEqual(params['KeyPair'], 'testkey') + self.assertUrlContainsQueryParams(url, {'KeyPair': 'testkey'}) body = self.fixtures.load('delete_keypair.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
