Skip to content

Commit 8409096

Browse files
authored
[dynamic control] Add TraceSamplingValidatorTest test (#2621)
1 parent b0c71bd commit 8409096

1 file changed

Lines changed: 128 additions & 0 deletions

File tree

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.contrib.dynamic.policy;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
import static org.assertj.core.api.Assertions.within;
10+
11+
import org.junit.jupiter.api.Test;
12+
import org.junit.jupiter.params.ParameterizedTest;
13+
import org.junit.jupiter.params.provider.ValueSource;
14+
15+
class TraceSamplingValidatorTest {
16+
17+
private static final String TRACE_SAMPLING_POLICY_TYPE = "trace-sampling";
18+
private static final String PROBABILITY_FIELD = "probability";
19+
private static final String TRACE_SAMPLING_ALIAS = "trace-sampling.probability";
20+
21+
private final TraceSamplingValidator validator = new TraceSamplingValidator();
22+
23+
@Test
24+
void testGetPolicyType() {
25+
assertThat(validator.getPolicyType()).isEqualTo(TRACE_SAMPLING_POLICY_TYPE);
26+
}
27+
28+
@Test
29+
void testGetAlias() {
30+
assertThat(validator.getAlias()).isEqualTo(TRACE_SAMPLING_ALIAS);
31+
}
32+
33+
@Test
34+
void testValidate_ValidJson() {
35+
String json = jsonForProbability(0.5);
36+
TelemetryPolicy policy = validator.validate(json);
37+
assertThat(policy).isNotNull();
38+
assertThat(policy.getType()).isEqualTo(TRACE_SAMPLING_POLICY_TYPE);
39+
assertThat(policy.getSpec().get(PROBABILITY_FIELD).asDouble()).isCloseTo(0.5, within(1e-9));
40+
}
41+
42+
@ParameterizedTest
43+
@ValueSource(doubles = {0.0, 1.0})
44+
void testValidate_ValidJson_BoundaryValues(double probability) {
45+
String json = jsonForProbability(probability);
46+
TelemetryPolicy policy = validator.validate(json);
47+
assertThat(policy).isNotNull();
48+
assertThat(policy.getType()).isEqualTo(TRACE_SAMPLING_POLICY_TYPE);
49+
assertThat(policy.getSpec().get(PROBABILITY_FIELD).asDouble())
50+
.isCloseTo(probability, within(1e-9));
51+
}
52+
53+
@Test
54+
void testValidate_InvalidJson_Malformed() {
55+
String json = "{invalid-json";
56+
assertThat(validator.validate(json)).isNull();
57+
}
58+
59+
@Test
60+
void testValidate_InvalidJson_MissingPolicyType() {
61+
String json = "{\"other-policy\": {\"probability\": 0.5}}";
62+
assertThat(validator.validate(json)).isNull();
63+
}
64+
65+
@Test
66+
void testValidate_InvalidJson_MissingProbability() {
67+
String json = "{\"" + TRACE_SAMPLING_POLICY_TYPE + "\": {\"other-field\": 0.5}}";
68+
assertThat(validator.validate(json)).isNull();
69+
}
70+
71+
@Test
72+
void testValidate_InvalidJson_ProbabilityNotNumber() {
73+
String json =
74+
"{\"" + TRACE_SAMPLING_POLICY_TYPE + "\": {\"" + PROBABILITY_FIELD + "\": \"high\"}}";
75+
assertThat(validator.validate(json)).isNull();
76+
}
77+
78+
@ParameterizedTest
79+
@ValueSource(doubles = {-0.1, 1.1})
80+
void testValidate_InvalidJson_ProbabilityOutOfRange(double probability) {
81+
String json = jsonForProbability(probability);
82+
assertThat(validator.validate(json)).isNull();
83+
}
84+
85+
@Test
86+
void testValidateAlias_Valid() {
87+
TelemetryPolicy policy = validator.validateAlias(TRACE_SAMPLING_ALIAS, "0.5");
88+
assertThat(policy).isNotNull();
89+
assertThat(policy.getType()).isEqualTo(TRACE_SAMPLING_POLICY_TYPE);
90+
assertThat(policy.getSpec().get(PROBABILITY_FIELD).asDouble()).isCloseTo(0.5, within(1e-9));
91+
}
92+
93+
@ParameterizedTest
94+
@ValueSource(strings = {"0.0", "1.0"})
95+
void testValidateAlias_Valid_BoundaryValues(String probability) {
96+
TelemetryPolicy policy = validator.validateAlias(TRACE_SAMPLING_ALIAS, probability);
97+
assertThat(policy).isNotNull();
98+
assertThat(policy.getType()).isEqualTo(TRACE_SAMPLING_POLICY_TYPE);
99+
assertThat(policy.getSpec().get(PROBABILITY_FIELD).asDouble())
100+
.isCloseTo(Double.parseDouble(probability), within(1e-9));
101+
}
102+
103+
@Test
104+
void testValidateAlias_InvalidKey() {
105+
assertThat(validator.validateAlias("other.key", "0.5")).isNull();
106+
}
107+
108+
@Test
109+
void testValidateAlias_InvalidValue_NotNumber() {
110+
assertThat(validator.validateAlias(TRACE_SAMPLING_ALIAS, "invalid")).isNull();
111+
}
112+
113+
@ParameterizedTest
114+
@ValueSource(strings = {"-0.1", "1.1"})
115+
void testValidateAlias_InvalidValue_OutOfRange(String probability) {
116+
assertThat(validator.validateAlias(TRACE_SAMPLING_ALIAS, probability)).isNull();
117+
}
118+
119+
private static String jsonForProbability(double probability) {
120+
return "{\""
121+
+ TRACE_SAMPLING_POLICY_TYPE
122+
+ "\": {\""
123+
+ PROBABILITY_FIELD
124+
+ "\": "
125+
+ probability
126+
+ "}}";
127+
}
128+
}

0 commit comments

Comments
 (0)