This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
catfish/tests/__init__.py

65 lines
1.9 KiB
Python

import functools
import os
import shutil
import subprocess
from aiohttp.test_utils import AioHTTPTestCase, unused_port
from aiounittest import AsyncTestCase
from click.testing import CliRunner
from catfish.__main__ import cli
from catfish.router import get_server
from catfish.utils.processes import terminate_subprocesses
from catfish.utils.sockets import create_base_socket_dir, delete_base_socket_dir
class BaseTestCase(AsyncTestCase):
DUMMY_EXE = os.path.join(os.path.dirname(__file__), "dummy_program.py")
def setUp(self):
create_base_socket_dir()
self.cli_runner = CliRunner()
self.cli = cli
self.run_cli = functools.partial(self.cli_runner.invoke, self.cli)
def tearDown(self):
terminate_subprocesses()
delete_base_socket_dir()
class BaseWorkerTestCase(BaseTestCase):
def setUp(self):
super().setUp()
self.unused_port = unused_port()
result = subprocess.run(
[shutil.which("ctf"), "start", "--port", str(self.unused_port)],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True,
timeout=10,
)
self.assertEqual(result.returncode, 0, result.stdout)
def tearDown(self):
result = subprocess.run(
[shutil.which("ctf"), "stop"],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True,
timeout=10,
)
self.assertEqual(result.returncode, 0, result.stdout)
super().tearDown()
class BaseRouterTestCase(AsyncTestCase, AioHTTPTestCase):
async def get_application(self):
return get_server()
def __getattribute__(self, name):
attr = super(AioHTTPTestCase, self).__getattribute__(name)
if name.startswith("test_") and callable(attr):
return lambda: self.loop.run_until_complete(attr())
else:
return attr