57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
import json
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
import urllib.error
|
|
import urllib.request
|
|
|
|
process = subprocess.Popen(
|
|
[sys.executable, "-u", "app/app.py"],
|
|
stdout=subprocess.DEVNULL,
|
|
stderr=subprocess.DEVNULL,
|
|
)
|
|
|
|
try:
|
|
base_url = "http://127.0.0.1:8000"
|
|
response = None
|
|
|
|
for _ in range(30):
|
|
if process.poll() is not None:
|
|
raise RuntimeError("Приложение завершилось до запуска")
|
|
|
|
try:
|
|
response = urllib.request.urlopen(
|
|
f"{base_url}/health", timeout=1
|
|
)
|
|
break
|
|
except (urllib.error.URLError, TimeoutError):
|
|
time.sleep(1)
|
|
|
|
if response is None:
|
|
raise RuntimeError("Приложение не ответило за 30 секунд")
|
|
|
|
with response:
|
|
assert response.status == 200
|
|
data = json.loads(response.read().decode("utf-8"))
|
|
assert data.get("status") == "ok", data
|
|
|
|
with urllib.request.urlopen(base_url, timeout=3) as response:
|
|
assert response.status == 200
|
|
|
|
try:
|
|
urllib.request.urlopen(f"{base_url}/unknown", timeout=3)
|
|
except urllib.error.HTTPError as error:
|
|
assert error.code == 404, error.code
|
|
else:
|
|
raise AssertionError("Для /unknown ожидался HTTP 404")
|
|
|
|
print("Smoke tests passed!")
|
|
|
|
finally:
|
|
process.terminate()
|
|
try:
|
|
process.wait(timeout=5)
|
|
except subprocess.TimeoutExpired:
|
|
process.kill()
|
|
process.wait()
|