From ecf4e91e5528780689172572ddfda0934ea87778 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Wed, 27 May 2015 16:21:18 +0200 Subject: [PATCH] Ignore VirtualBox VM Name with a carriage return in name Add tests for get_list of VirtualBox Fix #200 --- gns3server/modules/virtualbox/__init__.py | 2 ++ .../virtualbox/test_virtualbox_manager.py | 34 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/gns3server/modules/virtualbox/__init__.py b/gns3server/modules/virtualbox/__init__.py index 94c62435..509b7182 100644 --- a/gns3server/modules/virtualbox/__init__.py +++ b/gns3server/modules/virtualbox/__init__.py @@ -168,6 +168,8 @@ class VirtualBox(BaseManager): vms = [] result = yield from self.execute("list", ["vms"]) for line in result: + if line[0] != '"' or line[-1:] != "}": + continue # Broken output (perhaps a carriage return in VM name vmname, _ = line.rsplit(' ', 1) vmname = vmname.strip('"') if vmname == "": diff --git a/tests/modules/virtualbox/test_virtualbox_manager.py b/tests/modules/virtualbox/test_virtualbox_manager.py index f6185bed..54289554 100644 --- a/tests/modules/virtualbox/test_virtualbox_manager.py +++ b/tests/modules/virtualbox/test_virtualbox_manager.py @@ -20,10 +20,14 @@ import pytest import tempfile import os import stat +import asyncio + + +from unittest.mock import patch from gns3server.modules.virtualbox import VirtualBox from gns3server.modules.virtualbox.virtualbox_error import VirtualBoxError -from unittest.mock import patch +from tests.utils import asyncio_patch @pytest.fixture(scope="module") @@ -65,3 +69,31 @@ def test_vboxmanage_path(manager, tmpdir): tmpfile = tempfile.NamedTemporaryFile() with patch("gns3server.config.Config.get_section_config", return_value={"vboxmanage_path": path}): assert manager.find_vboxmanage() == path + + +def test_get_list(manager, loop): + vm_list = ['"Windows 8.1" {27b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}', + '"Carriage', + 'Return" {27b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}', + '"" {42b4d095-ff5f-4ac4-bb9d-5f2c7861c1f1}', + '"Linux Microcore 4.7.1" {ccd8c50b-c172-457d-99fa-dd69371ede0e}' + ] + + @asyncio.coroutine + def execute_mock(cmd, args): + if cmd == "list": + return vm_list + else: + if args[0] == "Windows 8.1": + return ["memory=512"] + elif args[0] == "Linux Microcore 4.7.1": + return ["memory=256"] + assert False, "Unknow {} {}".format(cmd, args) + + with asyncio_patch("gns3server.modules.virtualbox.VirtualBox.execute") as mock: + mock.side_effect = execute_mock + vms = loop.run_until_complete(asyncio.async(manager.get_list())) + assert vms == [ + {"vmname": "Windows 8.1", "ram": 512}, + {"vmname": "Linux Microcore 4.7.1", "ram": 256} + ]