diff --git a/gns3server/main.py b/gns3server/main.py index 30360876..e0bf9af2 100644 --- a/gns3server/main.py +++ b/gns3server/main.py @@ -16,6 +16,16 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . + +# WARNING +# Due to buggy user machines we choose to put this as the first loading modules +# otherwise the egg cache is initialized in his standard location and +# if is not writetable the application crash. It's the user fault +# because one day the user as used sudo to run an egg and break his +# filesystem permissions, but it's a common mistake. +import gns3server.utils.get_resource + + import os import datetime import sys diff --git a/gns3server/modules/iou/iou_vm.py b/gns3server/modules/iou/iou_vm.py index b7214bd4..d666fc95 100644 --- a/gns3server/modules/iou/iou_vm.py +++ b/gns3server/modules/iou/iou_vm.py @@ -433,7 +433,10 @@ class IOUVM(BaseVM): yield from self._library_check() - self._rename_nvram_file() + try: + self._rename_nvram_file() + except OSError as e: + raise IOUError("Could not rename nvram files: {}".format(e)) iourc_path = self.iourc_path if iourc_path is None: diff --git a/gns3server/utils/get_resource.py b/gns3server/utils/get_resource.py new file mode 100644 index 00000000..dae285fc --- /dev/null +++ b/gns3server/utils/get_resource.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2015 GNS3 Technologies Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import tempfile +import pkg_resources +import atexit +import logging + +log = logging.getLogger(__name__) + +try: + egg_cache_dir = tempfile.mkdtemp() + pkg_resources.set_extraction_path(egg_cache_dir) +except ValueError: + # If the path is already set the module throw an error + pass + + +@atexit.register +def clean_egg_cache(): + try: + import shutil + log.debug("Clean egg cache %s", egg_cache_dir) + shutil.rmtree(egg_cache_dir) + except Exception: + # We don't care if we can not cleanup + pass diff --git a/tests/modules/qemu/test_qemu_vm.py b/tests/modules/qemu/test_qemu_vm.py index 5d00e1c5..ac939473 100644 --- a/tests/modules/qemu/test_qemu_vm.py +++ b/tests/modules/qemu/test_qemu_vm.py @@ -272,12 +272,13 @@ def test_build_command(vm, loop, fake_qemu_binary, port_manager): os.path.join(vm.working_dir, "flash.qcow2"), "-serial", "telnet:127.0.0.1:{},server,nowait".format(vm.console), + "-net", + "none", "-device", - "e1000,mac=00:00:ab:0e:0f:00,netdev=gns3-0", - "-netdev", - "user,id=gns3-0" + "e1000,mac=00:00:ab:0e:0f:00" ] + @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows") def test_build_command_without_display(vm, loop, fake_qemu_binary): @@ -313,6 +314,7 @@ def test_hdb_disk_image(vm, tmpdir): vm.hdb_disk_image = "test" assert vm.hdb_disk_image == str(tmpdir / "QEMU" / "test") + def test_hdc_disk_image(vm, tmpdir): with patch("gns3server.config.Config.get_section_config", return_value={"images_path": str(tmpdir)}): @@ -321,6 +323,7 @@ def test_hdc_disk_image(vm, tmpdir): vm.hdc_disk_image = "test" assert vm.hdc_disk_image == str(tmpdir / "QEMU" / "test") + def test_hdd_disk_image(vm, tmpdir): with patch("gns3server.config.Config.get_section_config", return_value={"images_path": str(tmpdir)}):