diff --git a/tests/api/routes/controller/test_links.py b/tests/api/routes/controller/test_links.py index 2103ddaa5..a5aea4d5e 100644 --- a/tests/api/routes/controller/test_links.py +++ b/tests/api/routes/controller/test_links.py @@ -423,3 +423,86 @@ class TestLinkRoutes: assert mock.called assert response.status_code == status.HTTP_200_OK assert response.json() == FILTERS + + async def test_get_udp_interface(self, app: FastAPI, client: AsyncClient, project: Project) -> None: + """ + Test getting UDP tunnel interface information from a link. + """ + link = Link(project) + project._links = {link.id: link} + + cloud_node = MagicMock() + cloud_node.node_type = "cloud" + cloud_node.id = "cloud-node-id" + cloud_node.name = "Cloud1" + + compute = MagicMock() + response = MagicMock() + response.json = { + "ports_mapping": [ + { + "port_number": 1, + "type": "udp", + "lport": 20000, + "rhost": "127.0.0.1", + "rport": 30000, + "name": "UDP tunnel 1" + } + ] + } + compute.get = AsyncioMagicMock(return_value=response) + cloud_node.compute = compute + + link._nodes = [{"node": cloud_node, "port_number": 1}] + + response = await client.get(app.url_path_for("get_iface", project_id=project.id, link_id=link.id)) + + assert response.status_code == status.HTTP_200_OK + result = response.json() + + assert "cloud-node-id" in result + + udp_info = result["cloud-node-id"] + assert udp_info["lport"] == 20000 + assert udp_info["rhost"] == "127.0.0.1" + assert udp_info["rport"] == 30000 + assert udp_info["type"] == "udp" + async def test_get_ethernet_interface(self, app: FastAPI, client: AsyncClient, project: Project) -> None: + """ + Test getting ethernet interface information from a link. + """ + link = Link(project) + project._links = {link.id: link} + + cloud_node = MagicMock() + cloud_node.node_type = "cloud" + cloud_node.id = "cloud-node-id" + cloud_node.name = "Cloud1" + + compute = MagicMock() + response = MagicMock() + response.json = { + "ports_mapping": [ + { + "port_number": 1, + "type": "ethernet", + "interface": "eth0", + "name": "Ethernet 1" + } + ] + } + compute.get = AsyncioMagicMock(return_value=response) + cloud_node.compute = compute + + link._nodes = [{"node": cloud_node, "port_number": 1}] + + response = await client.get(app.url_path_for("get_iface", project_id=project.id, link_id=link.id)) + + assert response.status_code == status.HTTP_200_OK + result = response.json() + + assert "cloud-node-id" in result + + interface_info = result["cloud-node-id"] + assert interface_info["interface"] == "eth0" + assert interface_info["type"] == "ethernet" \ No newline at end of file