feat: show dual-node account test status
This commit is contained in:
+71
-1
@@ -67,6 +67,27 @@ def workspace_payload_fixture() -> dict[str, object]:
|
||||
"provider": "openai",
|
||||
"kind": "quota_limited",
|
||||
"usable": True,
|
||||
"active_state": "yes",
|
||||
"schedulable_state": "partial",
|
||||
"last_test_state": "partial",
|
||||
"last_test_time": "2026-08-03T10:00:00Z",
|
||||
"last_test_model": "gpt-5.6-luna",
|
||||
"node_status": {
|
||||
"server6": {
|
||||
"active": True,
|
||||
"schedulable": True,
|
||||
"last_test": "yes",
|
||||
"last_test_time": "2026-08-03T10:00:00Z",
|
||||
"last_test_model": "gpt-5.6-luna",
|
||||
},
|
||||
"server4": {
|
||||
"active": True,
|
||||
"schedulable": False,
|
||||
"last_test": "no",
|
||||
"last_test_time": "2026-08-03T10:02:00Z",
|
||||
"last_test_model": "gpt-5.6-mini",
|
||||
},
|
||||
},
|
||||
"account_rate_multiplier": 0.06,
|
||||
"account_rate_multiplier_cny": 0.003,
|
||||
}
|
||||
@@ -730,6 +751,8 @@ def sample_logs_payload() -> dict:
|
||||
"api_key": {"id": 3, "name": "codex-main"},
|
||||
"account_id": 7,
|
||||
"account": {"id": 7, "name": "oai-sub-1"},
|
||||
"account_rate_multiplier": 0.06,
|
||||
"account_rate_multiplier_cny": 0.003,
|
||||
"user": {"id": 1, "name": "shujakuin"},
|
||||
"model": "gpt-5.5",
|
||||
"upstream_model": "gpt-5.5-codex",
|
||||
@@ -807,10 +830,45 @@ class WorkspaceTests(unittest.TestCase):
|
||||
normalized_accounts = mod.normalize_account_rows(accounts, pricing_payload=pricing)
|
||||
normalized_logs = mod.normalize_log_rows(logs)
|
||||
self.assertEqual(normalized_accounts[0]["id"], 9007199254740993)
|
||||
self.assertEqual(normalized_accounts[0]["account_multiplier"], 0.003)
|
||||
self.assertEqual(normalized_accounts[0]["active"], "yes")
|
||||
self.assertEqual(normalized_accounts[0]["schedulable_state"], "partial")
|
||||
self.assertEqual(normalized_accounts[0]["last_test"], "partial")
|
||||
self.assertEqual(normalized_accounts[0]["last_test_model"], "gpt-5.6-luna")
|
||||
self.assertIn("server6 active yes", mod.workspace_account_node_detail(normalized_accounts[0]))
|
||||
once_output = io.StringIO()
|
||||
with contextlib.redirect_stdout(once_output):
|
||||
mod.print_once(accounts, pricing_payload=pricing)
|
||||
self.assertIn("last-test", once_output.getvalue())
|
||||
self.assertIn("gpt-5.6-luna", once_output.getvalue())
|
||||
self.assertEqual(normalized_logs[0]["id"], 9007199254740997)
|
||||
self.assertEqual(normalized_logs[0]["account_multiplier"], 0.003)
|
||||
self.assertEqual(normalized_logs[0]["cost"], 0.25)
|
||||
self.assertEqual(mod.account_rate_value({"account_rate_multiplier": 0.06}), 0.06)
|
||||
self.assertEqual(
|
||||
mod.account_rate_value(
|
||||
{
|
||||
"account_rate_multiplier": 0.06,
|
||||
"account_rate_multiplier_cny": 0.003,
|
||||
}
|
||||
),
|
||||
0.003,
|
||||
)
|
||||
self.assertEqual(
|
||||
mod.account_rate_value(
|
||||
{
|
||||
"account_rate_multiplier": 0.06,
|
||||
"account_rate_multiplier_cny": "not-a-number",
|
||||
}
|
||||
),
|
||||
0.06,
|
||||
)
|
||||
self.assertEqual(mod.account_rate_value({"account_rate_multiplier_cny": 0}), 0)
|
||||
self.assertIsNone(
|
||||
mod.account_rate_value({"account_rate_multiplier": float("nan")})
|
||||
)
|
||||
self.assertEqual(mod.format_multiplier(0.003), "0.003x")
|
||||
self.assertEqual(mod.format_multiplier(0), "0x")
|
||||
self.assertEqual(mod.format_multiplier(float("inf")), "-")
|
||||
self.assertEqual(mod.as_int("9007199254740999"), 9007199254740999)
|
||||
self.assertEqual(len(keys["items"]), 1)
|
||||
self.assertEqual(mod.normalize_key_rows(keys)[0]["name"], "wmy")
|
||||
@@ -863,6 +921,12 @@ class WorkspaceTests(unittest.TestCase):
|
||||
with self.assertRaisesRegex(RuntimeError, "invalid workspace requests"):
|
||||
mod.fetch_workspace_payload("https://workspace.example.test/data", 3)
|
||||
|
||||
invalid_contract = workspace_payload_fixture()
|
||||
invalid_contract["accounts"]["accounts"][0]["node_status"].pop("server4")
|
||||
with mock.patch.object(mod, "fetch_workspace_response", return_value=(invalid_contract, "")):
|
||||
with self.assertRaisesRegex(RuntimeError, "account contract"):
|
||||
mod.fetch_workspace_payload("https://workspace.example.test/data", 3)
|
||||
|
||||
invalid_period = workspace_payload_fixture()
|
||||
invalid_period["traffic"].pop("ends_at")
|
||||
with mock.patch.object(mod, "fetch_workspace_response", return_value=(invalid_period, "")):
|
||||
@@ -1323,6 +1387,7 @@ class Sub2APILogsTests(unittest.TestCase):
|
||||
self.assertEqual(oldest["input_tokens"], 1200)
|
||||
self.assertEqual(oldest["output_tokens"], 340)
|
||||
self.assertEqual(oldest["cache_tokens"], 50 + 4100)
|
||||
self.assertEqual(oldest["account_multiplier"], 0.003)
|
||||
self.assertEqual(oldest["first_token_ms"], 800)
|
||||
self.assertGreater(oldest["tokens_per_second"], 0)
|
||||
self.assertEqual(oldest["cost"], 0.0123)
|
||||
@@ -1399,6 +1464,11 @@ class Sub2APILogsTests(unittest.TestCase):
|
||||
self.assertIn("$0.012", text)
|
||||
self.assertIn("5.3s", text)
|
||||
self.assertIn("total 2.3K records", text)
|
||||
lines = text.splitlines()
|
||||
header = next(line for line in lines if line.startswith("node"))
|
||||
multiplier_row = next(line for line in lines if "codex-main" in line)
|
||||
self.assertEqual(header.index("key"), multiplier_row.index("codex-main"))
|
||||
self.assertEqual(header.index("multiplier"), multiplier_row.index("0.003x"))
|
||||
|
||||
def test_default_logs_token_reads_config_file(self) -> None:
|
||||
mod = load_module()
|
||||
|
||||
Reference in New Issue
Block a user