llm-ready-data / test_integration.py
light-infer-chat's picture
ok
f02b0c0
Raw
History Blame Contribute Delete
2.76 kB
"""Integration tests against running FastAPI server + SearXNG container."""
import json
import urllib.request
import time
BASE = "http://localhost:8000/api/v1"
HEADERS = {
"Authorization": "Bearer N9ooESH05AiXrlpEKilv3o7OY1Rl5Pui",
"Content-Type": "application/json",
}
def req(method, path, body=None):
url = f"{BASE}{path}"
data = json.dumps(body).encode() if body else None
r = urllib.request.Request(url, data=data, headers=HEADERS, method=method)
resp = urllib.request.urlopen(r, timeout=30)
return json.loads(resp.read())
passed = 0
failed = 0
def check(name, ok, detail=""):
global passed, failed
if ok:
passed += 1
print(f" PASS: {name}")
else:
failed += 1
print(f" FAIL: {name} - {detail}")
# ---- Test 1: Health ----
print("1. Health check")
r = req("GET", "/web-search/health")
check("health returns dict", isinstance(r, dict))
# ---- Test 2: Search GET ----
print("\n2. Search GET")
r = req("GET", "/web-search?q=hello+world&max_results=3")
check("success=True", r["success"] is True)
check("has results", r["number_of_results"] > 0)
check("title is string", isinstance(r["results"][0]["title"], str))
# ---- Test 3: Search POST ----
print("\n3. Search POST")
r = req("POST", "/web-search", {"q": "python programming", "categories": "general,it", "max_results": 3})
check("success=True", r["success"] is True)
check("has results", r["number_of_results"] > 0)
# ---- Test 4: Autocomplete GET ----
print("\n4. Autocomplete GET")
r = req("GET", "/web-search/autocomplete?q=hello+wor")
check("success=True", r["success"] is True)
check("has suggestions", len(r["suggestions"]) > 0)
# ---- Test 5: Autocomplete POST ----
print("\n5. Autocomplete POST")
r = req("POST", "/web-search/autocomplete", {"q": "python progr"})
check("success=True", r["success"] is True)
check("has suggestions", len(r["suggestions"]) > 0)
# ---- Test 6: Config ----
print("\n6. Config")
r = req("GET", "/web-search/config")
check("success=True", r["success"] is True)
check("has engines list", isinstance(r["engines"], list))
# ---- Test 7: Engine descriptions ----
print("\n7. Engine descriptions")
r = req("GET", "/web-search/engine-descriptions")
check("success=True", r["success"] is True)
check("has engines dict", isinstance(r["engines"], dict))
check("many engines", len(r["engines"]) > 10)
# ---- Test 8: Stats ----
print("\n8. Stats")
r = req("GET", "/web-search/stats")
check("success=True", r["success"] is True)
# ---- Summary ----
print(f"\n{'='*50}")
print(f"RESULTS: {passed} passed, {failed} failed out of {passed+failed} tests")
if failed == 0:
print("ALL INTEGRATION TESTS PASSED")
else:
print("SOME TESTS FAILED")
import sys
sys.exit(0 if failed == 0 else 1)