예제 #1
0
 def setUp(self):
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures('rackspace')
     self.headers = {'x-auth-user': '******', 'x-api-key': 'key'}
     self.url_tmpl = rest_versions[libcloud.__version__] +\
         '/compute/RACKSPACE/%s?test=1'
     OpenStackMockHttp.type = None
예제 #2
0
class RackspaceTests(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('rackspace')
        self.headers = {'x-auth-user': '******', 'x-api-key': 'key'}
        self.url_tmpl = rest_versions[libcloud.__version__] +\
            '/compute/RACKSPACE/%s?test=1'
        OpenStackMockHttp.type = None

    def test_create_node(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        node = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.CREATED)
        self.assertEqual(resp.headers.get('Location'), '72258')
        self.assertEqual(node['name'], 'racktest')

    def test_create_node_ex_shared_ip_group(self):
        OpenStackMockHttp.type = 'EX_SHARED_IP_GROUP'
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_shared_ip.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        node = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.CREATED)
        self.assertEqual(resp.headers.get('Location'), '72258')
        self.assertEqual(node['name'], 'racktest')
예제 #3
0
class RackspaceTests(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('rackspace')
        self.headers = {'x-auth-user': '******', 'x-api-key': 'key'}
        self.url_tmpl = rest_versions[libcloud.__version__] +\
            '/compute/RACKSPACE/%s?test=1'
        OpenStackMockHttp.type = None

    def test_create_node(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        node = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.CREATED)
        self.assertEqual(resp.headers.get('Location'), '72258')
        self.assertEqual(node['name'], 'racktest')

    def test_create_node_ex_shared_ip_group(self):
        OpenStackMockHttp.type = 'EX_SHARED_IP_GROUP'
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_shared_ip.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        node = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.CREATED)
        self.assertEqual(resp.headers.get('Location'), '72258')
        self.assertEqual(node['name'], 'racktest')
예제 #4
0
 def setUp(self):
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures('rackspace')
     self.headers = {'x-auth-user': '******', 'x-api-key': 'key'}
     self.url_tmpl = rest_versions[libcloud.__version__] +\
         '/compute/RACKSPACE/%s?test=1'
     OpenStackMockHttp.type = None
예제 #5
0
class CloudstackTests(unittest2.TestCase):
    def setUp(self):
        self.url_tmpl = rest_versions[libcloud.__version__] +\
                        '/compute/cloudstack/%s?test=1'
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('cloudstack')

    def test_list_nodes(self):
        url = self.url_tmpl % 'nodes'
        headers = {
            'x-auth-user': '******',
            'x-api-key': 'secret',
            'x-provider-path': '/test/path',
            'x-provider-host': 'api.dummy.com'
        }
        resp = self.client.get(url, headers=headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_nodes.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp_data, test_data)

    def test_bad_headers(self):
        url = self.url_tmpl % 'nodes'
        headers = {'x-auth-user': '******'}
        resp = self.client.get(url, headers=headers)
        self.assertEqual(resp.status_code, 400)
