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(); } }); });