1414import static org .mockito .Mockito .verify ;
1515import static org .mockito .Mockito .when ;
1616
17+ import io .opentelemetry .contrib .dynamic .policy .source .SourceKind ;
1718import io .opentelemetry .contrib .dynamic .policy .tracesampling .TraceSamplingRatePolicy ;
1819import java .util .Arrays ;
1920import java .util .Collections ;
@@ -79,6 +80,49 @@ void updatePoliciesIgnoresDuplicatePolicyIdentitiesInInput() {
7980 assertThat (store .getPolicies ()).containsExactly (first );
8081 }
8182
83+ @ Test
84+ void updatePoliciesResolvesDuplicatePolicyIdentitiesBySourcePriority () {
85+ PolicyStore store = new PolicyStore ();
86+ TelemetryPolicy filePolicy =
87+ new TestTelemetryPolicy (
88+ new TelemetryPolicyIdentity ("test-policy" , "File policy" ),
89+ "test-policy" ,
90+ SourceKind .FILE );
91+ TelemetryPolicy httpPolicy =
92+ new TestTelemetryPolicy (
93+ new TelemetryPolicyIdentity ("test-policy" , "HTTP policy" ),
94+ "test-policy" ,
95+ SourceKind .HTTP );
96+ TelemetryPolicy opampPolicy =
97+ new TestTelemetryPolicy (
98+ new TelemetryPolicyIdentity ("test-policy" , "OpAMP policy" ),
99+ "test-policy" ,
100+ SourceKind .OPAMP );
101+
102+ assertThat (store .updatePolicies (Arrays .asList (filePolicy , opampPolicy , httpPolicy ))).isTrue ();
103+
104+ assertThat (store .getPolicies ()).containsExactly (opampPolicy );
105+ }
106+
107+ @ Test
108+ void updatePoliciesUsesHttpWhenDuplicatePolicyHasNoOpampSource () {
109+ PolicyStore store = new PolicyStore ();
110+ TelemetryPolicy filePolicy =
111+ new TestTelemetryPolicy (
112+ new TelemetryPolicyIdentity ("test-policy" , "File policy" ),
113+ "test-policy" ,
114+ SourceKind .FILE );
115+ TelemetryPolicy httpPolicy =
116+ new TestTelemetryPolicy (
117+ new TelemetryPolicyIdentity ("test-policy" , "HTTP policy" ),
118+ "test-policy" ,
119+ SourceKind .HTTP );
120+
121+ assertThat (store .updatePolicies (Arrays .asList (filePolicy , httpPolicy ))).isTrue ();
122+
123+ assertThat (store .getPolicies ()).containsExactly (httpPolicy );
124+ }
125+
82126 @ Test
83127 void getPoliciesReturnsEmptyWhenNeverUpdated () {
84128 assertThat (new PolicyStore ().getPolicies ()).isEqualTo (Collections .emptyList ());
@@ -247,10 +291,17 @@ private static boolean containsTraceSamplingProbability(
247291 private static final class TestTelemetryPolicy implements TelemetryPolicy {
248292 private final TelemetryPolicyIdentity identity ;
249293 private final String type ;
294+ private final SourceKind sourceKind ;
250295
251296 private TestTelemetryPolicy (TelemetryPolicyIdentity identity , String type ) {
297+ this (identity , type , SourceKind .CUSTOM );
298+ }
299+
300+ private TestTelemetryPolicy (
301+ TelemetryPolicyIdentity identity , String type , SourceKind sourceKind ) {
252302 this .identity = identity ;
253303 this .type = type ;
304+ this .sourceKind = sourceKind ;
254305 }
255306
256307 @ Override
@@ -262,5 +313,10 @@ public TelemetryPolicyIdentity getIdentity() {
262313 public String getType () {
263314 return type ;
264315 }
316+
317+ @ Override
318+ public SourceKind getSourceKind () {
319+ return sourceKind ;
320+ }
265321 }
266322}
0 commit comments