Skip to content

Commit 47be4ed

Browse files
committed
Modifies OtlpMetricExporter initializer to inject envVarHeaders; improves testability.
1 parent 0338a66 commit 47be4ed

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

Sources/Exporters/OpenTelemetryProtocol/metric/OtlpMetricExporter.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ public class OtlpMetricExporter: MetricExporter {
1717
let config : OtlpConfiguration
1818
var callOptions : CallOptions? = nil
1919

20+
2021

21-
22-
public init(channel: GRPCChannel, config: OtlpConfiguration = OtlpConfiguration(), logger: Logger = Logger(label: "io.grpc", factory: { _ in SwiftLogNoOpLogHandler() })) {
22+
public init(channel: GRPCChannel, config: OtlpConfiguration = OtlpConfiguration(), logger: Logger = Logger(label: "io.grpc", factory: { _ in SwiftLogNoOpLogHandler() }), envVarHeaders: [(String,String)]? = EnvVarHeaders.attributes
23+
) {
2324
self.channel = channel
2425
self.config = config
2526
self.metricClient = Opentelemetry_Proto_Collector_Metrics_V1_MetricsServiceClient(channel: self.channel)
2627

27-
if let headers = EnvVarHeaders.attributes {
28+
if let headers = envVarHeaders {
2829
callOptions = CallOptions(customMetadata: HPACKHeaders(headers), logger: logger)
2930
} else if let headers = config.headers {
3031
callOptions = CallOptions(customMetadata: HPACKHeaders(headers), logger: logger)

Tests/ExportersTests/OpenTelemetryProtocol/OtlpMetricExporterTests.swift

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
15

26
import Foundation
37
import Logging
@@ -54,6 +58,24 @@ class OtlpMetricExproterTests: XCTestCase {
5458
XCTAssertEqual(logger.label, "my.grpc.logger")
5559
}
5660

61+
func testConfigHeadersIsNil_whenDefaultInitCalled() throws {
62+
let exporter = OtlpMetricExporter(channel: channel)
63+
XCTAssertNil(exporter.config.headers)
64+
}
65+
66+
func testConfigHeadersAreSet_whenInitCalledWithCustomConfig() throws {
67+
let config: OtlpConfiguration = OtlpConfiguration(timeout: TimeInterval(10), headers: [("FOO", "BAR")])
68+
let exporter = OtlpMetricExporter(channel: channel, config: config)
69+
XCTAssertNotNil(exporter.config.headers)
70+
XCTAssertEqual(exporter.config.headers?[0].0, "FOO")
71+
XCTAssertEqual(exporter.config.headers?[0].1, "BAR")
72+
}
73+
74+
func testConfigHeadersAreSet_whenInitCalledWithExplicitHeaders() throws {
75+
let exporter = OtlpMetricExporter(channel: channel, envVarHeaders: [("FOO", "BAR")])
76+
XCTAssertNil(exporter.config.headers)
77+
XCTAssertEqual("BAR", exporter.callOptions?.customMetadata.first(name: "FOO"))
78+
}
5779

5880
func testGaugeExport() {
5981
let metric = generateGaugeMetric()

0 commit comments

Comments
 (0)