Disallow export of project with VirtualBox linked clone

Fix https://github.com/GNS3/gns3-gui/issues/1824
This commit is contained in:
Julien Duponchelle 2017-02-14 16:41:31 +01:00
parent a191029c4f
commit e04eb44a15
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
3 changed files with 24 additions and 4 deletions

View File

@ -136,6 +136,8 @@ def _export_project_file(project, path, z, include_images, keep_compute_id, allo
if "topology" in topology: if "topology" in topology:
if "nodes" in topology["topology"]: if "nodes" in topology["topology"]:
for node in topology["topology"]["nodes"]: for node in topology["topology"]["nodes"]:
if node["node_type"] == "virtualbox" and node.get("properties", {}).get("linked_clone"):
raise aiohttp.web.HTTPConflict(text="Topology with a linked {} clone could not be exported. Use qemu instead.".format(node["node_type"]))
if not allow_all_nodes and node["node_type"] in ["virtualbox", "vmware", "cloud"]: if not allow_all_nodes and node["node_type"] in ["virtualbox", "vmware", "cloud"]:
raise aiohttp.web.HTTPConflict(text="Topology with a {} could not be exported".format(node["node_type"])) raise aiohttp.web.HTTPConflict(text="Topology with a {} could not be exported".format(node["node_type"]))

View File

@ -190,9 +190,9 @@ def test_export_disallow_some_type(tmpdir, project, async_run):
topology = { topology = {
"topology": { "topology": {
"nodes": [ "nodes": [
{ {
"node_type": "virtualbox" "node_type": "cloud"
} }
] ]
} }
} }
@ -204,6 +204,24 @@ def test_export_disallow_some_type(tmpdir, project, async_run):
z = async_run(export_project(project, str(tmpdir))) z = async_run(export_project(project, str(tmpdir)))
z = async_run(export_project(project, str(tmpdir), allow_all_nodes=True)) z = async_run(export_project(project, str(tmpdir), allow_all_nodes=True))
# VirtualBox is always disallowed
topology = {
"topology": {
"nodes": [
{
"node_type": "virtualbox",
"properties": {
"linked_clone": True
}
}
]
}
}
with open(os.path.join(path, "test.gns3"), 'w+') as f:
json.dump(topology, f)
with pytest.raises(aiohttp.web.HTTPConflict):
z = async_run(export_project(project, str(tmpdir), allow_all_nodes=True))
def test_export_fix_path(tmpdir, project, async_run): def test_export_fix_path(tmpdir, project, async_run):
""" """

View File

@ -427,7 +427,7 @@ def test_duplicate(project, async_run, controller):
remote_vpcs = async_run(project.add_node(compute, "test", None, node_type="vpcs", properties={"startup_config": "test.cfg"})) remote_vpcs = async_run(project.add_node(compute, "test", None, node_type="vpcs", properties={"startup_config": "test.cfg"}))
# We allow node not allowed for standard import / export # We allow node not allowed for standard import / export
remote_virtualbox = async_run(project.add_node(compute, "test", None, node_type="virtualbox", properties={"startup_config": "test.cfg"})) remote_virtualbox = async_run(project.add_node(compute, "test", None, node_type="vmware", properties={"startup_config": "test.cfg"}))
new_project = async_run(project.duplicate(name="Hello")) new_project = async_run(project.duplicate(name="Hello"))
assert new_project.id != project.id assert new_project.id != project.id