예제 #6
0
class ComputeTest(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures()

    def test_list_providers(self):
        url = rest_versions[libcloud.__version__] + '/compute/providers'
        resp = self.client.get(url)
        data = json.loads(self.fixtures.load('providers.json'))
        data_json = json.dumps(data)
        resp_data = json.dumps(json.loads(resp.data))
        self.assertItemsEqual(data_json, resp_data)
        self.assertEqual(resp.status_code, 200)
예제 #7
0
class ComputeTest(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures()

    def test_list_providers(self):
        url = rest_versions[libcloud.__version__] + '/compute/providers'
        resp = self.client.get(url)
        data = json.loads(self.fixtures.load('providers.json'))
        data_json = json.dumps(data)
        resp_data = json.dumps(json.loads(resp.data))
        self.assertItemsEqual(data_json, resp_data)
        self.assertEqual(resp.status_code, 200)
예제 #8
0
class CloudstackTests(unittest2.TestCase):
    def setUp(self):
        self.url_tmpl = rest_versions[libcloud.__version__] +\
                        '/compute/cloudstack/%s?test=1'
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('cloudstack')

    def test_list_nodes(self):
        url = self.url_tmpl % 'nodes'
        headers = {'x-auth-user': '******', 'x-api-key': 'secret',
                   'x-provider-path': '/test/path',
                   'x-provider-host': 'api.dummy.com'}
        resp = self.client.get(url, headers=headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_nodes.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp_data, test_data)

    def test_bad_headers(self):
        url = self.url_tmpl % 'nodes'
        headers = {'x-auth-user': '******'}
        resp = self.client.get(url, headers=headers)
        self.assertEqual(resp.status_code, 400)
예제 #9
0
 def setUp(self):
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures('gogrid')
     self.headers = {'x-auth-user': '******', 'x-api-key': 'b'}
     self.url_tmpl = rest_versions[libcloud.__version__] +\
         '/compute/gogrid/%s?test=1'
예제 #10
0
class GoGridTests(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('gogrid')
        self.headers = {'x-auth-user': '******', 'x-api-key': 'b'}
        self.url_tmpl = rest_versions[libcloud.__version__] +\
            '/compute/gogrid/%s?test=1'

    def test_bad_headers(self):
        url = self.url_tmpl % ('nodes')
        headers = {'key': 1, 'x-auth-user': 2}
        resp = self.client.get(url, headers=headers)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)

    def test_extra_headers(self):
        url = self.url_tmpl % ('nodes')
        headers = {'x-auth-user': 1, 'x-api-key': 2, 'x-dummy-creds': 3}
        resp = self.client.get(url, headers=headers)
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.OK)

    def test_list_nodes(self):
        url = self.url_tmpl % ('nodes')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_nodes.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_sizes(self):
        url = self.url_tmpl % ('sizes')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_sizes.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_images(self):
        url = self.url_tmpl % ('images')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_images.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)
        location_id = 'gogrid/GSI-939ef909-84b8-4a2f-ad56-02ccd7da05ff.img'
        url = rest_versions[libcloud.__version__] + '/compute/gogrid/images'
        resp = self.client.get(url,
                               headers=self.headers,
                               query_string={
                                   'location_id': location_id,
                                   'test': 1
                               })
        self.assertEqual(resp.status_code, httplib.OK)
        images = json.loads(resp.data)
        image = images[0]
        self.assertEqual(len(images), 4)
        self.assertEqual(image['name'], 'CentOS 5.3 (32-bit) w/ None')
        self.assertEqual(image['id'], '1531')

    def test_list_locations(self):
        url = self.url_tmpl % ('locations')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_locations.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)

    def test_create_node(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        self.assertEqual(resp.status_code, httplib.CREATED)
        self.assertEqual(resp.headers.get('Location'), '90967')
        node = json.loads(resp.data)
        self.assertEqual(node['name'], 'test1')
        self.assertTrue(node['id'] is not None)

    def test_create_node_not_successful(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request_invalid.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_malformed_json(self):
        url = self.url_tmpl % ('nodes')
        resp = self.client.post(url,
                                headers=self.headers,
                                data="",
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], MalformedJSONError.code)

    def test_bad_content_type(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/xml')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_bad_content_length(self):
        url = self.url_tmpl % ('nodes')
        content = os.urandom(1000)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=content,
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_reboot_node(self):
        node_id = 90967
        url = self.url_tmpl % ('/'.join(['nodes', str(node_id), 'reboot']))
        resp = self.client.put(url,
                               headers=self.headers,
                               content_type='application/json')
        self.assertEqual(resp.status_code, httplib.ACCEPTED)

    def test_reboot_node_not_successful(self):
        GoGridMockHttp.type = 'FAIL'
        node_id = 90967
        url = self.url_tmpl % ('/'.join(['nodes', str(node_id), 'reboot']))
        resp = self.client.put(url,
                               headers=self.headers,
                               content_type='application/json')
        self.assertEqual(resp.status_code, httplib.INTERNAL_SERVER_ERROR)

    def test_destroy_node(self):
        node_id = 90967
        url = self.url_tmpl % ('/'.join(['nodes', str(node_id)]))
        resp = self.client.delete(url, headers=self.headers)
        self.assertEqual(resp.status_code, httplib.ACCEPTED)

    def test_ex_save_image(self):
        url = self.url_tmpl % ('nodes')
        resp = self.client.get(url, headers=self.headers)
        node = json.loads(resp.data)[0]
        url = self.url_tmpl % 'ex_save_image'
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps({
                                    'node_id': node['id'],
                                    'name': 'testimage'
                                }),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertEqual(resp_data['name'], 'testimage')

    def test_bad_extension_method(self):
        url = self.url_tmpl % 'list_nodes'
        resp = self.client.post(url,
                                headers=self.headers,
                                content_type='application/json')
        result = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(result['error']['code'], NoSuchOperationError.code)
        url = self.url_tmpl % 'ex_list_nodes'
        resp = self.client.post(url,
                                headers=self.headers,
                                content_type='application/json')
        result = json.loads(resp.data)
        print result
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(result['error']['code'], NoSuchOperationError.code)
예제 #11
0
 def setUp(self):
     self.url_tmpl = rest_versions[libcloud.__version__] +\
                     '/compute/cloudstack/%s?test=1'
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures('cloudstack')
예제 #12
0
 def setUp(self):
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures('gogrid')
     self.headers = {'x-auth-user': '******', 'x-api-key': 'b'}
     self.url_tmpl = rest_versions[libcloud.__version__] +\
                     '/compute/gogrid/%s?test=1'
예제 #13
0
class GoGridTests(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('gogrid')
        self.headers = {'x-auth-user': '******', 'x-api-key': 'b'}
        self.url_tmpl = rest_versions[libcloud.__version__] +\
                        '/compute/gogrid/%s?test=1'

    def test_bad_headers(self):
        url = self.url_tmpl % 'nodes'
        headers = {'abs': 1, 'def': 2}
        resp = self.client.get(url, headers=headers)
        self.assertEqual(resp.status_code, 400)

    def test_bad_extra_headers(self):
        url = self.url_tmpl % 'nodes'
        headers = {'x-auth-user': 1, 'x-api-key': 2, 'x-dummy-creds': 3}
        resp = self.client.get(url, headers=headers)
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], UnknownHeadersError.code)

    def test_list_nodes(self):
        url = self.url_tmpl % 'nodes'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_nodes.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_sizes(self):
        url = self.url_tmpl % 'sizes'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_sizes.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_images(self):
        url = self.url_tmpl % 'images'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_images.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_locations(self):
        url = self.url_tmpl % 'locations'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_locations.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_create_node(self):
        url = self.url_tmpl % 'nodes'
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 201)
        self.assertEqual(resp_data['name'], test_request_json['name'])
        self.assertTrue(resp_data['id'] is not None)

    def test_create_node_not_successful(self):
        url = self.url_tmpl % 'nodes'
        test_request = self.fixtures.load('create_node_request_invalid.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_malformed_json(self):
        url = self.url_tmpl % 'nodes'
        resp = self.client.post(url, headers=self.headers,
                                data="",
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], MalformedJSONError.code)

    def test_bad_content_type(self):
        url = self.url_tmpl % 'nodes'
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/xml')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_bad_content_length(self):
        url = self.url_tmpl % 'nodes'
        content = os.urandom(1000)
        resp = self.client.post(url, headers=self.headers,
                                data=content,
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_reboot_node(self):
        node_id = 90967
        url = self.url_tmpl % '/'.join(['nodes', str(node_id), 'reboot'])
        resp = self.client.post(url, headers=self.headers,
                                content_type='application/json')
        self.assertEqual(resp.status_code, 200)

    def test_reboot_node_not_successful(self):
        GoGridMockHttp.type = 'FAIL'
        node_id = 90967
        url = self.url_tmpl % '/'.join(['nodes', str(node_id), 'reboot'])
        resp = self.client.post(url, headers=self.headers,
                                content_type='application/json')
        self.assertEqual(resp.status_code, 500)

    def test_destroy_node(self):
        node_id = 90967
        url = self.url_tmpl % '/'.join(['nodes', str(node_id)])
        resp = self.client.delete(url, headers=self.headers)
        self.assertEqual(resp.status_code, 204)
예제 #14
0
 def setUp(self):
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures()
예제 #15
0
class GoGridTests(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('gogrid')
        self.headers = {'x-auth-user': '******', 'x-api-key': 'b'}
        self.url_tmpl = rest_versions[libcloud.__version__] +\
                        '/compute/gogrid/%s?test=1'

    def test_bad_headers(self):
        url = self.url_tmpl % 'nodes'
        headers = {'abs': 1, 'def': 2}
        resp = self.client.get(url, headers=headers)
        self.assertEqual(resp.status_code, 400)

    def test_bad_extra_headers(self):
        url = self.url_tmpl % 'nodes'
        headers = {'x-auth-user': 1, 'x-api-key': 2, 'x-dummy-creds': 3}
        resp = self.client.get(url, headers=headers)
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], UnknownHeadersError.code)

    def test_list_nodes(self):
        url = self.url_tmpl % 'nodes'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_nodes.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_sizes(self):
        url = self.url_tmpl % 'sizes'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_sizes.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_images(self):
        url = self.url_tmpl % 'images'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_images.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_locations(self):
        url = self.url_tmpl % 'locations'
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_locations.json'))
        self.assertEqual(resp.status_code, 200)
        self.assertItemsEqual(resp_data, test_data)

    def test_create_node(self):
        url = self.url_tmpl % 'nodes'
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 201)
        self.assertEqual(resp_data['name'], test_request_json['name'])
        self.assertTrue(resp_data['id'] is not None)

    def test_create_node_not_successful(self):
        url = self.url_tmpl % 'nodes'
        test_request = self.fixtures.load('create_node_request_invalid.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_malformed_json(self):
        url = self.url_tmpl % 'nodes'
        resp = self.client.post(url,
                                headers=self.headers,
                                data="",
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], MalformedJSONError.code)

    def test_bad_content_type(self):
        url = self.url_tmpl % 'nodes'
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/xml')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_bad_content_length(self):
        url = self.url_tmpl % 'nodes'
        content = os.urandom(1000)
        resp = self.client.post(url,
                                headers=self.headers,
                                data=content,
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, 400)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_reboot_node(self):
        node_id = 90967
        url = self.url_tmpl % '/'.join(['nodes', str(node_id), 'reboot'])
        resp = self.client.post(url,
                                headers=self.headers,
                                content_type='application/json')
        self.assertEqual(resp.status_code, 200)

    def test_reboot_node_not_successful(self):
        GoGridMockHttp.type = 'FAIL'
        node_id = 90967
        url = self.url_tmpl % '/'.join(['nodes', str(node_id), 'reboot'])
        resp = self.client.post(url,
                                headers=self.headers,
                                content_type='application/json')
        self.assertEqual(resp.status_code, 500)

    def test_destroy_node(self):
        node_id = 90967
        url = self.url_tmpl % '/'.join(['nodes', str(node_id)])
        resp = self.client.delete(url, headers=self.headers)
        self.assertEqual(resp.status_code, 204)
