OneLiteLLM team per company+virt keys
All checks were successful
Build and Push / build (push) Successful in 1m24s
All checks were successful
Build and Push / build (push) Successful in 1m24s
This commit is contained in:
64
scripts/verify-find-key-by-alias.mjs
Normal file
64
scripts/verify-find-key-by-alias.mjs
Normal file
@@ -0,0 +1,64 @@
|
||||
// Smoke-test for the FindKeyByAlias parsing logic — runs the JSON
|
||||
// permutations LiteLLM has been seen to emit through the unmarshal
|
||||
// paths and confirms each ends up at the expected outcome.
|
||||
//
|
||||
// Since the operator can't run inside this sandbox, this is a
|
||||
// JS port of the parsing flow. It exercises decisions the Go code
|
||||
// makes line-for-line.
|
||||
|
||||
const cases = [
|
||||
{
|
||||
name: "newer object shape, alias matches",
|
||||
body: { keys: [{ token: "tk-1", key_alias: "acme-abc12345" }, { token: "tk-2", key_alias: "beta-def67890" }] },
|
||||
expected: "tk-1",
|
||||
},
|
||||
{
|
||||
name: "newer object shape, alias does not match",
|
||||
body: { keys: [{ token: "tk-2", key_alias: "beta-def67890" }] },
|
||||
expected: "",
|
||||
},
|
||||
{
|
||||
name: "newer object shape, empty keys array",
|
||||
body: { keys: [] },
|
||||
expected: "",
|
||||
},
|
||||
{
|
||||
name: "older string shape — cannot filter, return empty",
|
||||
body: { keys: ["sk-abc", "sk-def"] },
|
||||
expected: "",
|
||||
},
|
||||
{
|
||||
name: "matching alias but missing token field",
|
||||
body: { keys: [{ key_alias: "acme-abc12345" }] },
|
||||
expected: "",
|
||||
},
|
||||
];
|
||||
|
||||
function findKeyByAlias(body, keyAlias) {
|
||||
// Mirror the Go logic exactly.
|
||||
let asObjects;
|
||||
try {
|
||||
asObjects = body;
|
||||
if (!asObjects || !Array.isArray(asObjects.keys)) return "";
|
||||
for (const k of asObjects.keys) {
|
||||
// Skip non-objects (= older string shape)
|
||||
if (typeof k !== "object" || k === null) continue;
|
||||
if (k.key_alias === keyAlias && k.token) {
|
||||
return k.token;
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
let pass = 0, fail = 0;
|
||||
for (const c of cases) {
|
||||
const got = findKeyByAlias(c.body, "acme-abc12345");
|
||||
const ok = got === c.expected;
|
||||
console.log(`${ok ? "PASS" : "FAIL"} got="${got}" want="${c.expected}" [${c.name}]`);
|
||||
if (ok) pass++; else fail++;
|
||||
}
|
||||
console.log(`\n${pass} pass, ${fail} fail`);
|
||||
process.exit(fail === 0 ? 0 : 1);
|
||||
Reference in New Issue
Block a user