Skip to content

Commit 99cca1e

Browse files
committed
Add more coverage of OpenTelemetryProperties
Signed-off-by: Antoine Toulme <[email protected]>
1 parent 9e0a501 commit 99cca1e

File tree

3 files changed

+134
-11
lines changed

3 files changed

+134
-11
lines changed

fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryProperties.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,18 @@
1818
import java.util.List;
1919
import java.util.Locale;
2020
import java.util.Map;
21-
import java.util.Properties;
2221
import java.util.concurrent.TimeUnit;
2322
import java.util.stream.Collectors;
2423

2524
final class OpenTelemetryProperties implements ConfigProperties {
2625
private final Map<String, String> config;
2726

28-
OpenTelemetryProperties(final Properties props) {
27+
OpenTelemetryProperties(final Map... arrayOfProperties) {
2928
Map<String, String> config = new HashMap<>();
30-
System.getenv().forEach(
31-
(name, value) -> config.put(name.toLowerCase(Locale.ROOT).replace('_', '.'), value));
32-
System.getProperties().forEach(
33-
(key, value) ->
34-
config.put(((String) key).toLowerCase(Locale.ROOT).replace('-', '.'), (String) value));
35-
props.forEach((key, value) ->
36-
config.put(((String) key).toLowerCase(Locale.ROOT).replace('-', '.'), (String) value));
37-
29+
for (Map props : arrayOfProperties) {
30+
props.forEach((key, value) ->
31+
config.put(((String) key).toLowerCase(Locale.ROOT).replace('-', '.'), (String) value));
32+
}
3833
this.config = config;
3934
}
4035

fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public void initialize(final Properties props) {
3333
String serviceName = props.getProperty(CORE_CHAINCODE_ID_NAME, "unknown");
3434
props.setProperty(ResourceAttributes.SERVICE_NAME.getKey(), serviceName);
3535

36-
OpenTelemetry openTelemetry = OpenTelemetrySdkAutoConfiguration.initialize(false, new OpenTelemetryProperties(props));
36+
OpenTelemetry openTelemetry = OpenTelemetrySdkAutoConfiguration.initialize(false,
37+
new OpenTelemetryProperties(System.getenv(), System.getProperties(), props));
3738
tracer = openTelemetry.getTracerProvider().get("org.hyperledger.traces");
3839
grpcTracer = GrpcTracing.newBuilder(openTelemetry).build();
3940
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/*
2+
* Copyright 2019 IBM All Rights Reserved.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
package org.hyperledger.fabric.traces.impl;
7+
8+
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException;
9+
import org.junit.Test;
10+
11+
import java.time.Duration;
12+
import java.util.Arrays;
13+
import java.util.Collections;
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
17+
import static java.time.temporal.ChronoUnit.DAYS;
18+
import static java.time.temporal.ChronoUnit.HOURS;
19+
import static java.time.temporal.ChronoUnit.MILLIS;
20+
import static java.time.temporal.ChronoUnit.MINUTES;
21+
import static java.time.temporal.ChronoUnit.SECONDS;
22+
import static org.assertj.core.api.Assertions.assertThat;
23+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
24+
25+
public class OpenTelemetryPropertiesTest {
26+
27+
@Test
28+
public void testOverrideValue() {
29+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "bar"), Collections.singletonMap("foo", "foobar"));
30+
assertThat(props.getString("foo")).isEqualTo("foobar");
31+
}
32+
33+
@Test
34+
public void testCanGetDurationDays() {
35+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5d"));
36+
assertThat(props.getDuration("foo")).isEqualTo(Duration.of(5, DAYS));
37+
}
38+
39+
@Test
40+
public void testCanGetDurationHours() {
41+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5h"));
42+
assertThat(props.getDuration("foo")).isEqualTo(Duration.of(5, HOURS));
43+
}
44+
45+
46+
@Test
47+
public void testCanGetDurationMinutes() {
48+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5m"));
49+
assertThat(props.getDuration("foo")).isEqualTo(Duration.of(5, MINUTES));
50+
}
51+
52+
@Test
53+
public void testCanGetDurationSeconds() {
54+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5s"));
55+
assertThat(props.getDuration("foo")).isEqualTo(Duration.of(5, SECONDS));
56+
}
57+
58+
@Test
59+
public void testCanGetDurationMilliSeconds() {
60+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5ms"));
61+
assertThat(props.getDuration("foo")).isEqualTo(Duration.of(5, MILLIS));
62+
}
63+
64+
@Test
65+
public void testCanGetDurationInvalid() {
66+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5foo"));
67+
assertThatThrownBy(() -> props.getDuration("foo")).isInstanceOf(ConfigurationException.class);
68+
}
69+
70+
@Test
71+
public void testGetDouble() {
72+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5.23"));
73+
assertThat(props.getDouble("foo")).isEqualTo(5.23d);
74+
assertThat(props.getDouble("bar")).isNull();
75+
}
76+
77+
@Test
78+
public void testGetDoubleInvalid() {
79+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "5foo"));
80+
assertThatThrownBy(() -> props.getDouble("foo")).isInstanceOf(ConfigurationException.class);
81+
}
82+
83+
@Test
84+
public void testGetLong() {
85+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "500003"));
86+
assertThat(props.getLong("foo")).isEqualTo(500003L);
87+
assertThat(props.getLong("bar")).isNull();
88+
}
89+
90+
91+
@Test
92+
public void testGetInt() {
93+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "500003"));
94+
assertThat(props.getInt("foo")).isEqualTo(500003);
95+
assertThat(props.getInt("bar")).isNull();
96+
}
97+
98+
@Test
99+
public void testGetBoolean() {
100+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "true"));
101+
assertThat(props.getBoolean("foo")).isTrue();
102+
assertThat(props.getBoolean("bar")).isNull();
103+
}
104+
105+
@Test
106+
public void testGetList() {
107+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "foo,bar,foobar"));
108+
assertThat(props.getList("foo")).isEqualTo(Arrays.asList("foo", "bar", "foobar"));
109+
assertThat(props.getList("bar")).isEqualTo(Collections.emptyList());
110+
}
111+
112+
@Test
113+
public void testGetMap() {
114+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "foo=bar,foobar=noes"));
115+
Map<String, String> expected = new HashMap<>();
116+
expected.put("foo", "bar");
117+
expected.put("foobar", "noes");
118+
assertThat(props.getMap("foo")).isEqualTo(expected);
119+
}
120+
121+
@Test
122+
public void testGetMapInvalid() {
123+
OpenTelemetryProperties props = new OpenTelemetryProperties(Collections.singletonMap("foo", "foo/bar,foobar/noes"));
124+
Map<String, String> expected = new HashMap<>();
125+
assertThatThrownBy(() -> props.getMap("foo")).isInstanceOf(ConfigurationException.class);
126+
}
127+
}

0 commit comments

Comments
 (0)