mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
Method for start / stop capture on a link
Ref https://github.com/GNS3/gns3-gui/issues/1117
This commit is contained in:
9 files changed
+230
-18
No files matched your search
@@ -57,6 +57,7 @@ def test_json(async_run, project, compute):
|
||||
async_run(link.addVM(vm2, 1, 3))
|
||||
assert link.__json__() == {
|
||||
"link_id": link.id,
|
||||
"data_link_type": "DLT_EN10MB",
|
||||
"vms": [
|
||||
{
|
||||
"vm_id": vm1.id,
|
||||
@@ -70,3 +71,12 @@ def test_json(async_run, project, compute):
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
def test_capture_filename(project, compute, async_run):
|
||||
vm1 = VM(project, compute, name="Hello@")
|
||||
vm2 = VM(project, compute, name="w0.rld")
|
||||
|
||||
link = Link(project)
|
||||
async_run(link.addVM(vm1, 0, 4))
|
||||
async_run(link.addVM(vm2, 1, 3))
|
||||
assert link.capture_file_name() == "Hello_0-4_to_w0rld_1-3.pcap"
|
||||
@@ -97,3 +97,65 @@ def test_delete(async_run, project):
|
||||
|
||||
compute1.delete.assert_any_call("/projects/{}/vpcs/vms/{}/adapters/0/ports/4/nio".format(project.id, vm1.id))
|
||||
compute2.delete.assert_any_call("/projects/{}/vpcs/vms/{}/adapters/3/ports/1/nio".format(project.id, vm2.id))
|
||||
|
||||
|
||||
def test_choose_capture_side(async_run, project):
|
||||
"""
|
||||
The link capture should run on the optimal node
|
||||
"""
|
||||
compute1 = MagicMock()
|
||||
compute2 = MagicMock()
|
||||
compute2.id = "local"
|
||||
|
||||
vm_vpcs = VM(project, compute1, vm_type="vpcs")
|
||||
vm_iou = VM(project, compute2, vm_type="iou")
|
||||
|
||||
link = UDPLink(project)
|
||||
async_run(link.addVM(vm_vpcs, 0, 4))
|
||||
async_run(link.addVM(vm_iou, 3, 1))
|
||||
|
||||
assert link._choose_capture_side()["vm"] == vm_iou
|
||||
|
||||
vm_vpcs = VM(project, compute1, vm_type="vpcs")
|
||||
vm_vpcs2 = VM(project, compute1, vm_type="vpcs")
|
||||
|
||||
link = UDPLink(project)
|
||||
async_run(link.addVM(vm_vpcs, 0, 4))
|
||||
async_run(link.addVM(vm_vpcs2, 3, 1))
|
||||
|
||||
# VPCS doesn't support capture
|
||||
with pytest.raises(aiohttp.web.HTTPConflict):
|
||||
link._choose_capture_side()["vm"]
|
||||
|
||||
# Capture should run on the local node
|
||||
vm_iou = VM(project, compute1, vm_type="iou")
|
||||
vm_iou2 = VM(project, compute2, vm_type="iou")
|
||||
|
||||
link = UDPLink(project)
|
||||
async_run(link.addVM(vm_iou, 0, 4))
|
||||
async_run(link.addVM(vm_iou2, 3, 1))
|
||||
|
||||
assert link._choose_capture_side()["vm"] == vm_iou2
|
||||
|
||||
|
||||
def test_capture(async_run, project):
|
||||
compute1 = MagicMock()
|
||||
|
||||
vm_vpcs = VM(project, compute1, vm_type="vpcs", name="V1")
|
||||
vm_iou = VM(project, compute1, vm_type="iou", name="I1")
|
||||
|
||||
link = UDPLink(project)
|
||||
async_run(link.addVM(vm_vpcs, 0, 4))
|
||||
async_run(link.addVM(vm_iou, 3, 1))
|
||||
|
||||
capture = async_run(link.start_capture())
|
||||
|
||||
compute1.post.assert_any_call("/projects/{}/iou/vms/{}/adapters/3/ports/1/start_capture".format(project.id, vm_iou.id), data={
|
||||
"capture_file_name": link.capture_file_name(),
|
||||
"data_link_type": "DLT_EN10MB"
|
||||
})
|
||||
|
||||
capture = async_run(link.stop_capture())
|
||||
|
||||
compute1.post.assert_any_call("/projects/{}/iou/vms/{}/adapters/3/ports/1/stop_capture".format(project.id, vm_iou.id))
|
||||
|
||||
@@ -36,11 +36,11 @@ from gns3server.controller.link import Link
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def hypervisor(http_controller, async_run):
|
||||
hypervisor = MagicMock()
|
||||
hypervisor.id = "example.com"
|
||||
Controller.instance()._hypervisors = {"example.com": hypervisor}
|
||||
return hypervisor
|
||||
def compute(http_controller, async_run):
|
||||
compute = MagicMock()
|
||||
compute.id = "example.com"
|
||||
Controller.instance()._computes = {"example.com": compute}
|
||||
return compute
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -48,13 +48,13 @@ def project(http_controller, async_run):
|
||||
return async_run(Controller.instance().addProject())
|
||||
|
||||
|
||||
def test_create_link(http_controller, tmpdir, project, hypervisor, async_run):
|
||||
def test_create_link(http_controller, tmpdir, project, compute, async_run):
|
||||
response = MagicMock()
|
||||
response.json = {"console": 2048}
|
||||
hypervisor.post = AsyncioMagicMock(return_value=response)
|
||||
compute.post = AsyncioMagicMock(return_value=response)
|
||||
|
||||
vm1 = async_run(project.addVM(hypervisor, None))
|
||||
vm2 = async_run(project.addVM(hypervisor, None))
|
||||
vm1 = async_run(project.addVM(compute, None))
|
||||
vm2 = async_run(project.addVM(compute, None))
|
||||
|
||||
with asyncio_patch("gns3server.controller.udp_link.UDPLink.create") as mock:
|
||||
response = http_controller.post("/projects/{}/links".format(project.id), {
|
||||
@@ -77,10 +77,29 @@ def test_create_link(http_controller, tmpdir, project, hypervisor, async_run):
|
||||
assert len(response.json["vms"]) == 2
|
||||
|
||||
|
||||
def test_delete_link(http_controller, tmpdir, project, hypervisor, async_run):
|
||||
def test_start_capture(http_controller, tmpdir, project, compute, async_run):
|
||||
link = Link(project)
|
||||
project._links = {link.id: link}
|
||||
with asyncio_patch("gns3server.controller.link.Link.start_capture") as mock:
|
||||
response = http_controller.post("/projects/{}/links/{}/start_capture".format(project.id, link.id), example=True)
|
||||
assert mock.called
|
||||
assert response.status == 204
|
||||
|
||||
|
||||
def test_stop_capture(http_controller, tmpdir, project, compute, async_run):
|
||||
link = Link(project)
|
||||
project._links = {link.id: link}
|
||||
with asyncio_patch("gns3server.controller.link.Link.stop_capture") as mock:
|
||||
response = http_controller.post("/projects/{}/links/{}/stop_capture".format(project.id, link.id), example=True)
|
||||
assert mock.called
|
||||
assert response.status == 204
|
||||
|
||||
|
||||
def test_delete_link(http_controller, tmpdir, project, compute, async_run):
|
||||
|
||||
link = Link(project)
|
||||
project._links = {link.id: link}
|
||||
with asyncio_patch("gns3server.controller.udp_link.Link.delete"):
|
||||
with asyncio_patch("gns3server.controller.link.Link.delete") as mock:
|
||||
response = http_controller.delete("/projects/{}/links/{}".format(project.id, link.id), example=True)
|
||||
assert mock.called
|
||||
assert response.status == 204
|
||||
Reference in new issue
Block a user