mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-09-14 14:05:20 +03:00
The bare 'os.kill = MagicMock()' was never restored, so every later test in the same process ran with a no-op kill. Any test that kills a child process and waits for it then hangs forever (resident sharkd sessions waiting on an immortal process). Use monkeypatch so the patch is undone.
77 lines
2.8 KiB
Python
77 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
#
|
|
# Copyright (C) 2020 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 os
|
|
import pytest
|
|
|
|
from fastapi import FastAPI, status
|
|
from httpx import AsyncClient
|
|
from unittest.mock import MagicMock
|
|
|
|
from gns3server.config import Config
|
|
|
|
pytestmark = pytest.mark.asyncio
|
|
|
|
|
|
class TestControllerRoutes:
|
|
|
|
async def test_shutdown_local(self, app: FastAPI, client: AsyncClient, config: Config, monkeypatch) -> None:
|
|
|
|
# monkeypatch (not bare assignment): a global `os.kill = MagicMock()`
|
|
# is never restored and poisons every later test that kills a
|
|
# subprocess — resident sharkd sessions would wait() forever on an
|
|
# immortal process.
|
|
kill_mock = MagicMock()
|
|
monkeypatch.setattr(os, "kill", kill_mock)
|
|
config.settings.Server.local = True
|
|
response = await client.post(app.url_path_for("shutdown"))
|
|
assert response.status_code == status.HTTP_204_NO_CONTENT
|
|
assert kill_mock.called
|
|
|
|
|
|
async def test_shutdown_non_local(self, app: FastAPI, client: AsyncClient, config: Config) -> None:
|
|
|
|
response = await client.post(app.url_path_for("shutdown"))
|
|
assert response.status_code == status.HTTP_403_FORBIDDEN
|
|
|
|
|
|
# @pytest.mark.asyncio
|
|
# async def test_debug(controller_api, config, tmpdir):
|
|
#
|
|
# config._main_config_file = str(tmpdir / "test.conf")
|
|
# config.set("Server", "local", True)
|
|
# response = await controller_api.post('/debug')
|
|
# assert response.status_code == 201
|
|
# debug_dir = os.path.join(config.config_dir, "debug")
|
|
# assert os.path.exists(debug_dir)
|
|
# assert os.path.exists(os.path.join(debug_dir, "controller.txt"))
|
|
#
|
|
#
|
|
# @pytest.mark.asyncio
|
|
# async def test_debug_non_local(controller_api, config, tmpdir):
|
|
#
|
|
# config._main_config_file = str(tmpdir / "test.conf")
|
|
# config.set("Server", "local", False)
|
|
# response = await controller_api.post('/debug')
|
|
# assert response.status_code == 403
|
|
|
|
|
|
async def test_statistics_output(self, app: FastAPI, client: AsyncClient) -> None:
|
|
|
|
response = await client.get(app.url_path_for("statistics"))
|
|
assert response.status_code == status.HTTP_200_OK
|