개선관리 요구사항과 Google 로그인을 완료
This commit is contained in:
parent
cc0a15b7c6
commit
2a39636163
112 changed files with 10166 additions and 527 deletions
|
|
@ -297,6 +297,75 @@ class GatewayAuthenticationTest(unittest.TestCase):
|
|||
self.assertEqual(async_client_cls.call_args.kwargs["headers"], {})
|
||||
|
||||
|
||||
class EngineClientReadinessTest(unittest.IsolatedAsyncioTestCase):
|
||||
@staticmethod
|
||||
def _response(status_code, payload):
|
||||
return engine_client.httpx.Response(
|
||||
status_code,
|
||||
json=payload,
|
||||
request=engine_client.httpx.Request("GET", "http://127.0.0.1:9099/ready"),
|
||||
)
|
||||
|
||||
async def test_health_fails_when_dedicated_live_client_provider_is_unready(self):
|
||||
client = engine_client.EngineClient("http://127.0.0.1:9099")
|
||||
client.engine_mode = "agy_cli"
|
||||
client.default_model = "gemini-3.6-flash-high"
|
||||
client.default_reasoning_effort = "high"
|
||||
client.live_client_provider = "claude_cli"
|
||||
client._client = AsyncMock()
|
||||
client._client.get = AsyncMock(
|
||||
side_effect=[
|
||||
self._response(200, {"ok": True, "detail": "agy ready"}),
|
||||
self._response(503, {"ok": False, "detail": "claude login required"}),
|
||||
]
|
||||
)
|
||||
|
||||
detail = await client.health_detail()
|
||||
|
||||
self.assertFalse(detail["ok"])
|
||||
self.assertEqual(detail["default_engine"]["provider"], "agy_cli")
|
||||
self.assertTrue(detail["default_engine"]["ok"])
|
||||
self.assertEqual(detail["live_client_engine"]["provider"], "claude_cli")
|
||||
self.assertFalse(detail["live_client_engine"]["ok"])
|
||||
self.assertIn("실시간 내담자 공급자 claude_cli", detail["detail"])
|
||||
calls = client._client.get.await_args_list
|
||||
self.assertEqual(calls[0].kwargs["params"]["provider"], "agy_cli")
|
||||
self.assertEqual(calls[0].kwargs["params"]["model"], "gemini-3.6-flash-high")
|
||||
self.assertEqual(calls[1].kwargs["params"], {"provider": "claude_cli"})
|
||||
|
||||
async def test_health_reuses_one_probe_when_live_and_default_provider_match(self):
|
||||
client = engine_client.EngineClient("http://127.0.0.1:9099")
|
||||
client.engine_mode = "claude_cli"
|
||||
client.live_client_provider = "claude_cli"
|
||||
client._client = AsyncMock()
|
||||
client._client.get = AsyncMock(
|
||||
return_value=self._response(200, {"ok": True, "detail": "ready"})
|
||||
)
|
||||
|
||||
detail = await client.health_detail()
|
||||
|
||||
self.assertTrue(detail["ok"])
|
||||
client._client.get.assert_awaited_once()
|
||||
|
||||
async def test_gateway_liveness_does_not_replace_provider_readiness(self):
|
||||
client = engine_client.EngineClient("http://127.0.0.1:9099")
|
||||
client.engine_mode = "claude_cli"
|
||||
client.live_client_provider = "claude_cli"
|
||||
client._client = AsyncMock()
|
||||
client._client.get = AsyncMock(
|
||||
side_effect=[
|
||||
self._response(404, {"detail": "missing"}),
|
||||
self._response(200, {"status": "ok"}),
|
||||
]
|
||||
)
|
||||
|
||||
detail = await client.health_detail()
|
||||
|
||||
self.assertFalse(detail["ok"])
|
||||
self.assertIn("공급자 준비상태 엔드포인트", detail["detail"])
|
||||
self.assertEqual(client._client.get.await_count, 2)
|
||||
|
||||
|
||||
class GatewayModelTest(unittest.TestCase):
|
||||
def test_contract_owns_gateway_default_model_sentinel(self):
|
||||
self.assertEqual(contract.ENGINE_GATEWAY_DEFAULT_MODEL_SENTINEL, "gateway-default")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue