forked from open-telemetry/opentelemetry-java-contrib
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLinePerPolicyFileProviderTest.java
More file actions
129 lines (102 loc) · 4.21 KB
/
LinePerPolicyFileProviderTest.java
File metadata and controls
129 lines (102 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.contrib.dynamic.policy;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.contrib.dynamic.policy.source.SourceFormat;
import io.opentelemetry.contrib.dynamic.policy.source.SourceWrapper;
import io.opentelemetry.contrib.dynamic.policy.tracesampling.TraceSamplingRatePolicy;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
class LinePerPolicyFileProviderTest {
private static final String TRACE_SAMPLING_TYPE = TraceSamplingRatePolicy.POLICY_TYPE;
@TempDir Path tempDir;
@Test
void fetchPoliciesReturnsEmptyWhenFileMissing() throws Exception {
Path missingFile = tempDir.resolve("missing-policies.txt");
LinePerPolicyFileProvider provider =
new LinePerPolicyFileProvider(missingFile, Collections.singletonList(acceptingValidator()));
List<TelemetryPolicy> policies = provider.fetchPolicies();
assertThat(policies).isEmpty();
}
@Test
void fetchPoliciesParsesJsonLines() throws Exception {
Path file = writeLines("{\"trace-sampling\": 0.5}");
LinePerPolicyFileProvider provider =
new LinePerPolicyFileProvider(file, Collections.singletonList(acceptingValidator()));
List<TelemetryPolicy> policies = provider.fetchPolicies();
assertThat(policies).hasSize(1);
assertThat(policies.get(0).getType()).isEqualTo(TRACE_SAMPLING_TYPE);
}
@Test
void fetchPoliciesParsesKeyValueLines() throws Exception {
Path file = writeLines("trace-sampling=0.5");
LinePerPolicyFileProvider provider =
new LinePerPolicyFileProvider(file, Collections.singletonList(acceptingValidator()));
List<TelemetryPolicy> policies = provider.fetchPolicies();
assertThat(policies).hasSize(1);
assertThat(policies.get(0).getType()).isEqualTo(TRACE_SAMPLING_TYPE);
}
@Test
void fetchPoliciesSkipsBlankLinesAndComments() throws Exception {
Path file = writeLines("", " ", "# comment line", "trace-sampling=0.25");
LinePerPolicyFileProvider provider =
new LinePerPolicyFileProvider(file, Collections.singletonList(acceptingValidator()));
List<TelemetryPolicy> policies = provider.fetchPolicies();
assertThat(policies).hasSize(1);
assertThat(policies.get(0).getType()).isEqualTo(TRACE_SAMPLING_TYPE);
}
@Test
void fetchPoliciesSkipsUnknownOrRejectedPolicies() throws Exception {
PolicyValidator rejectingValidator =
new TestPolicyValidator(/* acceptJson= */ false, /* acceptKeyValue= */ false);
Path file = writeLines("{\"trace-sampling\": 0.5}", "{\"other-policy\": 0.5}", "other.key=1");
LinePerPolicyFileProvider provider =
new LinePerPolicyFileProvider(file, Collections.singletonList(rejectingValidator));
List<TelemetryPolicy> policies = provider.fetchPolicies();
assertThat(policies).isEmpty();
}
private Path writeLines(String... lines) throws IOException {
Path file = tempDir.resolve("policies.txt");
Files.write(file, Arrays.asList(lines));
return file;
}
private static PolicyValidator acceptingValidator() {
return new TestPolicyValidator(/* acceptJson= */ true, /* acceptKeyValue= */ true);
}
private static class TestPolicyValidator implements PolicyValidator {
private final boolean acceptJson;
private final boolean acceptKeyValue;
private TestPolicyValidator(boolean acceptJson, boolean acceptKeyValue) {
this.acceptJson = acceptJson;
this.acceptKeyValue = acceptKeyValue;
}
@Override
public String getPolicyType() {
return TRACE_SAMPLING_TYPE;
}
@Override
public TelemetryPolicy validate(SourceWrapper source) {
if (source.getFormat() == SourceFormat.JSONKEYVALUE) {
if (!acceptJson) {
return null;
}
return new TelemetryPolicy(TRACE_SAMPLING_TYPE);
}
if (source.getFormat() == SourceFormat.KEYVALUE) {
if (!acceptKeyValue) {
return null;
}
return new TelemetryPolicy(TRACE_SAMPLING_TYPE);
}
return null;
}
}
}