66package io .opentelemetry .contrib .dynamic .policy .registry ;
77
88import static org .assertj .core .api .Assertions .assertThat ;
9+ import static org .assertj .core .api .Assertions .assertThatThrownBy ;
910import static org .mockito .Mockito .mock ;
1011import static org .mockito .Mockito .when ;
1112
@@ -120,6 +121,23 @@ void readFromConfigPropertiesReturnsNullOnParseFailure() throws Exception {
120121 assertThat (configFromPaths (null , badJson .toString ())).isNull ();
121122 }
122123
124+ @ Test
125+ void readFromConfigPropertiesTrimsLocationFromJsonFile () throws Exception {
126+ Path jsonPath = tempDir .resolve ("policy-init.json" );
127+ Files .write (jsonPath , jsonWithLocation (" from-json " ).getBytes (StandardCharsets .UTF_8 ));
128+
129+ ConfigProperties config = mock (ConfigProperties .class );
130+ when (config .getString (PolicyInitConfig .POLICY_INIT_CONFIG_PROPERTY_YAML )).thenReturn (null );
131+ when (config .getString (PolicyInitConfig .POLICY_INIT_CONFIG_PROPERTY_JSON ))
132+ .thenReturn (jsonPath .toString ());
133+
134+ PolicyInitConfig initConfig = PolicyInitConfig .readFromConfigProperties (config );
135+
136+ assertThat (initConfig ).isNotNull ();
137+ assertThat (initConfig .getSources ()).hasSize (1 );
138+ assertThat (initConfig .getSources ().get (0 ).getLocation ()).isEqualTo ("from-json" );
139+ }
140+
123141 @ Test
124142 void readFromDeclarativeConfigPropertiesReturnsNullWhenTelemetryPolicyMissing () {
125143 DeclarativeConfigProperties root = mock (DeclarativeConfigProperties .class );
@@ -128,6 +146,34 @@ void readFromDeclarativeConfigPropertiesReturnsNullWhenTelemetryPolicyMissing()
128146 assertThat (PolicyInitConfig .readFromDeclarativeConfigProperties (root )).isNull ();
129147 }
130148
149+ @ Test
150+ void readFromDeclarativeConfigPropertiesThrowsWhenTelemetryPolicySourcesMissing () {
151+ DeclarativeConfigProperties root = mock (DeclarativeConfigProperties .class );
152+ DeclarativeConfigProperties telemetryPolicy = mock (DeclarativeConfigProperties .class );
153+ when (root .getStructured (PolicyInitConfig .TELEMETRY_POLICY_DECLARATIVE_KEY ))
154+ .thenReturn (telemetryPolicy );
155+ when (telemetryPolicy .getStructuredList (PolicyInitConfig .SOURCES_DECLARATIVE_KEY ))
156+ .thenReturn (null );
157+
158+ assertThatThrownBy (() -> PolicyInitConfig .readFromDeclarativeConfigProperties (root ))
159+ .isInstanceOf (IllegalArgumentException .class )
160+ .hasMessageContaining ("sources" );
161+ }
162+
163+ @ Test
164+ void readFromDeclarativeConfigPropertiesThrowsWhenTelemetryPolicySourcesEmpty () {
165+ DeclarativeConfigProperties root = mock (DeclarativeConfigProperties .class );
166+ DeclarativeConfigProperties telemetryPolicy = mock (DeclarativeConfigProperties .class );
167+ when (root .getStructured (PolicyInitConfig .TELEMETRY_POLICY_DECLARATIVE_KEY ))
168+ .thenReturn (telemetryPolicy );
169+ when (telemetryPolicy .getStructuredList (PolicyInitConfig .SOURCES_DECLARATIVE_KEY ))
170+ .thenReturn (Collections .emptyList ());
171+
172+ assertThatThrownBy (() -> PolicyInitConfig .readFromDeclarativeConfigProperties (root ))
173+ .isInstanceOf (IllegalArgumentException .class )
174+ .hasMessageContaining ("sources" );
175+ }
176+
131177 @ Test
132178 void readFromDeclarativeConfigPropertiesReadsTelemetryPolicySources () {
133179 DeclarativeConfigProperties root = mock (DeclarativeConfigProperties .class );
@@ -148,6 +194,20 @@ void readFromDeclarativeConfigPropertiesReadsTelemetryPolicySources() {
148194 assertThat (source .getMappings ().get (0 ).getPolicyType ()).isEqualTo ("trace_sampling_rate_policy" );
149195 }
150196
197+ @ Test
198+ void readFromDeclarativeConfigPropertiesTrimsLocation () {
199+ DeclarativeConfigProperties root = mock (DeclarativeConfigProperties .class );
200+ DeclarativeConfigProperties telemetryPolicy = telemetryPolicyConfig (" from-declarative " );
201+ when (root .getStructured (PolicyInitConfig .TELEMETRY_POLICY_DECLARATIVE_KEY ))
202+ .thenReturn (telemetryPolicy );
203+
204+ PolicyInitConfig config = PolicyInitConfig .readFromDeclarativeConfigProperties (root );
205+
206+ assertThat (config ).isNotNull ();
207+ assertThat (config .getSources ()).hasSize (1 );
208+ assertThat (config .getSources ().get (0 ).getLocation ()).isEqualTo ("from-declarative" );
209+ }
210+
151211 @ Test
152212 void readFromDeclarativeOrConfigPropertiesPrefersDeclarativeWhenPresent () throws Exception {
153213 Path jsonPath = tempDir .resolve ("policy-init.json" );
0 commit comments