class GoGridTests(unittest2.TestCase):
    def setUp(self):
        self.client = Client(LibcloudRestApp(), BaseResponse)
        self.fixtures = ComputeFixtures('gogrid')
        self.headers = {'x-auth-user': '******', 'x-api-key': 'b'}
        self.url_tmpl = rest_versions[libcloud.__version__] +\
            '/compute/gogrid/%s?test=1'

    def test_bad_headers(self):
        url = self.url_tmpl % ('nodes')
        headers = {'key': 1, 'x-auth-user': 2}
        resp = self.client.get(url, headers=headers)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)

    def test_extra_headers(self):
        url = self.url_tmpl % ('nodes')
        headers = {'x-auth-user': 1, 'x-api-key': 2, 'x-dummy-creds': 3}
        resp = self.client.get(url, headers=headers)
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.OK)

    def test_list_nodes(self):
        url = self.url_tmpl % ('nodes')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_nodes.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_sizes(self):
        url = self.url_tmpl % ('sizes')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_sizes.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)

    def test_list_images(self):
        url = self.url_tmpl % ('images')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_images.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)
        location_id = 'gogrid/GSI-939ef909-84b8-4a2f-ad56-02ccd7da05ff.img'
        url = rest_versions[libcloud.__version__] + '/compute/gogrid/images'
        resp = self.client.get(url, headers=self.headers,
                               query_string={'location_id': location_id,
                                             'test': 1})
        self.assertEqual(resp.status_code, httplib.OK)
        images = json.loads(resp.data)
        image = images[0]
        self.assertEqual(len(images), 4)
        self.assertEqual(image['name'], 'CentOS 5.3 (32-bit) w/ None')
        self.assertEqual(image['id'], '1531')

    def test_list_locations(self):
        url = self.url_tmpl % ('locations')
        resp = self.client.get(url, headers=self.headers)
        resp_data = json.loads(resp.data)
        test_data = json.loads(self.fixtures.load('list_locations.json'))
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertItemsEqual(resp_data, test_data)

    def test_create_node(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        self.assertEqual(resp.status_code, httplib.CREATED)
        self.assertEqual(resp.headers.get('Location'), '90967')
        node = json.loads(resp.data)
        self.assertEqual(node['name'], 'test1')
        self.assertTrue(node['id'] is not None)

    def test_create_node_not_successful(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request_invalid.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_malformed_json(self):
        url = self.url_tmpl % ('nodes')
        resp = self.client.post(url, headers=self.headers,
                                data="",
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], MalformedJSONError.code)

    def test_bad_content_type(self):
        url = self.url_tmpl % ('nodes')
        test_request = self.fixtures.load('create_node_request.json')
        test_request_json = json.loads(test_request)
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps(test_request_json),
                                content_type='application/xml')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_bad_content_length(self):
        url = self.url_tmpl % ('nodes')
        content = os.urandom(1000)
        resp = self.client.post(url, headers=self.headers,
                                data=content,
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(resp_data['error']['code'], ValidationError.code)

    def test_reboot_node(self):
        node_id = 90967
        url = self.url_tmpl % ('/'.join(['nodes', str(node_id), 'reboot']))
        resp = self.client.put(url, headers=self.headers,
                               content_type='application/json')
        self.assertEqual(resp.status_code, httplib.ACCEPTED)

    def test_reboot_node_not_successful(self):
        GoGridMockHttp.type = 'FAIL'
        node_id = 90967
        url = self.url_tmpl % ('/'.join(['nodes', str(node_id), 'reboot']))
        resp = self.client.put(url, headers=self.headers,
                               content_type='application/json')
        self.assertEqual(resp.status_code, httplib.INTERNAL_SERVER_ERROR)

    def test_destroy_node(self):
        node_id = 90967
        url = self.url_tmpl % ('/'.join(['nodes', str(node_id)]))
        resp = self.client.delete(url, headers=self.headers)
        self.assertEqual(resp.status_code, httplib.ACCEPTED)

    def test_ex_save_image(self):
        url = self.url_tmpl % ('nodes')
        resp = self.client.get(url, headers=self.headers)
        node = json.loads(resp.data)[0]
        url = self.url_tmpl % 'ex_save_image'
        resp = self.client.post(url, headers=self.headers,
                                data=json.dumps({'node_id': node['id'],
                                                 'name': 'testimage'}),
                                content_type='application/json')
        resp_data = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.OK)
        self.assertEqual(resp_data['name'], 'testimage')

    def test_bad_extension_method(self):
        url = self.url_tmpl % 'list_nodes'
        resp = self.client.post(url, headers=self.headers,
                                content_type='application/json')
        result = json.loads(resp.data)
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(result['error']['code'],
                         NoSuchOperationError.code)
        url = self.url_tmpl % 'ex_list_nodes'
        resp = self.client.post(url, headers=self.headers,
                                content_type='application/json')
        result = json.loads(resp.data)
        print result
        self.assertEqual(resp.status_code, httplib.BAD_REQUEST)
        self.assertEqual(result['error']['code'],
                         NoSuchOperationError.code)
예제 #17
0
 def setUp(self):
     self.url_tmpl = rest_versions[libcloud.__version__] +\
                     '/compute/cloudstack/%s?test=1'
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures('cloudstack')
예제 #18
0
 def setUp(self):
     self.client = Client(LibcloudRestApp(), BaseResponse)
     self.fixtures = ComputeFixtures()