Move the generation of the list of ports to the server

Ref #676
This commit is contained in:
Julien Duponchelle committed 2016-09-14 15:21:37 +02:00
1 parent f06c00fdb8
commit 2f0e2260ab
50 files changed
+1347 -240

No files matched your search

+1 -1
View File
@@ -29,7 +29,7 @@ def test_json(on_gns3vm, project):
"node_id": nat.id,
"project_id": project.id,
"status": "started",
"ports": [
"ports_mapping": [
{
"interface": "virbr0",
"name": "virbr0",
+18 -2
View File
@@ -101,7 +101,20 @@ def test_json(node, compute):
"width": node.width,
"height": node.height,
"symbol": node.symbol,
"label": node.label
"label": node.label,
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": None,
"ports": [
{
"adapter_number": 0,
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"link_type": "ethernet",
"name": "Ethernet0",
"port_number": 0,
"short_name": "e0/0"
}
]
}
assert node.__json__(topology_dump=True) == {
"compute_id": str(compute.id),
@@ -117,7 +130,10 @@ def test_json(node, compute):
"width": node.width,
"height": node.height,
"symbol": node.symbol,
"label": node.label
"label": node.label,
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": None
}
+446
View File
@@ -0,0 +1,446 @@
#!/usr/bin/env python
#
# Copyright (C) 2016 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import pytest
import uuid
from tests.utils import AsyncioMagicMock
from gns3server.controller.node import Node
from gns3server.controller.project import Project
@pytest.fixture
def compute():
s = AsyncioMagicMock()
s.id = "http://test.com:42"
return s
@pytest.fixture
def project(controller):
return Project(str(uuid.uuid4()), controller=controller)
@pytest.fixture
def node(compute, project):
node = Node(project, compute, "demo",
node_id=str(uuid.uuid4()),
node_type="vpcs",
console_type="vnc",
properties={"startup_script": "echo test"})
return node
def test_list_ports(node):
"""
List port by default
"""
assert node.__json__()["ports"] == [
{
"name": "Ethernet0",
"short_name": "e0/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 0,
"link_type": "ethernet"
}
]
def test_list_ports_port_name_format(node):
"""
Support port name format
"""
node._first_port_name = None
node._port_name_format = "eth{}"
assert node.__json__()["ports"][0]["name"] == "eth0"
node._port_name_format = "eth{port0}"
assert node.__json__()["ports"][0]["name"] == "eth0"
node._port_name_format = "eth{port1}"
assert node.__json__()["ports"][0]["name"] == "eth1"
node._first_port_name = ""
node._port_segment_size = 2
node._port_name_format = "eth{segment0}/{port0}"
node.properties["adapters"] = 8
assert node.__json__()["ports"][6]["name"] == "eth3/0"
assert node.__json__()["ports"][7]["name"] == "eth3/1"
node._first_port_name = "mgnt0"
assert node.__json__()["ports"][0]["name"] == "mgnt0"
assert node.__json__()["ports"][1]["name"] == "eth0/0"
def test_list_ports_adapters(node):
"""
List port using adapters properties
"""
node.properties["adapters"] = 2
assert node.__json__()["ports"] == [
{
"name": "Ethernet0",
"short_name": "e0/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 0,
"link_type": "ethernet"
},
{
"name": "Ethernet1",
"short_name": "e1/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 1,
"link_type": "ethernet"
}
]
def test_list_ports_atm_switch(project, compute):
"""
List port for atm switch
"""
node = Node(project, compute, "demo",
node_id=str(uuid.uuid4()),
node_type="atm_switch")
node.properties["mappings"] = {
"1:0:100": "10:0:200"
}
assert node.__json__()["ports"] == [
{
"name": "ATM0",
"short_name": "a0/0",
"data_link_types": {"ATM": "DLT_ATM_RFC1483"},
"port_number": 0,
"adapter_number": 0,
"link_type": "serial"
}
]
def test_list_ports_frame_relay_switch(project, compute):
"""
List port for frame relay switch
"""
node = Node(project, compute, "demo",
node_id=str(uuid.uuid4()),
node_type="frame_relay_switch")
node.properties["mappings"] = {
"1:0:100": "10:0:200"
}
assert node.__json__()["ports"] == [
{
"name": "FrameRelay0",
"short_name": "s0/0",
"data_link_types": {"Frame Relay": "DLT_FRELAY"},
"port_number": 0,
"adapter_number": 0,
"link_type": "serial"
}
]
def test_list_ports_iou(compute, project):
"""
IOU has a special behavior 4 port by adapters
"""
node = Node(project, compute, "demo",
node_id=str(uuid.uuid4()),
node_type="iou")
node.properties["serial_adapters"] = 2
node.properties["ethernet_adapters"] = 3
assert node.__json__()["ports"] == [
{
"name": "Serial0/0",
"short_name": "s0/0",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 0,
"adapter_number": 0,
"link_type": "serial"
},
{
"name": "Serial0/1",
"short_name": "s0/1",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 1,
"adapter_number": 0,
"link_type": "serial"
},
{
"name": "Serial0/2",
"short_name": "s0/2",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 2,
"adapter_number": 0,
"link_type": "serial"
},
{
"name": "Serial0/3",
"short_name": "s0/3",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 3,
"adapter_number": 0,
"link_type": "serial"
},
{
"name": "Serial1/0",
"short_name": "s1/0",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 0,
"adapter_number": 1,
"link_type": "serial"
},
{
"name": "Serial1/1",
"short_name": "s1/1",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 1,
"adapter_number": 1,
"link_type": "serial"
},
{
"name": "Serial1/2",
"short_name": "s1/2",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 2,
"adapter_number": 1,
"link_type": "serial"
},
{
"name": "Serial1/3",
"short_name": "s1/3",
"data_link_types": {
"Frame Relay": "DLT_FRELAY",
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL"
},
"port_number": 3,
"adapter_number": 1,
"link_type": "serial"
},
{
"name": "Ethernet0/0",
"short_name": "e0/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 0,
"link_type": "ethernet"
},
{
"name": "Ethernet0/1",
"short_name": "e0/1",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 1,
"adapter_number": 0,
"link_type": "ethernet"
},
{
"name": "Ethernet0/2",
"short_name": "e0/2",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 2,
"adapter_number": 0,
"link_type": "ethernet"
},
{
"name": "Ethernet0/3",
"short_name": "e0/3",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 3,
"adapter_number": 0,
"link_type": "ethernet"
},
{
"name": "Ethernet1/0",
"short_name": "e1/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 1,
"link_type": "ethernet"
},
{
"name": "Ethernet1/1",
"short_name": "e1/1",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 1,
"adapter_number": 1,
"link_type": "ethernet"
},
{
"name": "Ethernet1/2",
"short_name": "e1/2",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 2,
"adapter_number": 1,
"link_type": "ethernet"
},
{
"name": "Ethernet1/3",
"short_name": "e1/3",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 3,
"adapter_number": 1,
"link_type": "ethernet"
},
{
"name": "Ethernet2/0",
"short_name": "e2/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 2,
"link_type": "ethernet"
},
{
"name": "Ethernet2/1",
"short_name": "e2/1",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 1,
"adapter_number": 2,
"link_type": "ethernet"
},
{
"name": "Ethernet2/2",
"short_name": "e2/2",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 2,
"adapter_number": 2,
"link_type": "ethernet"
},
{
"name": "Ethernet2/3",
"short_name": "e2/3",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 3,
"adapter_number": 2,
"link_type": "ethernet"
}
]
def test_list_ports_dynamips(project, compute):
"""
List port for dynamips
"""
node = Node(project, compute, "demo",
node_id=str(uuid.uuid4()),
node_type="dynamips")
node.properties["slot0"] = "C7200-IO-FE"
node.properties["slot1"] = "GT96100-FE"
node.properties["wic0"] = "WIC-2T"
node.properties["wic1"] = "WIC-2T"
assert node.__json__()["ports"] == [
{
"name": "FastEthernet0/0",
"short_name": "f0/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 0,
"link_type": "ethernet"
},
{
"name": "FastEthernet1/0",
"short_name": "f1/0",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 0,
"adapter_number": 1,
"link_type": "ethernet"
},
{
"name": "FastEthernet1/1",
"short_name": "f1/1",
"data_link_types": {"Ethernet": "DLT_EN10MB"},
"port_number": 1,
"adapter_number": 1,
"link_type": "ethernet"
},
{
"name": "Serial0/16",
"short_name": "s0/16",
"data_link_types": {
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL",
"Frame Relay": "DLT_FRELAY"},
"port_number": 16,
"adapter_number": 0,
"link_type": "serial"
},
{
"name": "Serial0/17",
"short_name": "s0/17",
"data_link_types": {
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL",
"Frame Relay": "DLT_FRELAY"},
"port_number": 17,
"adapter_number": 0,
"link_type": "serial"
},
{
"name": "Serial0/18",
"short_name": "s0/18",
"data_link_types": {
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL",
"Frame Relay": "DLT_FRELAY"},
"port_number": 18,
"adapter_number": 0,
"link_type": "serial"
},
{
"name": "Serial0/19",
"short_name": "s0/19",
"data_link_types": {
"Cisco HDLC": "DLT_C_HDLC",
"Cisco PPP": "DLT_PPP_SERIAL",
"Frame Relay": "DLT_FRELAY"},
"port_number": 19,
"adapter_number": 0,
"link_type": "serial"
}
]
@@ -31,6 +31,9 @@
"name": "R1",
"node_id": "0bce6ad5-c688-4d4d-a425-f21aaf3927e2",
"node_type": "dynamips",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"dynamips_id": 1,
"auto_delete_disks": true,
@@ -30,6 +30,9 @@
"name": "ATM1",
"node_id": "ANYUUID",
"node_type": "atm_switch",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"mappings": {
"1:0:100": "10:0:200"
@@ -54,8 +57,11 @@
"name": "HUB1",
"node_id": "ANYUUID",
"node_type": "ethernet_hub",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"ports": [
"ports_mapping": [
{
"name": "Ethernet1",
"port_number": 1
@@ -109,8 +115,11 @@
"name": "SW1",
"node_id": "ANYUUID",
"node_type": "ethernet_switch",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"ports": [
"ports_mapping": [
{
"name": "Ethernet1",
"port_number": 1,
@@ -180,6 +189,9 @@
"name": "FR1",
"node_id": "ANYUUID",
"node_type": "frame_relay_switch",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"mappings": {
"1:101": "10:202"
@@ -30,10 +30,13 @@
"name": "Cloud 1",
"node_id": "ANYUUID",
"node_type": "cloud",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"interfaces": [
],
"ports": [
"ports_mapping": [
{
"interface": "bridge0",
"name": "bridge0",
@@ -30,6 +30,9 @@
"name": "remote_busybox-1",
"node_id": "d397ef5a-84f1-4b6b-9d44-671937ec7781",
"node_type": "docker",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"adapters": 1,
"aux": 6002,
@@ -30,6 +30,9 @@
"name": "R1",
"node_id": "11845dea-f175-495b-9fc5-bf20a2262016",
"node_type": "dynamips",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"auto_delete_disks": true,
"clock_divisor": 8,
@@ -72,6 +75,9 @@
"name": "ESW1",
"node_id": "4478a968-72a1-4722-9039-db7561c717c4",
"node_type": "dynamips",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"auto_delete_disks": false,
"chassis": "3660",
@@ -30,10 +30,13 @@
"name": "Host 1",
"node_id": "ANYUUID",
"node_type": "cloud",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"interfaces": [
],
"ports": [
"ports_mapping": [
{"interface": "bridge0", "port_number": 1, "type": "ethernet", "name": "bridge0"},
{"interface": "en0", "port_number": 2, "type": "ethernet", "name": "en0"},
{"interface": "en1", "port_number": 3, "type": "ethernet", "name": "en1"},
@@ -40,6 +40,9 @@
"name": "Internet 0.1-1",
"node_id": "b8bef484-89d2-42a7-b151-6ead2eda965e",
"node_type": "nat",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"ports": [
{
@@ -69,6 +72,9 @@
"name": "PC1",
"node_id": "761c5e9e-eded-45b5-b6db-ca367b1855e2",
"node_type": "vpcs",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"startup_script_path": "startup.vpc"
},
@@ -30,6 +30,9 @@
"name": "IOU1",
"node_id": "aaeb2288-a7d8-42a9-b9d8-c42ab464a390",
"node_type": "iou",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"ethernet_adapters": 2,
"l1_keepalives": false,
@@ -30,6 +30,9 @@
"name": "MicroCore-1",
"node_id": "426face4-7f73-436b-88fa-050e3ee101e9",
"node_type": "qemu",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"acpi_shutdown": false,
"adapter_type": "e1000",
@@ -14,6 +14,9 @@
"name" : "PC1",
"symbol" : ":/symbols/vpcs_guest.svg",
"console_type" : "telnet",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties" : {
"startup_script_path" : "startup.vpc"
},
@@ -30,6 +30,9 @@
"name": "debian",
"node_id": "af5fa728-85da-44f1-b17a-e99a65a7037e",
"node_type": "virtualbox",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"acpi_shutdown": false,
"adapter_type": "Intel PRO/1000 MT Desktop (82540EM)",
@@ -30,6 +30,9 @@
"name": "GNS3 VM",
"node_id": "9e06d0ce-e8df-4f38-bdfa-7c83e19a91c1",
"node_type": "vmware",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"acpi_shutdown": false,
"adapter_type": "e1000",
@@ -46,6 +46,9 @@
"name": "PC1",
"node_id": "0fd3dd4d-dc93-4a04-a9b9-7396a9e22e8b",
"node_type": "vpcs",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"startup_script_path": "startup.vpc"
},
@@ -68,6 +71,9 @@
"name": "PC2",
"node_id": "b570a150-c09f-47d9-8d32-9ca5b03234d6",
"node_type": "vpcs",
"port_name_format": "Ethernet{0}",
"port_segment_size": 0,
"first_port_name": null,
"properties": {
"startup_script_path": "startup.vpc"
},