From 54be28647ac3ad401006bca3069b1dfc1a65d093 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 12 Jul 2011 14:35:09 -0400 Subject: server create deserialization functional and tested --- nova/tests/api/openstack/test_servers.py | 414 +++++++++++++++++++++++++++---- 1 file changed, 369 insertions(+), 45 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index 775f66ad0..cb7e03934 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -612,7 +612,7 @@ class ServersTest(test.TestCase): "_get_kernel_ramdisk_from_image", kernel_ramdisk_mapping) self.stubs.Set(nova.compute.api.API, "_find_host", find_host) - def _test_create_instance_helper(self): + def test_create_instance(self): self._setup_for_create_instance() body = dict(server=dict( @@ -626,6 +626,7 @@ class ServersTest(test.TestCase): res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 200) server = json.loads(res.body)['server'] self.assertEqual(16, len(server['adminPass'])) self.assertEqual('server_test', server['name']) @@ -633,10 +634,6 @@ class ServersTest(test.TestCase): self.assertEqual(2, server['flavorId']) self.assertEqual(3, server['imageId']) self.assertEqual(FAKE_UUID, server['uuid']) - self.assertEqual(res.status_int, 200) - - def test_create_instance(self): - self._test_create_instance_helper() def test_create_instance_has_uuid(self): """Tests at the db-layer instead of API layer since that's where the @@ -692,7 +689,27 @@ class ServersTest(test.TestCase): def test_create_instance_no_key_pair(self): fakes.stub_out_key_pair_funcs(self.stubs, have_key_pair=False) - self._test_create_instance_helper() + self._setup_for_create_instance() + + body = dict(server=dict( + name='server_test', imageId=3, flavorId=2, + metadata={'hello': 'world', 'open': 'stack'}, + personality={})) + req = webob.Request.blank('/v1.0/servers') + req.method = 'POST' + req.body = json.dumps(body) + req.headers["content-type"] = "application/json" + + res = req.get_response(fakes.wsgi_app()) + + server = json.loads(res.body)['server'] + self.assertEqual(16, len(server['adminPass'])) + self.assertEqual('server_test', server['name']) + self.assertEqual(1, server['id']) + self.assertEqual(2, server['flavorId']) + self.assertEqual(3, server['imageId']) + self.assertEqual(FAKE_UUID, server['uuid']) + self.assertEqual(res.status_int, 200) def test_create_instance_no_name(self): self._setup_for_create_instance() @@ -765,18 +782,34 @@ class ServersTest(test.TestCase): def test_create_instance_v1_1(self): self._setup_for_create_instance() - image_href = 'http://localhost/v1.1/images/2' - flavor_ref = 'http://localhost/v1.1/flavors/3' + image_href = 'http://localhost/v1.1/images/3' + flavor_href = 'http://localhost/v1.1/flavors/2' + body = { 'server': { 'name': 'server_test', - 'imageRef': image_href, - 'flavorRef': flavor_ref, + 'image': { + 'id': 3, + 'links': [ + {'rel': 'bookmark', 'href': image_href}, + ], + }, + 'flavor': { + 'id': 2, + 'links': [ + {'rel': 'bookmark', 'href': flavor_href}, + ], + }, 'metadata': { 'hello': 'world', 'open': 'stack', }, - 'personality': {}, + 'personality': [ + { + "path" : "/etc/banner.txt", + "contents" : "MQ==", + }, + ], }, } @@ -787,40 +820,102 @@ class ServersTest(test.TestCase): res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 200) server = json.loads(res.body)['server'] self.assertEqual(16, len(server['adminPass'])) self.assertEqual('server_test', server['name']) self.assertEqual(1, server['id']) - self.assertEqual(flavor_ref, server['flavorRef']) + self.assertEqual(flavor_href, server['flavorRef']) self.assertEqual(image_href, server['imageRef']) - self.assertEqual(res.status_int, 200) + self.assertFalse('personality' in server) - def test_create_instance_v1_1_bad_href(self): + def test_create_instance_v1_1_image_id(self): self._setup_for_create_instance() - image_href = 'http://localhost/v1.1/images/asdf' + image_id = 2 flavor_ref = 'http://localhost/v1.1/flavors/3' - body = dict(server=dict( - name='server_test', imageRef=image_href, flavorRef=flavor_ref, - metadata={'hello': 'world', 'open': 'stack'}, - personality={})) + body = { + 'server': { + 'name': 'server_test', + 'image': {'id': image_id}, + 'flavor': {'id': 3}, + }, + } + + req = webob.Request.blank('/v1.1/servers') + req.method = 'POST' + req.body = json.dumps(body) + req.headers["content-type"] = "application/json" + + res = req.get_response(fakes.wsgi_app()) + + self.assertEqual(res.status_int, 200) + server = json.loads(res.body)['server'] + self.assertEqual(flavor_ref, server['flavorRef']) + + def test_create_instance_v1_1_image_link(self): + self._setup_for_create_instance() + + image_ref = 'http://localhost/v1.1/image/3' + body = { + 'server': { + 'name': 'server_test', + 'image': { + 'links':[ + {'rel': 'self', 'href': 'http://google.com'}, + {'rel': 'bookmark', 'href': image_ref}, + ], + }, + 'flavor': {'id': 3}, + }, + } + req = webob.Request.blank('/v1.1/servers') req.method = 'POST' req.body = json.dumps(body) req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + + self.assertEqual(res.status_int, 200) + server = json.loads(res.body)['server'] + self.assertEqual(image_ref, server['imageRef']) + + def test_create_instance_v1_1_no_valid_image(self): + self._setup_for_create_instance() + + body = { + 'server': { + 'name': 'server_test', + 'image': {}, + 'flavor': {'id': 3}, + }, + } + + req = webob.Request.blank('/v1.1/servers') + req.method = 'POST' + req.body = json.dumps(body) + req.headers["content-type"] = "application/json" + + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 400) - def test_create_instance_v1_1_local_href(self): + def test_create_instance_v1_1_flavor_link(self): self._setup_for_create_instance() - image_id = 2 flavor_ref = 'http://localhost/v1.1/flavors/3' + body = { 'server': { 'name': 'server_test', - 'imageRef': image_id, - 'flavorRef': flavor_ref, + 'image': {'id': 3}, + 'flavor': { + 'id': 2, + 'links': [ + {'rel': 'bookmark', 'href': flavor_ref}, + ], + }, }, } @@ -831,11 +926,55 @@ class ServersTest(test.TestCase): res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 200) server = json.loads(res.body)['server'] - self.assertEqual(1, server['id']) self.assertEqual(flavor_ref, server['flavorRef']) - self.assertEqual(image_id, server['imageRef']) + + def test_create_instance_v1_1_flavor_id(self): + self._setup_for_create_instance() + + flavor_ref = 'http://localhost/v1.1/flavors/2' + + body = { + 'server': { + 'name': 'server_test', + 'image': {'id': 3}, + 'flavor': {'id': 2}, + }, + } + + req = webob.Request.blank('/v1.1/servers') + req.method = 'POST' + req.body = json.dumps(body) + req.headers["content-type"] = "application/json" + + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 200) + server = json.loads(res.body)['server'] + self.assertEqual(flavor_ref, server['flavorRef']) + + def test_create_instance_v1_1_no_valid_flavor(self): + self._setup_for_create_instance() + + body = { + 'server': { + 'name': 'server_test', + 'image': {'id': 3}, + 'flavor': {}, + }, + } + + req = webob.Request.blank('/v1.1/servers') + req.method = 'POST' + req.body = json.dumps(body) + req.headers["content-type"] = "application/json" + + res = req.get_response(fakes.wsgi_app()) + + self.assertEqual(res.status_int, 400) + + def test_create_instance_with_admin_pass_v1_0(self): self._setup_for_create_instance() @@ -858,7 +997,7 @@ class ServersTest(test.TestCase): self.assertNotEqual(res['server']['adminPass'], body['server']['adminPass']) - def test_create_instance_with_admin_pass_v1_1(self): + def test_create_instance_v1_1_admin_pass(self): self._setup_for_create_instance() image_href = 'http://localhost/v1.1/images/2' @@ -866,8 +1005,8 @@ class ServersTest(test.TestCase): body = { 'server': { 'name': 'server_test', - 'imageRef': image_href, - 'flavorRef': flavor_ref, + 'image': {'id': 3}, + 'flavor': {'id': 3}, 'adminPass': 'testpass', }, } @@ -876,20 +1015,22 @@ class ServersTest(test.TestCase): req.method = 'POST' req.body = json.dumps(body) req.headers['content-type'] = "application/json" + res = req.get_response(fakes.wsgi_app()) + + self.assertEqual(res.status_int, 200) + server = json.loads(res.body)['server'] self.assertEqual(server['adminPass'], body['server']['adminPass']) - def test_create_instance_with_empty_admin_pass_v1_1(self): + def test_create_instance_v1_1_admin_pass_empty(self): self._setup_for_create_instance() - image_href = 'http://localhost/v1.1/images/2' - flavor_ref = 'http://localhost/v1.1/flavors/3' body = { 'server': { 'name': 'server_test', - 'imageRef': image_href, - 'flavorRef': flavor_ref, + 'image': {'id': 3}, + 'flavor': {'id': 3}, 'adminPass': '', }, } @@ -1644,7 +1785,7 @@ class ServersTest(test.TestCase): self.assertEqual(res_dict['server']['status'], 'SHUTOFF') -class TestServerCreateRequestXMLDeserializer(unittest.TestCase): +class TestServerCreateRequestXMLDeserializerV10(unittest.TestCase): def setUp(self): self.deserializer = create_instance_helper.ServerXMLDeserializer() @@ -1652,7 +1793,7 @@ class TestServerCreateRequestXMLDeserializer(unittest.TestCase): def test_minimal_request(self): serial_request = """ """ + name="new-server-test" imageId="1" flavorId="1" />""" request = self.deserializer.deserialize(serial_request, 'create') expected = {"server": { "name": "new-server-test", @@ -1924,19 +2065,202 @@ b25zLiINCg0KLVJpY2hhcmQgQmFjaA==""", request = self.deserializer.deserialize(serial_request, 'create') self.assertEqual(request['body'], expected) - def test_request_xmlser_with_flavor_image_href(self): + +class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): + + def setUp(self): + self.deserializer = create_instance_helper.ServerXMLDeserializer() + + def test_minimal_request(self): serial_request = """ - - """ + + + +""" request = self.deserializer.deserialize(serial_request, 'create') - self.assertEquals(request['body']["server"]["flavorRef"], - "http://localhost:8774/v1.1/flavors/1") - self.assertEquals(request['body']["server"]["imageRef"], - "http://localhost:8774/v1.1/images/1") + expected = { + "server": { + "name": "new-server-test", + "image": {"id": "1"}, + "flavor": {"id": "2"}, + }, + } + self.assertEquals(request['body'], expected) + def test_image_link(self): + serial_request = """ + + + + + +""" + request = self.deserializer.deserialize(serial_request, 'create') + expected = { + "server": { + "name": "new-server-test", + "image": { + "id": "1", + "links": [ + { + "rel": "bookmark", + "href": "http://localhost:8774/v1.1/images/2", + }, + ], + }, + "flavor": {"id": "3"}, + }, + } + self.assertEquals(request['body'], expected) + + def test_flavor_link(self): + serial_request = """ + + + + + +""" + request = self.deserializer.deserialize(serial_request, 'create') + expected = { + "server": { + "name": "new-server-test", + "image": {"id": "1"}, + "flavor": { + "id": "2", + "links": [ + { + "rel": "bookmark", + "href": "http://localhost:8774/v1.1/flavors/3", + }, + ], + }, + }, + } + self.assertEquals(request['body'], expected) + + def test_empty_metadata_personality(self): + serial_request = """ + + + + + +""" + request = self.deserializer.deserialize(serial_request, 'create') + expected = { + "server": { + "name": "new-server-test", + "image": {"id": "1"}, + "flavor": {"id": "2"}, + "metadata": {}, + "personality": [], + }, + } + self.assertEquals(request['body'], expected) + + def test_multiple_metadata_items(self): + serial_request = """ + + + + + two + snack + +""" + request = self.deserializer.deserialize(serial_request, 'create') + expected = { + "server": { + "name": "new-server-test", + "image": {"id": "1"}, + "flavor": {"id": "2"}, + "metadata": {"one": "two", "open": "snack"}, + }, + } + self.assertEquals(request['body'], expected) + + def test_multiple_personality_files(self): + serial_request = """ + + + + + MQ== + Mg== + +""" + request = self.deserializer.deserialize(serial_request, 'create') + expected = { + "server": { + "name": "new-server-test", + "image": {"id": "1"}, + "flavor": {"id": "2"}, + "personality": [ + {"path": "/etc/banner.txt", "contents": "MQ=="}, + {"path": "/etc/hosts", "contents": "Mg=="}, + ], + }, + } + self.assertEquals(request['body'], expected) + + def test_spec_request(self): + serial_request = """ + + + + + + + + Apache1 + + + Mg== + +""" + request = self.deserializer.deserialize(serial_request, 'create') + expected = { + "server": { + "name": "new-server-test", + "image": { + "id": "52415800-8b69-11e0-9b19-734f6f006e54", + "links": [ + { + "rel": "self", + "href": "http://servers.api.openstack.org/" + \ + "v1.1/1234/images/52415800-8b69-11" + \ + "e0-9b19-734f6f006e54", + }, + { + "rel": "bookmark", + "href": "http://servers.api.openstack.org/" + \ + "1234/images/52415800-8b69-11e0-9b" + \ + "19-734f6f006e54", + }, + ], + }, + "flavor": {"id": "52415800-8b69-11e0-9b19-734f1195ff37"}, + "metadata": {"My Server Name": "Apache1"}, + "personality": [ + { + "path": "/etc/banner.txt", + "contents": "Mg==", + }, + ], + }, + } + self.assertEquals(request['body'], expected) class TestServerInstanceCreation(test.TestCase): -- cgit From 07baabb67d9491da61fa5bfe9adc52f7ff744e22 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 12 Jul 2011 16:02:39 -0400 Subject: cleanup --- nova/tests/api/openstack/test_servers.py | 37 +++++++++----------------------- 1 file changed, 10 insertions(+), 27 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index cb7e03934..83b43b8ac 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -612,7 +612,7 @@ class ServersTest(test.TestCase): "_get_kernel_ramdisk_from_image", kernel_ramdisk_mapping) self.stubs.Set(nova.compute.api.API, "_find_host", find_host) - def test_create_instance(self): + def _test_create_instance_helper(self): self._setup_for_create_instance() body = dict(server=dict( @@ -635,6 +635,9 @@ class ServersTest(test.TestCase): self.assertEqual(3, server['imageId']) self.assertEqual(FAKE_UUID, server['uuid']) + def test_create_instance(self): + self._test_create_instance_helper() + def test_create_instance_has_uuid(self): """Tests at the db-layer instead of API layer since that's where the UUID is generated @@ -689,27 +692,7 @@ class ServersTest(test.TestCase): def test_create_instance_no_key_pair(self): fakes.stub_out_key_pair_funcs(self.stubs, have_key_pair=False) - self._setup_for_create_instance() - - body = dict(server=dict( - name='server_test', imageId=3, flavorId=2, - metadata={'hello': 'world', 'open': 'stack'}, - personality={})) - req = webob.Request.blank('/v1.0/servers') - req.method = 'POST' - req.body = json.dumps(body) - req.headers["content-type"] = "application/json" - - res = req.get_response(fakes.wsgi_app()) - - server = json.loads(res.body)['server'] - self.assertEqual(16, len(server['adminPass'])) - self.assertEqual('server_test', server['name']) - self.assertEqual(1, server['id']) - self.assertEqual(2, server['flavorId']) - self.assertEqual(3, server['imageId']) - self.assertEqual(FAKE_UUID, server['uuid']) - self.assertEqual(res.status_int, 200) + self._test_create_instance_helper() def test_create_instance_no_name(self): self._setup_for_create_instance() @@ -782,20 +765,20 @@ class ServersTest(test.TestCase): def test_create_instance_v1_1(self): self._setup_for_create_instance() - image_href = 'http://localhost/v1.1/images/3' - flavor_href = 'http://localhost/v1.1/flavors/2' + image_href = 'http://localhost/v1.1/images/2' + flavor_href = 'http://localhost/v1.1/flavors/3' body = { 'server': { 'name': 'server_test', 'image': { - 'id': 3, + 'id': 2, 'links': [ {'rel': 'bookmark', 'href': image_href}, ], }, 'flavor': { - 'id': 2, + 'id': 3, 'links': [ {'rel': 'bookmark', 'href': flavor_href}, ], @@ -1793,7 +1776,7 @@ class TestServerCreateRequestXMLDeserializerV10(unittest.TestCase): def test_minimal_request(self): serial_request = """ """ + name="new-server-test" imageId="1" flavorId="1"/>""" request = self.deserializer.deserialize(serial_request, 'create') expected = {"server": { "name": "new-server-test", -- cgit From 486afc9b9e38a68c18b80daab4f23c5b936ee185 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Wed, 13 Jul 2011 11:17:05 -0400 Subject: pep8 --- nova/tests/api/openstack/test_servers.py | 44 ++++++++++++++++------------- nova/tests/integrated/integrated_helpers.py | 4 +-- nova/tests/integrated/test_servers.py | 21 +++++++------- 3 files changed, 37 insertions(+), 32 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index 83b43b8ac..ea3837519 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -789,8 +789,8 @@ class ServersTest(test.TestCase): }, 'personality': [ { - "path" : "/etc/banner.txt", - "contents" : "MQ==", + "path": "/etc/banner.txt", + "contents": "MQ==", }, ], }, @@ -844,7 +844,7 @@ class ServersTest(test.TestCase): 'server': { 'name': 'server_test', 'image': { - 'links':[ + 'links': [ {'rel': 'self', 'href': 'http://google.com'}, {'rel': 'bookmark', 'href': image_ref}, ], @@ -957,8 +957,6 @@ class ServersTest(test.TestCase): self.assertEqual(res.status_int, 400) - - def test_create_instance_with_admin_pass_v1_0(self): self._setup_for_create_instance() @@ -2064,8 +2062,8 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1"}, - "flavor": {"id": "2"}, + "image": {"id": "1", "links": []}, + "flavor": {"id": "2", "links": []}, }, } self.assertEquals(request['body'], expected) @@ -2091,7 +2089,7 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): }, ], }, - "flavor": {"id": "3"}, + "flavor": {"id": "3", "links": []}, }, } self.assertEquals(request['body'], expected) @@ -2108,7 +2106,7 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1"}, + "image": {"id": "1", "links": []}, "flavor": { "id": "2", "links": [ @@ -2134,8 +2132,8 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1"}, - "flavor": {"id": "2"}, + "image": {"id": "1", "links": []}, + "flavor": {"id": "2", "links": []}, "metadata": {}, "personality": [], }, @@ -2156,8 +2154,8 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1"}, - "flavor": {"id": "2"}, + "image": {"id": "1", "links": []}, + "flavor": {"id": "2", "links": []}, "metadata": {"one": "two", "open": "snack"}, }, } @@ -2177,8 +2175,8 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1"}, - "flavor": {"id": "2"}, + "image": {"id": "1", "links": []}, + "flavor": {"id": "2", "links": []}, "personality": [ {"path": "/etc/banner.txt", "contents": "MQ=="}, {"path": "/etc/hosts", "contents": "Mg=="}, @@ -2188,6 +2186,10 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): self.assertEquals(request['body'], expected) def test_spec_request(self): + image_self_link = "http://servers.api.openstack.org/v1.1/1234/" + \ + "images/52415800-8b69-11e0-9b19-734f6f006e54" + image_bookmark_link = "http://servers.api.openstack.org/1234/" + \ + "images/52415800-8b69-11e0-9b19-734f6f006e54" serial_request = """ + href="%s"/> + href="%s"/> @@ -2211,7 +2213,7 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): Mg== -""" +""" % (image_self_link, image_bookmark_link) request = self.deserializer.deserialize(serial_request, 'create') expected = { "server": { @@ -2233,7 +2235,10 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): }, ], }, - "flavor": {"id": "52415800-8b69-11e0-9b19-734f1195ff37"}, + "flavor": { + "id": "52415800-8b69-11e0-9b19-734f1195ff37", + "links": [], + }, "metadata": {"My Server Name": "Apache1"}, "personality": [ { @@ -2245,6 +2250,7 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): } self.assertEquals(request['body'], expected) + class TestServerInstanceCreation(test.TestCase): def setUp(self): diff --git a/nova/tests/integrated/integrated_helpers.py b/nova/tests/integrated/integrated_helpers.py index 47bd8c1e4..eb611ae0d 100644 --- a/nova/tests/integrated/integrated_helpers.py +++ b/nova/tests/integrated/integrated_helpers.py @@ -205,12 +205,12 @@ class _IntegratedTestBase(test.TestCase): image_href = 'http://fake.server/%s' % image_href # We now have a valid imageId - server['imageRef'] = image_href + server['image'] = {'links': [{'rel':'bookmark', 'href': image_href}]} # Set a valid flavorId flavor = self.api.get_flavors()[0] LOG.debug("Using flavor: %s" % flavor) - server['flavorRef'] = 'http://fake.server/%s' % flavor['id'] + server['flavor'] = {'id': flavor['id']} # Set a valid server name server_name = self.user.get_unused_server_name() diff --git a/nova/tests/integrated/test_servers.py b/nova/tests/integrated/test_servers.py index fcb517cf5..5c1812c76 100644 --- a/nova/tests/integrated/test_servers.py +++ b/nova/tests/integrated/test_servers.py @@ -49,31 +49,30 @@ class ServersTest(integrated_helpers._IntegratedTestBase): post = {'server': server} - # Without an imageRef, this throws 500. + # Without an image, this throws 400. # TODO(justinsb): Check whatever the spec says should be thrown here self.assertRaises(client.OpenStackApiException, self.api.post_server, post) - # With an invalid imageRef, this throws 500. - server['imageRef'] = self.user.get_invalid_image() + # With an invalid image entity, this throws 400. + bookmark = {'rel': 'bookmark', 'href': self.user.get_invalid_image()} + server['image'] = {'links': [bookmark]} # TODO(justinsb): Check whatever the spec says should be thrown here self.assertRaises(client.OpenStackApiException, self.api.post_server, post) - # Add a valid imageId/imageRef - server['imageId'] = good_server.get('imageId') - server['imageRef'] = good_server.get('imageRef') + # Add a valid image entity + server['image'] = good_server.get('image', {}) - # Without flavorId, this throws 500 + # Without a flavor entity, this throws 400 # TODO(justinsb): Check whatever the spec says should be thrown here self.assertRaises(client.OpenStackApiException, self.api.post_server, post) - # Set a valid flavorId/flavorRef - server['flavorRef'] = good_server.get('flavorRef') - server['flavorId'] = good_server.get('flavorId') + # Set a valid flavor etity + server['flavor'] = good_server.get('flavor', {}) - # Without a name, this throws 500 + # Without a name, this throws 400 # TODO(justinsb): Check whatever the spec says should be thrown here self.assertRaises(client.OpenStackApiException, self.api.post_server, post) -- cgit From 1ad5f2eaf49904d8e14546d59699b1472a1a5bb2 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 26 Jul 2011 12:57:06 -0400 Subject: xml deserialization works now --- nova/tests/api/openstack/test_servers.py | 162 ++++++++++++++----------------- 1 file changed, 71 insertions(+), 91 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index 9ff0a3d04..97cebd29c 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -2530,77 +2530,85 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): def test_minimal_request(self): serial_request = """ - - - -""" +""" + request = self.deserializer.deserialize(serial_request, 'create') + expected = { + "server": { + "name": "new-server-test", + "imageRef": "1", + "flavorRef": "2", + "metadata": {}, + "personality": [], + }, + } + self.assertEquals(request['body'], expected) + + def test_admin_pass(self): + serial_request = """ +""" request = self.deserializer.deserialize(serial_request, 'create') expected = { "server": { "name": "new-server-test", - "image": {"id": "1", "links": []}, - "flavor": {"id": "2", "links": []}, + "imageRef": "1", + "flavorRef": "2", + "adminPass": "1234", + "metadata": {}, + "personality": [], }, } self.assertEquals(request['body'], expected) + def test_image_link(self): serial_request = """ - - - - - -""" +""" request = self.deserializer.deserialize(serial_request, 'create') expected = { "server": { "name": "new-server-test", - "image": { - "id": "1", - "links": [ - { - "rel": "bookmark", - "href": "http://localhost:8774/v1.1/images/2", - }, - ], - }, - "flavor": {"id": "3", "links": []}, + "imageRef": "http://localhost:8774/v1.1/images/2", + "flavorRef": "3", + "metadata": {}, + "personality": [], }, } self.assertEquals(request['body'], expected) def test_flavor_link(self): serial_request = """ - - - - - -""" +""" request = self.deserializer.deserialize(serial_request, 'create') expected = { "server": { "name": "new-server-test", - "image": {"id": "1", "links": []}, - "flavor": { - "id": "2", - "links": [ - { - "rel": "bookmark", - "href": "http://localhost:8774/v1.1/flavors/3", - }, - ], - }, + "imageRef": "1", + "flavorRef": "http://localhost:8774/v1.1/flavors/3", + "metadata": {}, + "personality": [], }, } self.assertEquals(request['body'], expected) def test_empty_metadata_personality(self): serial_request = """ - - - + """ @@ -2608,8 +2616,8 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1", "links": []}, - "flavor": {"id": "2", "links": []}, + "imageRef": "1", + "flavorRef": "2", "metadata": {}, "personality": [], }, @@ -2618,9 +2626,10 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): def test_multiple_metadata_items(self): serial_request = """ - - - + two snack @@ -2630,18 +2639,20 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1", "links": []}, - "flavor": {"id": "2", "links": []}, + "imageRef": "1", + "flavorRef": "2", "metadata": {"one": "two", "open": "snack"}, + "personality": [], }, } self.assertEquals(request['body'], expected) def test_multiple_personality_files(self): serial_request = """ - - - + MQ== Mg== @@ -2651,8 +2662,9 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): expected = { "server": { "name": "new-server-test", - "image": {"id": "1", "links": []}, - "flavor": {"id": "2", "links": []}, + "imageRef": "1", + "flavorRef": "2", + "metadata": {}, "personality": [ {"path": "/etc/banner.txt", "contents": "MQ=="}, {"path": "/etc/hosts", "contents": "Mg=="}, @@ -2662,59 +2674,27 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): self.assertEquals(request['body'], expected) def test_spec_request(self): - image_self_link = "http://servers.api.openstack.org/v1.1/1234/" + \ - "images/52415800-8b69-11e0-9b19-734f6f006e54" image_bookmark_link = "http://servers.api.openstack.org/1234/" + \ "images/52415800-8b69-11e0-9b19-734f6f006e54" serial_request = """ - - - - - Apache1 Mg== -""" % (image_self_link, image_bookmark_link) +""" % (image_bookmark_link) request = self.deserializer.deserialize(serial_request, 'create') expected = { "server": { "name": "new-server-test", - "image": { - "id": "52415800-8b69-11e0-9b19-734f6f006e54", - "links": [ - { - "rel": "self", - "href": "http://servers.api.openstack.org/" + \ - "v1.1/1234/images/52415800-8b69-11" + \ - "e0-9b19-734f6f006e54", - }, - { - "rel": "bookmark", - "href": "http://servers.api.openstack.org/" + \ - "1234/images/52415800-8b69-11e0-9b" + \ - "19-734f6f006e54", - }, - ], - }, - "flavor": { - "id": "52415800-8b69-11e0-9b19-734f1195ff37", - "links": [], - }, + "imageRef": "http://servers.api.openstack.org/1234/" + \ + "images/52415800-8b69-11e0-9b19-734f6f006e54", + "flavorRef": "52415800-8b69-11e0-9b19-734f1195ff37", "metadata": {"My Server Name": "Apache1"}, "personality": [ { -- cgit From 3db1c53486fdb669ac2bab303335548d7a7c617d Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 26 Jul 2011 13:28:11 -0400 Subject: updating imageRef and flavorRef parsing --- nova/tests/api/openstack/test_servers.py | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index 97cebd29c..cae04e6ab 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -1267,18 +1267,8 @@ class ServersTest(test.TestCase): body = { 'server': { 'name': 'server_test', - 'image': { - 'id': 2, - 'links': [ - {'rel': 'bookmark', 'href': image_href}, - ], - }, - 'flavor': { - 'id': 3, - 'links': [ - {'rel': 'bookmark', 'href': flavor_ref}, - ], - }, + 'imageRef': image_href, + 'flavorRef': flavor_ref, 'metadata': { 'hello': 'world', 'open': 'stack', @@ -1299,14 +1289,14 @@ class ServersTest(test.TestCase): res = req.get_response(fakes.wsgi_app()) + print res.body self.assertEqual(res.status_int, 200) server = json.loads(res.body)['server'] self.assertEqual(16, len(server['adminPass'])) + self.assertEqual(1, server['id']) self.assertEqual('server_test', server['name']) self.assertEqual(expected_flavor, server['flavor']) self.assertEqual(expected_image, server['image']) - self.assertEqual(res.status_int, 200) - #self.assertEqual(1, server['id']) def test_create_instance_v1_1_invalid_flavor_href(self): self._setup_for_create_instance() @@ -1360,7 +1350,7 @@ class ServersTest(test.TestCase): self._setup_for_create_instance() image_id = "2" - flavor_ref = 'http://localhost/flavors/3' + flavor_ref = 'http://localhost/v1.1/flavors/3' expected_flavor = { "id": "3", "links": [ @@ -1394,6 +1384,7 @@ class ServersTest(test.TestCase): res = req.get_response(fakes.wsgi_app()) + print res.body self.assertEqual(res.status_int, 200) server = json.loads(res.body)['server'] self.assertEqual(expected_flavor, server['flavor']) @@ -1428,8 +1419,8 @@ class ServersTest(test.TestCase): body = { 'server': { 'name': 'server_test', - 'image': {'id': 3}, - 'flavor': {'id': 3}, + 'imageRef': 3, + 'flavorRef': 3, 'adminPass': 'testpass', }, } @@ -1452,8 +1443,8 @@ class ServersTest(test.TestCase): body = { 'server': { 'name': 'server_test', - 'image': {'id': 3}, - 'flavor': {'id': 3}, + 'imageRef': 3, + 'flavorRef': 3, 'adminPass': '', }, } -- cgit From 94866fef798a6b72061720cb654442cd194b9f5f Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 26 Jul 2011 13:47:37 -0400 Subject: reverting tests to use imageRef, flavorRef --- nova/tests/api/openstack/test_servers.py | 5 +++- nova/tests/integrated/integrated_helpers.py | 4 +-- nova/tests/integrated/test_servers.py | 40 ++++++++--------------------- 3 files changed, 17 insertions(+), 32 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index cae04e6ab..ff6f5d13a 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -2247,6 +2247,8 @@ class TestServerCreateRequestXMLDeserializerV10(unittest.TestCase): "name": "new-server-test", "imageId": "1", "flavorId": "1", + "metadata": {}, + "personality": [], }} self.assertEquals(request['body'], expected) @@ -2262,6 +2264,7 @@ class TestServerCreateRequestXMLDeserializerV10(unittest.TestCase): "imageId": "1", "flavorId": "1", "metadata": {}, + "personality": [], }} self.assertEquals(request['body'], expected) @@ -2276,6 +2279,7 @@ class TestServerCreateRequestXMLDeserializerV10(unittest.TestCase): "name": "new-server-test", "imageId": "1", "flavorId": "1", + "metadata": {}, "personality": [], }} self.assertEquals(request['body'], expected) @@ -2557,7 +2561,6 @@ class TestServerCreateRequestXMLDeserializerV11(unittest.TestCase): } self.assertEquals(request['body'], expected) - def test_image_link(self): serial_request = """ Date: Tue, 26 Jul 2011 13:55:07 -0400 Subject: cleanup --- nova/tests/api/openstack/test_servers.py | 5 ----- nova/tests/integrated/test_servers.py | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index ff6f5d13a..719c4592b 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -1289,7 +1289,6 @@ class ServersTest(test.TestCase): res = req.get_response(fakes.wsgi_app()) - print res.body self.assertEqual(res.status_int, 200) server = json.loads(res.body)['server'] self.assertEqual(16, len(server['adminPass'])) @@ -1384,7 +1383,6 @@ class ServersTest(test.TestCase): res = req.get_response(fakes.wsgi_app()) - print res.body self.assertEqual(res.status_int, 200) server = json.loads(res.body)['server'] self.assertEqual(expected_flavor, server['flavor']) @@ -1429,11 +1427,8 @@ class ServersTest(test.TestCase): req.method = 'POST' req.body = json.dumps(body) req.headers['content-type'] = "application/json" - res = req.get_response(fakes.wsgi_app()) - self.assertEqual(res.status_int, 200) - server = json.loads(res.body)['server'] self.assertEqual(server['adminPass'], body['server']['adminPass']) diff --git a/nova/tests/integrated/test_servers.py b/nova/tests/integrated/test_servers.py index fcb517cf5..67b3c485a 100644 --- a/nova/tests/integrated/test_servers.py +++ b/nova/tests/integrated/test_servers.py @@ -285,6 +285,26 @@ class ServersTest(integrated_helpers._IntegratedTestBase): # Cleanup self._delete_server(created_server_id) + def test_rename_server(self): + """Test building and renaming a server.""" + + # Create a server + server = self._build_minimal_create_server_request() + created_server = self.api.post_server({'server': server}) + LOG.debug("created_server: %s" % created_server) + server_id = created_server['id'] + self.assertTrue(server_id) + + # Rename the server to 'new-name' + self.api.put_server(server_id, {'server': {'name': 'new-name'}}) + + # Check the name of the server + created_server = self.api.get_server(server_id) + self.assertEqual(created_server['name'], 'new-name') + + # Cleanup + self._delete_server(server_id) + if __name__ == "__main__": unittest.main() -- cgit From f8a182d6196a9f1ba0065912e2b703ea61a1c260 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 26 Jul 2011 14:09:49 -0400 Subject: adding assert to check for progress attribute --- nova/tests/api/openstack/test_servers.py | 1 + 1 file changed, 1 insertion(+) (limited to 'nova/tests') diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index 719c4592b..5e88686c4 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -1293,6 +1293,7 @@ class ServersTest(test.TestCase): server = json.loads(res.body)['server'] self.assertEqual(16, len(server['adminPass'])) self.assertEqual(1, server['id']) + self.assertEqual(0, server['progress']) self.assertEqual('server_test', server['name']) self.assertEqual(expected_flavor, server['flavor']) self.assertEqual(expected_image, server['image']) -- cgit