Skip to content

Commit 6ee76bc

Browse files
author
Ignacio Bonafonte
authored
Merge pull request #324 from BlueOwlOpenSource/testable-envvarresource
Improves testability of EnvVarResource.
2 parents 1e87cc9 + a61071f commit 6ee76bc

File tree

4 files changed

+57
-2
lines changed

4 files changed

+57
-2
lines changed

Sources/OpenTelemetrySdk/Metrics/MeterProviderSdk.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class MeterProviderSdk: MeterProvider {
2424
public init(metricProcessor: MetricProcessor,
2525
metricExporter: MetricExporter,
2626
metricPushInterval: TimeInterval = MeterProviderSdk.defaultPushInterval,
27-
resource: Resource = EnvVarResource.resource)
27+
resource: Resource = EnvVarResource.get())
2828
{
2929
meterSharedState = MeterSharedState(metricProcessor: metricProcessor, metricPushInterval: metricPushInterval, metricExporter: metricExporter, resource: resource)
3030

Sources/OpenTelemetrySdk/Resources/EnvVarResource.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ public struct EnvVarResource {
1717
public static let resource = Resource().merging(other: Resource(attributes: parseResourceAttributes(rawEnvAttributes: ProcessInfo.processInfo.environment[otelResourceAttributesEnv])))
1818
private init() {}
1919

20+
public static func get(environment: [String: String] = ProcessInfo.processInfo.environment) -> Resource {
21+
return Resource().merging(other: Resource(attributes: parseResourceAttributes(rawEnvAttributes: environment[otelResourceAttributesEnv])))
22+
}
23+
2024
/// Creates a label map from the OC_RESOURCE_LABELS environment variable.
2125
/// OC_RESOURCE_LABELS: A comma-separated list of labels describing the source in more detail,
2226
/// e.g. “key1=val1,key2=val2”. Domain names and paths are accepted as label keys. Values may be

Sources/OpenTelemetrySdk/Trace/TracerProviderSdk.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class TracerProviderSdk: TracerProvider {
1515
/// Returns a new TracerProviderSdk with default Clock, IdGenerator and Resource.
1616
public init(clock: Clock = MillisClock(),
1717
idGenerator: IdGenerator = RandomIdGenerator(),
18-
resource: Resource = EnvVarResource.resource,
18+
resource: Resource = EnvVarResource.get(),
1919
spanLimits: SpanLimits = SpanLimits(),
2020
sampler: Sampler = Samplers.parentBased(root: Samplers.alwaysOn),
2121
spanProcessors: [SpanProcessor] = [])
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import OpenTelemetryApi
7+
import OpenTelemetrySdk
8+
import XCTest
9+
10+
class EnvVarResourceTest: XCTestCase {
11+
func testDefaultSharedInstance() {
12+
let resource = EnvVarResource.resource
13+
XCTAssertEqual(resource.attributes.count, 4)
14+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.serviceName.rawValue))
15+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkName.rawValue))
16+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkLanguage.rawValue))
17+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkVersion.rawValue))
18+
}
19+
20+
func testGetUniqueInstance() {
21+
let resource = EnvVarResource.get()
22+
XCTAssertEqual(resource.attributes.count, 4)
23+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.serviceName.rawValue))
24+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkName.rawValue))
25+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkLanguage.rawValue))
26+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkVersion.rawValue))
27+
}
28+
29+
func testGetUniqueInstanceConsideringEnvironment() {
30+
let environment = [ "OTEL_RESOURCE_ATTRIBUTES": "unique.key=some.value,another.key=another.value"]
31+
let resource = EnvVarResource.get(environment: environment)
32+
XCTAssertEqual(resource.attributes.count, 6)
33+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.serviceName.rawValue))
34+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkName.rawValue))
35+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkLanguage.rawValue))
36+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.telemetrySdkVersion.rawValue))
37+
38+
XCTAssertTrue(resource.attributes.keys.contains("unique.key"))
39+
XCTAssertEqual(resource.attributes["unique.key"]!, AttributeValue("some.value"))
40+
41+
XCTAssertTrue(resource.attributes.keys.contains("another.key"))
42+
XCTAssertEqual(resource.attributes["another.key"]!, AttributeValue("another.value"))
43+
}
44+
45+
func testSpecifyingServiceNameViaEnvironment_changesResourceAttributeValue() {
46+
let environment = [ "OTEL_RESOURCE_ATTRIBUTES": "service.name=CustomServiceName"]
47+
let resource = EnvVarResource.get(environment: environment)
48+
XCTAssertTrue(resource.attributes.keys.contains(ResourceAttributes.serviceName.rawValue))
49+
XCTAssertEqual(resource.attributes[ResourceAttributes.serviceName.rawValue], AttributeValue("CustomServiceName"))
50+
}
51+
}

0 commit comments

Comments
 (0)