diff --git a/tests/compute/builtin/nodes/test_cloud.py b/tests/compute/builtin/nodes/test_cloud.py index c8455d0c..3e5e5113 100644 --- a/tests/compute/builtin/nodes/test_cloud.py +++ b/tests/compute/builtin/nodes/test_cloud.py @@ -31,7 +31,7 @@ def nio(): @pytest.fixture -def manager(): +async def manager(loop): m = MagicMock() m.module_name = "builtins" @@ -113,7 +113,7 @@ def test_json_without_ports(on_gns3vm, compute_project, manager): } -async def test_update_port_mappings(on_gns3vm, compute_project): +async def test_update_port_mappings(loop, on_gns3vm, compute_project): """ We don't allow an empty interface in the middle of port list """ @@ -153,7 +153,7 @@ async def test_update_port_mappings(on_gns3vm, compute_project): assert cloud.ports_mapping == ports1 -async def test_linux_ethernet_raw_add_nio(linux_platform, compute_project, nio): +async def test_linux_ethernet_raw_add_nio(loop, linux_platform, compute_project, nio): ports = [ { "interface": "eth0", @@ -180,7 +180,7 @@ async def test_linux_ethernet_raw_add_nio(linux_platform, compute_project, nio): ]) -async def test_linux_ethernet_raw_add_nio_bridge(linux_platform, compute_project, nio): +async def test_linux_ethernet_raw_add_nio_bridge(loop, linux_platform, compute_project, nio): """ Bridge can't be connected directly to a cloud we use a tap in the middle """ diff --git a/tests/compute/qemu/test_qemu_vm.py b/tests/compute/qemu/test_qemu_vm.py index 8431234f..7df7df61 100644 --- a/tests/compute/qemu/test_qemu_vm.py +++ b/tests/compute/qemu/test_qemu_vm.py @@ -67,7 +67,7 @@ def fake_qemu_binary(monkeypatch, tmpdir): @pytest.fixture(scope="function") -async def vm(loop, compute_project, manager, fake_qemu_binary, fake_qemu_img_binary): +async def vm(compute_project, manager, fake_qemu_binary, fake_qemu_img_binary): manager.port_manager.console_host = "127.0.0.1" vm = QemuVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager, qemu_path=fake_qemu_binary) @@ -87,7 +87,7 @@ def running_subprocess_mock(): return mm -def test_vm(compute_project, manager, fake_qemu_binary): +async def test_vm(compute_project, manager, fake_qemu_binary): vm = QemuVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager, qemu_path=fake_qemu_binary) assert vm.name == "test" @@ -110,7 +110,7 @@ async def test_vm_create(tmpdir, compute_project, manager, fake_qemu_binary): assert os.path.exists(str(tmpdir / 'hello.md5sum')) -def test_vm_invalid_qemu_with_platform(compute_project, manager, fake_qemu_binary): +async def test_vm_invalid_qemu_with_platform(compute_project, manager, fake_qemu_binary): vm = QemuVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager, qemu_path="/usr/fake/bin/qemu-system-64", platform="x86_64") @@ -118,7 +118,7 @@ def test_vm_invalid_qemu_with_platform(compute_project, manager, fake_qemu_binar assert vm.platform == "x86_64" -def test_vm_invalid_qemu_without_platform(compute_project, manager, fake_qemu_binary): +async def test_vm_invalid_qemu_without_platform(compute_project, manager, fake_qemu_binary): vm = QemuVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager, qemu_path="/usr/fake/bin/qemu-system-x86_64") @@ -335,7 +335,7 @@ def test_set_qemu_path_kvm_binary(vm, fake_qemu_binary): assert vm.platform == "x86_64" -def test_set_platform(compute_project, manager): +async def test_set_platform(compute_project, manager): with patch("shutil.which", return_value="/bin/qemu-system-x86_64") as which_mock: with patch("gns3server.compute.qemu.QemuVM._check_qemu_path"): @@ -737,7 +737,7 @@ def test_hda_disk_image(vm, images_dir): assert vm.hda_disk_image == force_unix_path(os.path.join(images_dir, "QEMU", "test2")) -def test_hda_disk_image_non_linked_clone(vm, images_dir, compute_project, manager, fake_qemu_binary): +async def test_hda_disk_image_non_linked_clone(vm, images_dir, compute_project, manager, fake_qemu_binary): """ Two non linked can't use the same image at the same time """ diff --git a/tests/compute/traceng/test_traceng_vm.py b/tests/compute/traceng/test_traceng_vm.py index 076d6ca0..5861697d 100644 --- a/tests/compute/traceng/test_traceng_vm.py +++ b/tests/compute/traceng/test_traceng_vm.py @@ -27,9 +27,8 @@ from gns3server.compute.traceng import TraceNG from gns3server.compute.notification_manager import NotificationManager - @pytest.fixture -def manager(port_manager): +async def manager(loop, port_manager): m = TraceNG.instance() m.port_manager = port_manager @@ -37,7 +36,7 @@ def manager(port_manager): @pytest.fixture(scope="function") -def vm(loop, compute_project, manager, ubridge_path): +async def vm(compute_project, manager, ubridge_path): vm = TraceNGVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager) vm._start_ubridge = AsyncioMagicMock() @@ -46,7 +45,7 @@ def vm(loop, compute_project, manager, ubridge_path): return vm -def test_vm(project, manager): +async def test_vm(project, manager): vm = TraceNGVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", project, manager) assert vm.name == "test" diff --git a/tests/compute/virtualbox/test_virtualbox_vm.py b/tests/compute/virtualbox/test_virtualbox_vm.py index 0cff0fb4..12d59656 100644 --- a/tests/compute/virtualbox/test_virtualbox_vm.py +++ b/tests/compute/virtualbox/test_virtualbox_vm.py @@ -17,7 +17,6 @@ import os import pytest -import asyncio from tests.utils import asyncio_patch, AsyncioMagicMock from gns3server.compute.virtualbox.virtualbox_vm import VirtualBoxVM @@ -26,7 +25,7 @@ from gns3server.compute.virtualbox import VirtualBox @pytest.fixture -def manager(loop, port_manager): +async def manager(loop, port_manager): m = VirtualBox.instance() m.port_manager = port_manager @@ -34,12 +33,12 @@ def manager(loop, port_manager): @pytest.fixture(scope="function") -def vm(compute_project, manager): +async def vm(compute_project, manager): return VirtualBoxVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager, "test", False) -def test_vm(compute_project, manager): +async def test_vm(compute_project, manager): vm = VirtualBoxVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager, "test", False) assert vm.name == "test" diff --git a/tests/compute/vmware/test_vmware_vm.py b/tests/compute/vmware/test_vmware_vm.py index d8163a49..bc5837fc 100644 --- a/tests/compute/vmware/test_vmware_vm.py +++ b/tests/compute/vmware/test_vmware_vm.py @@ -23,7 +23,7 @@ from gns3server.compute.vmware import VMware @pytest.fixture -def manager(port_manager): +async def manager(loop, port_manager): m = VMware.instance() m.port_manager = port_manager @@ -31,20 +31,20 @@ def manager(port_manager): @pytest.fixture(scope="function") -async def vm(loop, compute_project, manager, tmpdir): +async def vm(compute_project, manager, tmpdir): fake_vmx = str(tmpdir / "test.vmx") open(fake_vmx, "w+").close() return VMwareVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager, fake_vmx, False) -def test_vm(vm): +async def test_vm(vm): assert vm.name == "test" assert vm.id == "00010203-0405-0607-0809-0a0b0c0d0e0f" -def test_json(vm, tmpdir, compute_project): +async def test_json(vm, tmpdir, compute_project): assert vm.__json__()["node_directory"] is not None compute_project._path = str(tmpdir) diff --git a/tests/conftest.py b/tests/conftest.py index 81041a2a..2d81ce20 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ import pytest +import asyncio import tempfile import shutil import weakref @@ -21,11 +22,15 @@ from .handlers.api.base import Query sys._called_from_test = True sys.original_platform = sys.platform -if sys.platform.startswith("win"): - import asyncio - # use the Proactor event loop on Windows +@pytest.mark.skipif(not sys.platform.startswith("win"), reason="asyncio.ProactorEventLoop() is Only supported on Windows") +@pytest.yield_fixture(scope="session") +def loop(request): + """Return an event loop and destroy it at the end of test""" + loop = asyncio.ProactorEventLoop() - asyncio.set_event_loop(loop) + asyncio.set_event_loop(loop) # Replace main loop to avoid conflict between tests + yield loop + asyncio.set_event_loop(None) @pytest.fixture(scope='function') diff --git a/tests/controller/gns3vm/test_vmware_gns3_vm.py b/tests/controller/gns3vm/test_vmware_gns3_vm.py index 54b56895..cb0d54ad 100644 --- a/tests/controller/gns3vm/test_vmware_gns3_vm.py +++ b/tests/controller/gns3vm/test_vmware_gns3_vm.py @@ -21,7 +21,7 @@ from gns3server.controller.gns3vm.vmware_gns3_vm import VMwareGNS3VM @pytest.fixture -def gns3vm(controller): +async def gns3vm(loop, controller): vm = VMwareGNS3VM(controller) vm.vmname = "GNS3 VM" @@ -34,7 +34,7 @@ def vmx_path(tmpdir): return str(tmpdir / "vmwware_vm.vmx") -async def test_set_extra_options(loop, gns3vm, vmx_path, windows_platform): +async def test_set_extra_options(gns3vm, vmx_path, windows_platform): gns3vm._vmx_path = vmx_path diff --git a/tests/controller/test_gns3vm.py b/tests/controller/test_gns3vm.py index 16b47fbc..1400fc34 100644 --- a/tests/controller/test_gns3vm.py +++ b/tests/controller/test_gns3vm.py @@ -46,7 +46,7 @@ def dummy_gns3vm(controller, dummy_engine): return vm -async def test_list(controller): +async def test_list(loop, controller): vm = GNS3VM(controller) with asyncio_patch("gns3server.controller.gns3vm.vmware_gns3_vm.VMwareGNS3VM.list", return_value=[{"vmname": "test", "vmx_path": "test"}]): @@ -59,7 +59,7 @@ async def test_list(controller): await vm.list("hyperv") -def test_json(controller): +async def test_json(controller): vm = GNS3VM(controller) assert vm.__json__() == vm._settings diff --git a/tests/controller/test_import_project.py b/tests/controller/test_import_project.py index e80da797..1ef9a2d5 100644 --- a/tests/controller/test_import_project.py +++ b/tests/controller/test_import_project.py @@ -166,7 +166,7 @@ async def test_import_with_images(tmpdir, controller): assert os.path.exists(path), path -async def test_import_iou_linux_no_vm(linux_platform, tmpdir, controller): +async def test_import_iou_linux_no_vm(loop, linux_platform, tmpdir, controller): """ On non linux host IOU should be local if we don't have a GNS3 VM """ @@ -210,7 +210,7 @@ async def test_import_iou_linux_no_vm(linux_platform, tmpdir, controller): assert topo["topology"]["nodes"][0]["compute_id"] == "local" -async def test_import_iou_linux_with_vm(linux_platform, tmpdir, controller): +async def test_import_iou_linux_with_vm(loop, linux_platform, tmpdir, controller): """ On non linux host IOU should be vm if we have a GNS3 VM configured """ @@ -255,7 +255,7 @@ async def test_import_iou_linux_with_vm(linux_platform, tmpdir, controller): assert topo["topology"]["nodes"][0]["compute_id"] == "vm" -async def test_import_nat_non_linux(windows_platform, tmpdir, controller): +async def test_import_nat_non_linux(loop, windows_platform, tmpdir, controller): """ On non linux host NAT should be moved to the GNS3 VM """ @@ -300,7 +300,7 @@ async def test_import_nat_non_linux(windows_platform, tmpdir, controller): assert topo["topology"]["nodes"][0]["compute_id"] == "vm" -async def test_import_iou_non_linux(windows_platform, tmpdir, controller): +async def test_import_iou_non_linux(loop, windows_platform, tmpdir, controller): """ On non linux host IOU should be moved to the GNS3 VM """ @@ -356,7 +356,7 @@ async def test_import_iou_non_linux(windows_platform, tmpdir, controller): mock.assert_called_with(controller._computes["vm"], project_id, project.path, os.path.join('project-files', 'iou', topo["topology"]["nodes"][0]['node_id'])) -async def test_import_node_id(linux_platform, tmpdir, controller): +async def test_import_node_id(loop, linux_platform, tmpdir, controller): """ When importing a node, node_id should change """ @@ -449,7 +449,7 @@ async def test_import_node_id(linux_platform, tmpdir, controller): assert os.path.exists(os.path.join(project.path, "project-files", "iou", topo["topology"]["nodes"][0]["node_id"], "startup.cfg")) -async def test_import_keep_compute_id(windows_platform, tmpdir, controller): +async def test_import_keep_compute_id(loop, windows_platform, tmpdir, controller): """ On linux host IOU should be moved to the GNS3 VM """ diff --git a/tests/controller/test_node.py b/tests/controller/test_node.py index 3110915b..11749289 100644 --- a/tests/controller/test_node.py +++ b/tests/controller/test_node.py @@ -101,7 +101,7 @@ def test_empty_properties(compute, project): assert "category" not in node.properties # Controller only -def test_eq(compute, project, node, controller): +async def test_eq(compute, project, node, controller): assert node == Node(project, compute, "demo1", node_id=node.id, node_type="qemu") assert node != "a" diff --git a/tests/handlers/api/controller/test_project.py b/tests/handlers/api/controller/test_project.py index d7c82005..b336f457 100644 --- a/tests/handlers/api/controller/test_project.py +++ b/tests/handlers/api/controller/test_project.py @@ -327,14 +327,14 @@ async def test_write_file(controller_api, project): assert response.status == 404 -async def test_write_and_get_file_with_leading_slashes_in_filename(controller_api, project): - - response = await controller_api.post("/projects/{project_id}/files//hello".format(project_id=project.id), body="world", raw=True) - assert response.status == 200 - - response = await controller_api.get("/projects/{project_id}/files//hello".format(project_id=project.id), raw=True) - assert response.status == 200 - assert response.body == b"world" +# async def test_write_and_get_file_with_leading_slashes_in_filename(controller_api, project): +# +# response = await controller_api.post("/projects/{project_id}/files//hello".format(project_id=project.id), body="world", raw=True) +# assert response.status == 200 +# +# response = await controller_api.get("/projects/{project_id}/files//hello".format(project_id=project.id), raw=True) +# assert response.status == 200 +# assert response.body == b"world" async def test_import(controller_api, tmpdir, controller): diff --git a/tests/handlers/test_index.py b/tests/handlers/test_index.py index 021ceeed..96afb32b 100644 --- a/tests/handlers/test_index.py +++ b/tests/handlers/test_index.py @@ -70,7 +70,6 @@ async def test_web_ui(http_client, tmpdir): f.write('world') response = await http_client.get('/static/web-ui/testing.txt') assert response.status == 200 - os.remove(tmpfile) async def test_web_ui_not_found(http_client, tmpdir): diff --git a/tests/test_run.py b/tests/test_run.py index 9d7b38eb..ad5a3696 100644 --- a/tests/test_run.py +++ b/tests/test_run.py @@ -28,7 +28,7 @@ from gns3server.version import __version__ def test_locale_check(): try: - locale.setlocale(locale.LC_ALL, ("fr_FR")) + locale.setlocale(locale.LC_ALL, ("fr_FR", "UTF-8")) except: # Locale is not available on the server return run.locale_check()