diff options
| author | Jenkins <jenkins@review.openstack.org> | 2011-10-01 17:49:03 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2011-10-01 17:49:03 +0000 |
| commit | 3837f09ee0b7b0da23e1caa185f58610d30bffe6 (patch) | |
| tree | 6f83d0b8a27516d2846b57c2fed34e5a8cffa9c7 | |
| parent | 04548b067c7c79602332fe2bc2dc89ed77cee7ac (diff) | |
| parent | 7a10619a4c1f5a1880ab613f782b4cbe1d57fad4 (diff) | |
| download | nova-3837f09ee0b7b0da23e1caa185f58610d30bffe6.tar.gz nova-3837f09ee0b7b0da23e1caa185f58610d30bffe6.tar.xz nova-3837f09ee0b7b0da23e1caa185f58610d30bffe6.zip | |
Merge "Fixes bug 862633 -- OS api consoles create() broken"
| -rw-r--r-- | nova/api/openstack/consoles.py | 2 | ||||
| -rw-r--r-- | nova/tests/api/openstack/test_consoles.py | 232 |
2 files changed, 233 insertions, 1 deletions
diff --git a/nova/api/openstack/consoles.py b/nova/api/openstack/consoles.py index d2655acfa..8f6dbaadf 100644 --- a/nova/api/openstack/consoles.py +++ b/nova/api/openstack/consoles.py @@ -57,7 +57,7 @@ class Controller(object): return dict(consoles=[_translate_keys(console) for console in consoles]) - def create(self, req, server_id, body): + def create(self, req, server_id): """Creates a new console""" self.console_api.create_console( req.environ['nova.context'], diff --git a/nova/tests/api/openstack/test_consoles.py b/nova/tests/api/openstack/test_consoles.py new file mode 100644 index 000000000..28c04d082 --- /dev/null +++ b/nova/tests/api/openstack/test_consoles.py @@ -0,0 +1,232 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2010-2011 OpenStack LLC. +# Copyright 2011 Piston Cloud Computing, Inc. +# 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 datetime +import json +import webob + +from nova.api.openstack import consoles +from nova import console +from nova import db +from nova.compute import vm_states +from nova import exception +from nova import flags +from nova import test +from nova.tests.api.openstack import common +from nova.tests.api.openstack import fakes +from nova import utils + + +FLAGS = flags.FLAGS +FAKE_UUID = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' + + +def return_server_by_id(context, id): + print "GOT HERE" + return stub_instance(id) + + +def stub_instance(id, user_id='fake', project_id='fake', host=None, + vm_state=None, task_state=None, + reservation_id="", uuid=FAKE_UUID, image_ref="10", + flavor_id="1", name=None, key_name='', + access_ipv4=None, access_ipv6=None, progress=0): + + if host is not None: + host = str(host) + + if key_name: + key_data = 'FAKE' + else: + key_data = '' + + # ReservationID isn't sent back, hack it in there. + server_name = name or "server%s" % id + if reservation_id != "": + server_name = "reservation_%s" % (reservation_id, ) + + instance = { + "id": int(id), + "uuid": FAKE_UUID, + "created_at": datetime.datetime(2010, 10, 10, 12, 0, 0), + "updated_at": datetime.datetime(2010, 11, 11, 11, 0, 0), + "admin_pass": "", + "user_id": user_id, + "project_id": project_id, + "image_ref": image_ref, + "kernel_id": "", + "ramdisk_id": "", + "launch_index": 0, + "key_name": key_name, + "key_data": key_data, + "vm_state": vm_state or vm_states.BUILDING, + "task_state": task_state, + "memory_mb": 0, + "vcpus": 0, + "local_gb": 0, + "hostname": "", + "host": host, + "instance_type": {}, + "user_data": "", + "reservation_id": reservation_id, + "mac_address": "", + "scheduled_at": utils.utcnow(), + "launched_at": utils.utcnow(), + "terminated_at": utils.utcnow(), + "availability_zone": "", + "display_name": server_name, + "display_description": "", + "locked": False, + "metadata": [], + "access_ip_v4": access_ipv4, + "access_ip_v6": access_ipv6, + "uuid": uuid, + "progress": progress} + + return instance + + +class ConsolesTest(test.TestCase): + def setUp(self): + super(ConsolesTest, self).setUp() + self.flags(verbose=True) + self.stubs.Set(db.api, 'instance_get', return_server_by_id) + self.webreq = common.webob_factory('/v1.0/servers') + + def test_create_console(self): + def fake_create_console(cons_self, context, instance_id): + self.assertTrue(instance_id, 10) + return {} + self.stubs.Set(console.API, 'create_console', fake_create_console) + + req = webob.Request.blank('/v1.0/servers/10/consoles') + req.method = "POST" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 200) + + def test_show_console(self): + def fake_get_console(cons_self, context, instance_id, console_id): + self.assertEqual(instance_id, 10) + self.assertEqual(console_id, 20) + pool = dict(console_type='fake_type', + public_hostname='fake_hostname') + return dict(id=console_id, password='fake_password', + port='fake_port', pool=pool) + + expected = {'console': {'id': 20, + 'port': 'fake_port', + 'host': 'fake_hostname', + 'password': 'fake_password', + 'console_type': 'fake_type'}} + + self.stubs.Set(console.API, 'get_console', fake_get_console) + + req = webob.Request.blank('/v1.0/servers/10/consoles/20') + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 200) + res_dict = json.loads(res.body) + self.assertDictMatch(res_dict, expected) + + def test_show_console_unknown_console(self): + def fake_get_console(cons_self, context, instance_id, console_id): + raise exception.ConsoleNotFound(console_id=console_id) + + self.stubs.Set(console.API, 'get_console', fake_get_console) + + req = webob.Request.blank('/v1.0/servers/10/consoles/20') + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 404) + + def test_show_console_unknown_instance(self): + def fake_get_console(cons_self, context, instance_id, console_id): + raise exception.InstanceNotFound(instance_id=instance_id) + + self.stubs.Set(console.API, 'get_console', fake_get_console) + + req = webob.Request.blank('/v1.0/servers/10/consoles/20') + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 404) + + def test_list_consoles(self): + def fake_get_consoles(cons_self, context, instance_id): + self.assertEqual(instance_id, 10) + + pool1 = dict(console_type='fake_type', + public_hostname='fake_hostname') + cons1 = dict(id=10, password='fake_password', + port='fake_port', pool=pool1) + pool2 = dict(console_type='fake_type2', + public_hostname='fake_hostname2') + cons2 = dict(id=11, password='fake_password2', + port='fake_port2', pool=pool2) + return [cons1, cons2] + + expected = {'consoles': + [{'console': {'id': 10, 'console_type': 'fake_type'}}, + {'console': {'id': 11, 'console_type': 'fake_type2'}}]} + + self.stubs.Set(console.API, 'get_consoles', fake_get_consoles) + + req = webob.Request.blank('/v1.0/servers/10/consoles') + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 200) + res_dict = json.loads(res.body) + self.assertDictMatch(res_dict, expected) + + def test_delete_console(self): + def fake_get_console(cons_self, context, instance_id, console_id): + self.assertEqual(instance_id, 10) + self.assertEqual(console_id, 20) + pool = dict(console_type='fake_type', + public_hostname='fake_hostname') + return dict(id=console_id, password='fake_password', + port='fake_port', pool=pool) + + def fake_delete_console(cons_self, context, instance_id, console_id): + self.assertEqual(instance_id, 10) + self.assertEqual(console_id, 20) + + self.stubs.Set(console.API, 'get_console', fake_get_console) + self.stubs.Set(console.API, 'delete_console', fake_delete_console) + + req = webob.Request.blank('/v1.0/servers/10/consoles/20') + req.method = "DELETE" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 202) + + def test_show_console_unknown_console(self): + def fake_delete_console(cons_self, context, instance_id, console_id): + raise exception.ConsoleNotFound(console_id=console_id) + + self.stubs.Set(console.API, 'delete_console', fake_delete_console) + + req = webob.Request.blank('/v1.0/servers/10/consoles/20') + req.method = "DELETE" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 404) + + def test_show_console_unknown_instance(self): + def fake_delete_console(cons_self, context, instance_id, console_id): + raise exception.InstanceNotFound(instance_id=instance_id) + + self.stubs.Set(console.API, 'delete_console', fake_delete_console) + + req = webob.Request.blank('/v1.0/servers/10/consoles/20') + req.method = "DELETE" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 404) |
