blob: 83c5d5ad47611f3a2cc0fd56a1e69bfa80e62447 [file] [log] [blame] [edit]
import asyncio
import pytest
import pytest_asyncio
import logging
import os
from datetime import datetime
from pathlib import Path
from typing import Tuple
from . import ranging, data_transfer
PICA_BIN = Path("./target/debug/pica")
DATA_FILE = Path("README.md")
PICA_LOCALHOST = "127.0.0.1"
logging.basicConfig(level=os.environ.get("PICA_LOGLEVEL", "DEBUG").upper())
def setup_artifacts(test_name: str) -> Tuple[Path, Path]:
artifacts = Path("./artifacts")
artifacts.mkdir(parents=True, exist_ok=True)
current_dt = datetime.now()
formatted_date = current_dt.strftime("%Y-%m-%d_%H-%M-%S-%f")[:-3]
f1 = artifacts / f"{formatted_date}_pica_{test_name}_stdout.txt"
f1.touch(exist_ok=True)
f2 = artifacts / f"{formatted_date}_pica_{test_name}_stderr.txt"
f2.touch(exist_ok=True)
return (f1, f2)
@pytest_asyncio.fixture
async def pica_port(request, unused_tcp_port):
(stdout, stderr) = setup_artifacts(request.node.name)
if not PICA_BIN.exists():
raise FileNotFoundError(f"{PICA_BIN} not found")
with stdout.open("w") as fstdout, stderr.open("w") as fstderr:
process = await asyncio.create_subprocess_exec(
PICA_BIN,
"--uci-port",
str(unused_tcp_port),
stdout=fstdout,
stderr=fstderr,
)
await asyncio.sleep(100 / 1000) # Let pica boot up
yield unused_tcp_port
process.terminate()
await process.wait()
@pytest.mark.asyncio
async def test_ranging(pica_port):
await ranging.run(PICA_LOCALHOST, pica_port)
@pytest.mark.asyncio
async def test_data_transfer(pica_port):
await data_transfer.run(PICA_LOCALHOST, pica_port, DATA_FILE)