async def test_add_node_from_template(controller): """ For a local server we send the project path """ compute = MagicMock() compute.id = "local" project = Project(controller=controller, name="Test") project.emit_notification = MagicMock() template = Template( str(uuid.uuid4()), { "compute_id": "local", "name": "Test", "template_type": "vpcs", "builtin": False, }) controller.template_manager.templates[template.id] = template controller._computes["local"] = compute response = MagicMock() response.json = {"console": 2048} compute.post = AsyncioMagicMock(return_value=response) node = await project.add_node_from_template(template.id, x=23, y=12) compute.post.assert_any_call('/projects', data={ "name": project._name, "project_id": project._id, "path": project._path }) assert compute in project._project_created_on_compute project.emit_notification.assert_any_call("node.created", node.__json__())
async def test_delete_node_delete_link(controller): """ Delete a node delete all the node connected """ compute = MagicMock() project = Project(controller=controller, name="Test") project.emit_notification = MagicMock() response = MagicMock() response.json = {"console": 2048} compute.post = AsyncioMagicMock(return_value=response) node = await project.add_node(compute, "test", None, node_type="vpcs", properties={"startup_config": "test.cfg"}) link = await project.add_link() await link.add_node(node, 0, 0) await project.delete_node(node.id) assert node.id not in project._nodes assert link.id not in project._links compute.delete.assert_any_call('/projects/{}/vpcs/nodes/{}'.format( project.id, node.id)) project.emit_notification.assert_any_call("node.deleted", node.__json__()) project.emit_notification.assert_any_call("link.deleted", link.__json__())
async def test_add_node_non_local(controller): """ For a non local server we do not send the project path """ compute = MagicMock() compute.id = "remote" project = Project(controller=controller, name="Test") project.emit_notification = MagicMock() response = MagicMock() response.json = {"console": 2048} compute.post = AsyncioMagicMock(return_value=response) node = await project.add_node(compute, "test", None, node_type="vpcs", properties={"startup_script": "test.cfg"}) compute.post.assert_any_call('/projects', data={ "name": project._name, "project_id": project._id }) compute.post.assert_any_call('/projects/{}/vpcs/nodes'.format(project.id), data={ 'node_id': node.id, 'startup_script': 'test.cfg', 'name': 'test' }, timeout=1200) assert compute in project._project_created_on_compute project.emit_notification.assert_any_call("node.created", node.__json__())
def test_delete_node(async_run, controller): """ For a local server we send the project path """ compute = MagicMock() project = Project(controller=controller, name="Test") project.emit_notification = MagicMock() response = MagicMock() response.json = {"console": 2048} compute.post = AsyncioMagicMock(return_value=response) node = async_run( project.add_node(compute, "test", None, node_type="vpcs", properties={"startup_config": "test.cfg"})) assert node.id in project._nodes async_run(project.delete_node(node.id)) assert node.id not in project._nodes compute.delete.assert_any_call('/projects/{}/vpcs/nodes/{}'.format( project.id, node.id)) project.emit_notification.assert_any_call("node.deleted", node.__json__())
def test_update(controller, async_run): project = Project(controller=controller, name="Hello") project.emit_notification = MagicMock() assert project.name == "Hello" async_run(project.update(name="World")) assert project.name == "World" project.emit_notification.assert_any_call("project.updated", project.__json__())
async def test_update_on_compute(controller): variables = [{"name": "TEST", "value": "VAL1"}] compute = MagicMock() compute.id = "local" project = Project(controller=controller, name="Test") project._project_created_on_compute = [compute] project.emit_notification = MagicMock() await project.update(variables=variables) compute.put.assert_any_call('/projects/{}'.format(project.id), {"variables": variables})
def test_open_close(async_run, controller): project = Project(controller=controller, name="Test") assert project.status == "opened" async_run(project.close()) project.start_all = AsyncioMagicMock() async_run(project.open()) assert not project.start_all.called assert project.status == "opened" project.emit_notification = MagicMock() async_run(project.close()) assert project.status == "closed" project.emit_notification.assert_any_call("project.closed", project.__json__())
async def test_delete_locked_node(controller): """ For a local server we send the project path """ compute = MagicMock() project = Project(controller=controller, name="Test") project.emit_notification = MagicMock() response = MagicMock() response.json = {"console": 2048} compute.post = AsyncioMagicMock(return_value=response) node = await project.add_node(compute, "test", None, node_type="vpcs", properties={"startup_config": "test.cfg"}) assert node.id in project._nodes node.locked = True with pytest.raises(aiohttp.web_exceptions.HTTPConflict): await project.delete_node(node.id)