95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
import { metrics } from "@opentelemetry/api";
|
|
import { describe, expect, it } from "@suaveplan/testing/runner";
|
|
import {
|
|
recordEta,
|
|
recordEtaDuration,
|
|
recordFindNearestDuration,
|
|
recordLaneDistanceDuration,
|
|
recordLaneLookup,
|
|
recordPortLookup,
|
|
refreshPortsMeters,
|
|
} from "./otel.js";
|
|
|
|
describe("OTel instrumentation surface", () => {
|
|
it("counter and histogram recorders run without throwing", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
recordPortLookup("findPort");
|
|
recordPortLookup("byCountry");
|
|
recordPortLookup("byType");
|
|
recordPortLookup("search");
|
|
recordPortLookup("findNearest");
|
|
recordPortLookup("inRadius");
|
|
recordLaneLookup("sea");
|
|
recordLaneLookup("rail");
|
|
recordLaneLookup("air");
|
|
recordLaneLookup("all");
|
|
recordEta("high");
|
|
recordEta("medium");
|
|
recordEta("low");
|
|
recordFindNearestDuration(1.5);
|
|
recordLaneDistanceDuration(0.5);
|
|
recordEtaDuration(2.5);
|
|
expect(true).toBe(true);
|
|
});
|
|
|
|
it("refreshPortsMeters rebinds after provider change", {
|
|
timeout: 5000,
|
|
}, () => {
|
|
let createCalls = 0;
|
|
const stubMeter = {
|
|
createCounter() {
|
|
createCalls++;
|
|
return { add(): void {} };
|
|
},
|
|
createHistogram() {
|
|
createCalls++;
|
|
return { record(): void {} };
|
|
},
|
|
createUpDownCounter() {
|
|
return { add(): void {} };
|
|
},
|
|
createObservableCounter() {
|
|
return {};
|
|
},
|
|
createObservableGauge() {
|
|
return {};
|
|
},
|
|
createObservableUpDownCounter() {
|
|
return {};
|
|
},
|
|
addBatchObservableCallback(): void {},
|
|
removeBatchObservableCallback(): void {},
|
|
createGauge() {
|
|
return { record(): void {} };
|
|
},
|
|
};
|
|
const stubProvider = {
|
|
getMeter() {
|
|
return stubMeter;
|
|
},
|
|
};
|
|
// biome safety: cast through unknown — we are not extending the real type.
|
|
const original = metrics.getMeterProvider();
|
|
metrics.setGlobalMeterProvider(
|
|
stubProvider as unknown as ReturnType<
|
|
typeof metrics.getMeterProvider
|
|
>
|
|
);
|
|
try {
|
|
refreshPortsMeters();
|
|
// 3 counters + 3 histograms = 6 instrument creations.
|
|
expect(createCalls).toBeGreaterThanOrEqual(6);
|
|
recordPortLookup("findPort");
|
|
recordLaneLookup("all");
|
|
recordEta("high");
|
|
recordFindNearestDuration(1);
|
|
recordLaneDistanceDuration(1);
|
|
recordEtaDuration(1);
|
|
} finally {
|
|
metrics.setGlobalMeterProvider(original);
|
|
refreshPortsMeters();
|
|
}
|
|
});
|
|
});
|