From d853ffe791acceb4630663e331596490d0e3518a Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Thu, 27 Aug 2015 18:27:17 +0200 Subject: [PATCH] Change the way we look for Qemu path Fix #302 --- gns3server/modules/qemu/__init__.py | 4 ++-- gns3server/modules/qemu/qemu_vm.py | 7 +++++-- tests/modules/qemu/test_qemu_vm.py | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/gns3server/modules/qemu/__init__.py b/gns3server/modules/qemu/__init__.py index 608dd15a..13cc8bb7 100644 --- a/gns3server/modules/qemu/__init__.py +++ b/gns3server/modules/qemu/__init__.py @@ -70,9 +70,9 @@ class Qemu(BaseManager): if "PROGRAMFILES" in os.environ and os.path.exists(os.environ["PROGRAMFILES"]): paths.add(os.path.join(os.environ["PROGRAMFILES"], "qemu")) elif sys.platform.startswith("darwin"): - # add specific locations on Mac OS X regardless of what's in $PATH - paths.update(["/usr/bin", "/usr/local/bin", "/opt/local/bin"]) if hasattr(sys, "frozen"): + # add specific locations on Mac OS X regardless of what's in $PATH + paths.update(["/usr/bin", "/usr/local/bin", "/opt/local/bin"]) try: exec_dir = os.path.dirname(os.path.abspath(sys.executable)) paths.add(os.path.abspath(os.path.join(exec_dir, "../Resources/qemu/bin/"))) diff --git a/gns3server/modules/qemu/qemu_vm.py b/gns3server/modules/qemu/qemu_vm.py index 9dc56a92..f65e12dd 100644 --- a/gns3server/modules/qemu/qemu_vm.py +++ b/gns3server/modules/qemu/qemu_vm.py @@ -142,7 +142,10 @@ class QemuVM(BaseVM): """ if qemu_path and os.pathsep not in qemu_path: - qemu_path = shutil.which(qemu_path) + new_qemu_path = shutil.which(qemu_path, path=os.pathsep.join(self._manager.paths_list())) + if new_qemu_path is None: + raise QemuError("QEMU binary path {} is not found in the path".format(qemu_path)) + qemu_path = new_qemu_path self._check_qemu_path(qemu_path) self._qemu_path = qemu_path @@ -161,7 +164,7 @@ class QemuVM(BaseVM): def _check_qemu_path(self, qemu_path): if qemu_path is None: - raise QemuError("QEMU binary path is not set or not found in the path") + raise QemuError("QEMU binary path is not set") if not os.path.exists(qemu_path): raise QemuError("QEMU binary '{}' is not accessible".format(qemu_path)) if not os.access(qemu_path, os.X_OK): diff --git a/tests/modules/qemu/test_qemu_vm.py b/tests/modules/qemu/test_qemu_vm.py index ad6e3916..2525fb71 100644 --- a/tests/modules/qemu/test_qemu_vm.py +++ b/tests/modules/qemu/test_qemu_vm.py @@ -25,7 +25,9 @@ import re from tests.utils import asyncio_patch +from unittest import mock from unittest.mock import patch, MagicMock + from gns3server.modules.qemu.qemu_vm import QemuVM from gns3server.modules.qemu.qemu_error import QemuError from gns3server.modules.qemu import Qemu @@ -276,9 +278,9 @@ def test_set_platform(project, manager): with patch("gns3server.modules.qemu.QemuVM._check_qemu_path"): vm = QemuVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", project, manager, platform="x86_64") if sys.platform.startswith("win"): - which_mock.assert_called_with("qemu-system-x86_64w.exe") + which_mock.assert_called_with("qemu-system-x86_64w.exe", path=mock.ANY) else: - which_mock.assert_called_with("qemu-system-x86_64") + which_mock.assert_called_with("qemu-system-x86_64", path=mock.ANY) assert vm.platform == "x86_64" assert vm.qemu_path == "/bin/qemu-system-x86_64"