patx/mrhttp-asgi

import importlib.util

import pytest
import requests

import tests.common
from tests.common import eq, stop_server


server = None


def setup():
  if importlib.util.find_spec("fastapi") is None:
    pytest.skip("fastapi is not installed")

  global server
  server = tests.common.start_server("tests/s_fastapi_smoke.py")
  if not server:
    return 1
  return 0


def setup_module(module):
  assert setup() == 0


def test_fastapi_http():
  r = requests.get("http://localhost:8080/")
  eq(r.status_code, 200)
  eq(r.json(), {"ok": True})

  r = requests.post("http://localhost:8080/echo", data=b"fastapi")
  eq(r.status_code, 200)
  eq(r.text, "fastapi")


def teardown():
  global server
  proc = server
  server = None
  stop_server(proc)
  if proc is not None:
    try:
      proc.wait(timeout=2)
    except Exception:
      pass
    if proc.stdout:
      proc.stdout.close()
    if proc.stderr:
      proc.stderr.close()


def teardown_module(module):
  teardown()