From a9b95eb242c0b940c7f8da22b65260ee8de77f40 Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Mon, 16 May 2016 18:17:24 +0200 Subject: [PATCH] If the compute node is remote do not send project path --- gns3server/controller/project.py | 16 ++++++++++++- tests/controller/test_project.py | 40 ++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/gns3server/controller/project.py b/gns3server/controller/project.py index d7a52af19..819eb4540 100644 --- a/gns3server/controller/project.py +++ b/gns3server/controller/project.py @@ -119,7 +119,21 @@ class Project: if node_id not in self._nodes: node = Node(self, compute, node_id=node_id, **kwargs) if compute not in self._project_created_on_compute: - yield from compute.post("/projects", self) + # For a local server we send the project path + if compute.id == "local": + yield from compute.post("/projects", { + "name": self._name, + "project_id": self._id, + "temporary": self._temporary, + "path": self._path + }) + else: + yield from compute.post("/projects", { + "name": self._name, + "project_id": self._id, + "temporary": self._temporary + }) + self._project_created_on_compute.add(compute) yield from node.create() self._nodes[node.id] = node diff --git a/tests/controller/test_project.py b/tests/controller/test_project.py index 279884c12..75881c2c0 100644 --- a/tests/controller/test_project.py +++ b/tests/controller/test_project.py @@ -68,6 +68,7 @@ def test_captures_directory(tmpdir): assert p.captures_directory == str(tmpdir / "project-files" / "captures") assert os.path.exists(p.captures_directory) + def test_add_compute(async_run): compute = MagicMock() project = Project() @@ -75,8 +76,12 @@ def test_add_compute(async_run): assert compute in project._computes -def test_add_node(async_run): +def test_add_node_local(async_run): + """ + For a local server we send the project path + """ compute = MagicMock() + compute.id = "local" project = Project() response = MagicMock() @@ -85,9 +90,40 @@ def test_add_node(async_run): node = async_run(project.add_node(compute, None, name="test", node_type="vpcs", properties={"startup_config": "test.cfg"})) + compute.post.assert_any_call('/projects', { + "name": project._name, + "project_id": project._id, + "temporary": project._temporary, + "path": project._path + }) + compute.post.assert_any_call('/projects/{}/vpcs/nodes'.format(project.id), + data={'node_id': node.id, + 'startup_config': 'test.cfg', + 'name': 'test'}) + assert compute in project._project_created_on_compute + + +def test_add_node_non_local(async_run): + """ + For a non local server we do not send the project path + """ + compute = MagicMock() + compute.id = "remote" + project = Project() + + response = MagicMock() + response.json = {"console": 2048} + compute.post = AsyncioMagicMock(return_value=response) + + node = async_run(project.add_node(compute, None, name="test", node_type="vpcs", properties={"startup_config": "test.cfg"})) + + compute.post.assert_any_call('/projects', { + "name": project._name, + "project_id": project._id, + "temporary": project._temporary + }) compute.post.assert_any_call('/projects/{}/vpcs/nodes'.format(project.id), data={'node_id': node.id, - 'console_type': 'telnet', 'startup_config': 'test.cfg', 'name': 'test'}) assert compute in project._project_created_on_compute