diff --git a/gns3server/modules/base_manager.py b/gns3server/modules/base_manager.py index 253c3f3b..b8e2512a 100644 --- a/gns3server/modules/base_manager.py +++ b/gns3server/modules/base_manager.py @@ -426,6 +426,8 @@ class BaseManager: # For non local server we disallow using absolute path outside image directory if Config.instance().get_section_config("Server").get("local", False) is False: img_directory = self.config.get_section_config("Server").get("images_path", os.path.expanduser("~/GNS3/images")) + img_directory = force_unix_path(img_directory) + path = force_unix_path(path) if len(os.path.commonprefix([img_directory, path])) < len(img_directory): raise VMError("{} is not allowed on this remote server. Please use only a filename in {}.".format(path, img_directory)) @@ -443,8 +445,8 @@ class BaseManager: if not path: return "" - img_directory = self.get_images_directory() - path = self.get_abs_image_path(path) + img_directory = force_unix_path(self.get_images_directory()) + path = force_unix_path(self.get_abs_image_path(path)) if os.path.commonprefix([img_directory, path]) == img_directory: return os.path.relpath(path, img_directory) return path diff --git a/tests/handlers/api/test_qemu.py b/tests/handlers/api/test_qemu.py index 4dbf6dea..de512993 100644 --- a/tests/handlers/api/test_qemu.py +++ b/tests/handlers/api/test_qemu.py @@ -17,6 +17,7 @@ import pytest import os +import sys import stat from tests.utils import asyncio_patch from unittest.mock import patch @@ -26,7 +27,10 @@ from gns3server.config import Config @pytest.fixture def fake_qemu_bin(): - bin_path = os.path.join(os.environ["PATH"], "qemu-system-x86_64") + if sys.platform.startswith("win"): + bin_path = os.path.join(os.environ["PATH"], "qemu-system-x86_64w.exe") + else: + bin_path = os.path.join(os.environ["PATH"], "qemu-system-x86_64") with open(bin_path, "w+") as f: f.write("1") os.chmod(bin_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) diff --git a/tests/modules/test_manager.py b/tests/modules/test_manager.py index adaf4d1d..feb15cbd 100644 --- a/tests/modules/test_manager.py +++ b/tests/modules/test_manager.py @@ -24,6 +24,7 @@ from unittest.mock import patch from gns3server.modules.vpcs import VPCS from gns3server.modules.qemu import Qemu from gns3server.modules.vm_error import VMError +from gns3server.utils import force_unix_path @pytest.fixture(scope="function") @@ -89,10 +90,10 @@ def test_create_vm_old_topology(loop, project, tmpdir, vpcs): def test_get_abs_image_path(qemu, tmpdir): os.makedirs(str(tmpdir / "QEMU")) - path1 = str(tmpdir / "test1.bin") + path1 = force_unix_path(str(tmpdir / "test1.bin")) open(path1, 'w+').close() - path2 = str(tmpdir / "QEMU" / "test2.bin") + path2 = force_unix_path(str(tmpdir / "QEMU" / "test2.bin")) open(path2, 'w+').close() with patch("gns3server.config.Config.get_section_config", return_value={"images_path": str(tmpdir)}): @@ -106,11 +107,11 @@ def test_get_abs_image_path(qemu, tmpdir): def test_get_abs_image_path_non_local(qemu, tmpdir): path1 = tmpdir / "images" / "QEMU" / "test1.bin" path1.write("1", ensure=True) - path1 = str(path1) + path1 = force_unix_path(str(path1)) path2 = tmpdir / "private" / "QEMU" / "test2.bin" path2.write("1", ensure=True) - path2 = str(path2) + path2 = force_unix_path(str(path2)) # If non local we can't use path outside images directory with patch("gns3server.config.Config.get_section_config", return_value={"images_path": str(tmpdir / "images"), "local": False}): @@ -126,10 +127,10 @@ def test_get_abs_image_path_non_local(qemu, tmpdir): def test_get_relative_image_path(qemu, tmpdir): os.makedirs(str(tmpdir / "QEMU")) - path1 = str(tmpdir / "test1.bin") + path1 = force_unix_path(str(tmpdir / "test1.bin")) open(path1, 'w+').close() - path2 = str(tmpdir / "QEMU" / "test2.bin") + path2 = force_unix_path(str(tmpdir / "QEMU" / "test2.bin")) open(path2, 'w+').close() with patch("gns3server.config.Config.get_section_config", return_value={"images_path": str(tmpdir)}):