|
1 | 1 | 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 | +} |
3 | 29 |
|
4 | 30 | describe("buildResource", () => { |
5 | 31 | const originalEnv = process.env["OTEL_RESOURCE_ATTRIBUTES"] |
@@ -41,3 +67,30 @@ describe("buildResource", () => { |
41 | 67 | expect(resource.attributes["service.name"]).toBe("my-override") |
42 | 68 | }) |
43 | 69 | }) |
| 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