mirror of
https://github.com/cline/cline.git
synced 2026-10-24 12:03:46 +08:00
109 lines
3.9 KiB
TypeScript
109 lines
3.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { telemetryDefineArgs } from "./telemetry-define-args";
|
|
|
|
function defineMap(args: string[]): Record<string, string> {
|
|
const map: Record<string, string> = {};
|
|
for (let index = 0; index < args.length; index += 2) {
|
|
expect(args[index]).toBe("--define");
|
|
const pair = args[index + 1];
|
|
const separator = pair.indexOf("=");
|
|
map[pair.slice(0, separator)] = pair.slice(separator + 1);
|
|
}
|
|
return map;
|
|
}
|
|
|
|
describe("telemetryDefineArgs", () => {
|
|
it("inlines every OTEL var getTelemetryBuildTimeConfig reads", () => {
|
|
const defines = defineMap(
|
|
telemetryDefineArgs({
|
|
OTEL_TELEMETRY_ENABLED: "1",
|
|
OTEL_EXPORTER_OTLP_ENDPOINT: "https://otel.example.com:4318",
|
|
OTEL_EXPORTER_OTLP_PROTOCOL: "http/json",
|
|
OTEL_EXPORTER_OTLP_HEADERS: "x-api-key=secret",
|
|
OTEL_LOGS_EXPORTER: "otlp",
|
|
OTEL_METRICS_EXPORTER: "otlp",
|
|
OTEL_TRACES_EXPORTER: "otlp",
|
|
OTEL_METRIC_EXPORT_INTERVAL: "60000",
|
|
}),
|
|
);
|
|
expect(defines["process.env.OTEL_TELEMETRY_ENABLED"]).toBe('"1"');
|
|
expect(defines["process.env.OTEL_EXPORTER_OTLP_ENDPOINT"]).toBe(
|
|
'"https://otel.example.com:4318"',
|
|
);
|
|
expect(defines["process.env.OTEL_EXPORTER_OTLP_PROTOCOL"]).toBe(
|
|
'"http/json"',
|
|
);
|
|
expect(defines["process.env.OTEL_EXPORTER_OTLP_HEADERS"]).toBe(
|
|
'"x-api-key=secret"',
|
|
);
|
|
expect(defines["process.env.OTEL_LOGS_EXPORTER"]).toBe('"otlp"');
|
|
expect(defines["process.env.OTEL_METRICS_EXPORTER"]).toBe('"otlp"');
|
|
expect(defines["process.env.OTEL_TRACES_EXPORTER"]).toBe('"otlp"');
|
|
expect(defines["process.env.OTEL_METRIC_EXPORT_INTERVAL"]).toBe('"60000"');
|
|
});
|
|
|
|
it("inlines unset OTEL vars as empty strings so binaries never fall back to runtime env", () => {
|
|
const defines = defineMap(telemetryDefineArgs({}));
|
|
expect(defines["process.env.OTEL_TELEMETRY_ENABLED"]).toBe('""');
|
|
expect(defines["process.env.OTEL_EXPORTER_OTLP_ENDPOINT"]).toBe('""');
|
|
expect(defines["process.env.OTEL_TRACES_EXPORTER"]).toBe('""');
|
|
});
|
|
|
|
it("inlines the trace policy vars the Langfuse relay reads at runtime", () => {
|
|
const defines = defineMap(
|
|
telemetryDefineArgs({
|
|
CLINE_TRACE_SAMPLE_PERCENT: "25",
|
|
CLINE_TRACE_RECORD_CONTENT: "true",
|
|
}),
|
|
);
|
|
expect(defines["process.env.CLINE_TRACE_SAMPLE_PERCENT"]).toBe('"25"');
|
|
expect(defines["process.env.CLINE_TRACE_RECORD_CONTENT"]).toBe('"true"');
|
|
const unset = defineMap(telemetryDefineArgs({}));
|
|
expect(unset["process.env.CLINE_TRACE_SAMPLE_PERCENT"]).toBe('""');
|
|
expect(unset["process.env.CLINE_TRACE_RECORD_CONTENT"]).toBe('""');
|
|
});
|
|
|
|
it("includes API key defines only when the vars are set", () => {
|
|
const withoutKeys = defineMap(telemetryDefineArgs({}));
|
|
expect(withoutKeys).not.toHaveProperty(
|
|
"process.env.TELEMETRY_SERVICE_API_KEY",
|
|
);
|
|
expect(withoutKeys).not.toHaveProperty("process.env.ERROR_SERVICE_API_KEY");
|
|
|
|
const withKeys = defineMap(
|
|
telemetryDefineArgs({
|
|
TELEMETRY_SERVICE_API_KEY: "tk",
|
|
ERROR_SERVICE_API_KEY: "ek",
|
|
}),
|
|
);
|
|
expect(withKeys["process.env.TELEMETRY_SERVICE_API_KEY"]).toBe('"tk"');
|
|
expect(withKeys["process.env.ERROR_SERVICE_API_KEY"]).toBe('"ek"');
|
|
});
|
|
|
|
it("inlines the cloud-agents toggle only when set at build time", () => {
|
|
const withoutToggle = defineMap(telemetryDefineArgs({}));
|
|
expect(withoutToggle).not.toHaveProperty(
|
|
"process.env.CLINE_CODE_CLOUD_AGENTS",
|
|
);
|
|
|
|
const withToggle = defineMap(
|
|
telemetryDefineArgs({ CLINE_CODE_CLOUD_AGENTS: "1" }),
|
|
);
|
|
expect(withToggle["process.env.CLINE_CODE_CLOUD_AGENTS"]).toBe('"1"');
|
|
});
|
|
|
|
it("JSON-escapes values so headers with quotes survive the define", () => {
|
|
const defines = defineMap(
|
|
telemetryDefineArgs({
|
|
OTEL_EXPORTER_OTLP_HEADERS: 'x-quote="quoted",y=2',
|
|
}),
|
|
);
|
|
expect(defines["process.env.OTEL_EXPORTER_OTLP_HEADERS"]).toBe(
|
|
JSON.stringify('x-quote="quoted",y=2'),
|
|
);
|
|
expect(JSON.parse(defines["process.env.OTEL_EXPORTER_OTLP_HEADERS"])).toBe(
|
|
'x-quote="quoted",y=2',
|
|
);
|
|
});
|
|
});
|