diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts index 9f83480f5511..7d3fa5d03c7e 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/javaagent/build.gradle.kts @@ -164,4 +164,16 @@ tasks { include("software/amazon/awssdk/global/handlers/execution.interceptors") } } + + val testStableSemconv by registering(Test::class) { + filter { + excludeTestsMatching("Aws2SqsSuppressReceiveSpansTest") + } + systemProperty("otel.instrumentation.messaging.experimental.receive-telemetry.enabled", "true") + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts index 7f621f4977d2..d493f83a862b 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts @@ -25,10 +25,18 @@ dependencies { } tasks { - test { + withType().configureEach { systemProperty("otel.instrumentation.aws-sdk.experimental-span-attributes", true) systemProperty("otel.instrumentation.aws-sdk.experimental-record-individual-http-error", true) systemProperty("otel.instrumentation.messaging.experimental.capture-headers", "test-message-header") systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts index e4be5bdfe30a..3b7381a8ba00 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/build.gradle.kts @@ -66,10 +66,18 @@ testing { } tasks { - withType { + withType().configureEach { // NB: If you'd like to change these, there is some cleanup work to be done, as most tests ignore this and // set the value directly (the "library" does not normally query it, only library-autoconfigure) systemProperty("otel.instrumentation.aws-sdk.experimental-span-attributes", true) systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/TracingExecutionInterceptor.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/TracingExecutionInterceptor.java index 43a2c68d9936..94243d0b11bb 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/TracingExecutionInterceptor.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/TracingExecutionInterceptor.java @@ -16,6 +16,7 @@ import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.api.internal.Timer; import io.opentelemetry.semconv.HttpAttributes; import java.io.BufferedReader; @@ -50,6 +51,8 @@ public final class TracingExecutionInterceptor implements ExecutionInterceptor { // copied from DbIncubatingAttributes private static final AttributeKey DB_OPERATION = AttributeKey.stringKey("db.operation"); + private static final AttributeKey DB_OPERATION_NAME = + AttributeKey.stringKey("db.operation.name"); private static final AttributeKey DB_SYSTEM = AttributeKey.stringKey("db.system"); // copied from DbIncubatingAttributes.DbSystemIncubatingValues private static final String DB_SYSTEM_DYNAMODB = "dynamodb"; @@ -331,7 +334,12 @@ private void populateRequestAttributes( span.setAttribute(DB_SYSTEM, DB_SYSTEM_DYNAMODB); String operation = attributes.getAttribute(SdkExecutionAttribute.OPERATION_NAME); if (operation != null) { - span.setAttribute(DB_OPERATION, operation); + if (SemconvStability.emitStableDatabaseSemconv()) { + span.setAttribute(DB_OPERATION_NAME, operation); + } + if (SemconvStability.emitOldDatabaseSemconv()) { + span.setAttribute(DB_OPERATION, operation); + } } } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy index c79c0eac333f..9aaacb3abed3 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.groovy @@ -7,15 +7,16 @@ package io.opentelemetry.instrumentation.awssdk.v2_2 import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil import io.opentelemetry.instrumentation.test.InstrumentationSpecification -import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes -import io.opentelemetry.semconv.incubating.DbIncubatingAttributes -import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes -import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.HttpAttributes +import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.UrlAttributes +import io.opentelemetry.semconv.incubating.AwsIncubatingAttributes +import io.opentelemetry.semconv.incubating.DbIncubatingAttributes +import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes import io.opentelemetry.testing.internal.armeria.common.HttpResponse import io.opentelemetry.testing.internal.armeria.common.HttpStatus import io.opentelemetry.testing.internal.armeria.common.MediaType +import io.opentelemetry.testing.internal.armeria.testing.junit5.server.mock.MockWebServerExtension import software.amazon.awssdk.auth.credentials.AwsBasicCredentials import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider import software.amazon.awssdk.core.client.builder.SdkClientBuilder @@ -24,7 +25,6 @@ import software.amazon.awssdk.regions.Region import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient import software.amazon.awssdk.services.dynamodb.DynamoDbClient import software.amazon.awssdk.services.dynamodb.model.* -import io.opentelemetry.testing.internal.armeria.testing.junit5.server.mock.MockWebServerExtension import spock.lang.Shared import spock.lang.Unroll @@ -32,7 +32,7 @@ import java.util.concurrent.Future import static com.google.common.collect.ImmutableMap.of import static io.opentelemetry.api.trace.SpanKind.CLIENT - +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable @Unroll abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { @@ -150,7 +150,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" - "$DbIncubatingAttributes.DB_OPERATION" "CreateTable" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "CreateTable" "aws.dynamodb.global_secondary_indexes" "[{\"IndexName\":\"globalIndex\",\"KeySchema\":[{\"AttributeName\":\"attribute\"}],\"ProvisionedThroughput\":{\"ReadCapacityUnits\":10,\"WriteCapacityUnits\":12}},{\"IndexName\":\"globalIndexSecondary\",\"KeySchema\":[{\"AttributeName\":\"attributeSecondary\"}],\"ProvisionedThroughput\":{\"ReadCapacityUnits\":7,\"WriteCapacityUnits\":8}}]" "aws.dynamodb.provisioned_throughput.read_capacity_units" "1" "aws.dynamodb.provisioned_throughput.write_capacity_units" "1" @@ -183,7 +183,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" - "$DbIncubatingAttributes.DB_OPERATION" "Query" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "Query" "aws.dynamodb.limit" "10" "aws.dynamodb.select" "ALL_ATTRIBUTES" } @@ -215,7 +215,7 @@ abstract class AbstractAws2ClientCoreTest extends InstrumentationSpecification { "$AwsIncubatingAttributes.AWS_REQUEST_ID" "$requestId" "aws.table.name" "sometable" "$DbIncubatingAttributes.DB_SYSTEM" "dynamodb" - "$DbIncubatingAttributes.DB_OPERATION" "${operation}" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "${operation}" } } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java index 9ab563a0c0ac..1a872e415250 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; @@ -184,7 +185,7 @@ public void testSendDynamoDbRequestWithRetries() { equalTo(AwsIncubatingAttributes.AWS_REQUEST_ID, requestId), equalTo(stringKey("aws.table.name"), "sometable"), equalTo(DB_SYSTEM, "dynamodb"), - equalTo(DB_OPERATION, operation)); + equalTo(maybeStable(DB_OPERATION), operation)); if (isRecordIndividualHttpErrorEnabled()) { span.hasEventsSatisfyingExactly( event -> diff --git a/instrumentation/camel-2.20/javaagent/build.gradle.kts b/instrumentation/camel-2.20/javaagent/build.gradle.kts index 8123ea331c46..eaa9bb52dfae 100644 --- a/instrumentation/camel-2.20/javaagent/build.gradle.kts +++ b/instrumentation/camel-2.20/javaagent/build.gradle.kts @@ -79,6 +79,14 @@ tasks { jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } configurations.testRuntimeClasspath { diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java index 2bd258112151..1c260c2c8e59 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/DbSpanDecorator.java @@ -25,6 +25,7 @@ import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlStatementSanitizer; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig; import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; @@ -126,11 +127,21 @@ public void pre( attributes.put(DbIncubatingAttributes.DB_SYSTEM, system); String statement = getStatement(exchange, endpoint); if (statement != null) { - attributes.put(DbIncubatingAttributes.DB_STATEMENT, statement); + if (SemconvStability.emitStableDatabaseSemconv()) { + attributes.put(DbIncubatingAttributes.DB_QUERY_TEXT, statement); + } + if (SemconvStability.emitOldDatabaseSemconv()) { + attributes.put(DbIncubatingAttributes.DB_STATEMENT, statement); + } } String dbName = getDbName(endpoint); if (dbName != null) { - attributes.put(DbIncubatingAttributes.DB_NAME, dbName); + if (SemconvStability.emitStableDatabaseSemconv()) { + attributes.put(DbIncubatingAttributes.DB_NAMESPACE, dbName); + } + if (SemconvStability.emitOldDatabaseSemconv()) { + attributes.put(DbIncubatingAttributes.DB_NAME, dbName); + } } } } diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java index 72012ceb4da3..0328d65ff083 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/CassandraTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel.decorators; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; @@ -119,9 +120,9 @@ void testCassandra() { equalTo( stringKey("camel.uri"), "cql://" + host + ":" + cassandraPort + "/test"), - equalTo(DB_NAME, "test"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( - DB_STATEMENT, + maybeStable(DB_STATEMENT), "select * from test.users where id=? ALLOW FILTERING"), equalTo(DB_SYSTEM, "cassandra")))); } diff --git a/instrumentation/cassandra/cassandra-3.0/javaagent/build.gradle.kts b/instrumentation/cassandra/cassandra-3.0/javaagent/build.gradle.kts index 924e4db0f3a3..08a921999dda 100644 --- a/instrumentation/cassandra/cassandra-3.0/javaagent/build.gradle.kts +++ b/instrumentation/cassandra/cassandra-3.0/javaagent/build.gradle.kts @@ -44,14 +44,14 @@ dependencies { configurations.testRuntimeClasspath.get().resolutionStrategy.force("com.google.guava:guava:19.0") tasks { - val testStableSemconv by registering(Test::class) { - jvmArgs("-Dotel.semconv-stability.opt-in=database") - } - withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testStableSemconv) } diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/build.gradle.kts b/instrumentation/cassandra/cassandra-4.0/javaagent/build.gradle.kts index 28eb7cf3f557..bf3b4b5862a3 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/build.gradle.kts +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/build.gradle.kts @@ -24,7 +24,7 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/build.gradle.kts b/instrumentation/cassandra/cassandra-4.4/javaagent/build.gradle.kts index 270af63f0fa6..375711858747 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/build.gradle.kts +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/build.gradle.kts @@ -27,7 +27,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/cassandra/cassandra-4.4/library/build.gradle.kts b/instrumentation/cassandra/cassandra-4.4/library/build.gradle.kts index 963467200f5d..19f0d3172cd5 100644 --- a/instrumentation/cassandra/cassandra-4.4/library/build.gradle.kts +++ b/instrumentation/cassandra/cassandra-4.4/library/build.gradle.kts @@ -12,6 +12,10 @@ dependencies { } tasks { + withType().configureEach { + usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) + } + val testStableSemconv by registering(Test::class) { jvmArgs("-Dotel.semconv-stability.opt-in=database") } diff --git a/instrumentation/clickhouse-client-0.5/javaagent/build.gradle.kts b/instrumentation/clickhouse-client-0.5/javaagent/build.gradle.kts index 2322b3b8b3a8..b8f7f9811459 100644 --- a/instrumentation/clickhouse-client-0.5/javaagent/build.gradle.kts +++ b/instrumentation/clickhouse-client-0.5/javaagent/build.gradle.kts @@ -25,4 +25,12 @@ tasks { test { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java b/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java index 9c2dfb9d704d..25f80ddf0f15 100644 --- a/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java +++ b/instrumentation/clickhouse-client-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/ClickHouseClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -341,10 +342,10 @@ void testParameterizedQueryInput() throws ClickHouseException { private static List attributeAssertions(String statement, String operation) { return asList( equalTo(DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.CLICKHOUSE), - equalTo(DB_NAME, dbName), + equalTo(maybeStable(DB_NAME), dbName), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), - equalTo(DB_STATEMENT, statement), - equalTo(DB_OPERATION, operation)); + equalTo(maybeStable(DB_STATEMENT), statement), + equalTo(maybeStable(DB_OPERATION), operation)); } } diff --git a/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts index 13f696c31334..be9254a911c2 100644 --- a/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-2.0/javaagent/build.gradle.kts @@ -32,10 +32,6 @@ dependencies { } tasks { - val testStableSemconv by registering(Test::class) { - jvmArgs("-Dotel.semconv-stability.opt-in=database") - } - withType().configureEach { // required on jdk17 jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") @@ -43,6 +39,10 @@ tasks { jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testStableSemconv) } diff --git a/instrumentation/couchbase/couchbase-2.6/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-2.6/javaagent/build.gradle.kts index 1c68002dfe1e..aa93476f592b 100644 --- a/instrumentation/couchbase/couchbase-2.6/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-2.6/javaagent/build.gradle.kts @@ -35,10 +35,6 @@ dependencies { } tasks { - val testStableSemconv by registering(Test::class) { - jvmArgs("-Dotel.semconv-stability.opt-in=database") - } - withType().configureEach { // TODO run tests both with and without experimental span attributes jvmArgs("-Dotel.instrumentation.couchbase.experimental-span-attributes=true") @@ -48,6 +44,10 @@ tasks { jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testStableSemconv) } diff --git a/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts index d9fdc1b26a54..c0128fac5e38 100644 --- a/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-3.1.6/javaagent/build.gradle.kts @@ -39,7 +39,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts index 0d6c7ddc5394..8efea0a3a21f 100644 --- a/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-3.1/javaagent/build.gradle.kts @@ -40,7 +40,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts b/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts index fc28c5e0fec4..333fdbdcfced 100644 --- a/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts +++ b/instrumentation/couchbase/couchbase-3.2/javaagent/build.gradle.kts @@ -37,8 +37,16 @@ dependencies { } tasks { - test { + withType().configureEach { systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/build.gradle.kts b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/build.gradle.kts index 676975efd718..aa65867a4f1c 100644 --- a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/build.gradle.kts +++ b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/build.gradle.kts @@ -74,14 +74,17 @@ testing { } tasks { - test { + withType().configureEach { + jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testing.suites) + dependsOn(testStableSemconv) } } - -tasks.withType().configureEach { - jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") -} diff --git a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java index 8a553eda29e7..d60200b6cd62 100644 --- a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java +++ b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.elasticsearch.apiclient; import static io.opentelemetry.instrumentation.testing.GlobalTraceUtil.runWithSpan; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -94,7 +95,7 @@ public void elasticsearchStatus() throws IOException { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "elasticsearch"), - equalTo(DB_OPERATION, "info"), + equalTo(maybeStable(DB_OPERATION), "info"), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(URL_FULL, httpHost.toURI() + "/"), equalTo(SERVER_ADDRESS, httpHost.getHostName()), @@ -130,7 +131,7 @@ public void elasticsearchIndex() throws IOException { .hasNoParent() .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "elasticsearch"), - equalTo(DB_OPERATION, "index"), + equalTo(maybeStable(DB_OPERATION), "index"), equalTo(SERVER_ADDRESS, httpHost.getHostName()), equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "PUT"), @@ -191,7 +192,7 @@ public void elasticsearchStatusAsync() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "elasticsearch"), - equalTo(DB_OPERATION, "info"), + equalTo(maybeStable(DB_OPERATION), "info"), equalTo(SERVER_ADDRESS, httpHost.getHostName()), equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/build.gradle.kts b/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/build.gradle.kts index b9b1bf2e1505..175bd3bd6ab9 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/build.gradle.kts +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.0/javaagent/build.gradle.kts @@ -49,10 +49,20 @@ dependencies { latestDepTestLibrary("org.elasticsearch.client:transport:5.0.0") } -tasks.withType().configureEach { - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.elasticsearch.experimental-span-attributes=true") - // required on jdk17 - jvmArgs("--add-opens=java.base/java.nio=ALL-UNNAMED") - jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") +tasks { + withType().configureEach { + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.elasticsearch.experimental-span-attributes=true") + // required on jdk17 + jvmArgs("--add-opens=java.base/java.nio=ALL-UNNAMED") + jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/build.gradle.kts b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/build.gradle.kts index eb8ff28ad473..508429dd1b42 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/build.gradle.kts +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/build.gradle.kts @@ -65,13 +65,23 @@ dependencies { latestDepTestLibrary("org.springframework.data:spring-data-elasticsearch:3.0.+") } -tasks.withType().configureEach { - systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) +tasks { + withType().configureEach { + systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.elasticsearch.experimental-span-attributes=true") + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.elasticsearch.experimental-span-attributes=true") - // required on jdk17 - jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") - jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") + // required on jdk17 + jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") + jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringRepositoryTest.java b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringRepositoryTest.java index d621b8c1f442..38c26d7fcfde 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringRepositoryTest.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringRepositoryTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; @@ -91,7 +92,7 @@ void emptyRepository() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "SearchAction"), + equalTo(maybeStable(DB_OPERATION), "SearchAction"), equalTo(stringKey("elasticsearch.action"), "SearchAction"), equalTo(stringKey("elasticsearch.request"), "SearchRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -125,7 +126,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "IndexAction"), + equalTo(maybeStable(DB_OPERATION), "IndexAction"), equalTo(stringKey("elasticsearch.action"), "IndexAction"), equalTo(stringKey("elasticsearch.request"), "IndexRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -143,7 +144,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "RefreshAction"), + equalTo(maybeStable(DB_OPERATION), "RefreshAction"), equalTo(stringKey("elasticsearch.action"), "RefreshAction"), equalTo(stringKey("elasticsearch.request"), "RefreshRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -174,7 +175,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(stringKey("elasticsearch.action"), "GetAction"), equalTo(stringKey("elasticsearch.request"), "GetRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -208,7 +209,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "IndexAction"), + equalTo(maybeStable(DB_OPERATION), "IndexAction"), equalTo(stringKey("elasticsearch.action"), "IndexAction"), equalTo(stringKey("elasticsearch.request"), "IndexRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -226,7 +227,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "RefreshAction"), + equalTo(maybeStable(DB_OPERATION), "RefreshAction"), equalTo(stringKey("elasticsearch.action"), "RefreshAction"), equalTo(stringKey("elasticsearch.request"), "RefreshRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -252,7 +253,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(stringKey("elasticsearch.action"), "GetAction"), equalTo(stringKey("elasticsearch.request"), "GetRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -284,7 +285,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "DeleteAction"), + equalTo(maybeStable(DB_OPERATION), "DeleteAction"), equalTo(stringKey("elasticsearch.action"), "DeleteAction"), equalTo(stringKey("elasticsearch.request"), "DeleteRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -301,7 +302,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "RefreshAction"), + equalTo(maybeStable(DB_OPERATION), "RefreshAction"), equalTo(stringKey("elasticsearch.action"), "RefreshAction"), equalTo(stringKey("elasticsearch.request"), "RefreshRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), @@ -327,7 +328,7 @@ void crud() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "SearchAction"), + equalTo(maybeStable(DB_OPERATION), "SearchAction"), equalTo(stringKey("elasticsearch.action"), "SearchAction"), equalTo(stringKey("elasticsearch.request"), "SearchRequest"), equalTo(stringKey("elasticsearch.request.indices"), "test-index"), diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringTemplateTest.java b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringTemplateTest.java index 3c53c73c6fd1..d48df4a86fe8 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringTemplateTest.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/v5_3/springdata/Elasticsearch53SpringTemplateTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; @@ -175,7 +176,7 @@ void elasticsearchError() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "RefreshAction"), + equalTo(maybeStable(DB_OPERATION), "RefreshAction"), equalTo(stringKey("elasticsearch.action"), "RefreshAction"), equalTo(stringKey("elasticsearch.request"), "RefreshRequest"), equalTo(stringKey("elasticsearch.request.indices"), indexName)))); @@ -230,7 +231,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "CreateIndexAction"), + equalTo(maybeStable(DB_OPERATION), "CreateIndexAction"), equalTo(stringKey("elasticsearch.action"), "CreateIndexAction"), equalTo(stringKey("elasticsearch.request"), "CreateIndexRequest"), equalTo(stringKey("elasticsearch.request.indices"), indexName))), @@ -244,7 +245,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "ClusterHealthAction"), + equalTo(maybeStable(DB_OPERATION), "ClusterHealthAction"), equalTo(stringKey("elasticsearch.action"), "ClusterHealthAction"), equalTo(stringKey("elasticsearch.request"), "ClusterHealthRequest"))), trace -> @@ -257,7 +258,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "SearchAction"), + equalTo(maybeStable(DB_OPERATION), "SearchAction"), equalTo(stringKey("elasticsearch.action"), "SearchAction"), equalTo(stringKey("elasticsearch.request"), "SearchRequest"), equalTo(stringKey("elasticsearch.request.indices"), indexName), @@ -272,7 +273,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "IndexAction"), + equalTo(maybeStable(DB_OPERATION), "IndexAction"), equalTo(stringKey("elasticsearch.action"), "IndexAction"), equalTo(stringKey("elasticsearch.request"), "IndexRequest"), equalTo(stringKey("elasticsearch.request.indices"), indexName), @@ -292,7 +293,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "RefreshAction"), + equalTo(maybeStable(DB_OPERATION), "RefreshAction"), equalTo(stringKey("elasticsearch.action"), "RefreshAction"), equalTo(stringKey("elasticsearch.request"), "RefreshRequest"), equalTo(stringKey("elasticsearch.request.indices"), indexName), @@ -309,7 +310,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "SearchAction"), + equalTo(maybeStable(DB_OPERATION), "SearchAction"), equalTo(stringKey("elasticsearch.action"), "SearchAction"), equalTo(stringKey("elasticsearch.request"), "SearchRequest"), equalTo(stringKey("elasticsearch.request.indices"), indexName), @@ -393,7 +394,7 @@ void resultsExtractor() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "SearchAction"), + equalTo(maybeStable(DB_OPERATION), "SearchAction"), equalTo(stringKey("elasticsearch.action"), "SearchAction"), equalTo(stringKey("elasticsearch.request"), "SearchRequest"), equalTo(stringKey("elasticsearch.request.indices"), indexName)))); diff --git a/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/build.gradle.kts b/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/build.gradle.kts index 78c060901269..b9787c55cbc9 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/build.gradle.kts +++ b/instrumentation/elasticsearch/elasticsearch-transport-6.0/javaagent/build.gradle.kts @@ -101,7 +101,12 @@ tasks { jvmArgs("-Dotel.instrumentation.elasticsearch.experimental-span-attributes=true") } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testing.suites) + dependsOn(testStableSemconv) } } diff --git a/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchNodeClientTest.java b/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchNodeClientTest.java index 857ad4fcb6f0..d82012022835 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchNodeClientTest.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchNodeClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; @@ -72,7 +73,7 @@ void elasticsearchStatus(ThrowingSupplier suppli equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "ClusterHealthAction"), + equalTo(maybeStable(DB_OPERATION), "ClusterHealthAction"), equalTo(ELASTICSEARCH_ACTION, "ClusterHealthAction"), equalTo(ELASTICSEARCH_REQUEST, "ClusterHealthRequest")), span -> @@ -121,7 +122,7 @@ void elasticsearchError(Runnable action) { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(ELASTICSEARCH_ACTION, "GetAction"), equalTo(ELASTICSEARCH_REQUEST, "GetRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, "invalid-index")), @@ -183,7 +184,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "CreateIndexAction"), + equalTo(maybeStable(DB_OPERATION), "CreateIndexAction"), equalTo(ELASTICSEARCH_ACTION, "CreateIndexAction"), equalTo(ELASTICSEARCH_REQUEST, "CreateIndexRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName))), @@ -197,7 +198,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "ClusterHealthAction"), + equalTo(maybeStable(DB_OPERATION), "ClusterHealthAction"), equalTo(ELASTICSEARCH_ACTION, "ClusterHealthAction"), equalTo(ELASTICSEARCH_REQUEST, "ClusterHealthRequest"))), trace -> @@ -210,7 +211,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(ELASTICSEARCH_ACTION, "GetAction"), equalTo(ELASTICSEARCH_REQUEST, "GetRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName), @@ -228,7 +229,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "IndexAction"), + equalTo(maybeStable(DB_OPERATION), "IndexAction"), equalTo(ELASTICSEARCH_ACTION, "IndexAction"), equalTo(ELASTICSEARCH_REQUEST, "IndexRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName), @@ -247,7 +248,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(ELASTICSEARCH_ACTION, "GetAction"), equalTo(ELASTICSEARCH_REQUEST, "GetRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName), diff --git a/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchTransportClientTest.java b/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchTransportClientTest.java index 4b019433edeb..cd69a09f0ba4 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchTransportClientTest.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/transport/AbstractElasticsearchTransportClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -87,7 +88,7 @@ void elasticsearchStatus(ThrowingSupplier suppli equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "ClusterHealthAction"), + equalTo(maybeStable(DB_OPERATION), "ClusterHealthAction"), equalTo(ELASTICSEARCH_ACTION, "ClusterHealthAction"), equalTo(ELASTICSEARCH_REQUEST, "ClusterHealthRequest"))), span -> @@ -143,7 +144,7 @@ void elasticsearchError(Runnable action) { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(ELASTICSEARCH_ACTION, "GetAction"), equalTo(ELASTICSEARCH_REQUEST, "GetRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, "invalid-index")), @@ -204,7 +205,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "CreateIndexAction"), + equalTo(maybeStable(DB_OPERATION), "CreateIndexAction"), equalTo(ELASTICSEARCH_ACTION, "CreateIndexAction"), equalTo(ELASTICSEARCH_REQUEST, "CreateIndexRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName)))), @@ -218,7 +219,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, getPutMappingActionName()), + equalTo(maybeStable(DB_OPERATION), getPutMappingActionName()), equalTo(ELASTICSEARCH_ACTION, getPutMappingActionName()), equalTo(ELASTICSEARCH_REQUEST, "PutMappingRequest"))), trace -> @@ -234,7 +235,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "IndexAction"), + equalTo(maybeStable(DB_OPERATION), "IndexAction"), equalTo(ELASTICSEARCH_ACTION, "IndexAction"), equalTo(ELASTICSEARCH_REQUEST, "IndexRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName), @@ -257,7 +258,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(ELASTICSEARCH_ACTION, "GetAction"), equalTo(ELASTICSEARCH_REQUEST, "GetRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName), @@ -277,7 +278,7 @@ void elasticsearchGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.ELASTICSEARCH), - equalTo(DB_OPERATION, "GetAction"), + equalTo(maybeStable(DB_OPERATION), "GetAction"), equalTo(ELASTICSEARCH_ACTION, "GetAction"), equalTo(ELASTICSEARCH_REQUEST, "GetRequest"), equalTo(ELASTICSEARCH_REQUEST_INDICES, indexName), diff --git a/instrumentation/geode-1.4/javaagent/build.gradle.kts b/instrumentation/geode-1.4/javaagent/build.gradle.kts index 6382b0aedd6d..dd436deef63f 100644 --- a/instrumentation/geode-1.4/javaagent/build.gradle.kts +++ b/instrumentation/geode-1.4/javaagent/build.gradle.kts @@ -16,3 +16,13 @@ dependencies { compileOnly("com.google.auto.value:auto-value-annotations") annotationProcessor("com.google.auto.value:auto-value") } + +tasks { + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } +} diff --git a/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java b/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java index 6974a48571dc..55b073d7b4f2 100644 --- a/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java +++ b/instrumentation/geode-1.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/geode/PutGetTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.geode; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; @@ -137,23 +138,23 @@ void assertGeodeTrace(String verb, String query) { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "geode"), - equalTo(DB_NAME, "test-region"), - equalTo(DB_OPERATION, "clear")), + equalTo(maybeStable(DB_NAME), "test-region"), + equalTo(maybeStable(DB_OPERATION), "clear")), span -> span.hasName("put test-region") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "geode"), - equalTo(DB_NAME, "test-region"), - equalTo(DB_OPERATION, "put")), + equalTo(maybeStable(DB_NAME), "test-region"), + equalTo(maybeStable(DB_OPERATION), "put")), span -> span.hasName(verb.concat(" test-region")) .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "geode"), - equalTo(DB_NAME, "test-region"), - equalTo(DB_OPERATION, verb), - equalTo(DB_STATEMENT, query)))); + equalTo(maybeStable(DB_NAME), "test-region"), + equalTo(maybeStable(DB_OPERATION), verb), + equalTo(maybeStable(DB_STATEMENT), query)))); } static class Card implements DataSerializable { diff --git a/instrumentation/hibernate/hibernate-3.3/javaagent/build.gradle.kts b/instrumentation/hibernate/hibernate-3.3/javaagent/build.gradle.kts index 0a67d56a2826..f46f2d1bf8ec 100644 --- a/instrumentation/hibernate/hibernate-3.3/javaagent/build.gradle.kts +++ b/instrumentation/hibernate/hibernate-3.3/javaagent/build.gradle.kts @@ -48,10 +48,20 @@ if (findProperty("testLatestDeps") as Boolean) { } } -tasks.withType().configureEach { - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") - // required on jdk17 - jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") - jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") +tasks { + withType().configureEach { + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") + // required on jdk17 + jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") + jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java b/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java index 037dfe6b2a30..ea780b6cb6c1 100644 --- a/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java +++ b/instrumentation/hibernate/hibernate-3.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v3_3/AbstractHibernateTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.v3_3; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -69,12 +71,12 @@ static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData parent) { .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies(maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -84,14 +86,14 @@ static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData parent, Str .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "h2:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), stringAssert -> stringAssert.startsWith(verb.toLowerCase(Locale.ROOT))), - equalTo(DB_OPERATION, verb), - equalTo(DB_SQL_TABLE, "Value")); + equalTo(maybeStable(DB_OPERATION), verb), + equalTo(maybeStable(DB_SQL_TABLE), "Value")); } static SpanDataAssert assertSessionSpan(SpanDataAssert span, SpanData parent, String spanName) { diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/build.gradle.kts b/instrumentation/hibernate/hibernate-4.0/javaagent/build.gradle.kts index c2b3ac2d615b..aa70c11f7a09 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/build.gradle.kts +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/build.gradle.kts @@ -71,20 +71,25 @@ testing { } } -tasks.withType().configureEach { - // required on jdk17 - jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") - jvmArgs("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED") - jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") +tasks { + withType().configureEach { + // required on jdk17 + jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") + jvmArgs("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED") + jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") - jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") -} + jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } -tasks { check { dependsOn(testing.suites) + dependsOn(testStableSemconv) } } diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java index 18f0335af8f8..829a9b7ab296 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/CriteriaTest.java @@ -8,6 +8,8 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -73,13 +75,16 @@ void testCriteria(String methodName, Consumer interaction) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), satisfies( - DB_STATEMENT, stringAssert -> stringAssert.startsWith("select")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value")), + maybeStable(DB_STATEMENT), + stringAssert -> stringAssert.startsWith("select")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java index f9af700cedbe..e964af69647c 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/EntityManagerTest.java @@ -8,6 +8,8 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -107,12 +109,16 @@ void testHibernateActions(Parameter parameter) { .hasParent(trace.getSpan(2)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value"))); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value"))); } else { trace.hasSpansSatisfyingExactly( @@ -134,12 +140,16 @@ void testHibernateActions(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -216,12 +226,16 @@ void testHibernatePersist() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -238,12 +252,16 @@ void testHibernatePersist() { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")))); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")))); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -283,12 +301,16 @@ void testAttachesStateToQuery(Function queryBuildMethod) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java index 0e72ce931bdc..fc049858e517 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/QueryTest.java @@ -8,6 +8,8 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -68,12 +70,16 @@ void testHibernateQueryExecuteUpdateWithTransaction() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -122,12 +128,14 @@ void testHibernateQuerySingleCall(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value")))); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")))); } private static Stream providesArgumentsSingleCall() { @@ -194,12 +202,14 @@ void testHibernateQueryIterate() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java index b34664a74344..dad05c3e6fa3 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_0/SessionTest.java @@ -8,6 +8,8 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -71,12 +73,16 @@ void testHibernateAction(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -178,12 +184,16 @@ void testHibernateActionStateless(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -321,12 +331,16 @@ void testHibernateReplicate(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -343,12 +357,16 @@ void testHibernateReplicate(Parameter parameter) { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")))); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")))); } private static Stream provideArgumentsHibernateReplicate() { @@ -473,12 +491,16 @@ void testHibernateCommitAction(Parameter parameter) { .hasParent(trace.getSpan(2)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")))); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")))); } private static Stream provideArgumentsHibernateCommitAction() { @@ -648,12 +670,16 @@ void testAttachesStateToQueryCreated(Consumer queryBuilder) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies( + maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -745,13 +771,16 @@ void testHibernateOverlappingSessions() { .hasParent(trace.getSpan(2)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), satisfies( - DB_STATEMENT, stringAssert -> stringAssert.startsWith("insert")), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "Value")), + maybeStable(DB_STATEMENT), + stringAssert -> stringAssert.startsWith("insert")), + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> { span.hasName("Session.save " + Value.class.getName()) .hasKind(INTERNAL) @@ -788,26 +817,32 @@ void testHibernateOverlappingSessions() { .hasParent(trace.getSpan(6)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), satisfies( - DB_STATEMENT, stringAssert -> stringAssert.startsWith("insert")), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "Value")), + maybeStable(DB_STATEMENT), + stringAssert -> stringAssert.startsWith("insert")), + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("DELETE db1.Value") .hasKind(CLIENT) .hasParent(trace.getSpan(6)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), satisfies( - DB_STATEMENT, stringAssert -> stringAssert.startsWith("delete")), - equalTo(DB_OPERATION, "DELETE"), - equalTo(DB_SQL_TABLE, "Value")))); + maybeStable(DB_STATEMENT), + stringAssert -> stringAssert.startsWith("delete")), + equalTo(maybeStable(DB_OPERATION), "DELETE"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")))); assertThat(sessionId1.get()).isNotEqualTo(sessionId2.get()); assertThat(sessionId1.get()).isNotEqualTo(sessionId3.get()); diff --git a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java index 4d33f1221bd8..2cbed93d9b42 100644 --- a/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-4.0/javaagent/src/test/java/spring/jpa/SpringJpaTest.java @@ -8,6 +8,8 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -73,17 +75,19 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName(.*)from Customer(.*)"))), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Customer")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -128,17 +132,19 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.matches( Pattern.compile( "insert into Customer (.*) values \\(.*, \\?, \\?\\)"))), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "Customer")), + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -171,11 +177,15 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_STATEMENT, "call next value for hibernate_sequence"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DB_OPERATION, "CALL")), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + maybeStable(DB_STATEMENT), + "call next value for hibernate_sequence"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DB_OPERATION), "CALL")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -193,17 +203,19 @@ void testCrud() { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.matches( Pattern.compile( "insert into Customer (.*) values \\(.* \\?, \\?\\)"))), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "Customer"))); + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); } }); testing.clearData(); @@ -240,17 +252,19 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)where ([^.]+).id=\\?"))), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Customer")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -268,14 +282,16 @@ void testCrud() { .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), equalTo( - DB_STATEMENT, + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo( + maybeStable(DB_STATEMENT), "update Customer set firstName=?, lastName=? where id=?"), - equalTo(DB_OPERATION, "UPDATE"), - equalTo(DB_SQL_TABLE, "Customer")))); + equalTo(maybeStable(DB_OPERATION), "UPDATE"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); testing.clearData(); Customer foundCustomer = @@ -306,17 +322,19 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)(where ([^.]+).lastName=\\?)"))), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Customer")))); + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); testing.clearData(); testing.runWithSpan("parent", () -> repo.delete(foundCustomer)); @@ -344,17 +362,19 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)where ([^.]+).id=\\?"))), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Customer")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Session.delete spring.jpa.Customer") .hasKind(INTERNAL) @@ -376,12 +396,14 @@ void testCrud() { .hasKind(CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DB_STATEMENT, "delete from Customer where id=?"), - equalTo(DB_OPERATION, "DELETE"), - equalTo(DB_SQL_TABLE, "Customer"))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DB_STATEMENT), "delete from Customer where id=?"), + equalTo(maybeStable(DB_OPERATION), "DELETE"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); } else { String findAction; @@ -407,17 +429,19 @@ void testCrud() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.matches( Pattern.compile( "select ([^.]+).id([^,]*), ([^.]+).firstName([^,]*), ([^.]+).lastName (.*)from Customer (.*)where ([^.]+).id=\\?"))), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Customer")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Session.merge spring.jpa.Customer") .hasKind(INTERNAL) @@ -447,12 +471,14 @@ void testCrud() { .hasKind(CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DB_STATEMENT, "delete from Customer where id=?"), - equalTo(DB_OPERATION, "DELETE"), - equalTo(DB_SQL_TABLE, "Customer"))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DB_STATEMENT), "delete from Customer where id=?"), + equalTo(maybeStable(DB_OPERATION), "DELETE"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); } }); } diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/build.gradle.kts b/instrumentation/hibernate/hibernate-6.0/javaagent/build.gradle.kts index 0b7a9c5d339e..6cab40bb5cd5 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/build.gradle.kts +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/build.gradle.kts @@ -35,7 +35,17 @@ otelJava { minJavaVersionSupported.set(JavaVersion.VERSION_11) } -tasks.withType().configureEach { - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") +tasks { + withType().configureEach { + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java index cd1ba07460c0..c02374b1e18e 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/CriteriaTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.v6_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -83,13 +85,16 @@ void testCriteriaQuery(Consumer> interaction) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), satisfies( - DB_STATEMENT, stringAssert -> stringAssert.startsWith("select")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value")), + maybeStable(DB_STATEMENT), + stringAssert -> stringAssert.startsWith("select")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> span.hasName("Transaction.commit") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java index 927c404d8d41..93aff1f3184e 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/EntityManagerTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.v6_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -145,12 +147,15 @@ void testAttachesStateToQuery(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> assertTransactionCommitSpan( span, @@ -298,12 +303,12 @@ private static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData par .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies(maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -314,12 +319,12 @@ private static SpanDataAssert assertClientSpan( .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies(maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")); } private static SpanDataAssert assertSessionSpan( diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java index 250515d4b2dd..9f528df5cf7d 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/ProcedureCallTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.v6_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -108,11 +110,13 @@ void testProcedureCall() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DB_STATEMENT, "{call TEST_PROC()}"), - equalTo(DB_OPERATION, "CALL")), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DB_STATEMENT), "{call TEST_PROC()}"), + equalTo(maybeStable(DB_OPERATION), "CALL")), span -> span.hasName("Transaction.commit") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java index bff1e8b6fd0f..69e95ce662db 100644 --- a/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java +++ b/instrumentation/hibernate/hibernate-6.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v6_0/SessionTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.v6_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -250,12 +252,15 @@ void testAttachesStateToQuery(Parameter parameter) { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value")), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value")), span -> assertSpanWithSessionId( span, @@ -813,12 +818,12 @@ private static SpanDataAssert assertClientSpan(SpanDataAssert span, SpanData par .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), - satisfies(DB_STATEMENT, val -> val.isInstanceOf(String.class)), - satisfies(DB_OPERATION, val -> val.isInstanceOf(String.class)), - equalTo(DB_SQL_TABLE, "Value")); + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "h2:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.isInstanceOf(String.class)), + satisfies(maybeStable(DB_OPERATION), val -> val.isInstanceOf(String.class)), + equalTo(maybeStable(DB_SQL_TABLE), "Value")); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -829,13 +834,13 @@ private static SpanDataAssert assertClientSpan( .hasParent(parent) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db1"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "h2:mem:"), + equalTo(maybeStable(DB_NAME), "db1"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "h2:mem:"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), stringAssert -> stringAssert.startsWith(verb.toLowerCase(Locale.ROOT))), - equalTo(DB_OPERATION, verb), - equalTo(DB_SQL_TABLE, "Value")); + equalTo(maybeStable(DB_OPERATION), verb), + equalTo(maybeStable(DB_SQL_TABLE), "Value")); } } diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/build.gradle.kts b/instrumentation/hibernate/hibernate-6.0/spring-testing/build.gradle.kts index b55825df9f03..723a297a859d 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/build.gradle.kts +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/build.gradle.kts @@ -26,11 +26,21 @@ otelJava { minJavaVersionSupported.set(JavaVersion.VERSION_17) } -tasks.withType().configureEach { - jvmArgs("-javaagent:" + springAgent.singleFile.absolutePath) +tasks { + withType().configureEach { + jvmArgs("-javaagent:" + springAgent.singleFile.absolutePath) - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") - jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") + jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy index 6be2e3e5cdb7..d0ffa8c6c36f 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy @@ -14,6 +14,8 @@ import spring.jpa.PersistenceConfig import static io.opentelemetry.api.trace.SpanKind.CLIENT import static io.opentelemetry.api.trace.SpanKind.INTERNAL +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable class SpringJpaTest extends AgentInstrumentationSpecification { @@ -62,12 +64,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName(.*)from Customer(.*)/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName(.*)from Customer(.*)/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } span(3) { @@ -118,11 +120,11 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_STATEMENT" "call next value for Customer_SEQ" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_OPERATION" "CALL" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" "call next value for Customer_SEQ" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "CALL" } } span(3) { @@ -139,12 +141,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(3) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/insert into Customer \(.*\) values \(.*\)/ - "$DbIncubatingAttributes.DB_OPERATION" "INSERT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/insert into Customer \(.*\) values \(.*\)/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "INSERT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } } else { @@ -154,12 +156,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/insert into Customer \(.*\) values \(.*\)/ - "$DbIncubatingAttributes.DB_OPERATION" "INSERT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/insert into Customer \(.*\) values \(.*\)/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "INSERT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } span(3) { @@ -209,12 +211,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } span(3) { @@ -230,12 +232,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/update Customer set firstName=\?,(.*)lastName=\? where id=\?/ - "$DbIncubatingAttributes.DB_OPERATION" "UPDATE" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/update Customer set firstName=\?,(.*)lastName=\? where id=\?/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "UPDATE" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } } @@ -273,12 +275,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)(where ([^.]+)\.lastName( ?)=( ?)\?|)/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)(where ([^.]+)\.lastName( ?)=( ?)\?|)/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } } @@ -317,12 +319,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } } @@ -342,12 +344,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { childOf span(1) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" ~/select ([^.]+)\.id([^,]*),([^.]+)\.firstName([^,]*),([^.]+)\.lastName (.*)from Customer (.*)where ([^.]+)\.id( ?)=( ?)\?/ + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } } @@ -372,12 +374,12 @@ class SpringJpaTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "sa" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "delete from Customer where id=?" - "$DbIncubatingAttributes.DB_OPERATION" "DELETE" - "$DbIncubatingAttributes.DB_SQL_TABLE" "Customer" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "sa" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" "delete from Customer where id=?" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "DELETE" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "Customer" } } } diff --git a/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/build.gradle.kts b/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/build.gradle.kts index 22e69a8ad86c..dbf4fd8ee5da 100644 --- a/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/build.gradle.kts +++ b/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/build.gradle.kts @@ -31,7 +31,17 @@ dependencies { latestDepTestLibrary("org.hibernate:hibernate-entitymanager:5.+") // documented limitation } -tasks.withType().configureEach { - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") +tasks { + withType().configureEach { + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.hibernate.experimental-span-attributes=true") + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java b/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java index 67a8712d5f2b..b8f5a35968a6 100644 --- a/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java +++ b/instrumentation/hibernate/hibernate-procedure-call-4.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/hibernate/v4_3/ProcedureCallTest.java @@ -8,6 +8,8 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -120,11 +122,13 @@ void testProcedureCall() { .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_STATEMENT, "{call TEST_PROC()}"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DB_OPERATION, "CALL")), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(maybeStable(DB_STATEMENT), "{call TEST_PROC()}"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DB_OPERATION), "CALL")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) diff --git a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/build.gradle.kts b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/build.gradle.kts index 5588958488f7..54b6b8038d97 100644 --- a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/build.gradle.kts +++ b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/build.gradle.kts @@ -79,8 +79,13 @@ tasks { } } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testing.suites) + dependsOn(testStableSemconv) } } diff --git a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java index d7136189ccee..46f35502e2b0 100644 --- a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java +++ b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.reactive.v1_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -305,13 +307,13 @@ private static void assertTrace() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), equalTo( - DB_STATEMENT, + maybeStable(DB_STATEMENT), "select value0_.id as id1_0_0_, value0_.name as name2_0_0_ from Value value0_ where value0_.id=$1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java index db2eeb03af5a..f78264ca3ff3 100644 --- a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java +++ b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive2Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/HibernateReactiveTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.reactive.v2_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -297,13 +299,13 @@ private static void assertTrace() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), equalTo( - DB_STATEMENT, + maybeStable(DB_STATEMENT), "select v1_0.id,v1_0.name from Value v1_0 where v1_0.id=$1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "Value"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Value"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/influxdb-2.4/javaagent/build.gradle.kts b/instrumentation/influxdb-2.4/javaagent/build.gradle.kts index ab93583d3e03..04909adbc594 100644 --- a/instrumentation/influxdb-2.4/javaagent/build.gradle.kts +++ b/instrumentation/influxdb-2.4/javaagent/build.gradle.kts @@ -36,7 +36,10 @@ testing { } tasks { - test { + withType().configureEach { + // we disable the okhttp instrumentation, so we don't need to assert on the okhttp spans + // from the okhttp instrumentation we need OkHttp3IgnoredTypesConfigurer to fix context leaks + jvmArgs("-Dotel.instrumentation.okhttp.enabled=false") usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } @@ -45,10 +48,12 @@ tasks { dependsOn(testing.suites) } } -} -tasks.withType().configureEach { - // we disable the okhttp instrumentation, so we don't need to assert on the okhttp spans - // from the okhttp instrumentation we need OkHttp3IgnoredTypesConfigurer to fix context leaks - jvmArgs("-Dotel.instrumentation.okhttp.enabled=false") + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java b/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java index 3492b53017cc..4f3033991f97 100644 --- a/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java +++ b/instrumentation/influxdb-2.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.influxdb.v2_4; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -323,12 +324,12 @@ private static List attributeAssertions( result.addAll( asList( equalTo(DB_SYSTEM, "influxdb"), - equalTo(DB_NAME, databaseName), + equalTo(maybeStable(DB_NAME), databaseName), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), - equalTo(DB_OPERATION, operation))); + equalTo(maybeStable(DB_OPERATION), operation))); if (statement != null) { - result.add(equalTo(DB_STATEMENT, statement)); + result.add(equalTo(maybeStable(DB_STATEMENT), statement)); } return result; } diff --git a/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java b/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java index b430a4482cbd..e7bc6c08398e 100644 --- a/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java +++ b/instrumentation/influxdb-2.4/javaagent/src/test24/java/io/opentelemetry/javaagent/instrumentation/influxdb/v2_4/InfluxDbClient24Test.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.influxdb.v2_4; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -152,12 +153,12 @@ private static List attributeAssertions( result.addAll( asList( equalTo(DB_SYSTEM, "influxdb"), - equalTo(DB_NAME, databaseName), + equalTo(maybeStable(DB_NAME), databaseName), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), - equalTo(DB_OPERATION, operation))); + equalTo(maybeStable(DB_OPERATION), operation))); if (statement != null) { - result.add(equalTo(DB_STATEMENT, statement)); + result.add(equalTo(maybeStable(DB_STATEMENT), statement)); } return result; } diff --git a/instrumentation/jdbc/javaagent/build.gradle.kts b/instrumentation/jdbc/javaagent/build.gradle.kts index c5e46b8e24ac..07bdea12d3ed 100644 --- a/instrumentation/jdbc/javaagent/build.gradle.kts +++ b/instrumentation/jdbc/javaagent/build.gradle.kts @@ -67,7 +67,25 @@ tasks { jvmArgs("-Dotel.instrumentation.jdbc-datasource.enabled=true") } + val testStableSemconv by registering(Test::class) { + filter { + excludeTestsMatching("SlickTest") + } + jvmArgs("-Dotel.instrumentation.jdbc-datasource.enabled=true") + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + val testSlickStableSemconv by registering(Test::class) { + filter { + includeTestsMatching("SlickTest") + } + include("**/SlickTest.*") + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testSlick) + dependsOn(testStableSemconv) + dependsOn(testSlickStableSemconv) } } diff --git a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java index 105f834d3ab9..649b5c480e45 100644 --- a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java +++ b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java @@ -5,8 +5,9 @@ package io.opentelemetry.javaagent.instrumentation.jdbc.test; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; @@ -372,18 +373,12 @@ public void testBasicStatement( .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, system), - equalTo(DB_NAME, dbNameLower), - satisfies( - DB_USER, - val -> { - if (username != null) { - val.isEqualTo(username); - } - }), - equalTo(DB_CONNECTION_STRING, url), - equalTo(DB_STATEMENT, sanitizedQuery), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, table)))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : username), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : url), + equalTo(maybeStable(DB_STATEMENT), sanitizedQuery), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), table)))); } static Stream preparedStatementStream() throws SQLException { @@ -497,18 +492,12 @@ void testPreparedStatementExecute( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, system), - equalTo(DB_NAME, dbNameLower), - satisfies( - DB_USER, - val -> { - if (username != null) { - val.isEqualTo(username); - } - }), - equalTo(DB_CONNECTION_STRING, url), - equalTo(DB_STATEMENT, sanitizedQuery), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, table)))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : username), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : url), + equalTo(maybeStable(DB_STATEMENT), sanitizedQuery), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), table)))); } @ParameterizedTest @@ -540,18 +529,12 @@ void testPreparedStatementQuery( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, system), - equalTo(DB_NAME, dbNameLower), - satisfies( - DB_USER, - val -> { - if (username != null) { - val.isEqualTo(username); - } - }), - equalTo(DB_CONNECTION_STRING, url), - equalTo(DB_STATEMENT, sanitizedQuery), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, table)))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : username), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : url), + equalTo(maybeStable(DB_STATEMENT), sanitizedQuery), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), table)))); } @ParameterizedTest @@ -583,18 +566,12 @@ void testPreparedCall( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, system), - equalTo(DB_NAME, dbNameLower), - satisfies( - DB_USER, - val -> { - if (username != null) { - val.isEqualTo(username); - } - }), - equalTo(DB_CONNECTION_STRING, url), - equalTo(DB_STATEMENT, sanitizedQuery), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, table)))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : username), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : url), + equalTo(maybeStable(DB_STATEMENT), sanitizedQuery), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), table)))); } static Stream statementUpdateStream() throws SQLException { @@ -725,18 +702,12 @@ void testStatementUpdate( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, system), - equalTo(DB_NAME, dbNameLower), - satisfies( - DB_USER, - val -> { - if (username != null) { - val.isEqualTo(username); - } - }), - equalTo(DB_CONNECTION_STRING, url), - equalTo(DB_STATEMENT, query), - equalTo(DB_OPERATION, "CREATE TABLE"), - equalTo(DB_SQL_TABLE, table)))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : username), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : url), + equalTo(maybeStable(DB_STATEMENT), query), + equalTo(maybeStable(DB_OPERATION), "CREATE TABLE"), + equalTo(maybeStable(DB_SQL_TABLE), table)))); } static Stream preparedStatementUpdateStream() throws SQLException { @@ -833,18 +804,12 @@ void testPreparedStatementUpdate( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, system), - equalTo(DB_NAME, dbNameLower), - satisfies( - DB_USER, - val -> { - if (username != null) { - val.isEqualTo(username); - } - }), - equalTo(DB_CONNECTION_STRING, url), - equalTo(DB_STATEMENT, query), - equalTo(DB_OPERATION, "CREATE TABLE"), - equalTo(DB_SQL_TABLE, table)))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : username), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : url), + equalTo(maybeStable(DB_STATEMENT), query), + equalTo(maybeStable(DB_OPERATION), "CREATE TABLE"), + equalTo(maybeStable(DB_SQL_TABLE), table)))); } static Stream connectionConstructorStream() { @@ -946,18 +911,12 @@ void testConnectionConstructorThrowing( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, system), - equalTo(DB_NAME, dbNameLower), - satisfies( - DB_USER, - val -> { - if (username != null) { - val.isEqualTo(username); - } - }), - equalTo(DB_CONNECTION_STRING, url), - equalTo(DB_STATEMENT, sanitizedQuery), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, table)))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : username), + equalTo(DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : url), + equalTo(maybeStable(DB_STATEMENT), sanitizedQuery), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), table)))); } static Stream getConnectionStream() { @@ -1022,15 +981,11 @@ void testGetConnection( datasource.getClass().getName()), equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "getConnection"), equalTo(DB_SYSTEM, system), - satisfies( - DB_USER, - val -> { - if (user != null) { - val.isEqualTo(user); - } - }), - equalTo(DB_NAME, "jdbcunittest"), - equalTo(DB_CONNECTION_STRING, connectionString)))); + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : user), + equalTo(maybeStable(DB_NAME), "jdbcunittest"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : connectionString)))); if (recursive) { assertions.add( span -> @@ -1043,15 +998,11 @@ void testGetConnection( datasource.getClass().getName()), equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "getConnection"), equalTo(DB_SYSTEM, system), - satisfies( - DB_USER, - val -> { - if (user != null) { - val.isEqualTo(user); - } - }), - equalTo(DB_NAME, "jdbcunittest"), - equalTo(DB_CONNECTION_STRING, connectionString))); + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : user), + equalTo(maybeStable(DB_NAME), "jdbcunittest"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : connectionString))); } trace.hasSpansSatisfyingExactly(assertions); }); @@ -1085,8 +1036,10 @@ void testGetClientInfoException(String query) throws SQLException { .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, "other_sql"), - equalTo(DB_STATEMENT, "testing ?"), - equalTo(DB_CONNECTION_STRING, "testdb://localhost"), + equalTo(maybeStable(DB_STATEMENT), "testing ?"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "testdb://localhost"), equalTo(SERVER_ADDRESS, "localhost")))); } @@ -1166,11 +1119,13 @@ void testProduceProperSpanName( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, "other_sql"), - equalTo(DB_NAME, databaseName), - equalTo(DB_CONNECTION_STRING, "testdb://localhost"), - equalTo(DB_STATEMENT, sanitizedQuery), - equalTo(DB_OPERATION, operation), - equalTo(DB_SQL_TABLE, table), + equalTo(maybeStable(DB_NAME), databaseName), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "testdb://localhost"), + equalTo(maybeStable(DB_STATEMENT), sanitizedQuery), + equalTo(maybeStable(DB_OPERATION), operation), + equalTo(maybeStable(DB_SQL_TABLE), table), equalTo(SERVER_ADDRESS, "localhost")))); } @@ -1214,12 +1169,16 @@ void testConnectionCached(String connectionPoolName) throws SQLException { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfying( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, dbNameLower), - equalTo(DB_USER, "SA"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - equalTo(DB_STATEMENT, "SELECT ? FROM INFORMATION_SCHEMA.SYSTEM_USERS"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "INFORMATION_SCHEMA.SYSTEM_USERS"))); + equalTo(maybeStable(DB_NAME), dbNameLower), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "SA"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo( + maybeStable(DB_STATEMENT), + "SELECT ? FROM INFORMATION_SCHEMA.SYSTEM_USERS"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "INFORMATION_SCHEMA.SYSTEM_USERS"))); for (int i = 0; i < numQueries; i++) { assertions.add(traceAssertConsumer); } @@ -1284,10 +1243,12 @@ void testHandleRecursiveStatements( .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DB_SYSTEM, "other_sql"), - equalTo(DB_CONNECTION_STRING, "testdb://localhost"), - equalTo(DB_STATEMENT, "SELECT * FROM table"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "table"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "testdb://localhost"), + equalTo(maybeStable(DB_STATEMENT), "SELECT * FROM table"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "table"), equalTo(SERVER_ADDRESS, "localhost")))); } diff --git a/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala b/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala index fa8684e5dcfb..e12d958a6b73 100644 --- a/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala +++ b/instrumentation/jdbc/javaagent/src/test/scala/io/opentelemetry/javaagent/instrumentation/scalaexecutors/SlickTest.scala @@ -6,24 +6,24 @@ package io.opentelemetry.javaagent.instrumentation.scalaexecutors import io.opentelemetry.api.trace.{SpanKind, Tracer} +import io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv +import io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable import io.opentelemetry.instrumentation.testing.junit.{ AgentInstrumentationExtension, InstrumentationExtension } import io.opentelemetry.javaagent.testing.common.Java8BytecodeBridge -import io.opentelemetry.sdk.testing.assertj.{SpanDataAssert, TraceAssert} import io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo -import io.opentelemetry.semconv.incubating.DbIncubatingAttributes -import io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DbSystemIncubatingValues - -import java.util.function.Consumer +import io.opentelemetry.sdk.testing.assertj.{SpanDataAssert, TraceAssert} +import io.opentelemetry.semconv.incubating.DbIncubatingAttributes._ import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.{Test, TestInstance} import org.junit.jupiter.api.extension.RegisterExtension +import org.junit.jupiter.api.{Test, TestInstance} +import slick.jdbc.H2Profile.api._ -import scala.concurrent.{Await, Future} +import java.util.function.Consumer import scala.concurrent.duration.Duration -import slick.jdbc.H2Profile.api._ +import scala.concurrent.{Await, Future} @TestInstance(TestInstance.Lifecycle.PER_CLASS) class SlickTest { @@ -81,18 +81,18 @@ class SlickTest { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( + equalTo(DB_SYSTEM, DbSystemIncubatingValues.H2), + equalTo(maybeStable(DB_NAME), Db), equalTo( - DbIncubatingAttributes.DB_SYSTEM, - DbSystemIncubatingValues.H2 + DB_USER, + if (emitStableDatabaseSemconv()) null else Username ), - equalTo(DbIncubatingAttributes.DB_NAME, Db), - equalTo(DbIncubatingAttributes.DB_USER, Username), equalTo( - DbIncubatingAttributes.DB_CONNECTION_STRING, - "h2:mem:" + DB_CONNECTION_STRING, + if (emitStableDatabaseSemconv()) null else "h2:mem:" ), - equalTo(DbIncubatingAttributes.DB_STATEMENT, "SELECT ?"), - equalTo(DbIncubatingAttributes.DB_OPERATION, "SELECT") + equalTo(maybeStable(DB_STATEMENT), "SELECT ?"), + equalTo(maybeStable(DB_OPERATION), "SELECT") ) } ) diff --git a/instrumentation/jdbc/library/build.gradle.kts b/instrumentation/jdbc/library/build.gradle.kts index 02af72e4c9dc..63116006a6c9 100644 --- a/instrumentation/jdbc/library/build.gradle.kts +++ b/instrumentation/jdbc/library/build.gradle.kts @@ -41,4 +41,12 @@ tasks { into("build/extracted/shadow-bootstrap") include("io/opentelemetry/javaagent/bootstrap/**") } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index f10e09e195f4..1f3db9d51bfa 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.jdbc.datasource; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static org.assertj.core.api.Assertions.assertThat; @@ -42,7 +43,7 @@ void buildWithDefaults() throws SQLException { span -> span.hasName("TestDataSource.getConnection"), span -> span.hasName("SELECT dbname") - .hasAttribute(equalTo(DB_STATEMENT, "SELECT ?;")))); + .hasAttribute(equalTo(maybeStable(DB_STATEMENT), "SELECT ?;")))); } @Test @@ -118,7 +119,7 @@ void buildWithSanitizationDisabled() throws SQLException { span -> span.hasName("TestDataSource.getConnection"), span -> span.hasName("SELECT dbname") - .hasAttribute(equalTo(DB_STATEMENT, "SELECT 1;")))); + .hasAttribute(equalTo(maybeStable(DB_STATEMENT), "SELECT 1;")))); } @Test diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java index 9fe862d9b1e4..b185c16f5a98 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/OpenTelemetryDataSourceTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.instrumentation.jdbc.datasource; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_NAME; @@ -58,8 +60,12 @@ void shouldEmitGetConnectionSpans(GetConnectionFunction getConnection) throws SQ TestDataSource.class.getName()), equalTo(CodeIncubatingAttributes.CODE_FUNCTION, "getConnection"), equalTo(DB_SYSTEM, "postgresql"), - equalTo(DB_NAME, "dbname"), - equalTo(DB_CONNECTION_STRING, "postgresql://127.0.0.1:5432")))); + equalTo(maybeStable(DB_NAME), "dbname"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() + ? null + : "postgresql://127.0.0.1:5432")))); assertThat(connection).isExactlyInstanceOf(OpenTelemetryConnection.class); DbInfo dbInfo = ((OpenTelemetryConnection) connection).getDbInfo(); diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java index fb07e6bf2759..7b7b90c02dc8 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/internal/OpenTelemetryConnectionTest.java @@ -5,7 +5,9 @@ package io.opentelemetry.instrumentation.jdbc.internal; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; import static io.opentelemetry.instrumentation.jdbc.internal.JdbcInstrumenterFactory.createStatementInstrumenter; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -195,12 +197,14 @@ private static void jdbcTraceAssertion(DbInfo dbInfo, String query) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, dbInfo.getSystem()), - equalTo(DB_NAME, dbInfo.getName()), - equalTo(DB_USER, dbInfo.getUser()), - equalTo(DB_CONNECTION_STRING, dbInfo.getShortUrl()), - equalTo(DB_STATEMENT, query), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "users"), + equalTo(maybeStable(DB_NAME), dbInfo.getName()), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : dbInfo.getUser()), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : dbInfo.getShortUrl()), + equalTo(maybeStable(DB_STATEMENT), query), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "users"), equalTo(SERVER_ADDRESS, dbInfo.getHost()), equalTo(SERVER_PORT, dbInfo.getPort())))); } diff --git a/instrumentation/jedis/jedis-1.4/javaagent/build.gradle.kts b/instrumentation/jedis/jedis-1.4/javaagent/build.gradle.kts index 4af0c8ce1d33..22293482fb0a 100644 --- a/instrumentation/jedis/jedis-1.4/javaagent/build.gradle.kts +++ b/instrumentation/jedis/jedis-1.4/javaagent/build.gradle.kts @@ -43,7 +43,12 @@ tasks { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testing.suites) + dependsOn(testStableSemconv) } } diff --git a/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java b/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java index 0ce182bce006..0786a51b1afc 100644 --- a/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java +++ b/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -69,8 +70,8 @@ void setCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -90,8 +91,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port))), trace -> @@ -101,8 +102,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET foo"), - equalTo(DB_OPERATION, "GET"), + equalTo(maybeStable(DB_STATEMENT), "GET foo"), + equalTo(maybeStable(DB_OPERATION), "GET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -122,8 +123,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port))), trace -> @@ -133,8 +134,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"), - equalTo(DB_OPERATION, "RANDOMKEY"), + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } diff --git a/instrumentation/jedis/jedis-3.0/javaagent/build.gradle.kts b/instrumentation/jedis/jedis-3.0/javaagent/build.gradle.kts index 2a11c52f2268..532a471e280b 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/build.gradle.kts +++ b/instrumentation/jedis/jedis-3.0/javaagent/build.gradle.kts @@ -29,7 +29,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java index 1490c689a3b1..921610937bc1 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS; @@ -80,8 +81,8 @@ void setCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -104,8 +105,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -118,8 +119,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET foo"), - equalTo(DB_OPERATION, "GET"), + equalTo(maybeStable(DB_STATEMENT), "GET foo"), + equalTo(maybeStable(DB_OPERATION), "GET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -142,8 +143,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -156,8 +157,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"), - equalTo(DB_OPERATION, "RANDOMKEY"), + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), diff --git a/instrumentation/jedis/jedis-4.0/javaagent/build.gradle.kts b/instrumentation/jedis/jedis-4.0/javaagent/build.gradle.kts index d6127aa061e8..01afcaa36f52 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/build.gradle.kts +++ b/instrumentation/jedis/jedis-4.0/javaagent/build.gradle.kts @@ -25,9 +25,17 @@ dependencies { } tasks { - test { + withType().configureEach { // latest dep test fails because peer ip is 0:0:0:0:0:0:0:1 instead of 127.0.0.1 jvmArgs("-Djava.net.preferIPv4Stack=true") usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index 27d7cd7c94e7..9e965ee16b99 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_PORT; @@ -73,8 +74,8 @@ void setCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(NETWORK_TYPE, "ipv4"), equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip)))); @@ -95,8 +96,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(NETWORK_TYPE, "ipv4"), equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip))), @@ -107,8 +108,8 @@ void getCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET foo"), - equalTo(DB_OPERATION, "GET"), + equalTo(maybeStable(DB_STATEMENT), "GET foo"), + equalTo(maybeStable(DB_OPERATION), "GET"), equalTo(NETWORK_TYPE, "ipv4"), equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip)))); @@ -129,8 +130,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET foo ?"), - equalTo(DB_OPERATION, "SET"), + equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), + equalTo(maybeStable(DB_OPERATION), "SET"), equalTo(NETWORK_TYPE, "ipv4"), equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip))), @@ -141,8 +142,8 @@ void commandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"), - equalTo(DB_OPERATION, "RANDOMKEY"), + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY"), equalTo(NETWORK_TYPE, "ipv4"), equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip)))); diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/build.gradle.kts b/instrumentation/lettuce/lettuce-4.0/javaagent/build.gradle.kts index e462a677642f..97a05becb7c4 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/build.gradle.kts +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/build.gradle.kts @@ -17,9 +17,19 @@ dependencies { latestDepTestLibrary("biz.paluch.redis:lettuce:4.+") // see lettuce-5.0 module } -tasks.withType().configureEach { - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.lettuce.experimental-span-attributes=true") - jvmArgs("-Dotel.instrumentation.lettuce.connection-telemetry.enabled=true") - usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) +tasks { + withType().configureEach { + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.lettuce.experimental-span-attributes=true") + jvmArgs("-Dotel.instrumentation.lettuce.connection-telemetry.enabled=true") + usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java index a37014f8373a..89cde6c423a7 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceConnectAttributesExtractor.java @@ -26,7 +26,6 @@ public void onStart(AttributesBuilder attributes, Context parentContext, RedisUR if (SemconvStability.emitStableDatabaseSemconv()) { attributes.put(DbIncubatingAttributes.DB_NAMESPACE, String.valueOf(database)); } - if (SemconvStability.emitOldDatabaseSemconv()) { attributes.put(DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX, (long) database); } diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java index e4fa0f11ca10..ca25afe04e56 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v4_0; import static io.opentelemetry.api.common.AttributeKey.booleanKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -193,7 +194,8 @@ void testSetCommandUsingFutureGetWithTimeout() span.hasName("SET") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "SET")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "SET")))); } @Test @@ -222,7 +224,7 @@ void testCommandChainedWithThenAccept() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "GET")), + equalTo(DB_SYSTEM, "redis"), equalTo(maybeStable(DB_OPERATION), "GET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -283,7 +285,7 @@ void getNonExistentKeyCommandWithHandleAsyncAndChainedWithThenApply() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "GET")), + equalTo(DB_SYSTEM, "redis"), equalTo(maybeStable(DB_OPERATION), "GET")), span -> span.hasName("callback1") .hasKind(SpanKind.INTERNAL) @@ -323,7 +325,8 @@ void testCommandWithNoArgumentsUsingBiconsumer() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "RANDOMKEY")), + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -366,14 +369,16 @@ void testHashSetAndThenNestApplyToHashGetall() { span.hasName("HMSET") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "HMSET"))), + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "HMSET"))), trace -> trace.hasSpansSatisfyingExactly( span -> span.hasName("HGETALL") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "HGETALL")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "HGETALL")))); } @Test @@ -414,7 +419,8 @@ void testCommandCompletesExceptionally() { .hasStatus(StatusData.error()) .hasException(new IllegalStateException("TestException")) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "DEL")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "DEL")))); } @Test @@ -451,7 +457,7 @@ void testCommandBeforeItFinished() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_OPERATION, "SADD"), + equalTo(maybeStable(DB_OPERATION), "SADD"), equalTo(booleanKey("lettuce.command.cancelled"), true)), span -> span.hasName("callback") @@ -487,7 +493,8 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { span.hasName("DEBUG") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "DEBUG")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "DEBUG")))); } @Test @@ -520,6 +527,7 @@ void testShutdownCommandShouldProduceSpan() { span.hasName("SHUTDOWN") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "SHUTDOWN")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java index 19749a20ee93..e9d1dc16baf3 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v4_0; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -163,7 +164,8 @@ void testSetCommand() { span.hasName("SET") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "SET")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "SET")))); } @Test @@ -178,7 +180,8 @@ void testGetCommand() { span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "GET")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } @Test @@ -193,7 +196,8 @@ void testGetNonExistentKeyCommand() { span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "GET")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } @Test @@ -208,7 +212,8 @@ void testCommandWithNoArguments() { span.hasName("RANDOMKEY") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "RANDOMKEY")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY")))); } @Test @@ -223,7 +228,8 @@ void testListCommand() { span.hasName("LPUSH") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "LPUSH")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "LPUSH")))); } @Test @@ -238,7 +244,8 @@ void testHashSetCommand() { span.hasName("HMSET") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "HMSET")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "HMSET")))); } @Test @@ -253,7 +260,8 @@ void testHashGetallCommand() { span.hasName("HGETALL") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "HGETALL")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "HGETALL")))); } @Test @@ -284,7 +292,8 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { span.hasName("DEBUG") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "DEBUG")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "DEBUG")))); } @Test @@ -317,6 +326,7 @@ void testShutdownCommandShouldProduceSpan() { span.hasName("SHUTDOWN") .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "redis"), equalTo(DB_OPERATION, "SHUTDOWN")))); + equalTo(DB_SYSTEM, "redis"), + equalTo(maybeStable(DB_OPERATION), "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/build.gradle.kts b/instrumentation/lettuce/lettuce-5.0/javaagent/build.gradle.kts index 0ebb0fa515ac..7e2dc0569d51 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/build.gradle.kts +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/build.gradle.kts @@ -22,9 +22,19 @@ dependencies { latestDepTestLibrary("io.lettuce:lettuce-core:5.0.+") // see lettuce-5.1 module } -tasks.withType().configureEach { - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.lettuce.experimental-span-attributes=true") - jvmArgs("-Dotel.instrumentation.lettuce.connection-telemetry.enabled=true") - usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) +tasks { + withType().configureEach { + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.lettuce.experimental-span-attributes=true") + jvmArgs("-Dotel.instrumentation.lettuce.connection-telemetry.enabled=true") + usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java index 3a4f3995bf81..108604a23eec 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceConnectAttributesExtractor.java @@ -26,7 +26,6 @@ public void onStart(AttributesBuilder attributes, Context parentContext, RedisUR if (SemconvStability.emitStableDatabaseSemconv()) { attributes.put(DbIncubatingAttributes.DB_NAMESPACE, String.valueOf(database)); } - if (SemconvStability.emitOldDatabaseSemconv()) { attributes.put(DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX, (long) database); } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java index 38dfc0953492..b03ceb0fa556 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_0; import static io.opentelemetry.api.common.AttributeKey.booleanKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; @@ -189,8 +190,8 @@ void testSetCommandUsingFutureGetWithTimeout() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET TESTSETKEY ?"), - equalTo(DB_OPERATION, "SET")))); + equalTo(maybeStable(DB_STATEMENT), "SET TESTSETKEY ?"), + equalTo(maybeStable(DB_OPERATION), "SET")))); } @Test @@ -221,8 +222,8 @@ void testGetCommandChainedWithThenAccept() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET TESTKEY"), - equalTo(DB_OPERATION, "GET")), + equalTo(maybeStable(DB_STATEMENT), "GET TESTKEY"), + equalTo(maybeStable(DB_OPERATION), "GET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -278,8 +279,8 @@ void testGetNonExistentKeyCommandWithHandleAsyncAndChainedWithThenApply() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET NON_EXISTENT_KEY"), - equalTo(DB_OPERATION, "GET")), + equalTo(maybeStable(DB_STATEMENT), "GET NON_EXISTENT_KEY"), + equalTo(maybeStable(DB_OPERATION), "GET")), span -> span.hasName("callback1") .hasKind(SpanKind.INTERNAL) @@ -321,8 +322,8 @@ void testCommandWithNoArgumentsUsingBiconsumer() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"), - equalTo(DB_OPERATION, "RANDOMKEY")), + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -367,8 +368,10 @@ void testHashSetAndThenNestApplyToHashGetall() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "HMSET TESTHM firstname ? lastname ? age ?"), - equalTo(DB_OPERATION, "HMSET"))), + equalTo( + maybeStable(DB_STATEMENT), + "HMSET TESTHM firstname ? lastname ? age ?"), + equalTo(maybeStable(DB_OPERATION), "HMSET"))), trace -> trace.hasSpansSatisfyingExactly( span -> @@ -376,8 +379,8 @@ void testHashSetAndThenNestApplyToHashGetall() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "HGETALL TESTHM"), - equalTo(DB_OPERATION, "HGETALL")))); + equalTo(maybeStable(DB_STATEMENT), "HGETALL TESTHM"), + equalTo(maybeStable(DB_OPERATION), "HGETALL")))); } @Test @@ -419,8 +422,8 @@ void testCommandCompletesExceptionally() { .hasException(new IllegalStateException("TestException")) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "DEL key1 key2"), - equalTo(DB_OPERATION, "DEL")))); + equalTo(maybeStable(DB_STATEMENT), "DEL key1 key2"), + equalTo(maybeStable(DB_OPERATION), "DEL")))); } @Test @@ -457,8 +460,8 @@ void testCancelCommandBeforeItFinishes() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SADD SKEY ? ?"), - equalTo(DB_OPERATION, "SADD"), + equalTo(maybeStable(DB_STATEMENT), "SADD SKEY ? ?"), + equalTo(maybeStable(DB_OPERATION), "SADD"), equalTo(booleanKey("lettuce.command.cancelled"), true)), span -> span.hasName("callback") @@ -482,8 +485,8 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "DEBUG SEGFAULT"), - equalTo(DB_OPERATION, "DEBUG")))); + equalTo(maybeStable(DB_STATEMENT), "DEBUG SEGFAULT"), + equalTo(maybeStable(DB_OPERATION), "DEBUG")))); } @Test @@ -502,7 +505,7 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SHUTDOWN NOSAVE"), - equalTo(DB_OPERATION, "SHUTDOWN")))); + equalTo(maybeStable(DB_STATEMENT), "SHUTDOWN NOSAVE"), + equalTo(maybeStable(DB_OPERATION), "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index bf2e6ea0cab8..416a963ca048 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_0; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; @@ -95,8 +96,8 @@ void testSetCommandWithSubscribeOnDefinedConsumer() .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET TESTSETKEY ?"), - equalTo(DB_OPERATION, "SET")), + equalTo(maybeStable(DB_STATEMENT), "SET TESTSETKEY ?"), + equalTo(maybeStable(DB_OPERATION), "SET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -126,8 +127,8 @@ void testGetCommandWithLambdaFunction() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET TESTKEY"), - equalTo(DB_OPERATION, "GET")))); + equalTo(maybeStable(DB_STATEMENT), "GET TESTKEY"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } // to make sure instrumentation's chained completion stages won't interfere with user's, while @@ -165,8 +166,8 @@ void testGetNonExistentKeyCommand() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET NON_EXISTENT_KEY"), - equalTo(DB_OPERATION, "GET")), + equalTo(maybeStable(DB_STATEMENT), "GET NON_EXISTENT_KEY"), + equalTo(maybeStable(DB_OPERATION), "GET")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) @@ -195,8 +196,8 @@ void testCommandWithNoArguments() .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"), - equalTo(DB_OPERATION, "RANDOMKEY")))); + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY")))); } @Test @@ -211,8 +212,8 @@ void testCommandFluxPublisher() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "COMMAND"), - equalTo(DB_OPERATION, "COMMAND"), + equalTo(maybeStable(DB_STATEMENT), "COMMAND"), + equalTo(maybeStable(DB_OPERATION), "COMMAND"), satisfies( AttributeKey.longKey("lettuce.command.results.count"), val -> val.isGreaterThan(100))))); @@ -230,8 +231,8 @@ void testCommandCancelAfter2OnFluxPublisher() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "COMMAND"), - equalTo(DB_OPERATION, "COMMAND"), + equalTo(maybeStable(DB_STATEMENT), "COMMAND"), + equalTo(maybeStable(DB_OPERATION), "COMMAND"), satisfies( AttributeKey.booleanKey("lettuce.command.cancelled"), AbstractBooleanAssert::isTrue), @@ -264,8 +265,8 @@ void testDebugSegfaultCommandReturnsMonoVoidWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "DEBUG SEGFAULT"), - equalTo(DB_OPERATION, "DEBUG")))); + equalTo(maybeStable(DB_STATEMENT), "DEBUG SEGFAULT"), + equalTo(maybeStable(DB_OPERATION), "DEBUG")))); } @Test @@ -284,8 +285,8 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SHUTDOWN NOSAVE"), - equalTo(DB_OPERATION, "SHUTDOWN")))); + equalTo(maybeStable(DB_STATEMENT), "SHUTDOWN NOSAVE"), + equalTo(maybeStable(DB_OPERATION), "SHUTDOWN")))); } @Test @@ -304,16 +305,16 @@ void testBlockingSubscriber() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET a ?"), - equalTo(DB_OPERATION, "SET")), + equalTo(maybeStable(DB_STATEMENT), "SET a ?"), + equalTo(maybeStable(DB_OPERATION), "SET")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET a"), - equalTo(DB_OPERATION, "GET")))); + equalTo(maybeStable(DB_STATEMENT), "GET a"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } @Test @@ -332,16 +333,16 @@ void testAsyncSubscriber() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET a ?"), - equalTo(DB_OPERATION, "SET")), + equalTo(maybeStable(DB_STATEMENT), "SET a ?"), + equalTo(maybeStable(DB_OPERATION), "SET")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET a"), - equalTo(DB_OPERATION, "GET")))); + equalTo(maybeStable(DB_STATEMENT), "GET a"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } @Test @@ -365,15 +366,15 @@ void testAsyncSubscriberWithSpecificThreadPool() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET a ?"), - equalTo(DB_OPERATION, "SET")), + equalTo(maybeStable(DB_STATEMENT), "SET a ?"), + equalTo(maybeStable(DB_OPERATION), "SET")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET a"), - equalTo(DB_OPERATION, "GET")))); + equalTo(maybeStable(DB_STATEMENT), "GET a"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java index 69adc52545dc..d84a4bc437a9 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_0; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; @@ -152,8 +153,8 @@ void testSetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET TESTSETKEY ?"), - equalTo(DB_OPERATION, "SET")))); + equalTo(maybeStable(DB_STATEMENT), "SET TESTSETKEY ?"), + equalTo(maybeStable(DB_OPERATION), "SET")))); } @Test @@ -169,8 +170,8 @@ void testGetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET TESTKEY"), - equalTo(DB_OPERATION, "GET")))); + equalTo(maybeStable(DB_STATEMENT), "GET TESTKEY"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } @Test @@ -186,8 +187,8 @@ void testGetNonExistentKeyCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET NON_EXISTENT_KEY"), - equalTo(DB_OPERATION, "GET")))); + equalTo(maybeStable(DB_STATEMENT), "GET NON_EXISTENT_KEY"), + equalTo(maybeStable(DB_OPERATION), "GET")))); } @Test @@ -203,8 +204,8 @@ void testCommandWithNoArguments() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"), - equalTo(DB_OPERATION, "RANDOMKEY")))); + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), + equalTo(maybeStable(DB_OPERATION), "RANDOMKEY")))); } @Test @@ -220,8 +221,8 @@ void testListCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "LPUSH TESTLIST ?"), - equalTo(DB_OPERATION, "LPUSH")))); + equalTo(maybeStable(DB_STATEMENT), "LPUSH TESTLIST ?"), + equalTo(maybeStable(DB_OPERATION), "LPUSH")))); } @Test @@ -237,8 +238,10 @@ void testHashSetCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "HMSET user firstname ? lastname ? age ?"), - equalTo(DB_OPERATION, "HMSET")))); + equalTo( + maybeStable(DB_STATEMENT), + "HMSET user firstname ? lastname ? age ?"), + equalTo(maybeStable(DB_OPERATION), "HMSET")))); } @Test @@ -254,8 +257,8 @@ void testHashGetallCommand() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "HGETALL TESTHM"), - equalTo(DB_OPERATION, "HGETALL")))); + equalTo(maybeStable(DB_STATEMENT), "HGETALL TESTHM"), + equalTo(maybeStable(DB_OPERATION), "HGETALL")))); } @Test @@ -274,8 +277,8 @@ void testDebugSegfaultCommandWithNoArgumentShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "DEBUG SEGFAULT"), - equalTo(DB_OPERATION, "DEBUG")))); + equalTo(maybeStable(DB_STATEMENT), "DEBUG SEGFAULT"), + equalTo(maybeStable(DB_OPERATION), "DEBUG")))); } @Test @@ -294,7 +297,7 @@ void testShutdownCommandShouldProduceSpan() { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SHUTDOWN NOSAVE"), - equalTo(DB_OPERATION, "SHUTDOWN")))); + equalTo(maybeStable(DB_STATEMENT), "SHUTDOWN NOSAVE"), + equalTo(maybeStable(DB_OPERATION), "SHUTDOWN")))); } } diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/build.gradle.kts b/instrumentation/lettuce/lettuce-5.1/javaagent/build.gradle.kts index d09af4df3a39..654a6172715d 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/build.gradle.kts +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/build.gradle.kts @@ -24,8 +24,16 @@ dependencies { } tasks { - test { + withType().configureEach { systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java index 4ce3f3c10786..4324b7cc1199 100644 --- a/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_1/LettuceReactiveClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_PORT; @@ -64,7 +65,7 @@ void testAsyncSubscriberWithSpecificThreadPool() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET a ?"))) + equalTo(maybeStable(DB_STATEMENT), "SET a ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -80,7 +81,7 @@ void testAsyncSubscriberWithSpecificThreadPool() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET a"))) + equalTo(maybeStable(DB_STATEMENT), "GET a"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/library/build.gradle.kts b/instrumentation/lettuce/lettuce-5.1/library/build.gradle.kts index f4e825b1d015..1ea17a553d5d 100644 --- a/instrumentation/lettuce/lettuce-5.1/library/build.gradle.kts +++ b/instrumentation/lettuce/lettuce-5.1/library/build.gradle.kts @@ -13,8 +13,16 @@ dependencies { } tasks { - test { + withType().configureEach { systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java index 80a47df80fd7..9a65d02a37f3 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceAsyncClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_PORT; @@ -166,7 +167,7 @@ void testSetCommandUsingFutureGetWithTimeout() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET TESTSETKEY ?"))) + equalTo(maybeStable(DB_STATEMENT), "SET TESTSETKEY ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -212,7 +213,7 @@ void testGetCommandChainedWithThenAccept() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET TESTKEY"))) + equalTo(maybeStable(DB_STATEMENT), "GET TESTKEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -291,7 +292,8 @@ void testGetNonExistentKeyCommandWithHandleAsyncAndChainedWithThenApply() throws equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET NON_EXISTENT_KEY"))) + equalTo( + maybeStable(DB_STATEMENT), "GET NON_EXISTENT_KEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -357,7 +359,7 @@ void testCommandWithNoArgumentsUsingBiconsumer() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"))) + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -418,7 +420,8 @@ void testHashSetAndThenNestApplyToHashGetall() throws Exception { equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), equalTo( - DB_STATEMENT, "HMSET TESTHM firstname ? lastname ? age ?"))) + maybeStable(DB_STATEMENT), + "HMSET TESTHM firstname ? lastname ? age ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end"))), @@ -435,7 +438,7 @@ void testHashSetAndThenNestApplyToHashGetall() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "HGETALL TESTHM"))) + equalTo(maybeStable(DB_STATEMENT), "HGETALL TESTHM"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java index 8c3d6fe2ebc5..93b20a87be7b 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceReactiveClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_PORT; @@ -104,7 +105,7 @@ void testSetCommandWithSubscribeOnDefinedConsumer() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET TESTSETKEY ?"))) + equalTo(maybeStable(DB_STATEMENT), "SET TESTSETKEY ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -143,7 +144,7 @@ void testGetCommandWithLambdaFunction() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET TESTKEY"))) + equalTo(maybeStable(DB_STATEMENT), "GET TESTKEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -193,7 +194,7 @@ void testGetNonExistentKeyCommand() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET NON_EXISTENT_KEY"))) + equalTo(maybeStable(DB_STATEMENT), "GET NON_EXISTENT_KEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -231,7 +232,7 @@ void testCommandWithNoArguments() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"))) + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -256,7 +257,7 @@ void testCommandFluxPublisher() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "COMMAND"))) + equalTo(maybeStable(DB_STATEMENT), "COMMAND"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -302,7 +303,7 @@ void testBlockingSubscriber() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET a ?"))) + equalTo(maybeStable(DB_STATEMENT), "SET a ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -318,7 +319,7 @@ void testBlockingSubscriber() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET a"))) + equalTo(maybeStable(DB_STATEMENT), "GET a"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -348,7 +349,7 @@ void testAsyncSubscriber() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET a ?"))) + equalTo(maybeStable(DB_STATEMENT), "SET a ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")), @@ -364,7 +365,7 @@ void testAsyncSubscriber() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET a"))) + equalTo(maybeStable(DB_STATEMENT), "GET a"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java index 6f169dd845b9..76a467798000 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientAuthTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS; @@ -81,7 +82,9 @@ void testAuthCommand() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "CLIENT SETINFO lib-name Lettuce")))), + equalTo( + maybeStable(DB_STATEMENT), + "CLIENT SETINFO lib-name Lettuce")))), trace -> trace.hasSpansSatisfyingExactly( span -> @@ -96,7 +99,7 @@ void testAuthCommand() throws Exception { equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), stringAssert -> stringAssert.startsWith("CLIENT SETINFO lib-ver"))))), trace -> @@ -112,7 +115,7 @@ void testAuthCommand() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "AUTH ?"))) + equalTo(maybeStable(DB_STATEMENT), "AUTH ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -133,7 +136,7 @@ void testAuthCommand() throws Exception { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "AUTH ?"))) + equalTo(maybeStable(DB_STATEMENT), "AUTH ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java index ed32af6d2b27..f09ec6b687c2 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceSyncClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_PEER_ADDRESS; @@ -130,7 +131,7 @@ void testSetCommand() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SET TESTSETKEY ?"))) + equalTo(maybeStable(DB_STATEMENT), "SET TESTSETKEY ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -156,7 +157,7 @@ void testGetCommand() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET TESTKEY"))) + equalTo(maybeStable(DB_STATEMENT), "GET TESTKEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -182,7 +183,7 @@ void testGetNonExistentKeyCommand() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "GET NON_EXISTENT_KEY"))) + equalTo(maybeStable(DB_STATEMENT), "GET NON_EXISTENT_KEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -208,7 +209,7 @@ void testCommandWithNoArguments() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "RANDOMKEY"))) + equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -244,7 +245,7 @@ void testListCommand() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, containerConnection.port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "LPUSH TESTLIST ?"))) + equalTo(maybeStable(DB_STATEMENT), "LPUSH TESTLIST ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -271,7 +272,8 @@ void testHashSetCommand() { equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), equalTo( - DB_STATEMENT, "HMSET user firstname ? lastname ? age ?"))) + maybeStable(DB_STATEMENT), + "HMSET user firstname ? lastname ? age ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -297,7 +299,7 @@ void testHashGetallCommand() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "HGETALL TESTHM"))) + equalTo(maybeStable(DB_STATEMENT), "HGETALL TESTHM"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -330,7 +332,9 @@ void testEvalCommand() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "EVAL " + b64Script + " 1 TESTLIST ? ?"))) + equalTo( + maybeStable(DB_STATEMENT), + "EVAL " + b64Script + " 1 TESTLIST ? ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -357,7 +361,7 @@ void testMsetCommand() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "MSET key1 ? key2 ?"))) + equalTo(maybeStable(DB_STATEMENT), "MSET key1 ? key2 ?"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end")))); @@ -387,7 +391,9 @@ void testDebugSegfaultCommandWithNoArgumentProducesNoSpan() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, containerConnection.port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "CLIENT SETINFO lib-name Lettuce")))), + equalTo( + maybeStable(DB_STATEMENT), + "CLIENT SETINFO lib-name Lettuce")))), trace -> trace.hasSpansSatisfyingExactly( span -> @@ -402,7 +408,7 @@ void testDebugSegfaultCommandWithNoArgumentProducesNoSpan() { equalTo(SERVER_PORT, containerConnection.port), equalTo(DB_SYSTEM, "redis"), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), stringAssert -> stringAssert.startsWith("CLIENT SETINFO lib-ver"))))), trace -> @@ -418,7 +424,7 @@ void testDebugSegfaultCommandWithNoArgumentProducesNoSpan() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, containerConnection.port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "DEBUG SEGFAULT"))))); + equalTo(maybeStable(DB_STATEMENT), "DEBUG SEGFAULT"))))); } else { testing() .waitAndAssertTraces( @@ -435,7 +441,7 @@ void testDebugSegfaultCommandWithNoArgumentProducesNoSpan() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, containerConnection.port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "DEBUG SEGFAULT"))) + equalTo(maybeStable(DB_STATEMENT), "DEBUG SEGFAULT"))) // these are no longer recorded since Lettuce 6.1.6 .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), @@ -475,7 +481,7 @@ void testShutdownCommandProducesNoSpan() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, containerConnection.port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SHUTDOWN NOSAVE")))); + equalTo(maybeStable(DB_STATEMENT), "SHUTDOWN NOSAVE")))); } else { trace.hasSpansSatisfyingExactly( span -> @@ -491,7 +497,7 @@ void testShutdownCommandProducesNoSpan() { equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, containerConnection.port), equalTo(DB_SYSTEM, "redis"), - equalTo(DB_STATEMENT, "SHUTDOWN NOSAVE"))) + equalTo(maybeStable(DB_STATEMENT), "SHUTDOWN NOSAVE"))) .hasEventsSatisfyingExactly( event -> event.hasName("redis.encode.start"), event -> event.hasName("redis.encode.end"))); diff --git a/instrumentation/mongo/mongo-3.1/javaagent/build.gradle.kts b/instrumentation/mongo/mongo-3.1/javaagent/build.gradle.kts index bdc5193e6396..6d5716d02711 100644 --- a/instrumentation/mongo/mongo-3.1/javaagent/build.gradle.kts +++ b/instrumentation/mongo/mongo-3.1/javaagent/build.gradle.kts @@ -24,7 +24,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/mongo/mongo-3.1/library/build.gradle.kts b/instrumentation/mongo/mongo-3.1/library/build.gradle.kts index 1504784c794e..c0376f9c0f11 100644 --- a/instrumentation/mongo/mongo-3.1/library/build.gradle.kts +++ b/instrumentation/mongo/mongo-3.1/library/build.gradle.kts @@ -13,7 +13,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java b/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java index 6890025d5c8a..75254966739e 100644 --- a/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java +++ b/instrumentation/mongo/mongo-3.1/library/src/main/java/io/opentelemetry/instrumentation/mongo/v3_1/MongoAttributesExtractor.java @@ -5,6 +5,8 @@ package io.opentelemetry.instrumentation.mongo.v3_1; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitOldDatabaseSemconv; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; import static java.util.Arrays.asList; import com.mongodb.event.CommandStartedEvent; @@ -19,6 +21,8 @@ class MongoAttributesExtractor implements AttributesExtractor { // copied from DbIncubatingAttributes + private static final AttributeKey DB_COLLECTION_NAME = + AttributeKey.stringKey("db.collection.name"); private static final AttributeKey DB_MONGODB_COLLECTION = AttributeKey.stringKey("db.mongodb.collection"); @@ -27,7 +31,12 @@ public void onStart( AttributesBuilder attributes, Context parentContext, CommandStartedEvent event) { String collectionName = collectionName(event); if (collectionName != null) { - attributes.put(DB_MONGODB_COLLECTION, collectionName); + if (emitStableDatabaseSemconv()) { + attributes.put(DB_COLLECTION_NAME, collectionName); + } + if (emitOldDatabaseSemconv()) { + attributes.put(DB_MONGODB_COLLECTION, collectionName); + } } } diff --git a/instrumentation/mongo/mongo-3.7/javaagent/build.gradle.kts b/instrumentation/mongo/mongo-3.7/javaagent/build.gradle.kts index 3122750cc2a6..f6b3d3495eed 100644 --- a/instrumentation/mongo/mongo-3.7/javaagent/build.gradle.kts +++ b/instrumentation/mongo/mongo-3.7/javaagent/build.gradle.kts @@ -34,7 +34,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/mongo/mongo-4.0/javaagent/build.gradle.kts b/instrumentation/mongo/mongo-4.0/javaagent/build.gradle.kts index 9a6e601aa4c0..4bda0767209f 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/build.gradle.kts +++ b/instrumentation/mongo/mongo-4.0/javaagent/build.gradle.kts @@ -28,7 +28,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/mongo/mongo-async-3.3/javaagent/build.gradle.kts b/instrumentation/mongo/mongo-async-3.3/javaagent/build.gradle.kts index 00d4e4ec237b..d33c2ae01465 100644 --- a/instrumentation/mongo/mongo-async-3.3/javaagent/build.gradle.kts +++ b/instrumentation/mongo/mongo-async-3.3/javaagent/build.gradle.kts @@ -25,7 +25,15 @@ dependencies { } tasks { - test { + withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/mongo/mongo-common/testing/src/main/java/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.java b/instrumentation/mongo/mongo-common/testing/src/main/java/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.java index 45114ee03084..f00cb317bc70 100644 --- a/instrumentation/mongo/mongo-common/testing/src/main/java/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.java +++ b/instrumentation/mongo/mongo-common/testing/src/main/java/io/opentelemetry/instrumentation/mongo/testing/AbstractMongoClientTest.java @@ -6,6 +6,8 @@ package io.opentelemetry.instrumentation.mongo.testing; import static io.opentelemetry.api.trace.SpanKind.CLIENT; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; @@ -528,14 +530,16 @@ void mongoSpan( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), satisfies( - DB_STATEMENT, + maybeStable(DB_STATEMENT), val -> val.satisfies( statement -> assertThat(statements).contains(statement.replaceAll(" ", "")))), equalTo(DB_SYSTEM, "mongodb"), - equalTo(DB_CONNECTION_STRING, "mongodb://localhost:" + port), - equalTo(DB_NAME, dbName), - equalTo(DB_OPERATION, operation), - equalTo(DB_MONGODB_COLLECTION, collection)); + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "mongodb://localhost:" + port), + equalTo(maybeStable(DB_NAME), dbName), + equalTo(maybeStable(DB_OPERATION), operation), + equalTo(maybeStable(DB_MONGODB_COLLECTION), collection)); } } diff --git a/instrumentation/opensearch/opensearch-rest-1.0/javaagent/build.gradle.kts b/instrumentation/opensearch/opensearch-rest-1.0/javaagent/build.gradle.kts index 460f5ec15e60..2d56124348a5 100644 --- a/instrumentation/opensearch/opensearch-rest-1.0/javaagent/build.gradle.kts +++ b/instrumentation/opensearch/opensearch-rest-1.0/javaagent/build.gradle.kts @@ -40,4 +40,12 @@ tasks { test { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java b/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java index 7cebcbb638bf..993ad7369e6d 100644 --- a/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java +++ b/instrumentation/opensearch/opensearch-rest-1.0/javaagent/src/test/java/OpenSearchRestTest.java @@ -3,6 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -102,8 +103,8 @@ void shouldGetStatusWithTraces() throws IOException { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "opensearch"), - equalTo(DB_OPERATION, "GET"), - equalTo(DB_STATEMENT, "GET _cluster/health")), + equalTo(maybeStable(DB_OPERATION), "GET"), + equalTo(maybeStable(DB_STATEMENT), "GET _cluster/health")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) @@ -167,8 +168,8 @@ public void onFailure(Exception e) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "opensearch"), - equalTo(DB_OPERATION, "GET"), - equalTo(DB_STATEMENT, "GET _cluster/health")), + equalTo(maybeStable(DB_OPERATION), "GET"), + equalTo(maybeStable(DB_STATEMENT), "GET _cluster/health")), span -> span.hasName("GET") .hasKind(SpanKind.CLIENT) diff --git a/instrumentation/r2dbc-1.0/javaagent/build.gradle.kts b/instrumentation/r2dbc-1.0/javaagent/build.gradle.kts index 7a652d5bc483..6c80b8f7aa1c 100644 --- a/instrumentation/r2dbc-1.0/javaagent/build.gradle.kts +++ b/instrumentation/r2dbc-1.0/javaagent/build.gradle.kts @@ -30,6 +30,16 @@ dependencies { testInstrumentation(project(":instrumentation:reactor:reactor-3.1:javaagent")) } -tasks.withType().configureEach { - usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) +tasks { + withType().configureEach { + usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/r2dbc-1.0/library/build.gradle.kts b/instrumentation/r2dbc-1.0/library/build.gradle.kts index 511b6354abd3..729385252749 100644 --- a/instrumentation/r2dbc-1.0/library/build.gradle.kts +++ b/instrumentation/r2dbc-1.0/library/build.gradle.kts @@ -10,6 +10,16 @@ dependencies { testImplementation(project(":instrumentation:reactor:reactor-3.1:library")) } -tasks.withType().configureEach { - usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) +tasks { + withType().configureEach { + usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java b/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java index 5f8a8e008113..16257cb55e95 100644 --- a/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java +++ b/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.instrumentation.r2dbc.v1_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; @@ -168,13 +170,15 @@ void testQueries(Parameter parameter) { .hasAttributesSatisfyingExactly( equalTo( DB_CONNECTION_STRING, - parameter.system + "://localhost:" + port), + emitStableDatabaseSemconv() + ? null + : parameter.system + "://localhost:" + port), equalTo(DB_SYSTEM, parameter.system), - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, parameter.expectedStatement), - equalTo(DB_OPERATION, parameter.operation), - equalTo(DB_SQL_TABLE, parameter.table), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), + equalTo(maybeStable(DB_STATEMENT), parameter.expectedStatement), + equalTo(maybeStable(DB_OPERATION), parameter.operation), + equalTo(maybeStable(DB_SQL_TABLE), parameter.table), equalTo(SERVER_ADDRESS, container.getHost()), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy b/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy index 5f6e10ab0acc..e81106cbdf84 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy +++ b/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy @@ -16,6 +16,7 @@ import scala.concurrent.duration.Duration import spock.lang.Shared import static io.opentelemetry.api.trace.SpanKind.CLIENT +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable class RediscalaClientTest extends AgentInstrumentationSpecification { @@ -91,7 +92,7 @@ class RediscalaClientTest extends AgentInstrumentationSpecification { kind CLIENT attributes { "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "$DbIncubatingAttributes.DB_OPERATION" "SET" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SET" } } } @@ -126,7 +127,7 @@ class RediscalaClientTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "$DbIncubatingAttributes.DB_OPERATION" "SET" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SET" } } span(2) { @@ -135,7 +136,7 @@ class RediscalaClientTest extends AgentInstrumentationSpecification { childOf span(0) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "$DbIncubatingAttributes.DB_OPERATION" "GET" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "GET" } } } diff --git a/instrumentation/redisson/redisson-3.17/javaagent/build.gradle.kts b/instrumentation/redisson/redisson-3.17/javaagent/build.gradle.kts index 6e255116700d..3eabc34c913b 100644 --- a/instrumentation/redisson/redisson-3.17/javaagent/build.gradle.kts +++ b/instrumentation/redisson/redisson-3.17/javaagent/build.gradle.kts @@ -25,15 +25,15 @@ dependencies { } tasks { - val testStableSemconv by registering(Test::class) { - jvmArgs("-Dotel.semconv-stability.opt-in=database") - } - withType().configureEach { systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean) usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testStableSemconv) } diff --git a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts index 79c30b7ff7f3..d15feefdcd05 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts +++ b/instrumentation/spring/spring-boot-autoconfigure/build.gradle.kts @@ -180,10 +180,6 @@ configurations.configureEach { } tasks { - check { - dependsOn(testing.suites) - } - compileTestJava { options.compilerArgs.add("-parameters") } @@ -215,4 +211,13 @@ tasks { withType(Jar::class) { from(sourceSets["javaSpring3"].output) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testing.suites) + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java index c25aefdc0da5..ffdd3c7d0181 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/test/java/io/opentelemetry/instrumentation/spring/autoconfigure/internal/instrumentation/r2dbc/R2DbcInstrumentationAutoConfigurationTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.spring.autoconfigure.internal.instrumentation.r2dbc; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import io.opentelemetry.api.OpenTelemetry; @@ -52,12 +53,13 @@ void statementSanitizerEnabledByDefault() { trace.hasSpansSatisfyingExactly( span -> span.hasAttribute( - DB_STATEMENT, + maybeStable(DB_STATEMENT), "CREATE TABLE IF NOT EXISTS player(id INT NOT NULL AUTO_INCREMENT, name VARCHAR(?), age INT, PRIMARY KEY (id))")), trace -> trace.hasSpansSatisfyingExactly( span -> - span.hasAttribute(DB_STATEMENT, "SELECT * FROM player WHERE id = ?"))); + span.hasAttribute( + maybeStable(DB_STATEMENT), "SELECT * FROM player WHERE id = ?"))); }); } } diff --git a/instrumentation/spring/spring-data/spring-data-1.8/javaagent/build.gradle.kts b/instrumentation/spring/spring-data/spring-data-1.8/javaagent/build.gradle.kts index d5d7900af243..666568cfcc12 100644 --- a/instrumentation/spring/spring-data/spring-data-1.8/javaagent/build.gradle.kts +++ b/instrumentation/spring/spring-data/spring-data-1.8/javaagent/build.gradle.kts @@ -46,10 +46,18 @@ dependencies { } tasks { - test { + withType().configureEach { jvmArgs("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED") jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/spring/spring-data/spring-data-3.0/testing/build.gradle.kts b/instrumentation/spring/spring-data/spring-data-3.0/testing/build.gradle.kts index d1cdb1a3b60a..ea8f4549deb6 100644 --- a/instrumentation/spring/spring-data/spring-data-3.0/testing/build.gradle.kts +++ b/instrumentation/spring/spring-data/spring-data-3.0/testing/build.gradle.kts @@ -42,14 +42,19 @@ testing { } tasks { - test { + withType().configureEach { jvmArgs("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED") jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true") } + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + check { dependsOn(testing.suites) + dependsOn(testStableSemconv) } } diff --git a/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java b/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java index d5eb076edefa..06f7cc67309d 100644 --- a/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java +++ b/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.spring.data.v3_0; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -82,12 +84,14 @@ void testFindAll() { .isLessThanOrEqualTo(trace.getSpan(1).getEndEpochNanos())) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "h2"), - equalTo(DB_NAME, "db"), - equalTo(DB_USER, "sa"), - equalTo(DB_STATEMENT, "SELECT CUSTOMER.* FROM CUSTOMER"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "CUSTOMER"), - equalTo(DB_CONNECTION_STRING, "h2:mem://localhost"), + equalTo(maybeStable(DB_NAME), "db"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(maybeStable(DB_STATEMENT), "SELECT CUSTOMER.* FROM CUSTOMER"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "CUSTOMER"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "h2:mem://localhost"), equalTo(SERVER_ADDRESS, "localhost")))); } } diff --git a/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/data/AbstractSpringJpaTest.java b/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/data/AbstractSpringJpaTest.java index 06a2159168cd..ec329846d155 100644 --- a/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/data/AbstractSpringJpaTest.java +++ b/instrumentation/spring/spring-data/spring-data-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/data/AbstractSpringJpaTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.spring.data; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CONNECTION_STRING; @@ -89,12 +91,13 @@ static void assertHibernate4Trace(TraceAssert trace, String repoClassName) { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("insert ")), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "JpaCustomer"))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("insert ")), + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer"))); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -111,23 +114,26 @@ static void assertHibernateTrace(TraceAssert trace, String repoClassName) { .hasKind(SpanKind.CLIENT) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("call next value for ")), - equalTo(DB_OPERATION, "CALL")), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DB_STATEMENT), val -> val.startsWith("call next value for ")), + equalTo(maybeStable(DB_OPERATION), "CALL")), span -> span.hasName("INSERT test.JpaCustomer") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("insert ")), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "JpaCustomer"))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("insert ")), + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer"))); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -157,12 +163,14 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "JpaCustomer")))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")))); clearData(); repo.save(customer); @@ -193,24 +201,28 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "JpaCustomer")), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")), span -> span.hasName("UPDATE test.JpaCustomer") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("update ")), - equalTo(DB_OPERATION, "UPDATE"), - equalTo(DB_SQL_TABLE, "JpaCustomer")))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("update ")), + equalTo(maybeStable(DB_OPERATION), "UPDATE"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")))); clearData(); customer = findByLastName(repo, "Anonymous").get(0); @@ -229,12 +241,14 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "JpaCustomer")))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")))); clearData(); repo.delete(customer); @@ -253,24 +267,28 @@ void testCrud() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "JpaCustomer")), + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")), span -> span.hasName("DELETE test.JpaCustomer") .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("delete ")), - equalTo(DB_OPERATION, "DELETE"), - equalTo(DB_SQL_TABLE, "JpaCustomer")))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("delete ")), + equalTo(maybeStable(DB_OPERATION), "DELETE"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")))); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -298,12 +316,14 @@ void testCustomRepositoryMethod() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "JpaCustomer")))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")))); } @SuppressWarnings("deprecation") // TODO DB_CONNECTION_STRING deprecation @@ -343,11 +363,13 @@ void testFailedRepositoryMethod() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(DB_SYSTEM, "hsqldb"), - equalTo(DB_NAME, "test"), - equalTo(DB_USER, "sa"), - equalTo(DB_CONNECTION_STRING, "hsqldb:mem:"), - satisfies(DB_STATEMENT, val -> val.startsWith("select ")), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "JpaCustomer")))); + equalTo(maybeStable(DB_NAME), "test"), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies(maybeStable(DB_STATEMENT), val -> val.startsWith("select ")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "JpaCustomer")))); } } diff --git a/instrumentation/spymemcached-2.12/javaagent/build.gradle.kts b/instrumentation/spymemcached-2.12/javaagent/build.gradle.kts index 3618eb930772..0f3c5a4ff953 100644 --- a/instrumentation/spymemcached-2.12/javaagent/build.gradle.kts +++ b/instrumentation/spymemcached-2.12/javaagent/build.gradle.kts @@ -20,8 +20,18 @@ dependencies { testImplementation("com.google.guava:guava") } -tasks.withType().configureEach { - // TODO run tests both with and without experimental span attributes - jvmArgs("-Dotel.instrumentation.spymemcached.experimental-span-attributes=true") - usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) +tasks { + withType().configureEach { + // TODO run tests both with and without experimental span attributes + jvmArgs("-Dotel.instrumentation.spymemcached.experimental-span-attributes=true") + usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) + } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } diff --git a/instrumentation/spymemcached-2.12/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spymemcached/SpymemcachedTest.java b/instrumentation/spymemcached-2.12/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spymemcached/SpymemcachedTest.java index dfbc7e3d7720..3847c23c7b3e 100644 --- a/instrumentation/spymemcached-2.12/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spymemcached/SpymemcachedTest.java +++ b/instrumentation/spymemcached-2.12/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spymemcached/SpymemcachedTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.booleanKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE; @@ -148,7 +149,7 @@ void getHit() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "hit")))); } @@ -170,7 +171,7 @@ void getMiss() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "miss")))); } @@ -205,7 +206,7 @@ void getCancel() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(booleanKey("spymemcached.command.cancelled"), true)))); } @@ -260,7 +261,7 @@ void getTimeout() throws InterruptedException { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get")))); + equalTo(maybeStable(DB_OPERATION), "get")))); } @Test @@ -288,7 +289,7 @@ void bulkGet() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "getBulk")))); + equalTo(maybeStable(DB_OPERATION), "getBulk")))); } @Test @@ -312,7 +313,7 @@ void set() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "set")))); + equalTo(maybeStable(DB_OPERATION), "set")))); } @Test @@ -348,7 +349,7 @@ void setCancel() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "set"), + equalTo(maybeStable(DB_OPERATION), "set"), equalTo(booleanKey("spymemcached.command.cancelled"), true)))); } @@ -374,7 +375,7 @@ void add() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "add")), + equalTo(maybeStable(DB_OPERATION), "add")), span -> span.hasName("get") .hasKind(SpanKind.CLIENT) @@ -383,7 +384,7 @@ void add() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "hit")))); } @@ -410,7 +411,7 @@ void secondAdd() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "add")), + equalTo(maybeStable(DB_OPERATION), "add")), span -> span.hasName("add") .hasKind(SpanKind.CLIENT) @@ -419,7 +420,7 @@ void secondAdd() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "add")))); + equalTo(maybeStable(DB_OPERATION), "add")))); } @Test @@ -444,7 +445,7 @@ void delete() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "delete")), + equalTo(maybeStable(DB_OPERATION), "delete")), span -> span.hasName("get") .hasKind(SpanKind.CLIENT) @@ -453,7 +454,7 @@ void delete() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "miss")))); } @@ -478,7 +479,7 @@ void deleteNonExistent() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "delete")))); + equalTo(maybeStable(DB_OPERATION), "delete")))); } @Test @@ -504,7 +505,7 @@ void replace() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "replace")), + equalTo(maybeStable(DB_OPERATION), "replace")), span -> span.hasName("get") .hasKind(SpanKind.CLIENT) @@ -513,7 +514,7 @@ void replace() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "hit")))); } @@ -542,7 +543,7 @@ void replaceNonExistent() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "replace")))); + equalTo(maybeStable(DB_OPERATION), "replace")))); } @Test @@ -569,7 +570,7 @@ void append() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "gets")), + equalTo(maybeStable(DB_OPERATION), "gets")), span -> span.hasName("append") .hasKind(SpanKind.CLIENT) @@ -578,7 +579,7 @@ void append() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "append")), + equalTo(maybeStable(DB_OPERATION), "append")), span -> span.hasName("get") .hasKind(SpanKind.CLIENT) @@ -587,7 +588,7 @@ void append() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "hit")))); } @@ -615,7 +616,7 @@ void prepend() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "gets")), + equalTo(maybeStable(DB_OPERATION), "gets")), span -> span.hasName("prepend") .hasKind(SpanKind.CLIENT) @@ -624,7 +625,7 @@ void prepend() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "prepend")), + equalTo(maybeStable(DB_OPERATION), "prepend")), span -> span.hasName("get") .hasKind(SpanKind.CLIENT) @@ -633,7 +634,7 @@ void prepend() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "hit")))); } @@ -661,7 +662,7 @@ void cas() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "gets")), + equalTo(maybeStable(DB_OPERATION), "gets")), span -> span.hasName("cas") .hasKind(SpanKind.CLIENT) @@ -670,7 +671,7 @@ void cas() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "cas")))); + equalTo(maybeStable(DB_OPERATION), "cas")))); } @Test @@ -696,7 +697,7 @@ void casNotFound() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "cas")))); + equalTo(maybeStable(DB_OPERATION), "cas")))); } @Test @@ -720,7 +721,7 @@ void touch() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "touch")))); + equalTo(maybeStable(DB_OPERATION), "touch")))); } @Test @@ -745,7 +746,7 @@ void touchNonExistent() throws Exception { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "touch")))); + equalTo(maybeStable(DB_OPERATION), "touch")))); } @Test @@ -770,7 +771,7 @@ void getAndTouch() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "getAndTouch")))); + equalTo(maybeStable(DB_OPERATION), "getAndTouch")))); } @Test @@ -795,7 +796,7 @@ void getAndTouchNonExistent() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "getAndTouch")))); + equalTo(maybeStable(DB_OPERATION), "getAndTouch")))); } @Test @@ -824,7 +825,7 @@ it needs values to be strings (with digits in them) and it returns actual long f equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "decr")), + equalTo(maybeStable(DB_OPERATION), "decr")), span -> span.hasName("get") .hasKind(SpanKind.CLIENT) @@ -833,7 +834,7 @@ it needs values to be strings (with digits in them) and it returns actual long f equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "hit")))); } @@ -858,7 +859,7 @@ void decrNonExistent() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "decr")))); + equalTo(maybeStable(DB_OPERATION), "decr")))); } @Test @@ -881,7 +882,7 @@ void decrException() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "decr")))); + equalTo(maybeStable(DB_OPERATION), "decr")))); } @Test @@ -910,7 +911,7 @@ it needs values to be strings (with digits in them) and it returns actual long f equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "incr")), + equalTo(maybeStable(DB_OPERATION), "incr")), span -> span.hasName("get") .hasKind(SpanKind.CLIENT) @@ -919,7 +920,7 @@ it needs values to be strings (with digits in them) and it returns actual long f equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "get"), + equalTo(maybeStable(DB_OPERATION), "get"), equalTo(stringKey("spymemcached.result"), "hit")))); } @@ -944,7 +945,7 @@ void incrNonExistent() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "incr")))); + equalTo(maybeStable(DB_OPERATION), "incr")))); } @Test @@ -967,7 +968,7 @@ void incrException() { equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.MEMCACHED), - equalTo(DB_OPERATION, "incr")))); + equalTo(maybeStable(DB_OPERATION), "incr")))); } private static String key(String k) { diff --git a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy index 7e776c9ab177..bcb75491eefc 100644 --- a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy +++ b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/latestDepTest/groovy/VertxReactivePropagationTest.groovy @@ -9,13 +9,13 @@ import io.opentelemetry.api.trace.SpanKind import io.opentelemetry.context.Context import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification import io.opentelemetry.instrumentation.test.utils.PortUtils -import io.opentelemetry.semconv.incubating.DbIncubatingAttributes -import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.ClientAttributes -import io.opentelemetry.semconv.UserAgentAttributes import io.opentelemetry.semconv.HttpAttributes import io.opentelemetry.semconv.NetworkAttributes +import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.UrlAttributes +import io.opentelemetry.semconv.UserAgentAttributes +import io.opentelemetry.semconv.incubating.DbIncubatingAttributes import io.opentelemetry.testing.internal.armeria.client.WebClient import io.opentelemetry.testing.internal.armeria.common.HttpRequest import io.opentelemetry.testing.internal.armeria.common.HttpRequestBuilder @@ -29,6 +29,8 @@ import static VertxReactiveWebServer.TEST_REQUEST_ID_ATTRIBUTE import static VertxReactiveWebServer.TEST_REQUEST_ID_PARAMETER import static io.opentelemetry.api.trace.SpanKind.CLIENT import static io.opentelemetry.api.trace.SpanKind.SERVER +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS class VertxReactivePropagationTest extends AgentInstrumentationSpecification { @@ -99,12 +101,12 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf span(2) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "SA" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" "SELECT id, name, price, weight FROM products" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "products" } } } @@ -199,12 +201,12 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf(span(3)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id AS request$requestId, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "SA" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" "SELECT id AS request$requestId, name, price, weight FROM products" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "products" } } } diff --git a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy index 9490912c8f93..51cf2101432f 100644 --- a/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy +++ b/instrumentation/vertx/vertx-rx-java-3.5/javaagent/src/version35Test/groovy/VertxReactivePropagationTest.groovy @@ -9,13 +9,13 @@ import io.opentelemetry.api.trace.SpanKind import io.opentelemetry.context.Context import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification import io.opentelemetry.instrumentation.test.utils.PortUtils -import io.opentelemetry.semconv.incubating.DbIncubatingAttributes -import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.ClientAttributes -import io.opentelemetry.semconv.UserAgentAttributes import io.opentelemetry.semconv.HttpAttributes import io.opentelemetry.semconv.NetworkAttributes +import io.opentelemetry.semconv.ServerAttributes import io.opentelemetry.semconv.UrlAttributes +import io.opentelemetry.semconv.UserAgentAttributes +import io.opentelemetry.semconv.incubating.DbIncubatingAttributes import io.opentelemetry.testing.internal.armeria.client.WebClient import io.opentelemetry.testing.internal.armeria.common.HttpRequest import io.opentelemetry.testing.internal.armeria.common.HttpRequestBuilder @@ -29,6 +29,8 @@ import static VertxReactiveWebServer.TEST_REQUEST_ID_ATTRIBUTE import static VertxReactiveWebServer.TEST_REQUEST_ID_PARAMETER import static io.opentelemetry.api.trace.SpanKind.CLIENT import static io.opentelemetry.api.trace.SpanKind.SERVER +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS class VertxReactivePropagationTest extends AgentInstrumentationSpecification { @@ -99,12 +101,12 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf span(2) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "SA" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" "SELECT id, name, price, weight FROM products" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "products" } } } @@ -198,12 +200,12 @@ class VertxReactivePropagationTest extends AgentInstrumentationSpecification { childOf(span(3)) attributes { "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "$DbIncubatingAttributes.DB_NAME" "test" - "$DbIncubatingAttributes.DB_USER" "SA" - "$DbIncubatingAttributes.DB_CONNECTION_STRING" "hsqldb:mem:" - "$DbIncubatingAttributes.DB_STATEMENT" "SELECT id AS request$requestId, name, price, weight FROM products" - "$DbIncubatingAttributes.DB_OPERATION" "SELECT" - "$DbIncubatingAttributes.DB_SQL_TABLE" "products" + "${maybeStable(DbIncubatingAttributes.DB_NAME)}" "test" + "$DbIncubatingAttributes.DB_USER" emitStableDatabaseSemconv() ? null : "SA" + "$DbIncubatingAttributes.DB_CONNECTION_STRING" emitStableDatabaseSemconv() ? null : "hsqldb:mem:" + "${maybeStable(DbIncubatingAttributes.DB_STATEMENT)}" "SELECT id AS request$requestId, name, price, weight FROM products" + "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SELECT" + "${maybeStable(DbIncubatingAttributes.DB_SQL_TABLE)}" "products" } } } diff --git a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/build.gradle.kts b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/build.gradle.kts index d28083b74749..eff4457a3eec 100644 --- a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/build.gradle.kts +++ b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/build.gradle.kts @@ -25,6 +25,14 @@ tasks { withType().configureEach { usesService(gradle.sharedServices.registrations["testcontainersBuildService"].service) } + + val testStableSemconv by registering(Test::class) { + jvmArgs("-Dotel.semconv-stability.opt-in=database") + } + + check { + dependsOn(testStableSemconv) + } } val latestDepTest = findProperty("testLatestDeps") as Boolean diff --git a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java index 7b8a6d3de97a..5b30c2efe62f 100644 --- a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java +++ b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.vertx.v4_0.sql; +import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; +import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE; @@ -138,11 +140,11 @@ void testSimpleSelect() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), + equalTo(maybeStable(DB_STATEMENT), "select * from test"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -194,9 +196,9 @@ void testInvalidQuery() throws Exception { EXCEPTION_STACKTRACE, val -> val.isInstanceOf(String.class)))) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "invalid"), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), + equalTo(maybeStable(DB_STATEMENT), "invalid"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -228,11 +230,11 @@ private static void assertPreparedSelect() { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test where id = $1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), + equalTo(maybeStable(DB_STATEMENT), "select * from test where id = $1"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -258,11 +260,13 @@ void testBatch() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "insert into test values ($1, $2) returning *"), - equalTo(DB_OPERATION, "INSERT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), + equalTo( + maybeStable(DB_STATEMENT), + "insert into test values ($1, $2) returning *"), + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -344,11 +348,11 @@ void testManyQueries() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), + equalTo(maybeStable(DB_STATEMENT), "select * from test"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -409,11 +413,12 @@ void testConcurrency() throws Exception { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DB_NAME, DB), - equalTo(DB_USER, USER_DB), - equalTo(DB_STATEMENT, "select * from test where id = $1"), - equalTo(DB_OPERATION, "SELECT"), - equalTo(DB_SQL_TABLE, "test"), + equalTo(maybeStable(DB_NAME), DB), + equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), + equalTo( + maybeStable(DB_STATEMENT), "select * from test where id = $1"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "test"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span ->