summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCerberus <matt.dietz@rackspace.com>2011-02-17 16:52:31 -0600
committerCerberus <matt.dietz@rackspace.com>2011-02-17 16:52:31 -0600
commit3f3dddee0245cb143004dfb8c20204c511bec658 (patch)
tree064a99e2127bc128e51b7d0a5e5b5d3dd26b5983
parent0c002f443de98b8d0164f7ad801f9ff5ef901101 (diff)
a few changes and a bunch of unit tests
-rw-r--r--nova/api/openstack/servers.py16
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/004_add_instance_migrations.py (renamed from nova/db/sqlalchemy/migrate_repo/versions/003_cactus.py)0
-rw-r--r--nova/tests/api/openstack/common.py30
-rw-r--r--nova/tests/api/openstack/test_servers.py98
4 files changed, 137 insertions, 7 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index fd6b10d5b..a719f5e15 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -227,7 +227,7 @@ class Controller(wsgi.Controller):
self.compute_api.confirm_resize(req.environ['nova.context'], id)
except Exception, e:
LOG.exception(_("Error in confirm-resize %s"), e)
- return faults.Fault(exc.HTTPBadRequest(e))
+ return faults.Fault(exc.HTTPBadRequest())
return exc.HTTPNoContent()
def _action_revert_resize(self, input_dict, req, id):
@@ -235,7 +235,7 @@ class Controller(wsgi.Controller):
self.compute_api.revert_resize(req.environ['nova.context'], id)
except Exception, e:
LOG.exception(_("Error in revert-resize %s"), e)
- return faults.Fault(exc.HTTPBadRequest(e))
+ return faults.Fault(exc.HTTPBadRequest())
return exc.HTTPAccepted()
def _action_rebuild(self, input_dict, req, id):
@@ -244,12 +244,16 @@ class Controller(wsgi.Controller):
def _action_resize(self, input_dict, req, id):
""" Resizes a given instance to the flavor size requested """
try:
- flavor_id = input_dict['resize']['flavorId']
- self.compute_api.resize(req.environ['nova.context'], id,
- flavor_id)
+ if 'resize' in input_dict and 'flavorId' in input_dict['resize']:
+ flavor_id = input_dict['resize']['flavorId']
+ self.compute_api.resize(req.environ['nova.context'], id,
+ flavor_id)
+ else:
+ LOG.exception(_("Missing arguments for resize"))
+ return faults.Fault(exc.HTTPUnprocessableEntity())
except Exception, e:
LOG.exception(_("Error in resize %s"), e)
- return faults.Fault(exc.HTTPUnprocessableEntity(e))
+ return faults.Fault(exc.HTTPBadRequest())
return faults.Fault(exc.HTTPAccepted())
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/003_cactus.py b/nova/db/sqlalchemy/migrate_repo/versions/004_add_instance_migrations.py
index 4aab5bdc6..4aab5bdc6 100644
--- a/nova/db/sqlalchemy/migrate_repo/versions/003_cactus.py
+++ b/nova/db/sqlalchemy/migrate_repo/versions/004_add_instance_migrations.py
diff --git a/nova/tests/api/openstack/common.py b/nova/tests/api/openstack/common.py
new file mode 100644
index 000000000..b55d3087b
--- /dev/null
+++ b/nova/tests/api/openstack/common.py
@@ -0,0 +1,30 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import json
+
+import webob
+
+def webob_factory(url):
+ base_url = url
+ def web_request(url, method, body=None):
+ req = webob.Request.blank("%s%s" % (base_url, url))
+ req.method = method
+ req.body = json.dumps(body)
+ return req
+ return web_request
+
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index a7be0796e..878b62f85 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -1,6 +1,6 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
-# Copyright 2010 OpenStack LLC.
+# Copyright 2010-2011 OpenStack LLC.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
@@ -29,6 +29,7 @@ from nova.api.openstack import servers
import nova.db.api
from nova.db.sqlalchemy.models import Instance
import nova.rpc
+from nova.tests.api.openstack import common
from nova.tests.api.openstack import fakes
@@ -138,6 +139,8 @@ class ServersTest(unittest.TestCase):
self.stubs.Set(nova.compute.API, "get_actions", fake_compute_api)
self.allow_admin = FLAGS.allow_admin_api
+ self.webreq = common.webob_factor('/v1.0/servers')
+
def tearDown(self):
self.stubs.UnsetAll()
FLAGS.allow_admin_api = self.allow_admin
@@ -411,6 +414,99 @@ class ServersTest(unittest.TestCase):
self.assertEqual(res.status, '202 Accepted')
self.assertEqual(self.server_delete_called, True)
+ def test_resize_server(self):
+ req = self.webreq('/1/action', 'POST', dict(resize={flavorId=3}}))
+ res = req.get_response(fakes.wsgi_app())
+
+ self.resize_called = False
+ def resize_mock(context, inst_id, flavor):
+ self.resize_called = True
+
+ self.stubs.Set(nova.compute.api, 'resize_instance', resize_mock)
+ self.assertEqual(res.status_int, 202)
+ self.assertEqual(self.resize_called, True)
+
+ def test_resize_bad_param_fails(self):
+ req = self.webreq('/1/action', 'POST', dict('ferp'))
+ res = req.get_response(fakes.wsgi_app())
+
+ self.resize_called = False
+ def resize_mock(context, inst_id, flavor):
+ self.resize_called = True
+
+ self.stubs.Set(nova.compute.api, 'resize_instance', resize_mock)
+ self.assertEqual(res.status_int, 422)
+ self.assertEqual(self.resize_called, False)
+
+ def test_resize_bad_flavor_fails(self):
+ req = self.webreq('/1/action', 'POST', dict(resize={derp=3}))
+ res = req.get_response(fakes.wsgi_app())
+
+ self.resize_called = False
+ def resize_mock(context, inst_id, flavor):
+ self.resize_called = True
+
+ self.stubs.Set(nova.compute.api, 'resize_instance', resize_mock)
+ self.assertEqual(res.status_int, 422)
+ self.assertEqual(self.resize_called, False)
+
+ def test_resize_raises_fails(self):
+ req = self.webreq('/1/action', 'POST', dict(resize={flavorId=3}))
+ res = req.get_response(fakes.wsgi_app())
+
+ def resize_mock(context, inst_id, flavor):
+ raise Exception, 'hurr durr'
+
+ self.stubs.Set(nova.compute.api, 'resize_instance', resize_mock)
+ self.assertEqual(res.status_int, 500)
+
+ def test_confirm_resize_server(self):
+ req = self.webreq('/1/action', 'POST', dict(confirmResize=None))
+ res = req.get_response(fakes.wsgi_app())
+
+ self.resize_called = False
+ def confirm_resize_mock(context, inst_id):
+ self.resize_called = True
+
+ self.stubs.Set(nova.compute.api, 'confirm_resize',
+ confirm_resize_mock)
+ self.assertEqual(res.status_int, 202)
+ self.assertEqual(self.resize_called, True)
+
+ def test_confirm_resize_server_fails(self):
+ req = self.webreq('/1/action', 'POST', dict(confirmResize=None))
+ res = req.get_response(fakes.wsgi_app())
+
+ def confirm_resize_mock(context, inst_id):
+ raise Exception, 'hurr durr'
+
+ self.stubs.Set(nova.compute.api, 'confirm_resize',
+ confirm_resize_mock)
+ self.assertEqual(res.status_int, 500)
+
+ def test_revert_resize_server(self):
+ req = self.webreq('/1/action', 'POST', dict(revertResize=None))
+ res = req.get_response(fakes.wsgi_app())
+
+ self.resize_called = False
+ def revert_resize_mock(context, inst_id):
+ self.resize_called = True
+
+ self.stubs.Set(nova.compute.api, 'revert_resize',
+ confirm_resize_mock)
+ self.assertEqual(res.status_int, 202)
+ self.assertEqual(self.resize_called, True)
+
+ def test_revert_resize_server_fails(self):
+ req = self.webreq('/1/action', 'POST', dict(confirmResize=None))
+ res = req.get_response(fakes.wsgi_app())
+
+ def revert_resize_mock(context, inst_id):
+ raise Exception, 'hurr durr'
+
+ self.stubs.Set(nova.compute.api, 'revert_resize',
+ confirm_resize_mock)
+ self.assertEqual(res.status_int, 500)
if __name__ == "__main__":
unittest.main()