Skip to content

Commit f100658

Browse files
committed
fix more tests, exclude tests from latestdeps
1 parent 330cd89 commit f100658

File tree

4 files changed

+195
-0
lines changed

4 files changed

+195
-0
lines changed

instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ dependencies {
108108
testImplementation("io.opentelemetry:opentelemetry-exporter-zipkin")
109109
testImplementation(project(":instrumentation-annotations"))
110110

111+
latestDepTestLibrary("org.springframework.boot:spring-boot-starter-micrometer-metrics:latest.release")
112+
111113
// needed for the Spring Boot 3 support
112114
implementation(project(":instrumentation:spring:spring-webmvc:spring-webmvc-6.0:library"))
113115

@@ -126,6 +128,7 @@ dependencies {
126128
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-starter-jdbc:4.0.0")
127129
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-restclient:4.0.0")
128130
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-starter-data-mongodb:4.0.0")
131+
add("javaSpring4CompileOnly", "org.springframework.boot:spring-boot-starter-micrometer-metrics:4.0.0")
129132
add("javaSpring4CompileOnly", project(":instrumentation:kafka:kafka-clients:kafka-clients-2.6:library"))
130133
add("javaSpring4CompileOnly", project(":instrumentation:spring:spring-kafka-2.7:library"))
131134
add("javaSpring4CompileOnly", project(":instrumentation:mongo:mongo-3.1:library"))
@@ -203,10 +206,16 @@ testing {
203206
implementation("org.springframework.boot:spring-boot-starter-jdbc:4.0.0")
204207
implementation("org.springframework.boot:spring-boot-restclient:4.0.0")
205208
implementation("org.springframework.boot:spring-boot-starter-kafka:4.0.0")
209+
implementation("org.springframework.boot:spring-boot-starter-actuator:4.0.0")
210+
implementation("org.springframework.boot:spring-boot-starter-data-r2dbc:4.0.0")
211+
implementation("io.opentelemetry:opentelemetry-sdk")
212+
implementation("io.opentelemetry:opentelemetry-sdk-testing")
213+
implementation(project(":instrumentation-api"))
206214
implementation("org.springframework.boot:spring-boot-starter-test:4.0.0") {
207215
exclude("org.junit.vintage", "junit-vintage-engine")
208216
}
209217
runtimeOnly("com.h2database:h2:1.4.197")
218+
runtimeOnly("io.r2dbc:r2dbc-h2:1.0.0.RELEASE")
210219
}
211220
}
212221

@@ -232,6 +241,15 @@ configurations.configureEach {
232241
tasks {
233242
compileTestJava {
234243
options.compilerArgs.add("-parameters")
244+
245+
// Exclude Spring Boot specific tests from compilation when testLatestDeps is true
246+
// These tests are covered by testSpring4 suite
247+
if (latestDepTest) {
248+
exclude("**/micrometer/MicrometerBridgeAutoConfigurationTest.java")
249+
exclude("**/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java")
250+
exclude("**/jdbc/JdbcInstrumentationAutoConfigurationTest.java")
251+
exclude("**/web/SpringWebInstrumentationAutoConfigurationTest.java")
252+
}
235253
}
236254

237255
withType<Test>().configureEach {
@@ -242,6 +260,17 @@ tasks {
242260
jvmArgs("-XX:+IgnoreUnrecognizedVMOptions")
243261
}
244262

263+
test {
264+
// Exclude Spring Boot specific tests when testLatestDeps is true
265+
// These tests are covered by testSpring4 suite
266+
if (latestDepTest) {
267+
exclude("**/micrometer/MicrometerBridgeAutoConfigurationTest.class")
268+
exclude("**/r2dbc/R2DbcInstrumentationAutoConfigurationTest.class")
269+
exclude("**/jdbc/JdbcInstrumentationAutoConfigurationTest.class")
270+
exclude("**/web/SpringWebInstrumentationAutoConfigurationTest.class")
271+
}
272+
}
273+
245274
named<JavaCompile>("compileJavaSpring3Java") {
246275
sourceCompatibility = "17"
247276
targetCompatibility = "17"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.micrometer;
7+
8+
import io.micrometer.core.instrument.Clock;
9+
import io.micrometer.core.instrument.MeterRegistry;
10+
import io.opentelemetry.api.OpenTelemetry;
11+
import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry;
12+
import io.opentelemetry.instrumentation.spring.autoconfigure.OpenTelemetryAutoConfiguration;
13+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.ConditionalOnEnabledInstrumentation;
14+
import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration;
15+
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
16+
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
17+
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
18+
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
19+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
20+
import org.springframework.context.annotation.Bean;
21+
import org.springframework.context.annotation.Configuration;
22+
23+
/**
24+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
25+
* any time.
26+
*/
27+
@ConditionalOnEnabledInstrumentation(module = "micrometer", enabledByDefault = false)
28+
@AutoConfigureAfter({MetricsAutoConfiguration.class, OpenTelemetryAutoConfiguration.class})
29+
@AutoConfigureBefore(CompositeMeterRegistryAutoConfiguration.class)
30+
@ConditionalOnBean(Clock.class)
31+
@ConditionalOnClass(MeterRegistry.class)
32+
@Configuration
33+
public class MicrometerBridgeAutoSpringBoot4Configuration {
34+
35+
@Bean
36+
MeterRegistry otelMeterRegistry(OpenTelemetry openTelemetry, Clock micrometerClock) {
37+
return OpenTelemetryMeterRegistry.builder(openTelemetry).setClock(micrometerClock).build();
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.micrometer;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
import io.micrometer.core.instrument.MeterRegistry;
11+
import io.opentelemetry.api.OpenTelemetry;
12+
import io.opentelemetry.instrumentation.micrometer.v1_5.OpenTelemetryMeterRegistry;
13+
import org.junit.jupiter.api.Test;
14+
import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration;
15+
import org.springframework.boot.autoconfigure.AutoConfigurations;
16+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
17+
18+
class MicrometerBridgeAutoConfigurationTest {
19+
20+
private final ApplicationContextRunner runner =
21+
new ApplicationContextRunner()
22+
.withBean(OpenTelemetry.class, OpenTelemetry::noop)
23+
.withConfiguration(
24+
AutoConfigurations.of(MicrometerBridgeAutoSpringBoot4Configuration.class));
25+
26+
@Test
27+
void metricsEnabled() {
28+
runner
29+
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class))
30+
.withPropertyValues("otel.instrumentation.micrometer.enabled = true")
31+
.run(
32+
context ->
33+
assertThat(context.getBean("otelMeterRegistry", MeterRegistry.class))
34+
.isNotNull()
35+
.isInstanceOf(OpenTelemetryMeterRegistry.class));
36+
}
37+
38+
@Test
39+
void metricsDisabledByDefault() {
40+
runner
41+
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class))
42+
.run(context -> assertThat(context.containsBean("otelMeterRegistry")).isFalse());
43+
}
44+
45+
@Test
46+
void metricsDisabled() {
47+
runner
48+
.withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class))
49+
.withPropertyValues("otel.instrumentation.micrometer.enabled = false")
50+
.run(context -> assertThat(context.containsBean("otelMeterRegistry")).isFalse());
51+
}
52+
53+
@Test
54+
void noActuatorAutoConfiguration() {
55+
runner
56+
.withPropertyValues("otel.instrumentation.micrometer.enabled = true")
57+
.run(context -> assertThat(context.containsBean("otelMeterRegistry")).isFalse());
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.r2dbc;
7+
8+
import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable;
9+
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT;
10+
11+
import io.opentelemetry.api.OpenTelemetry;
12+
import io.opentelemetry.instrumentation.api.incubator.config.internal.InstrumentationConfig;
13+
import io.opentelemetry.instrumentation.spring.autoconfigure.internal.properties.ConfigPropertiesBridge;
14+
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
15+
import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties;
16+
import java.util.Collections;
17+
import org.junit.jupiter.api.Test;
18+
import org.junit.jupiter.api.extension.RegisterExtension;
19+
import org.springframework.boot.autoconfigure.AutoConfigurations;
20+
import org.springframework.boot.autoconfigure.r2dbc.R2dbcAutoConfiguration;
21+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
22+
import org.springframework.r2dbc.core.DatabaseClient;
23+
24+
class R2DbcInstrumentationAutoConfigurationTest {
25+
26+
@RegisterExtension
27+
static final LibraryInstrumentationExtension testing = LibraryInstrumentationExtension.create();
28+
29+
private final ApplicationContextRunner runner =
30+
new ApplicationContextRunner()
31+
.withBean(
32+
InstrumentationConfig.class,
33+
() ->
34+
new ConfigPropertiesBridge(
35+
DefaultConfigProperties.createFromMap(Collections.emptyMap())))
36+
.withConfiguration(
37+
AutoConfigurations.of(
38+
R2dbcInstrumentationAutoConfiguration.class, R2dbcAutoConfiguration.class))
39+
.withBean("openTelemetry", OpenTelemetry.class, testing::getOpenTelemetry);
40+
41+
@SuppressWarnings("deprecation") // using deprecated semconv
42+
@Test
43+
void statementSanitizerEnabledByDefault() {
44+
runner.run(
45+
context -> {
46+
DatabaseClient client = context.getBean(DatabaseClient.class);
47+
client
48+
.sql(
49+
"CREATE TABLE IF NOT EXISTS player(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255), age INT, PRIMARY KEY (id))")
50+
.fetch()
51+
.all()
52+
.blockLast();
53+
client.sql("SELECT * FROM player WHERE id = 1").fetch().all().blockLast();
54+
testing.waitAndAssertTraces(
55+
trace ->
56+
trace.hasSpansSatisfyingExactly(
57+
span ->
58+
span.hasAttribute(
59+
maybeStable(DB_STATEMENT),
60+
"CREATE TABLE IF NOT EXISTS player(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(?), age INT, PRIMARY KEY (id))")),
61+
trace ->
62+
trace.hasSpansSatisfyingExactly(
63+
span ->
64+
span.hasAttribute(
65+
maybeStable(DB_STATEMENT), "SELECT * FROM player WHERE id = ?")));
66+
});
67+
}
68+
}

0 commit comments

Comments
 (0)