class OpenNebula_2_0_MockHttp(MockHttp): """ Mock HTTP server for testing v2.0 through v3.2 of the OpenNebula.org compute driver. """ fixtures = ComputeFileFixtures('opennebula_2_0') def _compute(self, method, url, body, headers): """ Compute pool resources. """ if method == 'GET': body = self.fixtures.load('compute_collection.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('compute_5.xml') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _storage(self, method, url, body, headers): """ Storage pool resources. """ if method == 'GET': body = self.fixtures.load('storage_collection.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('storage_5.xml') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _network(self, method, url, body, headers): """ Network pool resources. """ if method == 'GET': body = self.fixtures.load('network_collection.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('network_5.xml') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _compute_5(self, method, url, body, headers): """ Compute entry resource. """ if method == 'GET': body = self.fixtures.load('compute_5.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'PUT': body = "" return (httplib.ACCEPTED, body, {}, httplib.responses[httplib.ACCEPTED]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _compute_15(self, method, url, body, headers): """ Compute entry resource. """ if method == 'GET': body = self.fixtures.load('compute_15.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'PUT': body = "" return (httplib.ACCEPTED, body, {}, httplib.responses[httplib.ACCEPTED]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _compute_25(self, method, url, body, headers): """ Compute entry resource. """ if method == 'GET': body = self.fixtures.load('compute_25.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'PUT': body = "" return (httplib.ACCEPTED, body, {}, httplib.responses[httplib.ACCEPTED]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _storage_5(self, method, url, body, headers): """ Storage entry resource. """ if method == 'GET': body = self.fixtures.load('storage_5.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _storage_15(self, method, url, body, headers): """ Storage entry resource. """ if method == 'GET': body = self.fixtures.load('storage_15.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _network_5(self, method, url, body, headers): """ Network entry resource. """ if method == 'GET': body = self.fixtures.load('network_5.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _network_15(self, method, url, body, headers): """ Network entry resource. """ if method == 'GET': body = self.fixtures.load('network_15.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT])
class BrightboxMockHttp(MockHttp): fixtures = ComputeFileFixtures('brightbox') def _token(self, method, url, body, headers): if method == 'POST': return self.response(httplib.OK, self.fixtures.load('token.json')) def _token_INVALID_CLIENT(self, method, url, body, headers): if method == 'POST': return self.response(httplib.BAD_REQUEST, '{"error":"invalid_client"}') def _token_UNAUTHORIZED_CLIENT(self, method, url, body, headers): if method == 'POST': return self.response(httplib.UNAUTHORIZED, '{"error":"unauthorized_client"}') def _1_0_images(self, method, url, body, headers): if method == 'GET': return self.response(httplib.OK, self.fixtures.load('list_images.json')) def _1_0_servers(self, method, url, body, headers): if method == 'GET': return self.response(httplib.OK, self.fixtures.load('list_servers.json')) elif method == 'POST': body = json.loads(body) encoded = base64.b64encode(b(USER_DATA)).decode('ascii') if 'user_data' in body and body['user_data'] != encoded: data = '{"error_name":"dodgy user data", "errors": ["User data not encoded properly"]}' return self.response(httplib.BAD_REQUEST, data) if body.get('zone', '') == 'zon-remk1': node = json.loads( self.fixtures.load('create_server_gb1_b.json')) else: node = json.loads( self.fixtures.load('create_server_gb1_a.json')) node['name'] = body['name'] if 'server_groups' in body: node['server_groups'] = [{ 'id': x } for x in body['server_groups']] if 'user_data' in body: node['user_data'] = body['user_data'] return self.response(httplib.ACCEPTED, json.dumps(node)) def _1_0_servers_srv_xvpn7(self, method, url, body, headers): if method == 'DELETE': return self.response(httplib.ACCEPTED, '') def _1_0_server_types(self, method, url, body, headers): if method == 'GET': return self.response(httplib.OK, self.fixtures.load('list_server_types.json')) def _1_0_zones(self, method, url, body, headers): if method == 'GET': if headers['Host'] == 'api.gbt.brightbox.com': return self.response(httplib.OK, "{}") else: return self.response(httplib.OK, self.fixtures.load('list_zones.json')) def _2_0_zones(self, method, url, body, headers): data = '{"error_name":"unrecognised_endpoint", "errors": ["The request was for an unrecognised API endpoint"]}' return self.response(httplib.BAD_REQUEST, data) def _1_0_cloud_ips(self, method, url, body, headers): if method == 'GET': return self.response(httplib.OK, self.fixtures.load('list_cloud_ips.json')) elif method == 'POST': if body: body = json.loads(body) node = json.loads(self.fixtures.load('create_cloud_ip.json')) if 'reverse_dns' in body: node['reverse_dns'] = body['reverse_dns'] return self.response(httplib.ACCEPTED, json.dumps(node)) def _1_0_cloud_ips_cip_jsjc5(self, method, url, body, headers): if method == 'DELETE': return self.response(httplib.OK, '') elif method == 'PUT': body = json.loads(body) if body.get('reverse_dns', None) == 'fred.co.uk': return self.response(httplib.OK, '') else: return self.response( httplib.BAD_REQUEST, '{"error_name":"bad dns", "errors": ["Bad dns"]}') def _1_0_cloud_ips_cip_jsjc5_map(self, method, url, body, headers): if method == 'POST': body = json.loads(body) if 'destination' in body: return self.response(httplib.ACCEPTED, '') else: data = '{"error_name":"bad destination", "errors": ["Bad destination"]}' return self.response(httplib.BAD_REQUEST, data) def _1_0_cloud_ips_cip_jsjc5_unmap(self, method, url, body, headers): if method == 'POST': return self.response(httplib.ACCEPTED, '') def response(self, status, body): return (status, body, { 'content-type': 'application/json' }, httplib.responses[status])
class OpenStackServiceCatalogTestCase(unittest.TestCase): fixtures = ComputeFileFixtures('openstack') def test_parsing_auth_v1_1(self): data = self.fixtures.load('_v1_1__auth.json') data = json.loads(data) service_catalog = data['auth']['serviceCatalog'] catalog = OpenStackServiceCatalog(service_catalog=service_catalog, auth_version='1.0') entries = catalog.get_entries() self.assertEqual(len(entries), 3) entry = [e for e in entries if e.service_type == 'cloudFilesCDN'][0] self.assertEqual(entry.service_type, 'cloudFilesCDN') self.assertEqual(entry.service_name, None) self.assertEqual(len(entry.endpoints), 2) self.assertEqual(entry.endpoints[0].region, 'ORD') self.assertEqual(entry.endpoints[0].url, 'https://cdn2.clouddrive.com/v1/MossoCloudFS') self.assertEqual(entry.endpoints[0].endpoint_type, 'external') self.assertEqual(entry.endpoints[1].region, 'LON') self.assertEqual(entry.endpoints[1].endpoint_type, 'external') def test_parsing_auth_v2(self): data = self.fixtures.load('_v2_0__auth.json') data = json.loads(data) service_catalog = data['access']['serviceCatalog'] catalog = OpenStackServiceCatalog(service_catalog=service_catalog, auth_version='2.0') entries = catalog.get_entries() self.assertEqual(len(entries), 8) entry = [e for e in entries if e.service_name == 'cloudServers'][0] self.assertEqual(entry.service_type, 'compute') self.assertEqual(entry.service_name, 'cloudServers') self.assertEqual(len(entry.endpoints), 1) self.assertEqual(entry.endpoints[0].region, None) self.assertEqual(entry.endpoints[0].url, 'https://servers.api.rackspacecloud.com/v1.0/1337') self.assertEqual(entry.endpoints[0].endpoint_type, 'external') def test_parsing_auth_v3(self): data = self.fixtures.load('_v3__auth.json') data = json.loads(data) service_catalog = data['token']['catalog'] catalog = OpenStackServiceCatalog(service_catalog=service_catalog, auth_version='3.x') entries = catalog.get_entries() self.assertEqual(len(entries), 6) entry = [e for e in entries if e.service_type == 'volume'][0] self.assertEqual(entry.service_type, 'volume') self.assertEqual(entry.service_name, None) self.assertEqual(len(entry.endpoints), 3) self.assertEqual(entry.endpoints[0].region, 'regionOne') self.assertEqual(entry.endpoints[0].endpoint_type, 'external') self.assertEqual(entry.endpoints[1].region, 'regionOne') self.assertEqual(entry.endpoints[1].endpoint_type, 'admin') self.assertEqual(entry.endpoints[2].region, 'regionOne') self.assertEqual(entry.endpoints[2].endpoint_type, 'internal') def test_get_public_urls(self): data = self.fixtures.load('_v2_0__auth.json') data = json.loads(data) service_catalog = data['access']['serviceCatalog'] catalog = OpenStackServiceCatalog(service_catalog=service_catalog, auth_version='2.0') public_urls = catalog.get_public_urls(service_type='object-store') expected_urls = [ 'https://storage101.lon1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111', 'https://storage101.ord1.clouddrive.com/v1/MossoCloudFS_11111-111111111-1111111111-1111111' ] self.assertEqual(public_urls, expected_urls) def test_get_regions(self): data = self.fixtures.load('_v2_0__auth.json') data = json.loads(data) service_catalog = data['access']['serviceCatalog'] catalog = OpenStackServiceCatalog(service_catalog=service_catalog, auth_version='2.0') regions = catalog.get_regions(service_type='object-store') self.assertEqual(regions, ['LON', 'ORD']) regions = catalog.get_regions(service_type='invalid') self.assertEqual(regions, []) def test_get_service_types(self): data = self.fixtures.load('_v2_0__auth.json') data = json.loads(data) service_catalog = data['access']['serviceCatalog'] catalog = OpenStackServiceCatalog(service_catalog=service_catalog, auth_version='2.0') service_types = catalog.get_service_types() self.assertEqual( service_types, ['compute', 'image', 'network', 'object-store', 'rax:object-cdn']) service_types = catalog.get_service_types(region='ORD') self.assertEqual(service_types, ['rax:object-cdn']) def test_get_service_names(self): data = self.fixtures.load('_v2_0__auth.json') data = json.loads(data) service_catalog = data['access']['serviceCatalog'] catalog = OpenStackServiceCatalog(service_catalog=service_catalog, auth_version='2.0') service_names = catalog.get_service_names() self.assertEqual(service_names, [ 'cloudFiles', 'cloudFilesCDN', 'cloudServers', 'cloudServersOpenStack', 'cloudServersPreprod', 'glance', 'neutron', 'nova' ]) service_names = catalog.get_service_names(service_type='compute') self.assertEqual(service_names, [ 'cloudServers', 'cloudServersOpenStack', 'cloudServersPreprod', 'nova' ])
def test_success(self): f = ComputeFileFixtures('meta') self.assertEqual("Hello, World!", f.load('helloworld.txt'))
class IBMMockHttp(MockHttp): fixtures = ComputeFileFixtures('ibm_sce') def _computecloud_enterprise_api_rest_20100331_instances( self, method, url, body, headers): body = self.fixtures.load('instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_DELETED( self, method, url, body, headers): body = self.fixtures.load('instances_deleted.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_UNAUTHORIZED( self, method, url, body, headers): return (httplib.UNAUTHORIZED, body, {}, httplib.responses[httplib.UNAUTHORIZED]) def _computecloud_enterprise_api_rest_20100331_offerings_image( self, method, url, body, headers): body = self.fixtures.load('images.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_locations( self, method, url, body, headers): body = self.fixtures.load('locations.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_26557_REBOOT( self, method, url, body, headers): body = self.fixtures.load('reboot_active.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_28193_REBOOT( self, method, url, body, headers): return (412, 'Error 412: Instance must be in the Active state', {}, 'Precondition Failed') def _computecloud_enterprise_api_rest_20100331_instances_28193_DELETE( self, method, url, body, headers): body = self.fixtures.load('delete.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_28193_DELETED( self, method, url, body, headers): return (404, 'Error 404: Invalid Instance ID 28193', {}, 'Precondition Failed') def _computecloud_enterprise_api_rest_20100331_instances_CREATE( self, method, url, body, headers): body = self.fixtures.load('create.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_CREATE_INVALID( self, method, url, body, headers): return (412, 'Error 412: No DataCenter with id: 3', {}, 'Precondition Failed') def _computecloud_enterprise_api_rest_20100331_storage( self, method, url, body, headers): body = self.fixtures.load('list_volumes.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_26557_ATTACH( self, method, url, body, headers): body = self.fixtures.load('attach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_storage_CREATE( self, method, url, body, headers): body = self.fixtures.load('create_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_storage_39281_DESTROY( self, method, url, body, headers): body = self.fixtures.load('destroy_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_offerings_image_2_DESTROY( self, method, url, body, headers): body = self.fixtures.load('destroy_image.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_instances_26557_DETACH( self, method, url, body, headers): body = self.fixtures.load('detach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_addresses_ALLOCATE( self, method, url, body, headers): body = self.fixtures.load('allocate_address.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_addresses_292795_DELETE( self, method, url, body, headers): body = self.fixtures.load('delete_address.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_addresses( self, method, url, body, headers): body = self.fixtures.load('list_addresses.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _computecloud_enterprise_api_rest_20100331_offerings_storage( self, method, url, body, headers): body = self.fixtures.load('list_storage_offerings.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) # This is only to accommodate the response tests built into test\__init__.py def _computecloud_enterprise_api_rest_20100331_instances_26557( self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load('delete.xml') else: body = self.fixtures.load('reboot_active.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class VPSNetMockHttp(MockHttp): fixtures = ComputeFileFixtures('vpsnet') def _nodes_api10json_sizes(self, method, url, body, headers): body = """[{"slice":{"virtual_machine_id":8592,"id":12256,"consumer_id":0}}, {"slice":{"virtual_machine_id":null,"id":12258,"consumer_id":0}}, {"slice":{"virtual_machine_id":null,"id":12434,"consumer_id":0}}]""" return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _nodes_api10json_create(self, method, url, body, headers): body = """[{"slice":{"virtual_machine_id":8592,"id":12256,"consumer_id":0}}, {"slice":{"virtual_machine_id":null,"id":12258,"consumer_id":0}}, {"slice":{"virtual_machine_id":null,"id":12434,"consumer_id":0}}]""" return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _virtual_machines_2222_api10json_delete_fail(self, method, url, body, headers): return (httplib.FORBIDDEN, '', {}, httplib.responses[httplib.FORBIDDEN]) def _virtual_machines_2222_api10json_delete(self, method, url, body, headers): return (httplib.OK, '', {}, httplib.responses[httplib.OK]) def _virtual_machines_1384_reboot_api10json_reboot(self, method, url, body, headers): body = """{ "virtual_machine": { "running": true, "updated_at": "2009-05-15T06:55:02-04:00", "power_action_pending": false, "system_template_id": 41, "id": 1384, "cloud_id": 3, "domain_name": "demodomain.com", "hostname": "web01", "consumer_id": 0, "backups_enabled": false, "password": "******", "label": "foo", "slices_count": null, "created_at": "2009-04-16T08:17:39-04:00" } }""" return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _virtual_machines_api10json_create(self, method, url, body, headers): body = """{ "virtual_machine": { "running": true, "updated_at": "2009-05-15T06:55:02-04:00", "power_action_pending": false, "system_template_id": 41, "id": 1384, "cloud_id": 3, "domain_name": "demodomain.com", "hostname": "web01", "consumer_id": 0, "backups_enabled": false, "password": "******", "label": "foo", "slices_count": null, "created_at": "2009-04-16T08:17:39-04:00" } }""" return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _virtual_machines_api10json_virtual_machines(self, method, url, body, headers): body = """ [{ "virtual_machine": { "running": true, "updated_at": "2009-05-15T06:55:02-04:00", "power_action_pending": false, "system_template_id": 41, "id": 1384, "cloud_id": 3, "domain_name": "demodomain.com", "hostname": "web01", "consumer_id": 0, "backups_enabled": false, "password": "******", "label": "Web Server 01", "slices_count": null, "created_at": "2009-04-16T08:17:39-04:00" } }, { "virtual_machine": { "running": true, "updated_at": "2009-05-15T06:55:02-04:00", "power_action_pending": false, "system_template_id": 41, "id": 1385, "cloud_id": 3, "domain_name": "demodomain.com", "hostname": "mysql01", "consumer_id": 0, "backups_enabled": false, "password": "******", "label": "MySQL Server 01", "slices_count": null, "created_at": "2009-04-16T08:17:39-04:00" } }]""" return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _available_clouds_api10json_templates(self, method, url, body, headers): body = self.fixtures.load('_available_clouds_api10json_templates.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _available_clouds_api10json_create(self, method, url, body, headers): body = """ [{"cloud":{"system_templates":[{"id":9,"label":"Ubuntu 8.04 x64"}],"id":2,"label":"USA VPS Cloud"}}] """ return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class OvhMockHttp(BaseOvhMockHttp): """Fixtures needed for tests related to rating model""" fixtures = ComputeFileFixtures('ovh') def _json_1_0_auth_time_get(self, method, url, body, headers): body = self.fixtures.load('auth_time_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_region_get(self, method, url, body, headers): body = self.fixtures.load('region_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_flavor_get(self, method, url, body, headers): body = self.fixtures.load('flavor_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_flavor_region_SBG1_get( self, method, url, body, headers): body = self.fixtures.load('flavor_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_flavor_foo_id_get( self, method, url, body, headers): body = self.fixtures.load('flavor_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_image_get(self, method, url, body, headers): body = self.fixtures.load('image_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_image_foo_id_get( self, method, url, body, headers): body = self.fixtures.load('image_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_sshkey_region_SBG1_get( self, method, url, body, headers): body = self.fixtures.load('ssh_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_sshkey_post(self, method, url, body, headers): body = self.fixtures.load('ssh_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_ssh_mykey_get(self, method, url, body, headers): body = self.fixtures.load('ssh_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_instance_get( self, method, url, body, headers): body = self.fixtures.load('instance_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_instance_foo_get( self, method, url, body, headers): body = self.fixtures.load('instance_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_instance_foo_delete( self, method, url, body, headers): return (httplib.OK, '', {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_instance_post( self, method, url, body, headers): body = self.fixtures.load('instance_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_get(self, method, url, body, headers): body = self.fixtures.load('volume_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_post(self, method, url, body, headers): body = self.fixtures.load('volume_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_foo_get( self, method, url, body, headers): body = self.fixtures.load('volume_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_foo_delete( self, method, url, body, headers): return (httplib.OK, '', {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_foo_attach_post( self, method, url, body, headers): body = self.fixtures.load('volume_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_foo_detach_post( self, method, url, body, headers): body = self.fixtures.load('volume_get_detail.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_snapshot_region_SBG_1_get( self, method, url, body, headers): body = self.fixtures.load('volume_snapshot_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_snapshot_get( self, method, url, body, headers): body = self.fixtures.load('volume_snapshot_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_snapshot_foo_get( self, method, url, body, headers): body = self.fixtures.load('volume_snapshot_get_details.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_snapshot_foo_snap_delete( self, method, url, body, headers): return (httplib.OK, None, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_volume_foo_snapshot__post( self, method, url, body, headers): body = self.fixtures.load('volume_snapshot_get_details.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_subsidiaryPrice_ovhSubsidiary_US_flavorId_foo_id_get( self, method, url, body, headers): return self._json_1_0_cloud_subsidiaryPrice_flavorId_foo_id_ovhSubsidiary_US_get( method, url, body, headers) def _json_1_0_cloud_subsidiaryPrice_flavorId_foo_id_ovhSubsidiary_US_get( self, method, url, body, headers): body = self.fixtures.load('pricing_get.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _json_1_0_cloud_project_project_id_instance_get_invalid_app_key_error( self, method, url, body, headers): body = '{"message":"Invalid application key"}' return (httplib.UNAUTHORIZED, body, {}, httplib.responses[httplib.OK])
class ElasticStackMockHttp(MockHttp): fixtures = ComputeFileFixtures('elastichosts') def _servers_info_UNAUTHORIZED(self, method, url, body, headers): return (httplib.UNAUTHORIZED, body, {}, httplib.responses[httplib.NO_CONTENT]) def _servers_info_MALFORMED(self, method, url, body, headers): body = "{malformed: '" return (httplib.OK, body, {}, httplib.responses[httplib.NO_CONTENT]) def _servers_info_PARSE_ERROR(self, method, url, body, headers): return (505, body, {}, httplib.responses[httplib.NO_CONTENT]) def _servers_b605ca90_c3e6_4cee_85f8_a8ebdf8f9903_reset( self, method, url, body, headers): return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _servers_b605ca90_c3e6_4cee_85f8_a8ebdf8f9903_destroy( self, method, url, body, headers): return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _drives_create(self, method, url, body, headers): body = self.fixtures.load('drives_create.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _drives_0012e24a_6eae_4279_9912_3432f698cec8_image_38df0986_4d85_4b76_b502_3878ffc80161_gunzip( self, method, url, body, headers): # ElasticHosts image return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _drives_0012e24a_6eae_4279_9912_3432f698cec8_image_90aa51f2_15c0_4cff_81ee_e93aa20b9468_gunzip( self, method, url, body, headers): # Skalikloud image return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _drives_0012e24a_6eae_4279_9912_3432f698cec8_image_679f5f44_0be7_4745_a658_cccd4334c1aa_gunzip( self, method, url, body, headers): # ServerLove image return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _drives_0012e24a_6eae_4279_9912_3432f698cec8_info( self, method, url, body, headers): body = self.fixtures.load('drives_info.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_create(self, method, url, body, headers): body = self.fixtures.load('servers_create.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_info(self, method, url, body, headers): body = self.fixtures.load('servers_info.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_72258_set(self, method, url, body, headers): body = '{}' return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class SoftLayerMockHttp(MockHttp): fixtures = ComputeFileFixtures('softlayer') def _get_method_name(self, type, use_param, qs, path): return "_xmlrpc" def _xmlrpc(self, method, url, body, headers): params, meth_name = xmlrpclib.loads(body) url = url.replace("/", "_") meth_name = "%s_%s" % (url, meth_name) return getattr(self, meth_name)(method, url, body, headers) def _xmlrpc_v3_SoftLayer_Virtual_Guest_getCreateObjectOptions( self, method, url, body, headers): body = self.fixtures.load( 'v3__SoftLayer_Virtual_Guest_getCreateObjectOptions.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Account_getVirtualGuests( self, method, url, body, headers): body = self.fixtures.load('v3_SoftLayer_Account_getVirtualGuests.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Location_Datacenter_getDatacenters( self, method, url, body, headers): body = self.fixtures.load( 'v3_SoftLayer_Location_Datacenter_getDatacenters.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_createObject( self, method, url, body, headers): fixture = { None: 'v3__SoftLayer_Virtual_Guest_createObject.xml', 'INVALIDCREDSERROR': 'SoftLayer_Account.xml', 'SOFTLAYEREXCEPTION': 'fail.xml', }[self.type] body = self.fixtures.load(fixture) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_getObject( self, method, url, body, headers): body = self.fixtures.load( 'v3__SoftLayer_Virtual_Guest_getObject.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_rebootSoft( self, method, url, body, headers): body = self.fixtures.load('empty.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_deleteObject( self, method, url, body, headers): body = self.fixtures.load('empty.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Account_getSshKeys( self, method, url, body, headers): body = self.fixtures.load('v3__SoftLayer_Account_getSshKeys.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Security_Ssh_Key_getObject( self, method, url, body, headers): body = self.fixtures.load('v3__SoftLayer_Security_Ssh_Key_getObject.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Security_Ssh_Key_createObject( self, method, url, body, headers): body = self.fixtures.load('v3__SoftLayer_Security_Ssh_Key_createObject.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Security_Ssh_Key_deleteObject( self, method, url, body, headers): body = self.fixtures.load('v3__SoftLayer_Security_Ssh_Key_deleteObject.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class OpenStackIdentity_3_0_MockHttp(MockHttp): fixtures = ComputeFileFixtures('openstack_identity/v3') json_content_headers = {'content-type': 'application/json; charset=UTF-8'} def _v3(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_versions.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_domains(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_domains.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_projects(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_projects.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_users(self, method, url, body, headers): if method == 'GET': # list users body = self.fixtures.load('v3_users.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) elif method == 'POST': # create user body = self.fixtures.load('v3_create_user.json') return (httplib.CREATED, body, self.json_content_headers, httplib.responses[httplib.CREATED]) raise NotImplementedError() def _v3_users_a(self, method, url, body, headers): if method == 'PATCH': # enable / disable user body = self.fixtures.load('v3_users_a.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_roles(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_roles.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_domains_default_users_a_roles_a(self, method, url, body, headers): if method == 'PUT': # grant domain role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) elif method == 'DELETE': # revoke domain role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) raise NotImplementedError() def _v3_projects_a_users_a_roles_a(self, method, url, body, headers): if method == 'PUT': # grant project role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) elif method == 'DELETE': # revoke project role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) raise NotImplementedError() def _v3_domains_default(self, method, url, body, headers): if method == 'GET': # get domain body = self.fixtures.load('v3_domains_default.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_users_a_projects(self, method, url, body, headers): if method == 'GET': # get user projects body = self.fixtures.load('v3_users_a_projects.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_domains_default_users_a_roles(self, method, url, body, headers): if method == 'GET': # get user domain roles body = self.fixtures.load('v3_domains_default_users_a_roles.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError()
class GCEMockHttp(MockHttpTestCase): fixtures = ComputeFileFixtures('gce') json_hdr = {'content-type': 'application/json; charset=UTF-8'} def _get_method_name(self, type, use_param, qs, path): api_path = '/compute/%s' % API_VERSION project_path = '/projects/%s' % GCE_KEYWORD_PARAMS['project'] path = path.replace(api_path, '') # This replace is separate, since there is a call with a different # project name path = path.replace(project_path, '') # The path to get project information is the base path, so use a fake # '/project' path instead if not path: path = '/project' method_name = super(GCEMockHttp, self)._get_method_name(type, use_param, qs, path) return method_name def _aggregated_addresses(self, method, url, body, headers): body = self.fixtures.load('aggregated_addresses.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _aggregated_disks(self, method, url, body, headers): body = self.fixtures.load('aggregated_disks.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _aggregated_instances(self, method, url, body, headers): body = self.fixtures.load('aggregated_instances.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _aggregated_machineTypes(self, method, url, body, headers): body = self.fixtures.load('aggregated_machineTypes.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_firewalls(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load('global_firewalls_post.json') else: body = self.fixtures.load('global_firewalls.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_firewalls_lcfirewall(self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load( 'global_firewalls_lcfirewall_delete.json') elif method == 'PUT': body = self.fixtures.load('global_firewalls_lcfirewall_put.json') else: body = self.fixtures.load('global_firewalls_lcfirewall.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_images(self, method, url, body, headers): body = self.fixtures.load('global_images.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_networks(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load('global_networks_post.json') else: body = self.fixtures.load('global_networks.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_networks_default(self, method, url, body, headers): body = self.fixtures.load('global_networks_default.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_networks_libcloud_demo_network(self, method, url, body, headers): body = self.fixtures.load('global_networks_libcloud-demo-network.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_networks_libcloud_demo_europe_network(self, method, url, body, headers): body = self.fixtures.load( 'global_networks_libcloud-demo-europe-network.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_networks_lcnetwork(self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load('global_networks_lcnetwork_delete.json') else: body = self.fixtures.load('global_networks_lcnetwork.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_operations_operation_global_firewalls_lcfirewall_delete( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_global_firewalls_lcfirewall_delete.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_operations_operation_global_firewalls_lcfirewall_put( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_global_firewalls_lcfirewall_put.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_operations_operation_global_firewalls_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_global_firewalls_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_operations_operation_global_networks_lcnetwork_delete( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_global_networks_lcnetwork_delete.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _global_operations_operation_global_networks_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_global_networks_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _regions_us_central1_operations_operation_regions_us_central1_addresses_lcaddress_delete( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_regions_us-central1_addresses_lcaddress_delete.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _regions_us_central1_operations_operation_regions_us_central1_addresses_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_regions_us-central1_addresses_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_disks_lcdisk_delete( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_disks_lcdisk_delete.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_disks_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_disks_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_lcnode_000_delete( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_lcnode-000_delete.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_lcnode_001_delete( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_lcnode-001_delete.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_delete( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_node-name_delete.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_attachDisk_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_node-name_attachDisk_post.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_detachDisk_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_node-name_detachDisk_post.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_setTags_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_node-name_setTags_post.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_node_name_reset_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_node-name_reset_post.json' ) return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_europe_west1_a_operations_operation_zones_europe_west1_a_instances_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_europe-west1-a_instances_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_operations_operation_zones_us_central1_a_instances_post( self, method, url, body, headers): body = self.fixtures.load( 'operations_operation_zones_us-central1-a_instances_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _project(self, method, url, body, headers): body = self.fixtures.load('project.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _projects_debian_cloud_global_images(self, method, url, body, headers): body = self.fixtures.load('projects_debian-cloud_global_images.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _regions_us_central1_addresses(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load( 'regions_us-central1_addresses_post.json') else: body = self.fixtures.load('regions_us-central1_addresses.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _regions_us_central1_addresses_lcaddress(self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load( 'regions_us-central1_addresses_lcaddress_delete.json') else: body = self.fixtures.load( 'regions_us-central1_addresses_lcaddress.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones(self, method, url, body, headers): body = self.fixtures.load('zones.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_disks(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load('zones_us-central1-a_disks_post.json') else: body = self.fixtures.load('zones_us-central1-a_disks.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_disks_lcdisk(self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load( 'zones_us-central1-a_disks_lcdisk_delete.json') else: body = self.fixtures.load('zones_us-central1-a_disks_lcdisk.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_europe_west1_a_instances(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load( 'zones_europe-west1-a_instances_post.json') else: body = self.fixtures.load('zones_europe-west1-a_instances.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load( 'zones_us-central1-a_instances_post.json') else: body = self.fixtures.load('zones_us-central1-a_instances.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances_node_name(self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load( 'zones_us-central1-a_instances_node-name_delete.json') else: body = self.fixtures.load( 'zones_us-central1-a_instances_node-name.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances_node_name_attachDisk( self, method, url, body, headers): body = self.fixtures.load( 'zones_us-central1-a_instances_node-name_attachDisk_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances_node_name_detachDisk( self, method, url, body, headers): body = self.fixtures.load( 'zones_us-central1-a_instances_node-name_detachDisk_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances_node_name_setTags( self, method, url, body, headers): body = self.fixtures.load( 'zones_us-central1-a_instances_node-name_setTags_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances_node_name_reset(self, method, url, body, headers): body = self.fixtures.load( 'zones_us-central1-a_instances_node-name_reset_post.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances_lcnode_000(self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load( 'zones_us-central1-a_instances_lcnode-000_delete.json') else: body = self.fixtures.load( 'zones_us-central1-a_instances_lcnode-000.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_instances_lcnode_001(self, method, url, body, headers): if method == 'DELETE': body = self.fixtures.load( 'zones_us-central1-a_instances_lcnode-001_delete.json') else: body = self.fixtures.load( 'zones_us-central1-a_instances_lcnode-001.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a(self, method, url, body, headers): body = self.fixtures.load('zones_us-central1-a.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_machineTypes(self, method, url, body, headers): body = self.fixtures.load('zones_us-central1-a_machineTypes.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_europe_west1_a_machineTypes_n1_standard_1( self, method, url, body, headers): body = self.fixtures.load( 'zones_europe-west1-a_machineTypes_n1-standard-1.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK]) def _zones_us_central1_a_machineTypes_n1_standard_1( self, method, url, body, headers): body = self.fixtures.load( 'zones_us-central1-a_machineTypes_n1-standard-1.json') return (httplib.OK, body, self.json_hdr, httplib.responses[httplib.OK])
class LinodeMockHttp(MockHttp): fixtures = ComputeFileFixtures('linode') def _avail_datacenters(self, method, url, body, headers): body = self.fixtures.load('_avail_datacenters.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _avail_linodeplans(self, method, url, body, headers): body = self.fixtures.load('_avail_linodeplans.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _avail_distributions(self, method, url, body, headers): body = self.fixtures.load('_avail_distributions.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_create(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.create","DATA":{"LinodeID":8098}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_disk_createfromdistribution(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.disk.createFromDistribution","DATA":{"JobID":1298,"DiskID":55647}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_delete(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.delete","DATA":{"LinodeID":8098}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_update(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.update","DATA":{"LinodeID":8098}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_reboot(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.reboot","DATA":{"JobID":1305}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _avail_kernels(self, method, url, body, headers): body = self.fixtures.load('_avail_kernels.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_disk_create(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.disk.create","DATA":{"JobID":1299,"DiskID":55648}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_boot(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.boot","DATA":{"JobID":1300}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_config_create(self, method, url, body, headers): body = '{"ERRORARRAY":[],"ACTION":"linode.config.create","DATA":{"ConfigID":31239}}' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_list(self, method, url, body, headers): body = self.fixtures.load('_linode_list.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _linode_ip_list(self, method, url, body, headers): body = self.fixtures.load('_linode_ip_list.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _batch(self, method, url, body, headers): body = self.fixtures.load('_batch.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
def test_unicode(self): f = ComputeFileFixtures('meta') self.assertEqual(u"Ś", f.load('unicode.txt'))
def test_failure(self): f = ComputeFileFixtures('meta') self.assertRaises(IOError, f.load, 'nil')
class EC2MockHttp(MockHttp): fixtures = ComputeFileFixtures('ec2') def _DescribeInstances(self, method, url, body, headers): body = self.fixtures.load('describe_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _WITH_TAGS_DescribeInstances(self, method, url, body, headers): body = self.fixtures.load('describe_instances_with_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeAvailabilityZones(self, method, url, body, headers): body = self.fixtures.load('describe_availability_zones.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _RebootInstances(self, method, url, body, headers): body = self.fixtures.load('reboot_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _StartInstances(self, method, url, body, headers): body = self.fixtures.load('start_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _StopInstances(self, method, url, body, headers): body = self.fixtures.load('stop_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeImages(self, method, url, body, headers): body = self.fixtures.load('describe_images.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _RunInstances(self, method, url, body, headers): body = self.fixtures.load('run_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _idempotent_RunInstances(self, method, url, body, headers): body = self.fixtures.load('run_instances_idem.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _idempotent_mismatch_RunInstances(self, method, url, body, headers): body = self.fixtures.load('run_instances_idem_mismatch.xml') return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.BAD_REQUEST]) def _TerminateInstances(self, method, url, body, headers): body = self.fixtures.load('terminate_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeTags(self, method, url, body, headers): body = self.fixtures.load('describe_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _CreateTags(self, method, url, body, headers): body = self.fixtures.load('create_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DeleteTags(self, method, url, body, headers): body = self.fixtures.load('delete_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeAddresses(self, method, url, body, headers): body = self.fixtures.load('describe_addresses_multi.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _AssociateAddress(self, method, url, body, headers): body = self.fixtures.load('associate_address.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _all_addresses_DescribeAddresses(self, method, url, body, headers): body = self.fixtures.load('describe_addresses_all.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _WITH_TAGS_DescribeAddresses(self, method, url, body, headers): body = self.fixtures.load('describe_addresses_multi.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _ModifyInstanceAttribute(self, method, url, body, headers): body = self.fixtures.load('modify_instance_attribute.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _idempotent_CreateTags(self, method, url, body, headers): body = self.fixtures.load('create_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _CreateVolume(self, method, url, body, headers): body = self.fixtures.load('create_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DeleteVolume(self, method, url, body, headers): body = self.fixtures.load('delete_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _AttachVolume(self, method, url, body, headers): body = self.fixtures.load('attach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DetachVolume(self, method, url, body, headers): body = self.fixtures.load('detach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class ScalewayMockHttp(MockHttp): fixtures = ComputeFileFixtures('scaleway') def _products_servers(self, method, url, body, headers): body = self.fixtures.load('list_sizes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _products_servers_availability(self, method, url, body, headers): body = self.fixtures.load('list_availability.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_UNAUTHORIZED(self, method, url, body, headers): body = self.fixtures.load('error.json') return (httplib.UNAUTHORIZED, body, {}, httplib.responses[httplib.UNAUTHORIZED]) def _images(self, method, url, body, headers): body = self.fixtures.load('list_images.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _images_POST(self, method, url, body, headers): # create_image body = self.fixtures.load('create_image.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _images_12345_DELETE(self, method, url, body, headers): # delete_image return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _images_12345(self, method, url, body, headers): # get_image body = self.fixtures.load('get_image.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers(self, method, url, body, headers): body = self.fixtures.load('list_nodes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_POST(self, method, url, body, headers): body = self.fixtures.load('create_node.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_741db378_action_POST(self, method, url, body, headers): # reboot_node return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _servers_INVALID_IMAGE(self, method, url, body, headers): body = self.fixtures.load('error_invalid_image.json') return (httplib.NOT_FOUND, body, {}, httplib.responses[httplib.NOT_FOUND]) def _servers_741db378_action_REBOOT(self, method, url, body, headers): # reboot_node body = self.fixtures.load('reboot_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _servers_741db378_action_TERMINATE(self, method, url, body, headers): # destroy_node return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _volumes(self, method, url, body, headers): body = self.fixtures.load('list_volumes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _volumes_EMPTY(self, method, url, body, headers): body = self.fixtures.load('list_volumes_empty.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _snapshots( self, method, url, body, headers): body = self.fixtures.load('list_volume_snapshots.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _volumes_POST(self, method, url, body, headers): body = self.fixtures.load('create_volume.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _snapshots_POST(self, method, url, body, headers): body = self.fixtures.load('create_volume_snapshot.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _volumes_f929fe39_63f8_4be8_a80e_1e9c8ae22a76_DELETE( self, method, url, body, headers): return (httplib.NO_CONTENT, None, {}, httplib.responses[httplib.NO_CONTENT]) def _snapshots_6f418e5f_b42d_4423_a0b5_349c74c454a4_DELETE( self, method, url, body, headers): return (httplib.NO_CONTENT, None, {}, httplib.responses[httplib.NO_CONTENT]) def _tokens_token(self, method, url, body, headers): body = self.fixtures.load('token_info.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _users_5bea0358(self, method, url, body, headers): body = self.fixtures.load('user_info.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class DigitalOceanMockHttp(MockHttp): fixtures = ComputeFileFixtures('digitalocean_v2') def _v2_regions(self, method, url, body, headers): body = self.fixtures.load('list_locations.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_images(self, method, url, body, headers): body = self.fixtures.load('list_images.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_sizes(self, method, url, body, headers): body = self.fixtures.load('list_sizes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_droplets(self, method, url, body, headers): body = self.fixtures.load('list_nodes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_droplets_3164444(self, method, url, body, headers): body = self.fixtures.load('list_node.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_droplets_INVALID_IMAGE(self, method, url, body, headers): body = self.fixtures.load('error_invalid_image.json') return (httplib.NOT_FOUND, body, {}, httplib.responses[httplib.NOT_FOUND]) def _v2_droplets_3164444_actions_REBOOT(self, method, url, body, headers): # reboot_node body = self.fixtures.load('reboot_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_droplets_3164444_DESTROY(self, method, url, body, headers): # destroy_node return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _v2_droplets_3164444_actions_KERNELCHANGE(self, method, url, body, headers): # change_kernel body = self.fixtures.load('ex_change_kernel.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_droplets_3164444_actions_ENABLEIPV6(self, method, url, body, headers): # enable_ipv6 body = self.fixtures.load('ex_enable_ipv6.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_droplets_3164444_actions_RENAME(self, method, url, body, headers): # rename_node body = self.fixtures.load('ex_rename_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_droplets_3164444_actions_SNAPSHOT(self, method, url, body, headers): # create_image body = self.fixtures.load('create_image.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_images_12345(self, method, url, body, headers): # get_image body = self.fixtures.load('get_image.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_images_12345_DESTROY(self, method, url, body, headers): # delete_image return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _v2_droplets_3164444_actions_POWERON(self, method, url, body, headers): # ex_power_on_node body = self.fixtures.load('ex_power_on_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_droplets_3164444_actions_SHUTDOWN(self, method, url, body, headers): # ex_shutdown_node body = self.fixtures.load('ex_shutdown_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_droplets_3164444_actions_POWERCYCLE(self, method, url, body, headers): # ex_hard_reboot body = self.fixtures.load('ex_hard_reboot.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.OK]) def _v2_droplets_3164444_actions_REBUILD(self, method, url, body, headers): # ex_rebuild_node body = self.fixtures.load('ex_rebuild_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.OK]) def _v2_droplets_3164444_actions_RESIZE(self, method, url, body, headers): # ex_resize_node body = self.fixtures.load('ex_resize_node.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.OK]) def _v2_account_keys(self, method, url, body, headers): body = self.fixtures.load('list_key_pairs.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_account_keys_7717(self, method, url, body, headers): # destroy_ssh_key return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _v2_account_keys_CREATE(self, method, url, body, headers): # create_ssh_key body = self.fixtures.load('create_key_pair.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_droplets_UNAUTHORIZED(self, method, url, body, headers): body = self.fixtures.load('error.json') return (httplib.UNAUTHORIZED, body, {}, httplib.responses[httplib.UNAUTHORIZED]) def _v2_droplets_PAGE_ONE(self, method, url, body, headers): body = self.fixtures.load('list_nodes_page_1.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_volumes(self, method, url, body, headers): body = self.fixtures.load('list_volumes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_volumes_EMPTY(self, method, url, body, headers): body = self.fixtures.load('list_volumes_empty.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_volumes_CREATE(self, method, url, body, headers): body = self.fixtures.load('create_volume.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_volumes_actions_ATTACH(self, method, url, body, headers): body = self.fixtures.load('attach_volume.json') return (httplib.ACCEPTED, body, {}, httplib.responses[httplib.ACCEPTED]) def _v2_volumes_DETACH(self, method, url, body, headers): body = self.fixtures.load('detach_volume.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_volumes_62766883_2c28_11e6_b8e6_000f53306ae1_DESTROY( self, method, url, body, headers): return (httplib.NO_CONTENT, None, {}, httplib.responses[httplib.NO_CONTENT]) def _v2_volumes_62766883_2c28_11e6_b8e6_000f53306ae1_snapshots_CREATE( self, method, url, body, headers): body = self.fixtures.load('create_volume_snapshot.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _v2_volumes_62766883_2c28_11e6_b8e6_000f53306ae1_snapshots( self, method, url, body, headers): body = self.fixtures.load('list_volume_snapshots.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v2_snapshots_c0def940_9324_11e6_9a56_000f533176b1_DELETE( self, method, url, body, headers): return (httplib.NO_CONTENT, None, {}, httplib.responses[httplib.NO_CONTENT]) def _v2_floating_ips(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load('create_floating_ip.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) elif method == 'GET': body = self.fixtures.load('list_floating_ips.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) else: raise NotImplementedError() def _v2_floating_ips_167_138_123_111(self, method, url, body, headers): if method == 'DELETE': body = '' return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) else: raise NotImplementedError() def _v2_floating_ips_133_166_122_204_actions(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load('attach_floating_ip.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) else: raise NotImplementedError() def _v2_floating_ips_154_138_103_175_actions(self, method, url, body, headers): if method == 'POST': body = self.fixtures.load('detach_floating_ip.json') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) else: raise NotImplementedError()
class CloudSigmaHttp(MockHttp): fixtures = ComputeFileFixtures('cloudsigma') def _drives_standard_info(self, method, url, body, headers): body = self.fixtures.load('drives_standard_info.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_start( self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_stop( self, method, url, body, headers): return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.OK]) def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_destroy( self, method, url, body, headers): return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _drives_d18119ce_7afa_474a_9242_e0384b160220_clone( self, method, url, body, headers): body = self.fixtures.load('drives_clone.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _drives_a814def5_1789_49a0_bf88_7abe7bb1682a_info( self, method, url, body, headers): body = self.fixtures.load('drives_single_info.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _drives_info(self, method, url, body, headers): body = self.fixtures.load('drives_info.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_create(self, method, url, body, headers): body = self.fixtures.load('servers_create.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _servers_info(self, method, url, body, headers): body = self.fixtures.load('servers_info.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _resources_ip_list(self, method, url, body, headers): body = self.fixtures.load('resources_ip_list.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _resources_ip_create(self, method, url, body, headers): body = self.fixtures.load('resources_ip_create.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _resources_ip_1_2_3_4_destroy(self, method, url, body, headers): return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.OK]) def _drives_d18119ce_7afa_474a_9242_e0384b160220_destroy( self, method, url, body, headers): return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.OK]) def _servers_62fe7cde_4fb9_4c63_bd8c_e757930066a0_set( self, method, url, body, headers): body = self.fixtures.load('servers_set.txt') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class AbiquoMockHttp(MockHttpTestCase): """ Mock the functionallity of the remote Abiquo API. """ fixtures = ComputeFileFixtures('abiquo') fixture_tag = 'default' def _api_login(self, method, url, body, headers): if headers['Authorization'] == 'Basic c29uOmdvdGVu': expected_response = self.fixtures.load('unauthorized_user.html') expected_status = httplib.UNAUTHORIZED else: expected_response = self.fixtures.load('login.xml') expected_status = httplib.OK return (expected_status, expected_response, {}, '') def _api_cloud_virtualdatacenters(self, method, url, body, headers): return (httplib.OK, self.fixtures.load('vdcs.xml'), {}, '') def _api_cloud_virtualdatacenters_4(self, method, url, body, headers): return (httplib.OK, self.fixtures.load('vdc_4.xml'), {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances( self, method, url, body, headers): if method == 'POST': vapp_name = ET.XML(body).findtext('name') if vapp_name == 'libcloud_test_group': # we come from 'test_ex_create_and_delete_empty_group(self):' # method and so, we return the 'ok' return response = self.fixtures.load('vdc_4_vapp_creation_ok.xml') return (httplib.OK, response, {}, '') elif vapp_name == 'new_group_name': # we come from 'test_ex_create_and_delete_empty_group(self):' # method and so, we return the 'ok' return response = self.fixtures.load('vdc_4_vapp_creation_ok.xml') return (httplib.OK, response, {}, '') else: # It will be a 'GET'; return (httplib.OK, self.fixtures.load('vdc_4_vapps.xml'), {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_5( self, method, url, body, headers): if method == 'GET': if headers['Authorization'] == 'Basic dmU6Z2V0YQ==': # Try to destroy a group with 'needs_sync' state response = self.fixtures.load('vdc_4_vapp_5_needs_sync.xml') else: # Try to destroy a group with 'undeployed' state response = self.fixtures.load('vdc_4_vapp_5.xml') return (httplib.OK, response, {}, '') else: # it will be a 'DELETE' return (httplib.NO_CONTENT, '', {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6( self, method, url, body, headers): if method == 'GET': # deployed vapp response = self.fixtures.load('vdc_4_vapp_6.xml') return (httplib.OK, response, {}, '') else: # it will be a 'DELETE' return (httplib.NO_CONTENT, '', {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3_tasks_1da8c8b6_86f6_49ef_9d29_57dcc73b875a( self, method, url, body, headers): if headers['Authorization'] == 'Basic bXV0ZW46cm9zaGk=': # User 'muten:roshi' failed task response = self.fixtures.load( 'vdc_4_vapp_6_undeploy_task_failed.xml') else: response = self.fixtures.load('vdc_4_vapp_6_undeploy_task.xml') return (httplib.OK, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_5_virtualmachines( self, method, url, body, headers): # This virtual app never have virtual machines if method == 'GET': response = self.fixtures.load('vdc_4_vapp_5_vms.xml') return (httplib.OK, response, {}, '') elif method == 'POST': # it must be a POST response = self.fixtures.load('vdc_4_vapp_6_vm_creation_ok.xml') return (httplib.CREATED, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines( self, method, url, body, headers): # Default-created virtual app virtual machines' if method == 'GET': if headers['Authorization'] == 'Basic dmU6Z2V0YQ==': response = self.fixtures.load('vdc_4_vapp_6_vms_allocated.xml') else: response = self.fixtures.load('vdc_4_vapp_6_vms.xml') return (httplib.OK, response, {}, '') else: # it must be a POST response = self.fixtures.load('vdc_4_vapp_6_vm_creation_ok.xml') return (httplib.CREATED, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3( self, method, url, body, headers): if (headers['Authorization'] == 'Basic Z286dHJ1bmtz' or headers['Authorization'] == 'Basic bXV0ZW46cm9zaGk='): # Undeploy node response = self.fixtures.load("vdc_4_vapp_6_vm_3_deployed.xml") elif headers['Authorization'] == 'Basic dmU6Z2V0YQ==': # Try to undeploy a node with 'allocation' state response = self.fixtures.load('vdc_4_vapp_6_vm_3_allocated.xml') else: # Get node response = self.fixtures.load('vdc_4_vapp_6_vm_3.xml') return (httplib.OK, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3_action_deploy( self, method, url, body, headers): response = self.fixtures.load('vdc_4_vapp_6_vm_3_deploy.xml') return (httplib.CREATED, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3_tasks_b44fe278_6b0f_4dfb_be81_7c03006a93cb( self, method, url, body, headers): if headers['Authorization'] == 'Basic dGVuOnNoaW4=': # User 'ten:shin' failed task response = self.fixtures.load( 'vdc_4_vapp_6_vm_3_deploy_task_failed.xml') else: response = self.fixtures.load('vdc_4_vapp_6_vm_3_deploy_task.xml') return (httplib.OK, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_action_undeploy( self, method, url, body, headers): response = self.fixtures.load('vdc_4_vapp_6_undeploy.xml') return (httplib.OK, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3_action_reset( self, method, url, body, headers): response = self.fixtures.load('vdc_4_vapp_6_vm_3_reset.xml') return (httplib.CREATED, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3_tasks_a8c9818e_f389_45b7_be2c_3db3a9689940( self, method, url, body, headers): if headers['Authorization'] == 'Basic bXV0ZW46cm9zaGk=': # User 'muten:roshi' failed task response = self.fixtures.load( 'vdc_4_vapp_6_undeploy_task_failed.xml') else: response = self.fixtures.load('vdc_4_vapp_6_vm_3_reset_task.xml') return (httplib.OK, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3_action_undeploy( self, method, url, body, headers): response = self.fixtures.load('vdc_4_vapp_6_vm_3_undeploy.xml') return (httplib.CREATED, response, {}, '') def _api_cloud_virtualdatacenters_4_virtualappliances_6_virtualmachines_3_network_nics( self, method, url, body, headers): response = self.fixtures.load('vdc_4_vapp_6_vm_3_nics.xml') return (httplib.OK, response, {}, '') def _api_admin_datacenters(self, method, url, body, headers): return (httplib.OK, self.fixtures.load('dcs.xml'), {}, '') def _api_admin_enterprises_1(self, method, url, body, headers): return (httplib.OK, self.fixtures.load('ent_1.xml'), {}, '') def _api_admin_enterprises_1_datacenterrepositories( self, method, url, body, headers): # When the user is the common one for all the tests ('son, 'goku') # it creates this basic auth and we return the datacenters value if headers['Authorization'] == 'Basic Z286dHJ1bmtz': expected_response = self.fixtures.load("not_found_error.xml") return (httplib.NOT_FOUND, expected_response, {}, '') elif headers['Authorization'] != 'Basic c29uOmdvaGFu': return (httplib.OK, self.fixtures.load('ent_1_dcreps.xml'), {}, '') else: # son:gohan user: forbidden error expected_response = self.fixtures.load("privilege_errors.html") return (httplib.FORBIDDEN, expected_response, {}, '') def _api_admin_enterprises_1_datacenterrepositories_2( self, method, url, body, headers): return (httplib.OK, self.fixtures.load('ent_1_dcrep_2.xml'), {}, '') def _api_admin_enterprises_1_datacenterrepositories_2_virtualmachinetemplates( self, method, url, body, headers): return (httplib.OK, self.fixtures.load('ent_1_dcrep_2_templates.xml'), {}, '') def _api_admin_enterprises_1_datacenterrepositories_2_virtualmachinetemplates_11( self, method, url, body, headers): return (httplib.OK, self.fixtures.load('ent_1_dcrep_2_template_11.xml'), {}, '')
class OpsourceMockHttp(MockHttp): fixtures = ComputeFileFixtures('opsource') def _oec_0_9_myaccount_UNAUTHORIZED(self, method, url, body, headers): return (httplib.UNAUTHORIZED, "", {}, httplib.responses[httplib.UNAUTHORIZED]) def _oec_0_9_myaccount(self, method, url, body, headers): body = self.fixtures.load('oec_0_9_myaccount.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_myaccount_INPROGRESS(self, method, url, body, headers): body = self.fixtures.load('oec_0_9_myaccount.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_base_image(self, method, url, body, headers): body = self.fixtures.load('oec_0_9_base_image.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deployed( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deployed.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_pendingDeploy( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_pendingDeploy.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_datacenter( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_datacenter.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11( self, method, url, body, headers): body = None action = url.split('?')[-1] if action == 'restart': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_restart.xml' ) elif action == 'shutdown': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_shutdown.xml' ) elif action == 'delete': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_delete.xml' ) elif action == 'start': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_start.xml' ) elif action == 'poweroff': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_poweroff.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_INPROGRESS( self, method, url, body, headers): body = None action = url.split('?')[-1] if action == 'restart': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_restart_INPROGRESS.xml' ) elif action == 'shutdown': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_shutdown_INPROGRESS.xml' ) elif action == 'delete': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_delete_INPROGRESS.xml' ) elif action == 'start': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_start_INPROGRESS.xml' ) elif action == 'poweroff': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_poweroff_INPROGRESS.xml' ) return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server( self, method, url, body, headers): body = self.fixtures.load( '_oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkWithLocation( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkWithLocation.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class ECSMockHttp(MockHttpTestCase): fixtures = ComputeFileFixtures('ecs') def _DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _list_nodes_ex_node_ids_DescribeInstances(self, method, url, body, headers): params = {'InstanceIds': '["i-28n7dkvov", "not-existed-id"]'} self.assertUrlContainsQueryParams(url, params) return self._DescribeInstances(method, url, body, headers) def _list_nodes_ex_filters_DescribeInstances(self, method, url, body, headers): params = {'ZoneId': self.test.zone} self.assertUrlContainsQueryParams(url, params) return self._DescribeInstances(method, url, body, headers) def _DescribeInstanceTypes(self, method, url, body, headers): resp_body = self.fixtures.load('describe_instance_types.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _DescribeRegions(self, method, url, body, headers): resp_body = self.fixtures.load('describe_regions.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_node_CreateInstance(self, method, url, body, headers): params = { 'SecurityGroupId': 'sg-28ou0f3xa', 'Description': 'description', 'InternetChargeType': 'PayByTraffic', 'InternetMaxBandwidthOut': '1', 'InternetMaxBandwidthIn': '200', 'HostName': 'hostname', 'Password': '******', 'IoOptimized': 'true', 'SystemDisk.Category': 'cloud', 'SystemDisk.DiskName': 'root', 'SystemDisk.Description': 'sys', 'VSwitchId': 'vswitch-id1', 'PrivateIpAddress': '1.1.1.2', 'ClientToken': 'client_token' } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('create_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_node_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('create_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_node_StartInstance(self, method, url, body, headers): resp_body = self.fixtures.load('start_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_node_with_data_CreateInstance(self, method, url, body, headers): params = { 'SecurityGroupId': 'sg-28ou0f3xa', 'DataDisk.1.Size': '5', 'DataDisk.1.Category': 'cloud', 'DataDisk.1.DiskName': 'data1', 'DataDisk.1.Description': 'description', 'DataDisk.1.Device': '/dev/xvdb', 'DataDisk.1.DeleteWithInstance': 'true' } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('create_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_node_with_data_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('create_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_node_with_data_StartInstance(self, method, url, body, headers): resp_body = self.fixtures.load('start_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _reboot_node_RebootInstance(self, method, url, body, headers): node_id = self.test.fake_node.id self.assertUrlContainsQueryParams(url, { 'InstanceId': node_id, 'ForceStop': 'false' }) resp_body = self.fixtures.load('reboot_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _reboot_node_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('reboot_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _reboot_node_force_stop_RebootInstance(self, method, url, body, headers): node_id = self.test.fake_node.id self.assertUrlContainsQueryParams(url, { 'InstanceId': node_id, 'ForceStop': 'true' }) resp_body = self.fixtures.load('reboot_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _reboot_node_force_stop_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('reboot_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _destroy_node_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('destroy_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _destroy_node_DeleteInstance(self, method, url, body, headers): node_id = self.test.fake_node.id self.assertUrlContainsQueryParams(url, {'InstanceId': node_id}) resp_body = self.fixtures.load('delete_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _start_node_StartInstance(self, method, url, body, headers): node_id = self.test.fake_node.id self.assertUrlContainsQueryParams(url, {'InstanceId': node_id}) resp_body = self.fixtures.load('start_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _start_node_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('reboot_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _stop_node_StopInstance(self, method, url, body, headers): node_id = self.test.fake_node.id self.assertUrlContainsQueryParams(url, { 'InstanceId': node_id, 'ForceStop': 'false' }) resp_body = self.fixtures.load('stop_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _stop_node_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('stop_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _stop_node_force_stop_StopInstance(self, method, url, body, headers): node_id = self.test.fake_node.id self.assertUrlContainsQueryParams(url, { 'InstanceId': node_id, 'ForceStop': 'true' }) resp_body = self.fixtures.load('stop_instance.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _stop_node_force_stop_DescribeInstances(self, method, url, body, headers): resp_body = self.fixtures.load('stop_node_describe_instances.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _DescribeDisks(self, method, url, body, headers): resp_body = self.fixtures.load('describe_disks.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _list_volumes_ex_volume_ids_DescribeDisks(self, method, url, body, headers): region = self.test.region params = { 'DiskIds': '["i-28n7dkvov", "not-existed-id"]', 'RegionId': region } self.assertUrlContainsQueryParams(url, params) return self._DescribeInstances(method, url, body, headers) def _list_volumes_ex_filters_DescribeDisks(self, method, url, body, headers): params = {'InstanceId': self.test.fake_node.id} self.assertUrlContainsQueryParams(url, params) return self._DescribeDisks(method, url, body, headers) def _DescribeSnapshots(self, method, url, body, headers): region = self.test.region volume_id = self.test.fake_volume.id params = {'RegionId': region, 'DiskId': volume_id} self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('describe_snapshots.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _list_volume_snapshots_ex_snapshot_ids_DescribeSnapshots( self, method, url, body, headers): params = { 'RegionId': self.test.region, 'SnapshotIds': '["fake-snapshot1"]' } self.assertUrlContainsQueryParams(url, params) return self._DescribeSnapshots(method, url, body, headers) def _list_volume_snapshots_ex_filters_DescribeSnapshots( self, method, url, body, headers): params = {'InstanceId': self.test.fake_node.id} self.assertUrlContainsQueryParams(url, params) return self._DescribeSnapshots(method, url, body, headers) def _create_volume_CreateDisk(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'DiskName': self.test.volume_name, 'Size': str(self.test.volume_size), 'ZoneId': self.test.zone, 'SnapshotId': self.test.fake_snapshot.id, 'Description': self.test.description, 'DiskCategory': self.test.disk_category, 'ClientToken': self.test.client_token } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('create_disk.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_volume_DescribeDisks(self, method, url, body, headers): resp_body = self.fixtures.load('create_volume_describe_disks.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_volume_snapshot_CreateSnapshot(self, method, url, body, headers): params = { 'DiskId': self.test.fake_volume.id, 'SnapshotName': self.test.snapshot_name, 'Description': self.test.description, 'ClientToken': self.test.client_token } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('create_snapshot.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _create_volume_snapshot_DescribeSnapshots(self, method, url, body, headers): resp_body = self.fixtures.load('describe_snapshots.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _AttachDisk(self, method, url, body, headers): delete_with_instance = str(self.test.delete_with_instance).lower() params = { 'InstanceId': self.test.fake_node.id, 'DiskId': self.test.fake_volume.id, 'Device': self.test.device, 'DeleteWithInstance': delete_with_instance } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('attach_disk.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _DetachDisk(self, method, url, body, headers): params = { 'DiskId': self.test.fake_volume.id, 'InstanceId': self.test.instance_id } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('detach_disk.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _detach_volume_DescribeDisks(self, method, url, body, headers): params = {'DiskIds': '["' + self.test.fake_volume.id + '"]'} self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('detach_volume_describe_disks.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _detach_volume_DetachDisk(self, method, url, body, headers): params = { 'DiskId': self.test.fake_volume.id, 'InstanceId': 'i-28whl2nj2' } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('detach_disk.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _destroy_volume_DescribeDisks(self, method, url, body, headers): params = {'DiskIds': '["' + self.test.fake_volume.id + '"]'} self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('destroy_volume_describe_disks.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _destroy_volume_DeleteDisk(self, method, url, body, headers): params = {'DiskId': self.test.fake_volume.id} self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('delete_disk.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _destroy_volume_state_DescribeDisks(self, method, url, body, headers): return self._detach_volume_DescribeDisks(method, url, body, headers) def _DeleteSnapshot(self, method, url, body, header): params = {'SnapshotId': self.test.fake_snapshot.id} self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('delete_snapshot.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _DescribeImages(self, method, url, body, headers): params = {'RegionId': self.test.fake_location.id} self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('describe_images.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _list_images_pages_DescribeImages(self, method, url, body, headers): if 'PageNumber=2' in url: resp_body = self.fixtures.load('pages_describe_images_page2.xml') else: resp_body = self.fixtures.load('pages_describe_images.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _list_images_ex_image_ids_DescribeImages(self, method, url, body, headers): params = {'ImageId': self.test.fake_image.id + ',not-existed'} self.assertUrlContainsQueryParams(url, params) return self._DescribeImages(method, url, body, headers) def _list_images_ex_filters_DescribeImages(self, method, url, body, headers): params = {'Status': 'Available'} self.assertUrlContainsQueryParams(url, params) return self._DescribeImages(method, url, body, headers) def _CreateImage(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'ImageName': self.test.image_name, 'Description': self.test.description, 'SnapshotId': self.test.fake_snapshot.id, 'ImageVersion': self.test.image_version, 'ClientToken': self.test.client_token } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('create_image.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _DeleteImage(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'ImageId': self.test.fake_image.id } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('delete_image.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _get_image_DescribeImages(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'ImageId': self.test.fake_image.id } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('describe_images.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _get_image_not_found_DescribeImages(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'ImageId': self.test.fake_image.id } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('get_image_describe_images.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _CopyImage(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'ImageId': self.test.fake_image.id, 'DestinationRegionId': self.test.dest_region, 'DestinationImageName': self.test.image_name, 'DestinationDescription': self.test.description, 'ClientToken': self.test.client_token } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('copy_image.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _copy_image_same_region_CopyImage(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'ImageId': self.test.fake_image.id, 'DestinationRegionId': self.test.region } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('copy_image.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _copy_image_same_region_DescribeImages(self, method, url, body, headers): return self._DescribeImages(method, url, body, headers) def _DescribeSecurityGroups(self, method, url, body, headers): params = {'RegionId': self.test.region} self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('describe_security_groups.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _list_sgs_filters_DescribeSecurityGroups(self, method, url, body, headers): params = {'VpcId': self.test.vpc_id} self.assertUrlContainsQueryParams(url, params) return self._DescribeSecurityGroups(method, url, body, headers) def _create_sg_CreateSecurityGroup(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'Description': 'description', 'ClientToken': 'clientToken' } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('create_security_group.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _delete_sg_by_id_DeleteSecurityGroup(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'SecurityGroupId': 'sg-fakeSecurityGroupId' } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load('delete_security_group_by_id.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _list_sgas_DescribeSecurityGroupAttributes(self, method, url, body, headers): params = { 'RegionId': self.test.region, 'SecurityGroupId': 'sg-fakeSecurityGroupId', 'NicType': 'internet' } self.assertUrlContainsQueryParams(url, params) resp_body = self.fixtures.load( 'describe_security_group_attributes.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK]) def _DescribeZones(self, method, url, body, headers): resp_body = self.fixtures.load('describe_zones.xml') return (httplib.OK, resp_body, {}, httplib.responses[httplib.OK])
class ProfitBricksMockHttp(MockHttp): fixtures = ComputeFileFixtures('profitbricks') def _1_3_clearDataCenter(self, method, url, body, headers): body = self.fixtures.load('ex_clear_datacenter.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_createDataCenter(self, method, url, body, headers): body = self.fixtures.load('ex_create_datacenter.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_deleteDataCenter(self, method, url, body, headers): body = self.fixtures.load('ex_destroy_datacenter.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getDataCenter(self, method, url, body, headers): body = self.fixtures.load('ex_describe_datacenter.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getAllDataCenters(self, method, url, body, headers): body = self.fixtures.load('ex_list_datacenters.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_updateDataCenter(self, method, url, body, headers): body = self.fixtures.load('ex_update_datacenter.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getAllImages(self, method, url, body, headers): body = self.fixtures.load('list_images.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getAllServers(self, method, url, body, headers): body = self.fixtures.load('list_nodes.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_resetServer(self, method, url, body, headers): body = self.fixtures.load('reboot_node.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_stopServer(self, method, url, body, headers): body = self.fixtures.load('ex_stop_node.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_startServer(self, method, url, body, headers): body = self.fixtures.load('ex_start_node.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_deleteServer(self, method, url, body, headers): body = self.fixtures.load('destroy_node.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getAllStorages(self, method, url, body, headers): body = self.fixtures.load('list_volumes.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_createStorage(self, method, url, body, headers): body = self.fixtures.load('create_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_connectStorageToServer(self, method, url, body, headers): body = self.fixtures.load('attach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_disconnectStorageFromServer(self, method, url, body, headers): body = self.fixtures.load('detach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_deleteStorage(self, method, url, body, headers): body = self.fixtures.load('destroy_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_updateStorage(self, method, url, body, headers): body = self.fixtures.load('ex_update_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_updateServer(self, method, url, body, headers): body = self.fixtures.load('ex_update_node.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getNic(self, method, url, body, headers): body = self.fixtures.load('ex_describe_network_interface.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getAllNic(self, method, url, body, headers): body = self.fixtures.load('ex_list_network_interfaces.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_createNic(self, method, url, body, headers): body = self.fixtures.load('ex_list_network_interfaces.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_deleteNic(self, method, url, body, headers): body = self.fixtures.load('ex_destroy_network_interface.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_updateNic(self, method, url, body, headers): body = self.fixtures.load('ex_update_network_interface.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getServer(self, method, url, body, headers): body = self.fixtures.load('ex_describe_node.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_getStorage(self, method, url, body, headers): body = self.fixtures.load('ex_describe_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _1_3_createServer(self, method, url, body, headers): body = self.fixtures.load('create_node.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class LinodeMockHttpV4(MockHttp): fixtures = ComputeFileFixtures('linode_v4') def _v4_regions(self, method, url, body, headers): body = self.fixtures.load('list_locations.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_images(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('list_images.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('create_image.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_images_PAGINATED(self, method, url, body, headers): if 'page=2' not in url: body = self.fixtures.load('list_images_paginated_page_1.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) else: body = self.fixtures.load('list_images_paginated_page_2.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_types(self, method, url, body, headers): body = self.fixtures.load('list_types.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('list_nodes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('create_node.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_NO_IMAGE(self, method, url, body, headers): body = self.fixtures.load('create_node_no_image.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_UNAUTHORIZED(self, method, url, body, headers): body = '{"errors": [{"reason": "Invalid Token"}]}' return (httplib.UNAUTHORIZED, body, {}, httplib.responses[httplib.UNAUTHORIZED]) def _v4_linode_instances_22344420_reboot(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_22344420_boot(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_22344420_boot_ALREADY_BOOTED( self, method, url, body, headers): body = '{"errors": [{"reason": "Linode 22344420 already booted."}]}' return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.BAD_REQUEST]) def _v4_linode_instances_22344420_shutdown(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_22344420(self, method, url, body, headers): if method == 'DELETE': return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'PUT': body = self.fixtures.load('ex_rename_node.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'GET': body = self.fixtures.load('ex_get_node.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_22344420_resize(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_22344420_disks(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('list_disks.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('create_disk.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_22344420_disks_23517413(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_volumes(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('list_volumes.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('create_volume.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_volumes_UNATTACHED(self, method, url, body, headers): body = self.fixtures.load('create_volume_unattached.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_volumes_123456_attach(self, method, url, body, headers): body = self.fixtures.load('attach_volume_to_node.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_volumes_12345_detach(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_volumes_123456(self, method, url, body, headers): if method == 'DELETE': return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'GET': body = self.fixtures.load('ex_get_volume.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_volumes_12345_resize(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_volumes_12345_clone(self, method, url, body, headers): body = self.fixtures.load('clone_volume.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_images_private_12345(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_networking_ips(self, method, url, body, headers): body = self.fixtures.load('list_addresses.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_linode_instances_22344420_ips(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('list_addresses_for_node.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures.load('allocate_private_address.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _v4_networking_ipv4_share(self, method, url, body, headers): return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class OpenStackIdentity_3_0_MockHttp(MockHttp): fixtures = ComputeFileFixtures('openstack_identity/v3') json_content_headers = {'content-type': 'application/json; charset=UTF-8'} def _v3(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_versions.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_domains(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_domains.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_projects(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_projects.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_auth_tokens(self, method, url, body, headers): if method == 'POST': status = httplib.OK data = json.loads(body) if 'password' in data['auth']['identity']: if data['auth']['identity']['password']['user']['domain']['name'] != 'test_domain' or \ data['auth']['scope']['project']['domain']['name'] != 'test_domain': status = httplib.UNAUTHORIZED body = ComputeFileFixtures('openstack').load('_v3__auth.json') headers = self.json_content_headers.copy() headers['x-subject-token'] = '00000000000000000000000000000000' return (status, body, headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_users(self, method, url, body, headers): if method == 'GET': # list users body = self.fixtures.load('v3_users.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) elif method == 'POST': # create user body = self.fixtures.load('v3_create_user.json') return (httplib.CREATED, body, self.json_content_headers, httplib.responses[httplib.CREATED]) raise NotImplementedError() def _v3_users_a(self, method, url, body, headers): if method == 'GET': # look up a user body = self.fixtures.load('v3_users_a.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) if method == 'PATCH': # enable / disable user body = self.fixtures.load('v3_users_a.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_users_b(self, method, url, body, headers): if method == 'GET': # look up a user body = self.fixtures.load('v3_users_b.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_roles(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('v3_roles.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_domains_default_users_a_roles_a(self, method, url, body, headers): if method == 'PUT': # grant domain role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) elif method == 'DELETE': # revoke domain role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) raise NotImplementedError() def _v3_projects_a_users_a_roles_a(self, method, url, body, headers): if method == 'PUT': # grant project role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) elif method == 'DELETE': # revoke project role body = '' return (httplib.NO_CONTENT, body, self.json_content_headers, httplib.responses[httplib.NO_CONTENT]) raise NotImplementedError() def _v3_domains_default(self, method, url, body, headers): if method == 'GET': # get domain body = self.fixtures.load('v3_domains_default.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_users_a_projects(self, method, url, body, headers): if method == 'GET': # get user projects body = self.fixtures.load('v3_users_a_projects.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_domains_default_users_a_roles(self, method, url, body, headers): if method == 'GET': # get user domain roles body = self.fixtures.load('v3_domains_default_users_a_roles.json') return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_OS_FEDERATION_identity_providers_idp_protocols_oidc_auth( self, method, url, body, headers): if method == 'GET': headers = self.json_content_headers.copy() headers['x-subject-token'] = '00000000000000000000000000000000' return (httplib.OK, body, headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_OS_FEDERATION_projects(self, method, url, body, headers): if method == 'GET': # get user projects body = json.dumps({"projects": [{"id": "project_id"}]}) return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError() def _v3_auth_projects(self, method, url, body, headers): if method == 'GET': # get user projects body = json.dumps({"projects": [{"id": "project_id"}]}) return (httplib.OK, body, self.json_content_headers, httplib.responses[httplib.OK]) raise NotImplementedError()
class AzureMockHttp(MockHttp): fixtures = ComputeFileFixtures('azure') def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz1_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz1_deploymentslots_Production.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz1_deployments_dc01(self, method, url, body, headers): return (httplib.ACCEPTED, body, headers, httplib.responses[httplib.ACCEPTED]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz2_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz2_deploymentslots_Production.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz2_deployments_dc03_roles_oddkinz1(self, method, url, body, headers): return (httplib.ACCEPTED, body, headers, httplib.responses[httplib.ACCEPTED]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz2_deployments_dc03_roles_oddkinz2(self, method, url, body, headers): return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz5_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_oddkinz5_deploymentslots_Production.xml') return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest01_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest01_deploymentslots_Production.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest01_deployments_dc03_roleinstances_dc03(self, method, url, body, headers): headers["x-ms-request-id"] = "acc33f6756cda6fd96826394fce4c9f3" return (httplib.ACCEPTED, body, headers, httplib.responses[httplib.ACCEPTED]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest02_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest02_deploymentslots_Production.xml') return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest03_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest03_deploymentslots_Production.xml') return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest01_deployments_dc03_roleinstances_dc13(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest01_deployments_dc03_roleinstances_dc13.xml') return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest01(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest01.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest03(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest03.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest04(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_dcoddkinztest04.xml') return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_images(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_images.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_vmimages(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_vmimages.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_locations(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_locations.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices(self, method, url, body, headers): # request url is the same irrespective of serviceName, only way to differentiate if "<ServiceName>testdc123</ServiceName>" in body: return (httplib.CREATED, body, headers, httplib.responses[httplib.CREATED]) elif "<ServiceName>testdc1234</ServiceName>" in body: return (httplib.CONFLICT, body, headers, httplib.responses[httplib.CONFLICT]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdc123(self, method, url, body, headers): return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_storageservices(self, method, url, body, headers): # request url is the same irrespective of serviceName, only way to differentiate if "<ServiceName>testdss123</ServiceName>" in body: return (httplib.ACCEPTED, body, headers, httplib.responses[httplib.ACCEPTED]) elif "<ServiceName>dss123</ServiceName>" in body: return (httplib.CONFLICT, body, headers, httplib.responses[httplib.CONFLICT]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_storageservices_testdss123(self, method, url, body, headers): return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_storageservices_dss123(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_storageservices_dss123.xml') return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdc1234(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdc1234.xml') return (httplib.NOT_FOUND, body, headers, httplib.responses[httplib.NOT_FOUND]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc_deployments(self, method, url, body, headers): headers["x-ms-request-id"] = "acc33f6756cda6fd96826394fce4c9f3" if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc_deployments.xml') return (httplib.ACCEPTED, body, headers, httplib.responses[httplib.ACCEPTED]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deploymentslots_Production.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deployments(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deployments.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc_deployments_dcoddkinztest02_roles(self, method, url, body, headers): headers["x-ms-request-id"] = "acc33f6756cda6fd96826394fce4c9f3" return (httplib.ACCEPTED, body, headers, httplib.responses[httplib.ACCEPTED]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deployments_dcoddkinztest02_roles(self, method, url, body, headers): headers["x-ms-request-id"] = "acc33f6756cda6fd96826394fce4c9f3" return (httplib.ACCEPTED, body, headers, httplib.responses[httplib.ACCEPTED]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc3(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deploymentslots_Production.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc3_deploymentslots_Production(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deploymentslots_Production.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc3_deployments(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2_deployments.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc3_deployments_dcoddkinztest02_roles(self, method, url, body, headers): redirect_host = "ussouth.management.core.windows.net" if not getattr(AzureMockHttp, "in_redirect", False): setattr(AzureMockHttp, "in_redirect", True) headers["Location"] = url.replace(AZURE_SERVICE_MANAGEMENT_HOST, redirect_host) return (httplib.TEMPORARY_REDIRECT, None, headers, httplib.responses[httplib.TEMPORARY_REDIRECT]) else: delattr(AzureMockHttp, "in_redirect") if redirect_host not in url: if AZURE_SERVICE_MANAGEMENT_HOST in url: return (httplib.TEMPORARY_REDIRECT, None, headers, httplib.responses[httplib.TEMPORARY_REDIRECT]) else: return (httplib.REQUEST_TIMEOUT, None, None, httplib.responses[httplib.REQUEST_TIMEOUT]) if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_services_hostedservices_testdcabc2.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK]) def _3761b98b_673d_526c_8d55_fee918758e6e_operations_acc33f6756cda6fd96826394fce4c9f3(self, method, url, body, headers): if method == "GET": body = self.fixtures.load('_3761b98b_673d_526c_8d55_fee918758e6e_operations_acc33f6756cda6fd96826394fce4c9f3.xml') return (httplib.OK, body, headers, httplib.responses[httplib.OK])
class OpenNebula_3_6_MockHttp(OpenNebula_3_2_MockHttp): """ Mock HTTP server for testing v3.6 of the OpenNebula.org compute driver. """ fixtures_3_6 = ComputeFileFixtures('opennebula_3_6') def _storage(self, method, url, body, headers): if method == 'GET': body = self.fixtures.load('storage_collection.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'POST': body = self.fixtures_3_6.load('storage_5.xml') return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED]) def _compute_5(self, method, url, body, headers): if method == 'GET': body = self.fixtures_3_6.load('compute_5.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'PUT': body = "" return (httplib.ACCEPTED, body, {}, httplib.responses[httplib.ACCEPTED]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _compute_5_action(self, method, url, body, headers): body = self.fixtures_3_6.load('compute_5.xml') if method == 'POST': return (httplib.ACCEPTED, body, {}, httplib.responses[httplib.ACCEPTED]) if method == 'GET': return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _compute_15(self, method, url, body, headers): if method == 'GET': body = self.fixtures_3_6.load('compute_15.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) if method == 'PUT': body = "" return (httplib.ACCEPTED, body, {}, httplib.responses[httplib.ACCEPTED]) if method == 'DELETE': body = "" return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT]) def _storage_10(self, method, url, body, headers): """ Storage entry resource. """ if method == 'GET': body = self.fixtures_3_6.load('disk_10.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _storage_15(self, method, url, body, headers): """ Storage entry resource. """ if method == 'GET': body = self.fixtures_3_6.load('disk_15.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class SoftLayerMockHttp(MockHttp, unittest.TestCase): fixtures = ComputeFileFixtures("softlayer") def _get_method_name(self, type, use_param, qs, path): return "_xmlrpc" def _xmlrpc(self, method, url, body, headers): params, meth_name = xmlrpclib.loads(body) url = url.replace("/", "_") meth_name = "%s_%s" % (url, meth_name) return getattr(self, meth_name)(method, url, body, headers) def _xmlrpc_v3_SoftLayer_Virtual_Guest_getCreateObjectOptions( self, method, url, body, headers): body = self.fixtures.load( "v3__SoftLayer_Virtual_Guest_getCreateObjectOptions.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Account_getVirtualGuests(self, method, url, body, headers): body = self.fixtures.load("v3_SoftLayer_Account_getVirtualGuests.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Location_Datacenter_getDatacenters( self, method, url, body, headers): body = self.fixtures.load( "v3_SoftLayer_Location_Datacenter_getDatacenters.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_createObject( self, method, url, body, headers): fixture = { None: "v3__SoftLayer_Virtual_Guest_createObject.xml", "INVALIDCREDSERROR": "SoftLayer_Account.xml", "SOFTLAYEREXCEPTION": "fail.xml", "HOURLY_BILLING_TRUE": "v3__SoftLayer_Virtual_Guest_createObject.xml", "HOURLY_BILLING_FALSE": "v3__SoftLayer_Virtual_Guest_createObject.xml", }[self.type] if self.type == "HOURLY_BILLING_TRUE": # Verify parameter is sent as a boolean and not as a string expected_value = """ <member> <name>hourlyBillingFlag</name> <value><boolean>1</boolean></value> </member> """.strip() self.assertTrue( expected_value in body, "Request body is missing hourlyBillingFlag attribute", ) elif self.type == "HOURLY_BILLING_FALSE": # Verify parameter is sent as a boolean and not as a string expected_value = """ <member> <name>hourlyBillingFlag</name> <value><boolean>0</boolean></value> </member> """.strip() self.assertTrue( expected_value in body, "Request body is missing hourlyBillingFlag attribute", ) body = self.fixtures.load(fixture) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_getObject(self, method, url, body, headers): body = self.fixtures.load("v3__SoftLayer_Virtual_Guest_getObject.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_rebootSoft(self, method, url, body, headers): body = self.fixtures.load("empty.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Virtual_Guest_deleteObject( self, method, url, body, headers): body = self.fixtures.load("empty.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Account_getSshKeys(self, method, url, body, headers): body = self.fixtures.load("v3__SoftLayer_Account_getSshKeys.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Security_Ssh_Key_getObject( self, method, url, body, headers): body = self.fixtures.load( "v3__SoftLayer_Security_Ssh_Key_getObject.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Security_Ssh_Key_createObject( self, method, url, body, headers): body = self.fixtures.load( "v3__SoftLayer_Security_Ssh_Key_createObject.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _xmlrpc_v3_SoftLayer_Security_Ssh_Key_deleteObject( self, method, url, body, headers): body = self.fixtures.load( "v3__SoftLayer_Security_Ssh_Key_deleteObject.xml") return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class CloudFramesMockHttp(MockHttpTestCase): fixtures = ComputeFileFixtures('cloudframes') content_headers = { 'Server': 'TwistedWeb/9.0.0', 'Date': datetime.datetime.now().ctime(), 'Content-Type': 'text/xml', } def __getattr__(self, key): if key == '_appserver_xmlrpc_http:__host:8888_appserver_xmlrpc': return self._xmlrpc raise AttributeError(key) def _xmlrpc(self, method, url, body, headers): params, methodname = xmlrpclib.loads(body) meth_name = methodname.replace('.', '_').replace('cloud_api_', '') return getattr(self, meth_name)(method, url, params, headers) def _authenticate(self, headers): self.assertTrue('Authorization' in headers.keys()) self.assertTrue(headers['Authorization'].startswith('Basic ')) auth = base64.b64decode( b(headers['Authorization'].split(' ', 1)[1])).decode('ascii') username, password = auth.split(':', 1) self.assertEqual(username, CLOUDFRAMES_PARAMS[0]) self.assertEqual(password, CLOUDFRAMES_PARAMS[1]) def cloudspace_find(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_cloudspace_find.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_find(self, method, url, params, headers): self._authenticate(headers) if params[18]: body = self.fixtures.load('_machine_find_templates.xml') elif params[17] == 'PHYSICAL': body = self.fixtures.load('_machine_find_physical.xml') elif params[17] == 'VIRTUALSERVER': body = self.fixtures.load('_machine_find_virtualserver.xml') elif params[17] == 'VIRTUALDESKTOP': body = self.fixtures.load('_machine_find_virtualdesktop.xml') else: raise Exception( 'unknown machine.find query with params: %s' % params) return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_list(self, method, url, params, headers): self._authenticate(headers) body = None if params[3]: body = self.fixtures.load( '_machine_list_machineguid_%s.xml' % params[3]) if body: return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) else: return (httplib.INTERNAL_SERVER_ERROR, '', self.content_headers, 'Could not parse request') def machine_delete(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_delete.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_stop(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_stop.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_reboot(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_reboot.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_createFromTemplate(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_createFromTemplate.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_start(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_start.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_snapshot(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_snapshot.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_listSnapshots(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_listSnapshots.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def machine_rollback(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_machine_rollback.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK]) def lan_find(self, method, url, params, headers): self._authenticate(headers) body = self.fixtures.load('_lan_find.xml') return (httplib.OK, body, self.content_headers, httplib.responses[httplib.OK])
class DimensionDataMockHttp(MockHttp): fixtures = ComputeFileFixtures('dimensiondata') def _oec_0_9_myaccount_UNAUTHORIZED(self, method, url, body, headers): return (httplib.UNAUTHORIZED, "", {}, httplib.responses[httplib.UNAUTHORIZED]) def _oec_0_9_myaccount(self, method, url, body, headers): body = self.fixtures.load('oec_0_9_myaccount.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_myaccount_INPROGRESS(self, method, url, body, headers): body = self.fixtures.load('oec_0_9_myaccount.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_base_image(self, method, url, body, headers): body = self.fixtures.load('oec_0_9_base_image.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_base_imageWithDiskSpeed(self, method, url, body, headers): body = self.fixtures.load('oec_0_9_base_imageWithDiskSpeed.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deployed( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deployed.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_pendingDeploy( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_pendingDeploy.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_datacenter( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_datacenter.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11( self, method, url, body, headers): body = None action = url.split('?')[-1] if action == 'restart': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_restart.xml' ) elif action == 'shutdown': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_shutdown.xml' ) elif action == 'delete': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_delete.xml' ) elif action == 'start': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_start.xml' ) elif action == 'poweroff': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_poweroff.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_INPROGRESS( self, method, url, body, headers): body = None action = url.split('?')[-1] if action == 'restart': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_restart_INPROGRESS.xml' ) elif action == 'shutdown': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_shutdown_INPROGRESS.xml' ) elif action == 'delete': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_delete_INPROGRESS.xml' ) elif action == 'start': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_start_INPROGRESS.xml' ) elif action == 'poweroff': body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_11_poweroff_INPROGRESS.xml' ) return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server( self, method, url, body, headers): body = self.fixtures.load( '_oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkWithLocation( self, method, url, body, headers): if method is "POST": request = ET.fromstring(body) if request.tag != "{http://oec.api.opsource.net/schemas/network}NewNetworkWithLocation": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkWithLocation.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_4bba37be_506f_11e3_b29c_001517c4643e( self, method, url, body, headers): body = self.fixtures.load( 'oec_0_9_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_4bba37be_506f_11e3_b29c_001517c4643e.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deleteServer( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deleteServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deleteServer.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deleteServer_INPROGRESS( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deleteServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deleteServer_RESOURCEBUSY.xml' ) return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_rebootServer( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}rebootServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_rebootServer.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_rebootServer_INPROGRESS( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}rebootServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_rebootServer_RESOURCEBUSY.xml' ) return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_server( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_server.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_infrastructure_datacenter( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_infrastructure_datacenter.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_startServer( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}startServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_startServer.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_startServer_INPROGRESS( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}startServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_startServer_INPROGRESS.xml' ) return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_shutdownServer( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}shutdownServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_shutdownServer.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_shutdownServer_INPROGRESS( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}shutdownServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_shutdownServer_INPROGRESS.xml' ) return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_resetServer( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}resetServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_resetServer.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_powerOffServer( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}powerOffServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_powerOffServer.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_powerOffServer_INPROGRESS( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}powerOffServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_powerOffServer_INPROGRESS.xml' ) return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_networkDomain( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_networkDomain.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_vlan( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_vlan.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deployServer( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deployServer": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_deployServer.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_server_e75ead52_692f_4314_8725_c8a4f4d13a87( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_server_e75ead52_692f_4314_8725_c8a4f4d13a87.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deployNetworkDomain( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deployNetworkDomain": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deployNetworkDomain.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_networkDomain_8cdfd607_f429_4df6_9352_162cfc0891be( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_networkDomain_8cdfd607_f429_4df6_9352_162cfc0891be.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editNetworkDomain( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}editNetworkDomain": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editNetworkDomain.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteNetworkDomain( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deleteNetworkDomain": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteNetworkDomain.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deployVlan( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deployVlan": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deployVlan.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_vlan_0e56433f_d808_4669_821d_812769517ff8( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_vlan_0e56433f_d808_4669_821d_812769517ff8.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editVlan( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}editVlan": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editVlan.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteVlan( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deleteVlan": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteVlan.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_expandVlan( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}expandVlan": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_expandVlan.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_addPublicIpBlock( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}addPublicIpBlock": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_addPublicIpBlock.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_publicIpBlock_4487241a_f0ca_11e3_9315_d4bed9b167ba( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_publicIpBlock_4487241a_f0ca_11e3_9315_d4bed9b167ba.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_publicIpBlock( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_publicIpBlock.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_publicIpBlock_9945dc4a_bdce_11e4_8c14_b8ca3a5d9ef8( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_publicIpBlock_9945dc4a_bdce_11e4_8c14_b8ca3a5d9ef8.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_removePublicIpBlock( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}removePublicIpBlock": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_removePublicIpBlock.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_createFirewallRule( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}createFirewallRule": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_createFirewallRule.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule_d0a20f59_77b9_4f28_a63b_e58496b73a6c( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_firewallRule_d0a20f59_77b9_4f28_a63b_e58496b73a6c.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editFirewallRule( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}editFirewallRule": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editFirewallRule.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteFirewallRule( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deleteFirewallRule": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteFirewallRule.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_createNatRule( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}createNatRule": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_createNatRule.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_natRule( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_natRule.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_natRule_2187a636_7ebb_49a1_a2ff_5d617f496dce( self, method, url, body, headers): body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_natRule_2187a636_7ebb_49a1_a2ff_5d617f496dce.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteNatRule( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}deleteNatRule": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteNatRule.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_addNic( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}addNic": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_addNic.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_removeNic( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}removeNic": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_removeNic.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_disableServerMonitoring( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}disableServerMonitoring": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_disableServerMonitoring.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_enableServerMonitoring( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}enableServerMonitoring": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_enableServerMonitoring.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_changeServerMonitoringPlan( self, method, url, body, headers): request = ET.fromstring(body) if request.tag != "{urn:didata.com:api:cloud:types}changeServerMonitoringPlan": raise InvalidRequestError(request.tag) body = self.fixtures.load( 'caas_2_0_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_changeServerMonitoringPlan.xml' ) return (httplib.OK, body, {}, httplib.responses[httplib.OK])
class EC2MockHttp(MockHttpTestCase): fixtures = ComputeFileFixtures('ec2') def _DescribeInstances(self, method, url, body, headers): body = self.fixtures.load('describe_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _WITH_TAGS_DescribeInstances(self, method, url, body, headers): body = self.fixtures.load('describe_instances_with_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeAvailabilityZones(self, method, url, body, headers): body = self.fixtures.load('describe_availability_zones.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _RebootInstances(self, method, url, body, headers): body = self.fixtures.load('reboot_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _StartInstances(self, method, url, body, headers): body = self.fixtures.load('start_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _StopInstances(self, method, url, body, headers): body = self.fixtures.load('stop_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeSecurityGroups(self, method, url, body, headers): body = self.fixtures.load('describe_security_groups.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _AuthorizeSecurityGroupIngress(self, method, url, body, headers): body = self.fixtures.load('authorize_security_group_ingress.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeImages(self, method, url, body, headers): body = self.fixtures.load('describe_images.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _RunInstances(self, method, url, body, headers): body = self.fixtures.load('run_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _ex_security_groups_RunInstances(self, method, url, body, headers): params = dict(parse_qsl(url)) self.assertEqual(params['SecurityGroup.1'], 'group1') self.assertEqual(params['SecurityGroup.1'], 'group1') 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') body = self.fixtures.load('run_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _idempotent_RunInstances(self, method, url, body, headers): body = self.fixtures.load('run_instances_idem.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _idempotent_mismatch_RunInstances(self, method, url, body, headers): body = self.fixtures.load('run_instances_idem_mismatch.xml') return (httplib.BAD_REQUEST, body, {}, httplib.responses[httplib.BAD_REQUEST]) def _TerminateInstances(self, method, url, body, headers): body = self.fixtures.load('terminate_instances.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeKeyPairs(self, method, url, body, headers): body = self.fixtures.load('describe_key_pairs.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _ImportKeyPair(self, method, url, body, headers): body = self.fixtures.load('import_key_pair.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeTags(self, method, url, body, headers): body = self.fixtures.load('describe_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _CreateTags(self, method, url, body, headers): body = self.fixtures.load('create_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DeleteTags(self, method, url, body, headers): body = self.fixtures.load('delete_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DescribeAddresses(self, method, url, body, headers): body = self.fixtures.load('describe_addresses_multi.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _AssociateAddress(self, method, url, body, headers): body = self.fixtures.load('associate_address.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _all_addresses_DescribeAddresses(self, method, url, body, headers): body = self.fixtures.load('describe_addresses_all.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _WITH_TAGS_DescribeAddresses(self, method, url, body, headers): body = self.fixtures.load('describe_addresses_multi.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _ModifyInstanceAttribute(self, method, url, body, headers): body = self.fixtures.load('modify_instance_attribute.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _idempotent_CreateTags(self, method, url, body, headers): body = self.fixtures.load('create_tags.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _CreateVolume(self, method, url, body, headers): body = self.fixtures.load('create_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DeleteVolume(self, method, url, body, headers): body = self.fixtures.load('delete_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _AttachVolume(self, method, url, body, headers): body = self.fixtures.load('attach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _DetachVolume(self, method, url, body, headers): body = self.fixtures.load('detach_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK])