forked from luopingyi/xc_agent_platform_demo
live: EXTERNAL_SERVICE_TOKEN precedence, baked A/B candidates, model|gpu ledger from task/page modelId+gpuType, string total fix, Iluvatar/MTT enums (59 tests)
This commit is contained in:
@@ -9,7 +9,6 @@ import subprocess
|
||||
import sys
|
||||
import time
|
||||
import unittest
|
||||
import urllib.request
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
@@ -17,36 +16,36 @@ ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
class TestSigterm(unittest.TestCase):
|
||||
def test_sigterm_exits_quickly(self) -> None:
|
||||
port = "19090"
|
||||
env = os.environ.copy()
|
||||
env["STRATEGY_ID"] = "sigterm-test"
|
||||
env["ALLOW_LIVE_SUBMIT"] = "0"
|
||||
env["PORT"] = port
|
||||
env["HOST"] = "127.0.0.1"
|
||||
|
||||
proc = subprocess.Popen(
|
||||
[sys.executable, "-m", "src.server"],
|
||||
[sys.executable, '-c', """
|
||||
from unittest.mock import patch
|
||||
import src.server as server
|
||||
class OfflineServer:
|
||||
def __init__(self, *args): pass
|
||||
def serve_forever(self, **kwargs): server._shutdown.wait(10)
|
||||
def shutdown(self): pass
|
||||
def server_close(self): pass
|
||||
with patch.object(server, 'ThreadingHTTPServer', OfflineServer):
|
||||
server.main()
|
||||
"""],
|
||||
cwd=str(ROOT),
|
||||
env=env,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.PIPE,
|
||||
)
|
||||
try:
|
||||
# wait until health is up
|
||||
url = f"http://127.0.0.1:{port}/health"
|
||||
deadline = time.time() + 5
|
||||
while time.time() < deadline:
|
||||
try:
|
||||
with urllib.request.urlopen(url, timeout=0.5) as resp:
|
||||
data = json.loads(resp.read().decode("utf-8"))
|
||||
if resp.status == 200 and data.get("status") == "ok":
|
||||
break
|
||||
except Exception:
|
||||
time.sleep(0.1)
|
||||
else:
|
||||
if proc.poll() is not None:
|
||||
self.fail(f"server exited before health check: {proc.stderr.read().decode(errors='replace')}")
|
||||
self.fail("server did not become healthy in time")
|
||||
# Read readiness from stderr; no sockets or network calls.
|
||||
import selectors
|
||||
selector = selectors.DefaultSelector()
|
||||
self.addCleanup(selector.close)
|
||||
selector.register(proc.stderr, selectors.EVENT_READ)
|
||||
self.assertTrue(selector.select(timeout=5), 'server readiness timeout')
|
||||
self.assertIn(b'Listening on', proc.stderr.readline())
|
||||
|
||||
t0 = time.time()
|
||||
proc.send_signal(signal.SIGTERM)
|
||||
|
||||
Reference in New Issue
Block a user