diff --git a/gns3server/controller/project.py b/gns3server/controller/project.py index 5fe751cec..7f3c6d4a0 100644 --- a/gns3server/controller/project.py +++ b/gns3server/controller/project.py @@ -51,6 +51,12 @@ class Project: self._name = name self._auto_start = False self._status = status + + # Disallow overwrite of existing project + if project_id is None and path is not None: + if os.path.exists(path): + raise aiohttp.web.HTTPForbidden(text="The path {} already exist.".format(path)) + if project_id is None: self._id = str(uuid4()) else: @@ -187,7 +193,6 @@ class Project: return name raise aiohttp.web.HTTPConflict(text="A node name could not be allocated (node limit reached?)") - def has_allocated_node_name(self, name): """ Returns either a node name is already allocated or not. diff --git a/tests/controller/test_project.py b/tests/controller/test_project.py index 07c737465..8b300486b 100644 --- a/tests/controller/test_project.py +++ b/tests/controller/test_project.py @@ -56,6 +56,17 @@ def test_path(tmpdir): assert os.path.exists(os.path.join(directory, p.id)) +def test_path_exist(tmpdir): + """ + Should raise an error when you try to owerwrite + an existing project + """ + os.makedirs(str(tmpdir / "demo")) + with pytest.raises(aiohttp.web.HTTPForbidden): + p = Project(name="Test", path=str(tmpdir / "demo")) + + + def test_init_path(tmpdir): p = Project(path=str(tmpdir), project_id=str(uuid4()), name="Test") @@ -69,8 +80,8 @@ def test_changing_path_with_quote_not_allowed(tmpdir): def test_captures_directory(tmpdir): - p = Project(path=str(tmpdir), name="Test") - assert p.captures_directory == str(tmpdir / "project-files" / "captures") + p = Project(path=str(tmpdir / "capturestest"), name="Test") + assert p.captures_directory == str(tmpdir / "capturestest" / "project-files" / "captures") assert os.path.exists(p.captures_directory)