97 lines
2.5 KiB
Python
97 lines
2.5 KiB
Python
import pytest
|
|
import subprocess
|
|
import json
|
|
import time
|
|
import sys
|
|
import os
|
|
|
|
|
|
def test_server_starts_and_exits_cleanly():
|
|
proc = subprocess.Popen(
|
|
[sys.executable, "-m", "src.ai_server"],
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
)
|
|
proc.stdin.close()
|
|
proc.stdout.close()
|
|
proc.stderr.close()
|
|
proc.wait(timeout=5)
|
|
assert proc.returncode in (0, 120)
|
|
|
|
|
|
def test_server_outputs_ready_marker():
|
|
proc = subprocess.Popen(
|
|
[sys.executable, "-m", "src.ai_server"],
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
)
|
|
line = proc.stdout.readline()
|
|
proc.stdin.close()
|
|
proc.stdout.close()
|
|
proc.wait(timeout=5)
|
|
data = json.loads(line)
|
|
assert data.get("type") == "ready"
|
|
|
|
|
|
def test_server_handles_unknown_method():
|
|
proc = subprocess.Popen(
|
|
[sys.executable, "-m", "src.ai_server"],
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
)
|
|
proc.stdout.readline()
|
|
cmd = json.dumps({"id": "1", "method": "unknown_method", "params": {}})
|
|
proc.stdin.write(cmd + "\n")
|
|
proc.stdin.flush()
|
|
resp = proc.stdout.readline()
|
|
proc.stdin.close()
|
|
proc.stdout.close()
|
|
proc.wait(timeout=5)
|
|
data = json.loads(resp)
|
|
assert "error" in data
|
|
assert "Unknown method" in data["error"]
|
|
|
|
|
|
def test_server_handles_list_models():
|
|
proc = subprocess.Popen(
|
|
[sys.executable, "-m", "src.ai_server"],
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
)
|
|
proc.stdout.readline()
|
|
cmd = json.dumps({"id": "1", "method": "list_models", "params": {"provider": "gemini"}})
|
|
proc.stdin.write(cmd + "\n")
|
|
proc.stdin.flush()
|
|
resp = proc.stdout.readline()
|
|
proc.stdin.close()
|
|
proc.stdout.close()
|
|
proc.wait(timeout=5)
|
|
data = json.loads(resp)
|
|
assert "result" in data
|
|
assert "models" in data["result"]
|
|
|
|
|
|
def test_server_loads_google_genai_quickly():
|
|
proc = subprocess.Popen(
|
|
[sys.executable, "-m", "src.ai_server"],
|
|
stdin=subprocess.PIPE,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
)
|
|
start = time.time()
|
|
ready_line = proc.stdout.readline()
|
|
elapsed = time.time() - start
|
|
proc.stdin.close()
|
|
proc.stdout.close()
|
|
proc.wait(timeout=10)
|
|
assert elapsed < 5, f"Server took {elapsed}s to start"
|
|
assert proc.returncode == 0 |