Skip to content

Commit 2ada3da

Browse files
test: added regression tests for exporter selection based on protocol
1 parent 19e600f commit 2ada3da

1 file changed

Lines changed: 54 additions & 1 deletion

File tree

tests/otel.test.ts

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
import { describe, test, expect, afterEach } from "bun:test"
2-
import { buildResource } from "../src/otel.ts"
2+
import { OTLPLogExporter as OTLPHttpLogExporter } from "@opentelemetry/exporter-logs-otlp-http"
3+
import { OTLPLogExporter as OTLPProtoLogExporter } from "@opentelemetry/exporter-logs-otlp-proto"
4+
import { OTLPMetricExporter as OTLPHttpMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http"
5+
import { OTLPMetricExporter as OTLPProtoMetricExporter } from "@opentelemetry/exporter-metrics-otlp-proto"
6+
import { OTLPTraceExporter as OTLPHttpTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"
7+
import { OTLPTraceExporter as OTLPProtoTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"
8+
import { buildResource, setupOtel, type OtelProviders } from "../src/otel.ts"
9+
10+
let providers: OtelProviders | undefined
11+
12+
function exportersOf(currentProviders: OtelProviders) {
13+
const meterProvider = currentProviders.meterProvider as unknown as {
14+
_sharedState: { metricCollectors: Array<{ _metricReader: { _exporter: unknown } }> }
15+
}
16+
const loggerProvider = currentProviders.loggerProvider as unknown as {
17+
_sharedState: { activeProcessor: { processors: Array<{ _exporter: unknown }> } }
18+
}
19+
const tracerProvider = currentProviders.tracerProvider as unknown as {
20+
_activeSpanProcessor: { _spanProcessors: Array<{ _exporter: unknown }> }
21+
}
22+
23+
return {
24+
metric: meterProvider._sharedState.metricCollectors[0]!._metricReader._exporter,
25+
log: loggerProvider._sharedState.activeProcessor.processors[0]!._exporter,
26+
trace: tracerProvider._activeSpanProcessor._spanProcessors[0]!._exporter,
27+
}
28+
}
329

430
describe("buildResource", () => {
531
const originalEnv = process.env["OTEL_RESOURCE_ATTRIBUTES"]
@@ -41,3 +67,30 @@ describe("buildResource", () => {
4167
expect(resource.attributes["service.name"]).toBe("my-override")
4268
})
4369
})
70+
71+
describe("setupOtel", () => {
72+
afterEach(async () => {
73+
await providers?.tracerProvider.shutdown()
74+
await providers?.loggerProvider.shutdown()
75+
await providers?.meterProvider.shutdown()
76+
providers = undefined
77+
})
78+
79+
test("uses protobuf HTTP exporters for http/protobuf", async () => {
80+
providers = await setupOtel("http://collector:4318", "http/protobuf", 60000, 5000, "1.2.3")
81+
const exporters = exportersOf(providers)
82+
83+
expect(exporters.metric).toBeInstanceOf(OTLPProtoMetricExporter)
84+
expect(exporters.log).toBeInstanceOf(OTLPProtoLogExporter)
85+
expect(exporters.trace).toBeInstanceOf(OTLPProtoTraceExporter)
86+
})
87+
88+
test("uses JSON HTTP exporters for http/json", async () => {
89+
providers = await setupOtel("http://collector:4318", "http/json", 60000, 5000, "1.2.3")
90+
const exporters = exportersOf(providers)
91+
92+
expect(exporters.metric).toBeInstanceOf(OTLPHttpMetricExporter)
93+
expect(exporters.log).toBeInstanceOf(OTLPHttpLogExporter)
94+
expect(exporters.trace).toBeInstanceOf(OTLPHttpTraceExporter)
95+
})
96+
})

0 commit comments

Comments
 (0)