feat(ai-server): Add ai_server subprocess with google.genai lazy loading

This commit is contained in:
2026-05-13 09:00:10 -04:00
parent 4c5e719be4
commit ae2227fdd4
2 changed files with 182 additions and 0 deletions
+97
View File
@@ -0,0 +1,97 @@
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