diff --git a/dev-requirements.txt b/dev-requirements.txt index 8b0b9a2b..58b361a2 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,8 +1,6 @@ -rrequirements.txt -pytest==7.2.0; python_version >= '3.7' -pytest==7.0.1; python_version < '3.7' # v7.0.1 is the last version to support Python 3.6 +pytest==7.2.0 flake8==5.0.4 pytest-timeout==2.1.0 -pytest-aiohttp==1.0.4; python_version >= '3.7' -pytest-aiohttp==0.3.0; python_version < '3.7' # last version to support Python 3.6 +pytest-aiohttp==1.0.4 diff --git a/gns3server/controller/compute.py b/gns3server/controller/compute.py index 2b903745..5d61027c 100644 --- a/gns3server/controller/compute.py +++ b/gns3server/controller/compute.py @@ -484,7 +484,7 @@ class Compute: return self._getUrl(path) async def _run_http_query(self, method, path, data=None, timeout=20, raw=False): - with async_timeout.timeout(timeout): + async with async_timeout.timeout(delay=timeout): url = self._getUrl(path) headers = {} headers['content-type'] = 'application/json' diff --git a/gns3server/controller/snapshot.py b/gns3server/controller/snapshot.py index 792a9261..46041c3d 100644 --- a/gns3server/controller/snapshot.py +++ b/gns3server/controller/snapshot.py @@ -52,15 +52,15 @@ class Snapshot: self._project = project if name: self._name = name - self._created_at = datetime.now().timestamp() - filename = self._name + "_" + datetime.utcfromtimestamp(self._created_at).replace(tzinfo=None).strftime(FILENAME_TIME_FORMAT) + ".gns3project" + self._created_at = datetime.now(timezone.utc).timestamp() + filename = self._name + "_" + datetime.fromtimestamp(self._created_at, tz=timezone.utc).replace(tzinfo=None).strftime(FILENAME_TIME_FORMAT) + ".gns3project" else: self._name = filename.split("_")[0] datestring = filename.replace(self._name + "_", "").split(".")[0] try: self._created_at = datetime.strptime(datestring, FILENAME_TIME_FORMAT).replace(tzinfo=timezone.utc).timestamp() except ValueError: - self._created_at = datetime.utcnow().timestamp() + self._created_at = datetime.now(timezone.utc) self._path = os.path.join(project.path, "snapshots", filename) @property diff --git a/pytest.ini b/pytest.ini index a37fdb73..e5b6c56c 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,4 +1,3 @@ [pytest] asyncio_mode=auto log_level=NOTSET -ignore=env \ No newline at end of file diff --git a/tests/compute/builtin/nodes/test_cloud.py b/tests/compute/builtin/nodes/test_cloud.py index 3e5e5113..09506b45 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 -async def manager(loop): +async def manager(): 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(loop, on_gns3vm, compute_project): +async def test_update_port_mappings(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(loop, on_gns3vm, compute_project): assert cloud.ports_mapping == ports1 -async def test_linux_ethernet_raw_add_nio(loop, linux_platform, compute_project, nio): +async def test_linux_ethernet_raw_add_nio(linux_platform, compute_project, nio): ports = [ { "interface": "eth0", @@ -180,7 +180,7 @@ async def test_linux_ethernet_raw_add_nio(loop, linux_platform, compute_project, ]) -async def test_linux_ethernet_raw_add_nio_bridge(loop, linux_platform, compute_project, nio): +async def test_linux_ethernet_raw_add_nio_bridge(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/docker/test_docker.py b/tests/compute/docker/test_docker.py index 4b925190..12e47342 100644 --- a/tests/compute/docker/test_docker.py +++ b/tests/compute/docker/test_docker.py @@ -25,7 +25,7 @@ from gns3server.compute.docker.docker_error import DockerError, DockerHttp404Err @pytest.fixture -async def vm(loop): +async def vm(): vm = Docker() vm._connected = True diff --git a/tests/compute/docker/test_docker_vm.py b/tests/compute/docker/test_docker_vm.py index e5271edd..81825eba 100644 --- a/tests/compute/docker/test_docker_vm.py +++ b/tests/compute/docker/test_docker_vm.py @@ -31,8 +31,11 @@ from gns3server.compute.docker import Docker from unittest.mock import patch, MagicMock, call +pytestmark = pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows") + + @pytest.fixture() -async def manager(loop, port_manager): +async def manager(port_manager): m = Docker.instance() m.port_manager = port_manager @@ -40,7 +43,7 @@ async def manager(loop, port_manager): @pytest.fixture(scope="function") -async def vm(loop, compute_project, manager): +async def vm(compute_project, manager): vm = DockerVM("test", str(uuid.uuid4()), compute_project, manager, "ubuntu:latest") vm._cid = "e90e34656842" diff --git a/tests/compute/dynamips/test_dynamips_manager.py b/tests/compute/dynamips/test_dynamips_manager.py index aee2c326..11bbdfc0 100644 --- a/tests/compute/dynamips/test_dynamips_manager.py +++ b/tests/compute/dynamips/test_dynamips_manager.py @@ -29,7 +29,7 @@ from tests.utils import asyncio_patch, AsyncioMagicMock @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = Dynamips.instance() m.port_manager = port_manager diff --git a/tests/compute/dynamips/test_dynamips_router.py b/tests/compute/dynamips/test_dynamips_router.py index 7657422e..1f3d0a21 100644 --- a/tests/compute/dynamips/test_dynamips_router.py +++ b/tests/compute/dynamips/test_dynamips_router.py @@ -26,7 +26,7 @@ from gns3server.config import Config @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = Dynamips.instance() m.port_manager = port_manager diff --git a/tests/compute/iou/test_iou_vm.py b/tests/compute/iou/test_iou_vm.py index 19a8ba70..9d2c8d48 100644 --- a/tests/compute/iou/test_iou_vm.py +++ b/tests/compute/iou/test_iou_vm.py @@ -37,7 +37,7 @@ if not sys.platform.startswith("win"): @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = IOU.instance() m.port_manager = port_manager @@ -45,7 +45,7 @@ async def manager(loop, port_manager): @pytest.fixture(scope="function") -async def vm(loop, compute_project, manager, tmpdir, fake_iou_bin, iourc_file): +async def vm(compute_project, manager, tmpdir, fake_iou_bin, iourc_file): vm = IOUVM("test", str(uuid.uuid4()), compute_project, manager, application_id=1) config = manager.config.get_section_config("IOU") diff --git a/tests/compute/qemu/test_qcow2.py b/tests/compute/qemu/test_qcow2.py index d185135b..b14e631e 100644 --- a/tests/compute/qemu/test_qcow2.py +++ b/tests/compute/qemu/test_qcow2.py @@ -66,7 +66,7 @@ def test_invalid_empty_file(tmpdir): @pytest.mark.skipif(qemu_img() is None, reason="qemu-img is not available") -async def test_rebase(loop, tmpdir): +async def test_rebase(tmpdir): shutil.copy("tests/resources/empty8G.qcow2", str(tmpdir / "empty16G.qcow2")) shutil.copy("tests/resources/linked.qcow2", str(tmpdir / "linked.qcow2")) diff --git a/tests/compute/qemu/test_qemu_vm.py b/tests/compute/qemu/test_qemu_vm.py index 4b7c0685..b35a21a5 100644 --- a/tests/compute/qemu/test_qemu_vm.py +++ b/tests/compute/qemu/test_qemu_vm.py @@ -34,7 +34,7 @@ from gns3server.compute.notification_manager import NotificationManager @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = Qemu.instance() m.port_manager = port_manager diff --git a/tests/compute/test_base_node.py b/tests/compute/test_base_node.py index d96c67ce..50060e3a 100644 --- a/tests/compute/test_base_node.py +++ b/tests/compute/test_base_node.py @@ -29,7 +29,7 @@ from gns3server.compute.nios.nio_udp import NIOUDP @pytest.fixture(scope="function") -async def manager(loop, port_manager): +async def manager(port_manager): m = VPCS.instance() m.port_manager = port_manager diff --git a/tests/compute/test_manager.py b/tests/compute/test_manager.py index eef0d1d2..556072db 100644 --- a/tests/compute/test_manager.py +++ b/tests/compute/test_manager.py @@ -29,7 +29,7 @@ from gns3server.utils import force_unix_path @pytest.fixture(scope="function") -async def vpcs(loop, port_manager): +async def vpcs(port_manager): VPCS._instance = None vpcs = VPCS.instance() @@ -38,7 +38,7 @@ async def vpcs(loop, port_manager): @pytest.fixture(scope="function") -async def qemu(loop, port_manager): +async def qemu(port_manager): Qemu._instance = None Qemu._init_config_disk = MagicMock() # do not create the config.img image diff --git a/tests/compute/test_project.py b/tests/compute/test_project.py index 6ae23717..11870b62 100644 --- a/tests/compute/test_project.py +++ b/tests/compute/test_project.py @@ -33,7 +33,7 @@ from gns3server.config import Config @pytest.fixture(scope="function") -async def manager(loop, port_manager): +async def manager(port_manager): m = VPCS.instance() m.port_manager = port_manager diff --git a/tests/compute/traceng/test_traceng_vm.py b/tests/compute/traceng/test_traceng_vm.py index e4d381dd..ce36a347 100644 --- a/tests/compute/traceng/test_traceng_vm.py +++ b/tests/compute/traceng/test_traceng_vm.py @@ -28,7 +28,7 @@ from gns3server.compute.notification_manager import NotificationManager @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = TraceNG.instance() m.port_manager = port_manager diff --git a/tests/compute/virtualbox/test_virtualbox_manager.py b/tests/compute/virtualbox/test_virtualbox_manager.py index 3ba1d9eb..ddbb28b9 100644 --- a/tests/compute/virtualbox/test_virtualbox_manager.py +++ b/tests/compute/virtualbox/test_virtualbox_manager.py @@ -29,7 +29,7 @@ from tests.utils import asyncio_patch @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = VirtualBox.instance() m.port_manager = port_manager diff --git a/tests/compute/virtualbox/test_virtualbox_vm.py b/tests/compute/virtualbox/test_virtualbox_vm.py index 12d59656..766f0215 100644 --- a/tests/compute/virtualbox/test_virtualbox_vm.py +++ b/tests/compute/virtualbox/test_virtualbox_vm.py @@ -25,7 +25,7 @@ from gns3server.compute.virtualbox import VirtualBox @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = VirtualBox.instance() m.port_manager = port_manager diff --git a/tests/compute/vmware/test_vmware_manager.py b/tests/compute/vmware/test_vmware_manager.py index 9953d1e8..336ede54 100644 --- a/tests/compute/vmware/test_vmware_manager.py +++ b/tests/compute/vmware/test_vmware_manager.py @@ -21,7 +21,7 @@ from gns3server.compute.vmware import VMware @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = VMware.instance() m.port_manager = port_manager diff --git a/tests/compute/vmware/test_vmware_vm.py b/tests/compute/vmware/test_vmware_vm.py index d160e245..2b34afa7 100644 --- a/tests/compute/vmware/test_vmware_vm.py +++ b/tests/compute/vmware/test_vmware_vm.py @@ -22,7 +22,7 @@ from gns3server.compute.vmware import VMware @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = VMware.instance() m.port_manager = port_manager diff --git a/tests/compute/vpcs/test_vpcs_vm.py b/tests/compute/vpcs/test_vpcs_vm.py index 618cabea..cff3bf4f 100644 --- a/tests/compute/vpcs/test_vpcs_vm.py +++ b/tests/compute/vpcs/test_vpcs_vm.py @@ -31,7 +31,7 @@ from gns3server.compute.notification_manager import NotificationManager @pytest.fixture -async def manager(loop, port_manager): +async def manager(port_manager): m = VPCS.instance() m.port_manager = port_manager @@ -39,7 +39,7 @@ async def manager(loop, port_manager): @pytest.fixture(scope="function") -async def vm(loop, compute_project, manager, tmpdir, ubridge_path): +async def vm(compute_project, manager, tmpdir, ubridge_path): vm = VPCSVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", compute_project, manager) vm._vpcs_version = parse_version("0.9") diff --git a/tests/conftest.py b/tests/conftest.py index 7311b7e6..b8ee196c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -24,7 +24,7 @@ sys.original_platform = sys.platform if sys.platform.startswith("win"): - @pytest.yield_fixture(scope="session") + @pytest.fixture(scope="session") def loop(request): """Return an event loop and destroy it at the end of test""" @@ -72,7 +72,7 @@ def compute(controller): @pytest.fixture -async def project(loop, tmpdir, controller): +async def project(tmpdir, controller): return await controller.add_project(name="Test") diff --git a/tests/controller/gns3vm/test_remote_gns3_vm.py b/tests/controller/gns3vm/test_remote_gns3_vm.py index 50a470cc..46e86056 100644 --- a/tests/controller/gns3vm/test_remote_gns3_vm.py +++ b/tests/controller/gns3vm/test_remote_gns3_vm.py @@ -55,7 +55,7 @@ async def test_start(gns3vm, controller): assert gns3vm.password == "world" -async def test_start_invalid_vm(loop, gns3vm, controller): +async def test_start_invalid_vm(gns3vm, controller): await controller.add_compute("r1", name="R1", diff --git a/tests/controller/gns3vm/test_virtualbox_gns3_vm.py b/tests/controller/gns3vm/test_virtualbox_gns3_vm.py index eac3bf22..31f6d738 100644 --- a/tests/controller/gns3vm/test_virtualbox_gns3_vm.py +++ b/tests/controller/gns3vm/test_virtualbox_gns3_vm.py @@ -25,7 +25,7 @@ from gns3server.controller.gns3vm.virtualbox_gns3_vm import VirtualBoxGNS3VM @pytest.fixture -async def gns3vm(loop, controller): +async def gns3vm(controller): vm = VirtualBoxGNS3VM(controller) vm.vmname = "GNS3 VM" diff --git a/tests/controller/gns3vm/test_vmware_gns3_vm.py b/tests/controller/gns3vm/test_vmware_gns3_vm.py index cb0d54ad..9b256e31 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 -async def gns3vm(loop, controller): +async def gns3vm(controller): vm = VMwareGNS3VM(controller) vm.vmname = "GNS3 VM" diff --git a/tests/controller/test_export_project.py b/tests/controller/test_export_project.py index 9406afd7..206a3453 100644 --- a/tests/controller/test_export_project.py +++ b/tests/controller/test_export_project.py @@ -33,7 +33,7 @@ from gns3server.utils.asyncio import aiozipstream @pytest.fixture -async def project(loop, controller): +async def project(controller): p = Project(controller=controller, name="test") p.dump = MagicMock() diff --git a/tests/controller/test_gns3vm.py b/tests/controller/test_gns3vm.py index 8d01fae9..0058ed4c 100644 --- a/tests/controller/test_gns3vm.py +++ b/tests/controller/test_gns3vm.py @@ -47,7 +47,7 @@ def dummy_gns3vm(controller, dummy_engine): return vm -async def test_list(loop, controller): +async def test_list(controller): vm = GNS3VM(controller) with asyncio_patch("gns3server.controller.gns3vm.vmware_gns3_vm.VMwareGNS3VM.list", return_value=[{"vmname": "test", "vmx_path": "test"}]): @@ -60,14 +60,14 @@ async def test_list(loop, controller): await vm.list("hyperv") -async def test_json(loop, controller): +async def test_json(controller): vm = GNS3VM(controller) assert vm.__json__() == vm._settings @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not working well on Windows") -async def test_update_settings(loop, controller): +async def test_update_settings(controller): vm = GNS3VM(controller) vm.settings = { diff --git a/tests/controller/test_import_project.py b/tests/controller/test_import_project.py index 1ef9a2d5..e80da797 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(loop, linux_platform, tmpdir, controller): +async def test_import_iou_linux_no_vm(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(loop, linux_platform, tmpdir, controller): assert topo["topology"]["nodes"][0]["compute_id"] == "local" -async def test_import_iou_linux_with_vm(loop, linux_platform, tmpdir, controller): +async def test_import_iou_linux_with_vm(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(loop, linux_platform, tmpdir, controller assert topo["topology"]["nodes"][0]["compute_id"] == "vm" -async def test_import_nat_non_linux(loop, windows_platform, tmpdir, controller): +async def test_import_nat_non_linux(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(loop, windows_platform, tmpdir, controller): assert topo["topology"]["nodes"][0]["compute_id"] == "vm" -async def test_import_iou_non_linux(loop, windows_platform, tmpdir, controller): +async def test_import_iou_non_linux(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(loop, 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(loop, linux_platform, tmpdir, controller): +async def test_import_node_id(linux_platform, tmpdir, controller): """ When importing a node, node_id should change """ @@ -449,7 +449,7 @@ async def test_import_node_id(loop, 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(loop, windows_platform, tmpdir, controller): +async def test_import_keep_compute_id(windows_platform, tmpdir, controller): """ On linux host IOU should be moved to the GNS3 VM """ diff --git a/tests/test_config.py b/tests/test_config.py index f670ad54..cdaa346e 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -53,7 +53,7 @@ def write_config(tmpdir, settings): return path -def test_get_section_config(loop, tmpdir): +def test_get_section_config(tmpdir): config = load_config(tmpdir, { "Server": { @@ -63,7 +63,7 @@ def test_get_section_config(loop, tmpdir): assert dict(config.get_section_config("Server")) == {"host": "127.0.0.1"} -def test_set_section_config(loop, tmpdir): +def test_set_section_config(tmpdir): config = load_config(tmpdir, { "Server": { @@ -77,7 +77,7 @@ def test_set_section_config(loop, tmpdir): assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1", "local": "true"} -def test_set(loop, tmpdir): +def test_set(tmpdir): config = load_config(tmpdir, { "Server": { @@ -90,7 +90,7 @@ def test_set(loop, tmpdir): assert dict(config.get_section_config("Server")) == {"host": "192.168.1.1"} -def test_reload(loop, tmpdir): +def test_reload(tmpdir): config = load_config(tmpdir, { "Server": { diff --git a/tests/utils.py b/tests/utils.py index 42daccda..6e4ade7d 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -105,5 +105,5 @@ class AsyncioBytesIO(io.BytesIO): async def write(self, data): return super().write(data) - async def close(self): - return super().close() + # async def close(self): + # return super().close() diff --git a/tests/utils/test_asyncio.py b/tests/utils/test_asyncio.py index 9e66c124..f9f45feb 100644 --- a/tests/utils/test_asyncio.py +++ b/tests/utils/test_asyncio.py @@ -44,7 +44,7 @@ async def test_exception_wait_run_in_executor(): @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows") -async def test_subprocess_check_output(loop, tmpdir): +async def test_subprocess_check_output(tmpdir): path = str(tmpdir / "test") result = await subprocess_check_output("echo", "-n", path) diff --git a/tests/web/test_response.py b/tests/web/test_response.py index 837f8163..3c29abcb 100644 --- a/tests/web/test_response.py +++ b/tests/web/test_response.py @@ -39,7 +39,7 @@ def response(): # assert response.status == 200 -async def test_response_file_not_found(loop, tmpdir, response): +async def test_response_file_not_found(tmpdir, response): filename = str(tmpdir / 'hello-not-found') with pytest.raises(HTTPNotFound):