From dce4b2e8e45d3797d26e7d145e8d050179d9a3d0 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Thu, 21 Nov 2024 11:20:42 +0800 Subject: [PATCH 1/7] add springjpa test --- .../test/java/spring/jpa/SpringJpaTest.java | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java new file mode 100644 index 000000000000..cc3070f44ced --- /dev/null +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java @@ -0,0 +1,131 @@ +package spring.jpa; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification; +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; +import java.util.concurrent.atomic.AtomicReference; +import org.hibernate.Version; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import spring.jpa.Customer; +import spring.jpa.CustomerRepository; +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; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SpringJpaTest { + @RegisterExtension + static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + + private static AnnotationConfigApplicationContext context; + private static CustomerRepository repo; + + @BeforeAll + static void setUp() { + context = new AnnotationConfigApplicationContext(PersistenceConfig.class); + repo = context.getBean(CustomerRepository.class); + } + + @AfterAll + static void tearDown() { + if (context != null) { + context.close(); + } + } + + @Test + public void testCRUD() { + boolean isHibernate4 = Version.getVersionString().startsWith("4."); + final Customer customer = new Customer("Bob", "Anonymous"); + + assertNull(customer.getId()); + assertFalse(testing.runWithSpan("parent", () -> repo.findAll().iterator().hasNext())); + + AtomicReference sessionId = new AtomicReference<>(); + testing.waitAndAssertTraces( + trace -> trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()), + span -> + span.hasName("SELECT spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies(AttributeKey.stringKey("hibernate.session_id"), + val -> { + sessionId.set(String.valueOf(val)); + val.isInstanceOf(String.class); + } + )), + span -> + span.hasName("SELECT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM,"hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME),"test"), + equalTo(DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), + equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DbIncubatingAttributes.DB_STATEMENT), "select ... from Customer ..."), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), + equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer") + ), + span -> span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo(AttributeKey.stringKey("hibernate.session_id"),sessionId.get()) + ) + )); + + testing.clearData(); + + testing.runWithSpan("parent", () -> repo.save(customer)); + Long savedId = customer.getId(); + + assertNotNull(customer.getId()); + String sessionId2 = null; + // todo assert + testing.clearData(); + + + customer.setFirstName("Bill"); + testing.runWithSpan("parent", () -> repo.save(customer)); + + assertEquals(customer.getId(), savedId); + String sessionId3 = null; + // todo assert + testing.clearData(); + Customer customer1 = testing.runWithSpan("parent", + () -> repo.findByLastName("Anonymous").get(0)); + + + assertEquals(savedId, customer1.getId() ); + assertEquals("Bill", customer1.getFirstName()); + // todo assert + testing.clearData(); + + testing.runWithSpan("parent", () -> repo.delete(customer1)); + + //todo assert + } +} From e81da35b36e7add1c0419f8471895bc4472bd5c3 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Thu, 21 Nov 2024 11:34:28 +0800 Subject: [PATCH 2/7] fix compile --- .../test/java/spring/jpa/SpringJpaTest.java | 128 ++++++++++-------- 1 file changed, 68 insertions(+), 60 deletions(-) diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java index cc3070f44ced..edcbbb9c87cb 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java @@ -1,8 +1,23 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package spring.jpa; +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 org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; @@ -13,23 +28,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import spring.jpa.Customer; -import spring.jpa.CustomerRepository; -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; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -class SpringJpaTest { +class SpringJpaTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); @@ -49,53 +49,63 @@ static void tearDown() { } } + @SuppressWarnings({ + "deprecation", + "UnusedVariable" + }) // DbIncubatingAttributes.DB_NAME has been deprecated @Test public void testCRUD() { boolean isHibernate4 = Version.getVersionString().startsWith("4."); - final Customer customer = new Customer("Bob", "Anonymous"); + Customer customer = new Customer("Bob", "Anonymous"); assertNull(customer.getId()); assertFalse(testing.runWithSpan("parent", () -> repo.findAll().iterator().hasNext())); - AtomicReference sessionId = new AtomicReference<>(); + AtomicReference sessionId = new AtomicReference<>(); testing.waitAndAssertTraces( - trace -> trace.hasSpansSatisfyingExactly( - span -> - span.hasName("parent") - .hasKind(INTERNAL) - .hasNoParent() - .hasAttributes(Attributes.empty()), - span -> - span.hasName("SELECT spring.jpa.Customer") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - satisfies(AttributeKey.stringKey("hibernate.session_id"), - val -> { - sessionId.set(String.valueOf(val)); - val.isInstanceOf(String.class); - } - )), - span -> - span.hasName("SELECT test.Customer") - .hasKind(CLIENT) - .hasParent(trace.getSpan(1)) + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()), + span -> + span.hasName("SELECT spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM,"hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME),"test"), - equalTo(DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), - equalTo(DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - equalTo(maybeStable(DbIncubatingAttributes.DB_STATEMENT), "select ... from Customer ..."), + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> { + sessionId.set(String.valueOf(val)); + val.isInstanceOf(String.class); + })), + span -> + span.hasName("SELECT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + "select ... from Customer ..."), equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), - equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer") - ), - span -> span.hasName("Transaction.commit") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - equalTo(AttributeKey.stringKey("hibernate.session_id"),sessionId.get()) - ) - )); + equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")), + span -> + span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + AttributeKey.stringKey("hibernate.session_id"), sessionId.get())))); testing.clearData(); @@ -107,7 +117,6 @@ public void testCRUD() { // todo assert testing.clearData(); - customer.setFirstName("Bill"); testing.runWithSpan("parent", () -> repo.save(customer)); @@ -115,17 +124,16 @@ public void testCRUD() { String sessionId3 = null; // todo assert testing.clearData(); - Customer customer1 = testing.runWithSpan("parent", - () -> repo.findByLastName("Anonymous").get(0)); - + Customer customer1 = + testing.runWithSpan("parent", () -> repo.findByLastName("Anonymous").get(0)); - assertEquals(savedId, customer1.getId() ); + assertEquals(savedId, customer1.getId()); assertEquals("Bill", customer1.getFirstName()); // todo assert testing.clearData(); testing.runWithSpan("parent", () -> repo.delete(customer1)); - //todo assert + // todo assert } } From 499d8dbcc179f0f2d341d354471557c06fa89030 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Mon, 25 Nov 2024 21:02:29 +0800 Subject: [PATCH 3/7] finish hibernate 6.0 test --- .../src/test/groovy/SpringJpaTest.groovy | 388 ------------------ .../test/java/spring/jpa/SpringJpaTest.java | 378 +++++++++++++++-- 2 files changed, 355 insertions(+), 411 deletions(-) delete mode 100644 instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy 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 deleted file mode 100644 index d0ffa8c6c36f..000000000000 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/groovy/SpringJpaTest.groovy +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import io.opentelemetry.instrumentation.test.AgentInstrumentationSpecification -import io.opentelemetry.semconv.incubating.DbIncubatingAttributes -import org.hibernate.Version -import org.springframework.context.annotation.AnnotationConfigApplicationContext -import spock.lang.Shared -import spring.jpa.Customer -import spring.jpa.CustomerRepository -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 { - - @Shared - def context = new AnnotationConfigApplicationContext(PersistenceConfig) - - @Shared - def repo = context.getBean(CustomerRepository) - - @SuppressWarnings("deprecation") // TODO DbIncubatingAttributes.DB_CONNECTION_STRING deprecation - def "test CRUD"() { - setup: - def isHibernate4 = Version.getVersionString().startsWith("4.") - def customer = new Customer("Bob", "Anonymous") - - expect: - customer.id == null - !runWithSpan("parent") { - repo.findAll().iterator().hasNext() - } - - def sessionId - assertTraces(1) { - trace(0, 4) { - span(0) { - name "parent" - kind INTERNAL - hasNoParent() - attributes { - } - } - span(1) { - name "SELECT spring.jpa.Customer" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" { - sessionId = it - it instanceof String - } - } - } - span(2) { - name "SELECT test.Customer" - kind CLIENT - childOf span(1) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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) { - name "Transaction.commit" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" sessionId - } - } - } - } - clearExportedData() - - when: - runWithSpan("parent") { - repo.save(customer) - } - def savedId = customer.id - - then: - customer.id != null - def sessionId2 - assertTraces(1) { - trace(0, 4 + (isHibernate4 ? 0 : 1)) { - span(0) { - name "parent" - kind INTERNAL - hasNoParent() - attributes { - } - } - span(1) { - name "Session.persist spring.jpa.Customer" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" { - sessionId2 = it - it instanceof String - } - } - } - if (!isHibernate4) { - span(2) { - name "CALL test" - kind CLIENT - childOf span(1) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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) { - name "Transaction.commit" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" sessionId2 - } - } - span(4) { - name "INSERT test.Customer" - kind CLIENT - childOf span(3) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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 { - span(2) { - name "INSERT test.Customer" - kind CLIENT - childOf span(1) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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) { - name "Transaction.commit" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" sessionId2 - } - } - } - } - } - clearExportedData() - - when: - customer.firstName = "Bill" - runWithSpan("parent") { - repo.save(customer) - } - - then: - customer.id == savedId - def sessionId3 - assertTraces(1) { - trace(0, 5) { - span(0) { - name "parent" - kind INTERNAL - hasNoParent() - attributes { - } - } - span(1) { - name "Session.merge spring.jpa.Customer" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" { - sessionId3 = it - it instanceof String - } - } - } - span(2) { - name "SELECT test.Customer" - kind CLIENT - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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) { - name "Transaction.commit" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" sessionId3 - } - } - span(4) { - name "UPDATE test.Customer" - kind CLIENT - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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" - } - } - } - } - clearExportedData() - - when: - customer = runWithSpan("parent") { - repo.findByLastName("Anonymous")[0] - } - - then: - customer.id == savedId - customer.firstName == "Bill" - assertTraces(1) { - trace(0, 3) { - span(0) { - name "parent" - kind INTERNAL - hasNoParent() - attributes { - } - } - span(1) { - name { it == "SELECT spring.jpa.Customer" || it == "Hibernate Query" } - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" String - } - } - span(2) { - name "SELECT test.Customer" - kind CLIENT - childOf span(1) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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" - } - } - } - } - clearExportedData() - - when: - runWithSpan("parent") { - repo.delete(customer) - } - - then: - assertTraces(1) { - trace(0, 6 + (isHibernate4 ? 0 : 1)) { - span(0) { - name "parent" - kind INTERNAL - hasNoParent() - attributes { - } - } - def offset = 0 - if (!isHibernate4) { - offset = 2 - span(1) { - name ~/Session.(get|find) spring.jpa.Customer/ - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" String - } - } - span(2) { - name "SELECT test.Customer" - kind CLIENT - childOf span(1) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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(1 + offset) { - name "Session.merge spring.jpa.Customer" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" String - } - } - if (isHibernate4) { - offset = 1 - span(2) { - name "SELECT test.Customer" - kind CLIENT - childOf span(1) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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(2 + offset) { - name "Session.delete spring.jpa.Customer" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" String - } - } - span(3 + offset) { - name "Transaction.commit" - kind INTERNAL - childOf span(0) - attributes { - "hibernate.session_id" String - } - } - span(4 + offset) { - name "DELETE test.Customer" - kind CLIENT - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "hsqldb" - "${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-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java index edcbbb9c87cb..537796d2628b 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java @@ -5,12 +5,15 @@ package spring.jpa; +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 java.util.Arrays.asList; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -20,8 +23,11 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; -import java.util.concurrent.atomic.AtomicReference; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; import org.hibernate.Version; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -49,10 +55,7 @@ static void tearDown() { } } - @SuppressWarnings({ - "deprecation", - "UnusedVariable" - }) // DbIncubatingAttributes.DB_NAME has been deprecated + @SuppressWarnings("deprecation") // DbIncubatingAttributes.DB_NAME has been deprecated @Test public void testCRUD() { boolean isHibernate4 = Version.getVersionString().startsWith("4."); @@ -61,7 +64,6 @@ public void testCRUD() { assertNull(customer.getId()); assertFalse(testing.runWithSpan("parent", () -> repo.findAll().iterator().hasNext())); - AtomicReference sessionId = new AtomicReference<>(); testing.waitAndAssertTraces( trace -> trace.hasSpansSatisfyingExactly( @@ -77,10 +79,7 @@ public void testCRUD() { .hasAttributesSatisfyingExactly( satisfies( AttributeKey.stringKey("hibernate.session_id"), - val -> { - sessionId.set(String.valueOf(val)); - val.isInstanceOf(String.class); - })), + val -> val.isInstanceOf(String.class))), span -> span.hasName("SELECT test.Customer") .hasKind(CLIENT) @@ -94,9 +93,11 @@ public void testCRUD() { equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - equalTo( + satisfies( maybeStable(DbIncubatingAttributes.DB_STATEMENT), - "select ... from Customer ..."), + val -> + val.matches( + "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName(.*)from Customer(.*)")), equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")), span -> @@ -105,7 +106,11 @@ public void testCRUD() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo( - AttributeKey.stringKey("hibernate.session_id"), sessionId.get())))); + AttributeKey.stringKey("hibernate.session_id"), + trace + .getSpan(1) + .getAttributes() + .get(stringKey("hibernate.session_id")))))); testing.clearData(); @@ -113,27 +118,354 @@ public void testCRUD() { Long savedId = customer.getId(); assertNotNull(customer.getId()); - String sessionId2 = null; - // todo assert + testing.waitAndAssertTraces( + trace -> { + List> consumers = + new ArrayList<>( + asList( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()), + span -> + span.hasName("Session.persist spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class))))); + if (!isHibernate4) { + consumers.addAll( + asList( + span -> + span.hasName("CALL test") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + "call next value for Customer_SEQ"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "CALL")), + span -> + span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + AttributeKey.stringKey("hibernate.session_id"), + trace + .getSpan(1) + .getAttributes() + .get(stringKey("hibernate.session_id")))), + span -> + span.hasName("INSERT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(3)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + val -> + val.matches( + "insert into Customer \\(.*\\) values \\(.*\\)")), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "INSERT"), + equalTo( + maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), + "Customer")))); + + } else { + consumers.addAll( + asList( + span -> + span.hasName("INSERT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + val -> + val.matches( + "insert into Customer \\(.*\\) values \\(.*\\)")), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "INSERT"), + equalTo( + maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")), + span -> + span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + AttributeKey.stringKey("hibernate.session_id"), + trace + .getSpan(1) + .getAttributes() + .get(stringKey("hibernate.session_id")))))); + } + trace.hasSpansSatisfyingExactly(consumers); + }); + testing.clearData(); customer.setFirstName("Bill"); testing.runWithSpan("parent", () -> repo.save(customer)); assertEquals(customer.getId(), savedId); - String sessionId3 = null; - // todo assert + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()), + span -> + span.hasName("Session.merge spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class))), + span -> + span.hasName("SELECT test.Customer") + .hasKind(CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + val -> + val.matches( + "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)where ([^.]+)\\.id( ?)=( ?)\\?")), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), + equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")), + span -> + span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + AttributeKey.stringKey("hibernate.session_id"), + trace + .getSpan(1) + .getAttributes() + .get(stringKey("hibernate.session_id")))), + span -> + span.hasName("UPDATE test.Customer") + .hasKind(CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + val -> + val.matches( + "update Customer set firstName=\\?,(.*)lastName=\\? where id=\\?")), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "UPDATE"), + equalTo( + maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")))); testing.clearData(); - Customer customer1 = + Customer anonymousCustomer = testing.runWithSpan("parent", () -> repo.findByLastName("Anonymous").get(0)); - assertEquals(savedId, customer1.getId()); - assertEquals("Bill", customer1.getFirstName()); - // todo assert + assertEquals(savedId, anonymousCustomer.getId()); + assertEquals("Bill", anonymousCustomer.getFirstName()); + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()), + span -> + span.satisfies( + val -> + assertThat(val.getName()) + .isIn(asList("SELECT spring.jpa.Customer", "Hibernate Query"))) + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class))), + span -> + span.hasName("SELECT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + val -> + val.matches( + "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), + equalTo( + maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")))); testing.clearData(); - testing.runWithSpan("parent", () -> repo.delete(customer1)); + testing.runWithSpan("parent", () -> repo.delete(anonymousCustomer)); + + testing.waitAndAssertTraces( + trace -> { + List> consumers = + new ArrayList<>( + asList( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()))); + if (!isHibernate4) { + consumers.add( + span -> + span.satisfies( + val -> + assertThat(val.getName()) + .matches("Session.(get|find) spring.jpa.Customer")) + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class)))); - // todo assert + consumers.add( + span -> + span.hasName("SELECT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + val -> + val.matches( + "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), + equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer"))); + } + consumers.add( + span -> + span.hasName("Session.merge spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class)))); + if (isHibernate4) { + consumers.add( + span -> + span.hasName("SELECT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + val -> + val.matches( + "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)where ([^.]+)\\.id( ?)=( ?)\\?")), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), + equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer"))); + } + consumers.add( + span -> + span.hasName("Session.delete spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class)))); + consumers.add( + span -> + span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class)))); + consumers.add( + span -> + span.hasName("DELETE test.Customer") + .hasKind(CLIENT) + .hasAttributesSatisfyingExactly( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo( + maybeStable(DbIncubatingAttributes.DB_STATEMENT), + "delete from Customer where id=?"), + equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "DELETE"), + equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer"))); + trace.hasSpansSatisfyingExactly(consumers); + }); } } From 506abd0dec684e96217ddeed205f4936003f8ad1 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Wed, 27 Nov 2024 11:13:38 +0800 Subject: [PATCH 4/7] fix ut --- .../test/java/spring/jpa/SpringJpaTest.java | 113 +++++++++--------- 1 file changed, 59 insertions(+), 54 deletions(-) diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java index 537796d2628b..6b8efda931bd 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java @@ -12,6 +12,11 @@ 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_NAME; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -57,7 +62,7 @@ static void tearDown() { @SuppressWarnings("deprecation") // DbIncubatingAttributes.DB_NAME has been deprecated @Test - public void testCRUD() { + void testCurd() { boolean isHibernate4 = Version.getVersionString().startsWith("4."); Customer customer = new Customer("Bob", "Anonymous"); @@ -85,8 +90,8 @@ public void testCRUD() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -94,12 +99,12 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName(.*)from Customer(.*)")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), - equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -117,7 +122,7 @@ public void testCRUD() { testing.runWithSpan("parent", () -> repo.save(customer)); Long savedId = customer.getId(); - assertNotNull(customer.getId()); + assertThat(customer.getId()).isNull(); testing.waitAndAssertTraces( trace -> { List> consumers = @@ -144,18 +149,18 @@ public void testCRUD() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), equalTo( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), "call next value for Customer_SEQ"), equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "CALL")), + equalTo(maybeStable(DB_OPERATION), "CALL")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -172,8 +177,8 @@ public void testCRUD() { .hasKind(CLIENT) .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -181,13 +186,13 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "insert into Customer \\(.*\\) values \\(.*\\)")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_OPERATION), "INSERT"), equalTo( - maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), + maybeStable(DB_SQL_TABLE), "Customer")))); } else { @@ -198,8 +203,8 @@ public void testCRUD() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -207,13 +212,13 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "insert into Customer \\(.*\\) values \\(.*\\)")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_OPERATION), "INSERT"), equalTo( - maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")), + maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -234,7 +239,7 @@ public void testCRUD() { customer.setFirstName("Bill"); testing.runWithSpan("parent", () -> repo.save(customer)); - assertEquals(customer.getId(), savedId); + assertThat(customer.getId()).isEqualTo(savedId); testing.waitAndAssertTraces( trace -> trace.hasSpansSatisfyingExactly( @@ -255,8 +260,8 @@ public void testCRUD() { span.hasName("SELECT test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -264,12 +269,12 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)where ([^.]+)\\.id( ?)=( ?)\\?")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), - equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")), + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -285,8 +290,8 @@ public void testCRUD() { span.hasName("UPDATE test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -294,19 +299,19 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "update Customer set firstName=\\?,(.*)lastName=\\? where id=\\?")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "UPDATE"), + equalTo(maybeStable(DB_OPERATION), "UPDATE"), equalTo( - maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")))); + maybeStable(DB_SQL_TABLE), "Customer")))); testing.clearData(); Customer anonymousCustomer = testing.runWithSpan("parent", () -> repo.findByLastName("Anonymous").get(0)); - assertEquals(savedId, anonymousCustomer.getId()); - assertEquals("Bill", anonymousCustomer.getFirstName()); + assertThat(anonymousCustomer.getId()).isEqualTo(savedId); + assertThat(anonymousCustomer.getFirstName()).isEqualTo("Bill"); testing.waitAndAssertTraces( trace -> trace.hasSpansSatisfyingExactly( @@ -331,8 +336,8 @@ public void testCRUD() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -340,13 +345,13 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo( - maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer")))); + maybeStable(DB_SQL_TABLE), "Customer")))); testing.clearData(); testing.runWithSpan("parent", () -> repo.delete(anonymousCustomer)); @@ -381,8 +386,8 @@ public void testCRUD() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -390,12 +395,12 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), - equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer"))); + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); } consumers.add( span -> @@ -413,8 +418,8 @@ public void testCRUD() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -422,12 +427,12 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), satisfies( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), val -> val.matches( "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)where ([^.]+)\\.id( ?)=( ?)\\?")), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "SELECT"), - equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer"))); + equalTo(maybeStable(DB_OPERATION), "SELECT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); } consumers.add( span -> @@ -452,8 +457,8 @@ public void testCRUD() { span.hasName("DELETE test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "hsqldb"), - equalTo(maybeStable(DbIncubatingAttributes.DB_NAME), "test"), + equalTo(DB_SYSTEM, "hsqldb"), + equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), @@ -461,10 +466,10 @@ public void testCRUD() { DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), equalTo( - maybeStable(DbIncubatingAttributes.DB_STATEMENT), + maybeStable(DB_STATEMENT), "delete from Customer where id=?"), - equalTo(maybeStable(DbIncubatingAttributes.DB_OPERATION), "DELETE"), - equalTo(maybeStable(DbIncubatingAttributes.DB_SQL_TABLE), "Customer"))); + equalTo(maybeStable(DB_OPERATION), "DELETE"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); trace.hasSpansSatisfyingExactly(consumers); }); } From 6d073d621096eb879184036b7ffc14f9382afad5 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Wed, 27 Nov 2024 11:21:52 +0800 Subject: [PATCH 5/7] use DbSystemIncubatingValues --- .../test/java/spring/jpa/SpringJpaTest.java | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java index 6b8efda931bd..68f58a71c512 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java @@ -19,9 +19,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import io.opentelemetry.api.common.AttributeKey; @@ -90,7 +88,8 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -122,7 +121,7 @@ void testCurd() { testing.runWithSpan("parent", () -> repo.save(customer)); Long savedId = customer.getId(); - assertThat(customer.getId()).isNull(); + assertThat(customer.getId()).isNotNull(); testing.waitAndAssertTraces( trace -> { List> consumers = @@ -149,14 +148,15 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, + DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, emitStableDatabaseSemconv() ? null : "sa"), equalTo( - maybeStable(DB_STATEMENT), - "call next value for Customer_SEQ"), + maybeStable(DB_STATEMENT), "call next value for Customer_SEQ"), equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), @@ -177,7 +177,9 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, + DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -191,9 +193,7 @@ void testCurd() { val.matches( "insert into Customer \\(.*\\) values \\(.*\\)")), equalTo(maybeStable(DB_OPERATION), "INSERT"), - equalTo( - maybeStable(DB_SQL_TABLE), - "Customer")))); + equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); } else { consumers.addAll( @@ -203,7 +203,9 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, + DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -217,8 +219,7 @@ void testCurd() { val.matches( "insert into Customer \\(.*\\) values \\(.*\\)")), equalTo(maybeStable(DB_OPERATION), "INSERT"), - equalTo( - maybeStable(DB_SQL_TABLE), "Customer")), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> span.hasName("Transaction.commit") .hasKind(INTERNAL) @@ -260,7 +261,8 @@ void testCurd() { span.hasName("SELECT test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -290,7 +292,8 @@ void testCurd() { span.hasName("UPDATE test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -304,8 +307,7 @@ void testCurd() { val.matches( "update Customer set firstName=\\?,(.*)lastName=\\? where id=\\?")), equalTo(maybeStable(DB_OPERATION), "UPDATE"), - equalTo( - maybeStable(DB_SQL_TABLE), "Customer")))); + equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); testing.clearData(); Customer anonymousCustomer = testing.runWithSpan("parent", () -> repo.findByLastName("Anonymous").get(0)); @@ -336,7 +338,8 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -350,8 +353,7 @@ void testCurd() { val.matches( "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")), equalTo(maybeStable(DB_OPERATION), "SELECT"), - equalTo( - maybeStable(DB_SQL_TABLE), "Customer")))); + equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); testing.clearData(); testing.runWithSpan("parent", () -> repo.delete(anonymousCustomer)); @@ -386,7 +388,8 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -418,7 +421,8 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -457,7 +461,8 @@ void testCurd() { span.hasName("DELETE test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo(DB_SYSTEM, "hsqldb"), + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -465,9 +470,7 @@ void testCurd() { equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - equalTo( - maybeStable(DB_STATEMENT), - "delete from Customer where id=?"), + equalTo(maybeStable(DB_STATEMENT), "delete from Customer where id=?"), equalTo(maybeStable(DB_OPERATION), "DELETE"), equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); trace.hasSpansSatisfyingExactly(consumers); From 50918306c21ae74ee055e0eaa012d5c15e46565c Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Thu, 28 Nov 2024 11:05:01 +0800 Subject: [PATCH 6/7] remove isHibernate4 --- .../test/java/spring/jpa/SpringJpaTest.java | 290 ++++++------------ 1 file changed, 99 insertions(+), 191 deletions(-) diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java index 68f58a71c512..84807b2e5512 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java @@ -26,12 +26,7 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; -import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import org.hibernate.Version; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -61,7 +56,6 @@ static void tearDown() { @SuppressWarnings("deprecation") // DbIncubatingAttributes.DB_NAME has been deprecated @Test void testCurd() { - boolean isHibernate4 = Version.getVersionString().startsWith("4."); Customer customer = new Customer("Bob", "Anonymous"); assertNull(customer.getId()); @@ -123,117 +117,68 @@ void testCurd() { assertThat(customer.getId()).isNotNull(); testing.waitAndAssertTraces( - trace -> { - List> consumers = - new ArrayList<>( - asList( - span -> - span.hasName("parent") - .hasKind(INTERNAL) - .hasNoParent() - .hasAttributes(Attributes.empty()), - span -> - span.hasName("Session.persist spring.jpa.Customer") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - satisfies( - AttributeKey.stringKey("hibernate.session_id"), - val -> val.isInstanceOf(String.class))))); - if (!isHibernate4) { - consumers.addAll( - asList( - span -> - span.hasName("CALL test") - .hasKind(CLIENT) - .hasParent(trace.getSpan(1)) - .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, - DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), - equalTo(maybeStable(DB_NAME), "test"), - equalTo( - DbIncubatingAttributes.DB_USER, - emitStableDatabaseSemconv() ? null : "sa"), - equalTo( - maybeStable(DB_STATEMENT), "call next value for Customer_SEQ"), - equalTo( - DbIncubatingAttributes.DB_CONNECTION_STRING, - emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - equalTo(maybeStable(DB_OPERATION), "CALL")), - span -> - span.hasName("Transaction.commit") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - equalTo( - AttributeKey.stringKey("hibernate.session_id"), - trace - .getSpan(1) - .getAttributes() - .get(stringKey("hibernate.session_id")))), - span -> - span.hasName("INSERT test.Customer") - .hasKind(CLIENT) - .hasParent(trace.getSpan(3)) - .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, - DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), - equalTo(maybeStable(DB_NAME), "test"), - equalTo( - DbIncubatingAttributes.DB_USER, - emitStableDatabaseSemconv() ? null : "sa"), - equalTo( - DbIncubatingAttributes.DB_CONNECTION_STRING, - emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - satisfies( - maybeStable(DB_STATEMENT), - val -> - val.matches( - "insert into Customer \\(.*\\) values \\(.*\\)")), - equalTo(maybeStable(DB_OPERATION), "INSERT"), - equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); - - } else { - consumers.addAll( - asList( - span -> - span.hasName("INSERT test.Customer") - .hasKind(CLIENT) - .hasParent(trace.getSpan(1)) - .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, - DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), - equalTo(maybeStable(DB_NAME), "test"), - equalTo( - DbIncubatingAttributes.DB_USER, - emitStableDatabaseSemconv() ? null : "sa"), - equalTo( - DbIncubatingAttributes.DB_CONNECTION_STRING, - emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - satisfies( - maybeStable(DB_STATEMENT), - val -> - val.matches( - "insert into Customer \\(.*\\) values \\(.*\\)")), - equalTo(maybeStable(DB_OPERATION), "INSERT"), - equalTo(maybeStable(DB_SQL_TABLE), "Customer")), - span -> - span.hasName("Transaction.commit") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - equalTo( - AttributeKey.stringKey("hibernate.session_id"), - trace - .getSpan(1) - .getAttributes() - .get(stringKey("hibernate.session_id")))))); - } - trace.hasSpansSatisfyingExactly(consumers); - }); + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()), + span -> + span.hasName("Session.persist spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class))), + span -> + span.hasName("CALL test") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfyingExactly( + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(maybeStable(DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo(maybeStable(DB_STATEMENT), "call next value for Customer_SEQ"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + equalTo(maybeStable(DB_OPERATION), "CALL")), + span -> + span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + equalTo( + AttributeKey.stringKey("hibernate.session_id"), + trace + .getSpan(1) + .getAttributes() + .get(stringKey("hibernate.session_id")))), + span -> + span.hasName("INSERT test.Customer") + .hasKind(CLIENT) + .hasParent(trace.getSpan(3)) + .hasAttributesSatisfyingExactly( + equalTo( + DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(maybeStable(DB_NAME), "test"), + equalTo( + DbIncubatingAttributes.DB_USER, + emitStableDatabaseSemconv() ? null : "sa"), + equalTo( + DbIncubatingAttributes.DB_CONNECTION_STRING, + emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), + satisfies( + maybeStable(DB_STATEMENT), + val -> + val.matches("insert into Customer \\(.*\\) values \\(.*\\)")), + equalTo(maybeStable(DB_OPERATION), "INSERT"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); testing.clearData(); @@ -359,17 +304,13 @@ void testCurd() { testing.runWithSpan("parent", () -> repo.delete(anonymousCustomer)); testing.waitAndAssertTraces( - trace -> { - List> consumers = - new ArrayList<>( - asList( - span -> - span.hasName("parent") - .hasKind(INTERNAL) - .hasNoParent() - .hasAttributes(Attributes.empty()))); - if (!isHibernate4) { - consumers.add( + trace -> + trace.hasSpansSatisfyingExactly( + span -> + span.hasName("parent") + .hasKind(INTERNAL) + .hasNoParent() + .hasAttributes(Attributes.empty()), span -> span.satisfies( val -> @@ -380,9 +321,7 @@ void testCurd() { .hasAttributesSatisfyingExactly( satisfies( AttributeKey.stringKey("hibernate.session_id"), - val -> val.isInstanceOf(String.class)))); - - consumers.add( + val -> val.isInstanceOf(String.class))), span -> span.hasName("SELECT test.Customer") .hasKind(CLIENT) @@ -403,23 +342,34 @@ void testCurd() { val.matches( "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")), equalTo(maybeStable(DB_OPERATION), "SELECT"), - equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); - } - consumers.add( - span -> - span.hasName("Session.merge spring.jpa.Customer") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - satisfies( - AttributeKey.stringKey("hibernate.session_id"), - val -> val.isInstanceOf(String.class)))); - if (isHibernate4) { - consumers.add( + equalTo(maybeStable(DB_SQL_TABLE), "Customer")), span -> - span.hasName("SELECT test.Customer") + span.hasName("Session.merge spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class))), + span -> + span.hasName("Session.delete spring.jpa.Customer") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class))), + span -> + span.hasName("Transaction.commit") + .hasKind(INTERNAL) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( + satisfies( + AttributeKey.stringKey("hibernate.session_id"), + val -> val.isInstanceOf(String.class))), + span -> + span.hasName("DELETE test.Customer") .hasKind(CLIENT) - .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( equalTo( DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), @@ -430,50 +380,8 @@ void testCurd() { equalTo( DbIncubatingAttributes.DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "hsqldb:mem:"), - satisfies( - maybeStable(DB_STATEMENT), - val -> - val.matches( - "select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)where ([^.]+)\\.id( ?)=( ?)\\?")), - equalTo(maybeStable(DB_OPERATION), "SELECT"), - equalTo(maybeStable(DB_SQL_TABLE), "Customer"))); - } - consumers.add( - span -> - span.hasName("Session.delete spring.jpa.Customer") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - satisfies( - AttributeKey.stringKey("hibernate.session_id"), - val -> val.isInstanceOf(String.class)))); - consumers.add( - span -> - span.hasName("Transaction.commit") - .hasKind(INTERNAL) - .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( - satisfies( - AttributeKey.stringKey("hibernate.session_id"), - val -> val.isInstanceOf(String.class)))); - consumers.add( - span -> - span.hasName("DELETE test.Customer") - .hasKind(CLIENT) - .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), - equalTo(maybeStable(DB_NAME), "test"), - equalTo( - DbIncubatingAttributes.DB_USER, - emitStableDatabaseSemconv() ? null : "sa"), - equalTo( - DbIncubatingAttributes.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"))); - trace.hasSpansSatisfyingExactly(consumers); - }); + equalTo(maybeStable(DB_STATEMENT), "delete from Customer where id=?"), + equalTo(maybeStable(DB_OPERATION), "DELETE"), + equalTo(maybeStable(DB_SQL_TABLE), "Customer")))); } } From 74e632b2d447d31a8ae63f0837e4740770e46eef Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Fri, 29 Nov 2024 14:10:16 +0800 Subject: [PATCH 7/7] refine ut --- .../test/java/spring/jpa/SpringJpaTest.java | 56 ++++++++----------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java index 84807b2e5512..becfe4aef79c 100644 --- a/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java +++ b/instrumentation/hibernate/hibernate-6.0/spring-testing/src/test/java/spring/jpa/SpringJpaTest.java @@ -17,12 +17,10 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNull; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; @@ -55,11 +53,11 @@ static void tearDown() { @SuppressWarnings("deprecation") // DbIncubatingAttributes.DB_NAME has been deprecated @Test - void testCurd() { + void testCrud() { Customer customer = new Customer("Bob", "Anonymous"); - assertNull(customer.getId()); - assertFalse(testing.runWithSpan("parent", () -> repo.findAll().iterator().hasNext())); + assertThat(customer.getId()).isNull(); + assertThat(testing.runWithSpan("parent", () -> repo.findAll().iterator().hasNext())).isFalse(); testing.waitAndAssertTraces( trace -> @@ -75,15 +73,14 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("SELECT test.Customer") .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -104,7 +101,7 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), trace .getSpan(1) .getAttributes() @@ -130,15 +127,14 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("CALL test") .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -154,7 +150,7 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), trace .getSpan(1) .getAttributes() @@ -164,8 +160,7 @@ void testCurd() { .hasKind(CLIENT) .hasParent(trace.getSpan(3)) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -200,14 +195,13 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("SELECT test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -228,7 +222,7 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), trace .getSpan(1) .getAttributes() @@ -237,8 +231,7 @@ void testCurd() { span.hasName("UPDATE test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -276,15 +269,14 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("SELECT test.Customer") .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -320,15 +312,14 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("SELECT test.Customer") .hasKind(CLIENT) .hasParent(trace.getSpan(1)) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER, @@ -349,7 +340,7 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("Session.delete spring.jpa.Customer") @@ -357,7 +348,7 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("Transaction.commit") @@ -365,14 +356,13 @@ void testCurd() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( satisfies( - AttributeKey.stringKey("hibernate.session_id"), + stringKey("hibernate.session_id"), val -> val.isInstanceOf(String.class))), span -> span.hasName("DELETE test.Customer") .hasKind(CLIENT) .hasAttributesSatisfyingExactly( - equalTo( - DB_SYSTEM, DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB), + equalTo(DB_SYSTEM, HSQLDB), equalTo(maybeStable(DB_NAME), "test"), equalTo( DbIncubatingAttributes.DB_USER,