This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
smoke-test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.12"
|
||||
|
||||
- name: Run smoke tests
|
||||
run: python3 scripts/smoke_test.py
|
||||
@@ -0,0 +1,56 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user