1
0
mirror of https://github.com/GNS3/gns3-server synced 2024-11-24 17:28:08 +00:00

Do not reload a project if project is already opened

Ref https://github.com/GNS3/gns3-gui/issues/1251
This commit is contained in:
Julien Duponchelle 2016-06-17 17:50:06 +02:00
parent 4783691c87
commit 3132d51694
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
4 changed files with 34 additions and 1 deletions

View File

@ -217,7 +217,10 @@ class Controller:
topo_data.pop("revision") topo_data.pop("revision")
topo_data.pop("type") topo_data.pop("type")
project = yield from self.add_project(path=os.path.dirname(path), status="closed", filename=os.path.basename(path), **topo_data) if topo_data["project_id"] in self._projects:
project = self._projects[topo_data["project_id"]]
else:
project = yield from self.add_project(path=os.path.dirname(path), status="closed", filename=os.path.basename(path), **topo_data)
if load: if load:
yield from project.open() yield from project.open()
return project return project

View File

@ -337,6 +337,9 @@ class Project:
""" """
Load topology elements Load topology elements
""" """
if self._status == "opened":
return
self.reset() self.reset()
path = self._topology_file() path = self._topology_file()
if os.path.exists(path): if os.path.exists(path):

View File

@ -242,6 +242,16 @@ def images_dir(config):
return path return path
@pytest.fixture
def projects_dir(config):
"""
Get the location of images
"""
path = config.get_section_config("Server").get("projects_path")
os.makedirs(path, exist_ok=True)
return path
@pytest.yield_fixture @pytest.yield_fixture
def darwin_platform(): def darwin_platform():
""" """

View File

@ -68,6 +68,17 @@ def test_load(controller, controller_config_path, async_run):
} }
def test_load_projects(controller, projects_dir, async_run):
controller.save()
os.makedirs(os.path.join(projects_dir, "project1"))
with open(os.path.join(projects_dir, "project1", "project1.gns3"), "w+") as f:
f.write("")
with asyncio_patch("gns3server.controller.Controller.load_project") as mock_load_project:
async_run(controller.load())
mock_load_project.assert_called_with(os.path.join(projects_dir, "project1", "project1.gns3"), load=False)
def test_isEnabled(controller): def test_isEnabled(controller):
Config.instance().set("Server", "controller", False) Config.instance().set("Server", "controller", False)
assert not controller.is_enabled() assert not controller.is_enabled()
@ -254,3 +265,9 @@ def test_load_project(controller, async_run, tmpdir):
node1 = project.get_node("50d66d7b-0dd7-4e9f-b720-6eb621ae6543") node1 = project.get_node("50d66d7b-0dd7-4e9f-b720-6eb621ae6543")
assert node1.name == "PC1" assert node1.name == "PC1"
# Reload the same project should do nothing
with asyncio_patch("gns3server.controller.Controller.add_project") as mock_add_project:
project = async_run(controller.load_project(str(tmpdir / "test.gns3")))
assert not mock_add_project.called