From 17f6223fb1f99355f5e13a69c4f953b08024fe1a Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 20 Jan 2015 15:28:40 -0700 Subject: [PATCH] Try to fix VirtualBox create test. --- gns3server/handlers/virtualbox_handler.py | 6 ++++-- gns3server/modules/base_manager.py | 1 + gns3server/modules/virtualbox/virtualbox_vm.py | 4 ++-- gns3server/schemas/virtualbox.py | 14 ++++++++++++++ gns3server/server.py | 4 +++- tests/api/base.py | 2 +- tests/api/test_virtualbox.py | 8 ++++---- 7 files changed, 29 insertions(+), 10 deletions(-) diff --git a/gns3server/handlers/virtualbox_handler.py b/gns3server/handlers/virtualbox_handler.py index 01c20b3e..d6b944cc 100644 --- a/gns3server/handlers/virtualbox_handler.py +++ b/gns3server/handlers/virtualbox_handler.py @@ -40,9 +40,11 @@ class VirtualBoxHandler: def create(request, response): vbox_manager = VirtualBox.instance() - vm = yield from vbox_manager.create_vm(request.json["name"], request.json.get("uuid")) + vm = yield from vbox_manager.create_vm(request.json["name"], request.json["project_uuid"], request.json.get("uuid")) + print(vm) response.json({"name": vm.name, - "uuid": vm.uuid}) + "uuid": vm.uuid, + "project_uuid": vm.project.uuid}) @classmethod @Route.post( diff --git a/gns3server/modules/base_manager.py b/gns3server/modules/base_manager.py index 5a98ebd0..7d51cb9f 100644 --- a/gns3server/modules/base_manager.py +++ b/gns3server/modules/base_manager.py @@ -95,6 +95,7 @@ class BaseManager: :param project_identifier UUID of Project :param uuid Force UUID force VM """ + project = ProjectManager.instance().get_project(project_identifier) # TODO: support for old projects VM with normal IDs. diff --git a/gns3server/modules/virtualbox/virtualbox_vm.py b/gns3server/modules/virtualbox/virtualbox_vm.py index fcafd423..f922e681 100644 --- a/gns3server/modules/virtualbox/virtualbox_vm.py +++ b/gns3server/modules/virtualbox/virtualbox_vm.py @@ -53,9 +53,9 @@ class VirtualBoxVM(BaseVM): _instances = [] _allocated_console_ports = [] - def __init__(self, name, uuid, manager): + def __init__(self, name, uuid, project, manager): - super().__init__(name, uuid, manager) + super().__init__(name, uuid, project, manager) self._system_properties = {} diff --git a/gns3server/schemas/virtualbox.py b/gns3server/schemas/virtualbox.py index d7e9e4be..63e1664e 100644 --- a/gns3server/schemas/virtualbox.py +++ b/gns3server/schemas/virtualbox.py @@ -46,6 +46,13 @@ VBOX_CREATE_SCHEMA = { "maxLength": 36, "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" }, + "project_uuid": { + "description": "Project UUID", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" + }, }, "additionalProperties": False, "required": ["name", "vmname"], @@ -68,6 +75,13 @@ VBOX_OBJECT_SCHEMA = { "maxLength": 36, "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" }, + "project_uuid": { + "description": "Project UUID", + "type": "string", + "minLength": 36, + "maxLength": 36, + "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" + }, "console": { "description": "console TCP port", "minimum": 1, diff --git a/gns3server/server.py b/gns3server/server.py index 56a6bf70..a776a71e 100644 --- a/gns3server/server.py +++ b/gns3server/server.py @@ -35,7 +35,6 @@ from .modules.port_manager import PortManager # TODO: get rid of * have something generic to automatically import handlers so the routes can be found from gns3server.handlers import * -from gns3server.handlers.virtualbox_handler import VirtualBoxHandler import logging log = logging.getLogger(__name__) @@ -133,6 +132,9 @@ class Server: Starts the server. """ + logger = logging.getLogger("asyncio") + logger.setLevel(logging.WARNING) + # TODO: SSL support for Rackspace cloud integration (here or with nginx for instance). self._loop = asyncio.get_event_loop() app = aiohttp.web.Application() diff --git a/tests/api/base.py b/tests/api/base.py index ee3d5024..63607498 100644 --- a/tests/api/base.py +++ b/tests/api/base.py @@ -120,7 +120,7 @@ class Query: def _example_file_path(self, method, path): path = re.sub('[^a-z0-9]', '', path) - return "docs/api/examples/{}_{}.txt".format(method.lower(), path) # FIXME: cannot find path when running tests + return "docs/api/examples/{}_{}.txt".format(method.lower(), path) def _get_unused_port(): diff --git a/tests/api/test_virtualbox.py b/tests/api/test_virtualbox.py index 5ea86e36..f9e0ce46 100644 --- a/tests/api/test_virtualbox.py +++ b/tests/api/test_virtualbox.py @@ -15,13 +15,13 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from tests.api.base import server, loop +from tests.api.base import server, loop, project from tests.utils import asyncio_patch -def test_vbox_create(server): +def test_vbox_create(server, project): with asyncio_patch("gns3server.modules.VirtualBox.create_vm", return_value="61d61bdd-aa7d-4912-817f-65a9eb54d3ab"): - response = server.post("/virtualbox", {"name": "VM1"}, example=False) + response = server.post("/virtualbox", {"name": "VM1", "vmname": "VM1", "project_uuid": project.uuid}, example=False) assert response.status == 400 assert response.route == "/virtualbox" assert response.json["name"] == "VM1" @@ -39,4 +39,4 @@ def test_vbox_stop(server): with asyncio_patch("gns3server.modules.VirtualBox.stop_vm", return_value=True): response = server.post("/virtualbox/61d61bdd-aa7d-4912-817f-65a9eb54d3ab/stop", {}, example=False) assert response.status == 200 - assert response.route == "/virtualbox/{uuid}/stop" + assert response.route == "/virtualbox/{uuid}/stop" \ No newline at end of file