1 """Shared test utilities."""
2 from unittest import TestCase
3 from threading import Thread
4 from http.client import HTTPConnection
5 from datetime import datetime
6 from os import remove as remove_file
7 from plomtask.db import DatabaseFile, DatabaseConnection
8 from plomtask.http import TaskHandler, TaskServer
11 class TestCaseWithDB(TestCase):
12 """Module tests not requiring DB setup."""
14 def setUp(self) -> None:
15 timestamp = datetime.now().timestamp()
16 self.db_file = DatabaseFile(f'test_db:{timestamp}')
18 self.db_conn = DatabaseConnection(self.db_file)
20 def tearDown(self) -> None:
22 remove_file(self.db_file.path)
25 class TestCaseWithServer(TestCaseWithDB):
26 """Module tests against our HTTP server/handler (and database)."""
28 def setUp(self) -> None:
30 self.httpd = TaskServer(self.db_file, ('localhost', 0), TaskHandler)
31 self.server_thread = Thread(target=self.httpd.serve_forever)
32 self.server_thread.daemon = True
33 self.server_thread.start()
34 self.conn = HTTPConnection(str(self.httpd.server_address[0]),
35 self.httpd.server_address[1])
37 def tearDown(self) -> None:
39 self.httpd.server_close()
40 self.server_thread.join()