|
23 | 23 | import static org.assertj.core.api.Assertions.assertThat; |
24 | 24 |
|
25 | 25 | import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties; |
26 | | -import io.opentelemetry.javaagent.tooling.AgentVersion; |
27 | 26 | import io.opentelemetry.javaagent.tooling.resources.ResourceCustomizerProvider; |
28 | 27 | import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizer; |
29 | 28 | import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfigurationCustomizerProvider; |
30 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchLogRecordProcessorModel; |
31 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.BatchSpanProcessorModel; |
32 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel; |
33 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordProcessorModel; |
34 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LoggerProviderModel; |
35 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MeterProviderModel; |
36 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.MetricReaderModel; |
37 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.NameStringValuePairModel; |
38 | 29 | import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OpenTelemetryConfigurationModel; |
39 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpGrpcExporterModel; |
40 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpGrpcMetricExporterModel; |
41 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpHttpExporterModel; |
42 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.OtlpHttpMetricExporterModel; |
43 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PeriodicMetricReaderModel; |
44 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.PushMetricExporterModel; |
45 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleLogRecordProcessorModel; |
46 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SimpleSpanProcessorModel; |
47 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanExporterModel; |
48 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.SpanProcessorModel; |
49 | | -import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.TracerProviderModel; |
50 | 30 | import io.opentelemetry.sdk.logs.export.LogRecordExporter; |
51 | 31 | import io.opentelemetry.sdk.metrics.export.MetricExporter; |
52 | 32 | import io.opentelemetry.sdk.trace.export.SpanExporter; |
53 | | -import java.util.Arrays; |
54 | | -import java.util.Collections; |
55 | | -import java.util.HashMap; |
56 | | -import java.util.Map; |
57 | 33 | import java.util.concurrent.atomic.AtomicReference; |
58 | 34 | import java.util.function.BiFunction; |
59 | 35 | import java.util.function.Function; |
60 | | -import org.jetbrains.annotations.NotNull; |
61 | 36 | import org.junit.jupiter.api.Test; |
62 | 37 | import org.junit.jupiter.params.ParameterizedTest; |
63 | 38 | import org.junit.jupiter.params.provider.ValueSource; |
@@ -109,141 +84,6 @@ void distributionResourceProvider(boolean elasticFirst) { |
109 | 84 | json("{\"elastic_distribution\":null}]}")); |
110 | 85 | } |
111 | 86 |
|
112 | | - @ParameterizedTest |
113 | | - @ValueSource(strings = {"grpc", "http"}) |
114 | | - void userAgent(String protocol) { |
115 | | - // setup tracer provider with single + batch exporter |
116 | | - // check that the user-agent value is set as expected |
117 | | - OpenTelemetryConfigurationModel model = new OpenTelemetryConfigurationModel(); |
118 | | - |
119 | | - SpanExporterModel spanExporter = new SpanExporterModel(); |
120 | | - PushMetricExporterModel metricExporter = new PushMetricExporterModel(); |
121 | | - LogRecordExporterModel logExporter = new LogRecordExporterModel(); |
122 | | - |
123 | | - switch (protocol) { |
124 | | - case "grpc": |
125 | | - spanExporter.withOtlpGrpc(new OtlpGrpcExporterModel()); |
126 | | - metricExporter.withOtlpGrpc(new OtlpGrpcMetricExporterModel()); |
127 | | - logExporter.withOtlpGrpc(new OtlpGrpcExporterModel()); |
128 | | - break; |
129 | | - case "http": |
130 | | - spanExporter.withOtlpHttp(new OtlpHttpExporterModel()); |
131 | | - metricExporter.withOtlpHttp(new OtlpHttpMetricExporterModel()); |
132 | | - logExporter.withOtlpHttp(new OtlpHttpExporterModel()); |
133 | | - break; |
134 | | - default: |
135 | | - throw new IllegalArgumentException("Unsupported protocol: " + protocol); |
136 | | - } |
137 | | - |
138 | | - // tracer provider |
139 | | - SpanProcessorModel spanSimpleProcessor = |
140 | | - new SpanProcessorModel() |
141 | | - .withSimple(new SimpleSpanProcessorModel().withExporter(spanExporter)); |
142 | | - SpanProcessorModel spanBatchProcessor = |
143 | | - new SpanProcessorModel() |
144 | | - .withBatch(new BatchSpanProcessorModel().withExporter(spanExporter)); |
145 | | - model.withTracerProvider( |
146 | | - new TracerProviderModel() |
147 | | - .withProcessors(Arrays.asList(spanSimpleProcessor, spanBatchProcessor))); |
148 | | - |
149 | | - // meter provider |
150 | | - model.withMeterProvider( |
151 | | - new MeterProviderModel() |
152 | | - .withReaders( |
153 | | - Collections.singletonList( |
154 | | - new MetricReaderModel() |
155 | | - .withPeriodic( |
156 | | - new PeriodicMetricReaderModel().withExporter(metricExporter))))); |
157 | | - |
158 | | - // logger provider |
159 | | - LogRecordProcessorModel logSimpleProcessor = |
160 | | - new LogRecordProcessorModel() |
161 | | - .withSimple(new SimpleLogRecordProcessorModel().withExporter(logExporter)); |
162 | | - LogRecordProcessorModel logBatchProcessor = |
163 | | - new LogRecordProcessorModel() |
164 | | - .withBatch(new BatchLogRecordProcessorModel().withExporter(logExporter)); |
165 | | - model.withLoggerProvider( |
166 | | - new LoggerProviderModel() |
167 | | - .withProcessors(Arrays.asList(logSimpleProcessor, logBatchProcessor))); |
168 | | - |
169 | | - model = applyConfigCustomize(model, new ElasticDeclarativeConfigurationCustomizer()); |
170 | | - |
171 | | - // tracer provider |
172 | | - assertThat(model.getTracerProvider()).isNotNull(); |
173 | | - assertThatJson(model.getTracerProvider()).inPath("processors").isArray().hasSize(2); |
174 | | - for (int i = 0; i < 2; i++) { |
175 | | - String pathPrefix = i == 0 ? "simple" : "batch"; |
176 | | - assertThatJson(model.getTracerProvider().getProcessors().get(i)) |
177 | | - .inPath(pathPrefix + ".exporter.otlp_" + protocol + ".headers") |
178 | | - .isArray() |
179 | | - .contains(userAgentHeader("elastic-otlp-" + protocol + "-java/" + AgentVersion.VERSION)); |
180 | | - } |
181 | | - |
182 | | - // meter provider |
183 | | - assertThat(model.getMeterProvider()).isNotNull(); |
184 | | - assertThatJson(model.getMeterProvider()).inPath("readers").isArray().hasSize(1); |
185 | | - assertThatJson(model.getMeterProvider().getReaders().get(0)) |
186 | | - .inPath("periodic.exporter.otlp_" + protocol + ".headers") |
187 | | - .isArray() |
188 | | - .contains(userAgentHeader("elastic-otlp-" + protocol + "-java/" + AgentVersion.VERSION)); |
189 | | - |
190 | | - // logger provider |
191 | | - assertThat(model.getLoggerProvider()).isNotNull(); |
192 | | - assertThatJson(model.getLoggerProvider()).inPath("processors").isArray().hasSize(2); |
193 | | - for (int i = 0; i < 2; i++) { |
194 | | - String pathPrefix = i == 0 ? "simple" : "batch"; |
195 | | - assertThatJson(model.getLoggerProvider().getProcessors().get(i)) |
196 | | - .inPath(pathPrefix + ".exporter.otlp_" + protocol + ".headers") |
197 | | - .isArray() |
198 | | - .contains(userAgentHeader("elastic-otlp-" + protocol + "-java/" + AgentVersion.VERSION)); |
199 | | - } |
200 | | - } |
201 | | - |
202 | | - @Test |
203 | | - void addUserAgentPriority() { |
204 | | - assertThat(ElasticDeclarativeConfigurationCustomizer.addUserAgent(null, null, "my-user-agent")) |
205 | | - .describedAs("add user agent when none is present in headers list or headers") |
206 | | - .hasSize(1) |
207 | | - .flatExtracting("name", "value") |
208 | | - .contains("User-Agent", "my-user-agent"); |
209 | | - |
210 | | - assertThat( |
211 | | - ElasticDeclarativeConfigurationCustomizer.addUserAgent( |
212 | | - null, Collections.emptyList(), "my-user-agent")) |
213 | | - .describedAs("add user agent when none is present in headers list or headers") |
214 | | - .hasSize(1) |
215 | | - .flatExtracting("name", "value") |
216 | | - .contains("User-Agent", "my-user-agent"); |
217 | | - |
218 | | - assertThat( |
219 | | - ElasticDeclarativeConfigurationCustomizer.addUserAgent( |
220 | | - // using non-standard case is intentional for testing |
221 | | - "User-agent=custom-user-agent", null, "my-user-agent")) |
222 | | - .describedAs("configured user-agent is preserved") |
223 | | - .isNull(); |
224 | | - |
225 | | - assertThat( |
226 | | - ElasticDeclarativeConfigurationCustomizer.addUserAgent( |
227 | | - null, |
228 | | - Collections.singletonList( |
229 | | - new NameStringValuePairModel() |
230 | | - .withName("user-agent") // using lower-case is intentional for testing |
231 | | - .withValue("custom-user-Agent")), |
232 | | - "my-user-agent")) |
233 | | - .describedAs("configured user-agent is preserved") |
234 | | - .hasSize(1) |
235 | | - .flatExtracting("name", "value") |
236 | | - .contains("user-agent", "custom-user-Agent"); |
237 | | - } |
238 | | - |
239 | | - @NotNull |
240 | | - private static Map<String, String> userAgentHeader(String value) { |
241 | | - Map<String, String> header = new HashMap<>(); |
242 | | - header.put("name", "User-Agent"); |
243 | | - header.put("value", value); |
244 | | - return header; |
245 | | - } |
246 | | - |
247 | 87 | static OpenTelemetryConfigurationModel applyConfigCustomize( |
248 | 88 | OpenTelemetryConfigurationModel originalModel, |
249 | 89 | DeclarativeConfigurationCustomizerProvider customizerProvider) { |
|
0 commit comments