from multiprocessing import Process import os import json import tempfile import random import pytest import requests import testdata PROTOCOL = 'http' HOST = '127.0.0.1' PORT = 8080 BUFFER_SIZE = 4 * 1024 MAX_SIZE = 2 * 1024 * 1024 * 1024 MAX_DATA = 10 * 1024 * 1024 * 1024 API_KEY = f'{random.randrange(16 ** 32):032x}' API_KEYS = { API_KEY } TIMEOUT = 5 @pytest.fixture(autouse = True) def server(): # Create Temporary Databases File database = tempfile.NamedTemporaryFile(delete = False).name proc = Process(target = testdata.run, args = (HOST, PORT, API_KEYS, MAX_SIZE, MAX_DATA, database, BUFFER_SIZE)) proc.start() # Wait until webserver becomes available while True: try: requests.get(f'{PROTOCOL}://{HOST}:{PORT}', timeout = TIMEOUT) except requests.ConnectionError: continue break yield database # Terminate webserver proc.terminate() proc.join() # Delete Temporary File os.unlink(database) def test_get_file(): response = requests.get(f'{PROTOCOL}://{HOST}:{PORT}/?api_key={API_KEY}&size=32', timeout = TIMEOUT) assert response.content == b'\0' * 32 def test_database_data_used(server): requests.get(f'{PROTOCOL}://{HOST}:{PORT}/?api_key={API_KEY}&size=32', timeout = TIMEOUT) with open(server) as file: assert json.loads(file.read())['data-used'] == 32