100 lines
2.9 KiB
TypeScript
100 lines
2.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { OpenClawConfig } from "../config/config.js";
|
|
import { withEnvAsync } from "../test-utils/env.js";
|
|
import { resolveNodeHostGatewayCredentials } from "./runner.js";
|
|
|
|
function createRemoteGatewayTokenRefConfig(tokenId: string): OpenClawConfig {
|
|
return {
|
|
secrets: {
|
|
providers: {
|
|
default: { source: "env" },
|
|
},
|
|
},
|
|
gateway: {
|
|
mode: "remote",
|
|
remote: {
|
|
token: { source: "env", provider: "default", id: tokenId },
|
|
},
|
|
},
|
|
} as OpenClawConfig;
|
|
}
|
|
|
|
describe("resolveNodeHostGatewayCredentials", () => {
|
|
it("resolves remote token SecretRef values", async () => {
|
|
const config = createRemoteGatewayTokenRefConfig("REMOTE_GATEWAY_TOKEN");
|
|
|
|
await withEnvAsync(
|
|
{
|
|
OPENCLAW_GATEWAY_TOKEN: undefined,
|
|
REMOTE_GATEWAY_TOKEN: "token-from-ref",
|
|
},
|
|
async () => {
|
|
const credentials = await resolveNodeHostGatewayCredentials({ config });
|
|
expect(credentials.token).toBe("token-from-ref");
|
|
},
|
|
);
|
|
});
|
|
|
|
it("prefers OPENCLAW_GATEWAY_TOKEN over configured refs", async () => {
|
|
const config = createRemoteGatewayTokenRefConfig("REMOTE_GATEWAY_TOKEN");
|
|
|
|
await withEnvAsync(
|
|
{
|
|
OPENCLAW_GATEWAY_TOKEN: "token-from-env",
|
|
REMOTE_GATEWAY_TOKEN: "token-from-ref",
|
|
},
|
|
async () => {
|
|
const credentials = await resolveNodeHostGatewayCredentials({ config });
|
|
expect(credentials.token).toBe("token-from-env");
|
|
},
|
|
);
|
|
});
|
|
|
|
it("throws when a configured remote token ref cannot resolve", async () => {
|
|
const config = createRemoteGatewayTokenRefConfig("MISSING_REMOTE_GATEWAY_TOKEN");
|
|
|
|
await withEnvAsync(
|
|
{
|
|
OPENCLAW_GATEWAY_TOKEN: undefined,
|
|
MISSING_REMOTE_GATEWAY_TOKEN: undefined,
|
|
},
|
|
async () => {
|
|
await expect(resolveNodeHostGatewayCredentials({ config })).rejects.toThrow(
|
|
"gateway.remote.token",
|
|
);
|
|
},
|
|
);
|
|
});
|
|
|
|
it("does not resolve remote password refs when token auth is already available", async () => {
|
|
const config = {
|
|
secrets: {
|
|
providers: {
|
|
default: { source: "env" },
|
|
},
|
|
},
|
|
gateway: {
|
|
mode: "remote",
|
|
remote: {
|
|
token: { source: "env", provider: "default", id: "REMOTE_GATEWAY_TOKEN" },
|
|
password: { source: "env", provider: "default", id: "MISSING_REMOTE_GATEWAY_PASSWORD" },
|
|
},
|
|
},
|
|
} as OpenClawConfig;
|
|
|
|
await withEnvAsync(
|
|
{
|
|
OPENCLAW_GATEWAY_TOKEN: undefined,
|
|
OPENCLAW_GATEWAY_PASSWORD: undefined,
|
|
REMOTE_GATEWAY_TOKEN: "token-from-ref",
|
|
MISSING_REMOTE_GATEWAY_PASSWORD: undefined,
|
|
},
|
|
async () => {
|
|
const credentials = await resolveNodeHostGatewayCredentials({ config });
|
|
expect(credentials.token).toBe("token-from-ref");
|
|
expect(credentials.password).toBeUndefined();
|
|
},
|
|
);
|
|
});
|
|
});
|