convert hibernate 6.0 test case from groovy to java (#12762)
This commit is contained in:
parent
f143d4763d
commit
219149faa0
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,377 @@
|
|||
/*
|
||||
* Copyright The OpenTelemetry Authors
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
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 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 io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DbSystemIncubatingValues.HSQLDB;
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
|
||||
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||
import io.opentelemetry.semconv.incubating.DbIncubatingAttributes;
|
||||
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;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation") // DbIncubatingAttributes.DB_NAME has been deprecated
|
||||
@Test
|
||||
void testCrud() {
|
||||
Customer customer = new Customer("Bob", "Anonymous");
|
||||
|
||||
assertThat(customer.getId()).isNull();
|
||||
assertThat(testing.runWithSpan("parent", () -> repo.findAll().iterator().hasNext())).isFalse();
|
||||
|
||||
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(
|
||||
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, 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(
|
||||
"select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName(.*)from Customer(.*)")),
|
||||
equalTo(maybeStable(DB_OPERATION), "SELECT"),
|
||||
equalTo(maybeStable(DB_SQL_TABLE), "Customer")),
|
||||
span ->
|
||||
span.hasName("Transaction.commit")
|
||||
.hasKind(INTERNAL)
|
||||
.hasParent(trace.getSpan(0))
|
||||
.hasAttributesSatisfyingExactly(
|
||||
equalTo(
|
||||
stringKey("hibernate.session_id"),
|
||||
trace
|
||||
.getSpan(1)
|
||||
.getAttributes()
|
||||
.get(stringKey("hibernate.session_id"))))));
|
||||
|
||||
testing.clearData();
|
||||
|
||||
testing.runWithSpan("parent", () -> repo.save(customer));
|
||||
Long savedId = customer.getId();
|
||||
|
||||
assertThat(customer.getId()).isNotNull();
|
||||
testing.waitAndAssertTraces(
|
||||
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(
|
||||
stringKey("hibernate.session_id"),
|
||||
val -> val.isInstanceOf(String.class))),
|
||||
span ->
|
||||
span.hasName("CALL test")
|
||||
.hasKind(CLIENT)
|
||||
.hasParent(trace.getSpan(1))
|
||||
.hasAttributesSatisfyingExactly(
|
||||
equalTo(DB_SYSTEM, 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(
|
||||
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, 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();
|
||||
|
||||
customer.setFirstName("Bill");
|
||||
testing.runWithSpan("parent", () -> repo.save(customer));
|
||||
|
||||
assertThat(customer.getId()).isEqualTo(savedId);
|
||||
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(
|
||||
stringKey("hibernate.session_id"),
|
||||
val -> val.isInstanceOf(String.class))),
|
||||
span ->
|
||||
span.hasName("SELECT test.Customer")
|
||||
.hasKind(CLIENT)
|
||||
.hasAttributesSatisfyingExactly(
|
||||
equalTo(DB_SYSTEM, 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(
|
||||
"select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)where ([^.]+)\\.id( ?)=( ?)\\?")),
|
||||
equalTo(maybeStable(DB_OPERATION), "SELECT"),
|
||||
equalTo(maybeStable(DB_SQL_TABLE), "Customer")),
|
||||
span ->
|
||||
span.hasName("Transaction.commit")
|
||||
.hasKind(INTERNAL)
|
||||
.hasParent(trace.getSpan(0))
|
||||
.hasAttributesSatisfyingExactly(
|
||||
equalTo(
|
||||
stringKey("hibernate.session_id"),
|
||||
trace
|
||||
.getSpan(1)
|
||||
.getAttributes()
|
||||
.get(stringKey("hibernate.session_id")))),
|
||||
span ->
|
||||
span.hasName("UPDATE test.Customer")
|
||||
.hasKind(CLIENT)
|
||||
.hasAttributesSatisfyingExactly(
|
||||
equalTo(DB_SYSTEM, 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(
|
||||
"update Customer set firstName=\\?,(.*)lastName=\\? where id=\\?")),
|
||||
equalTo(maybeStable(DB_OPERATION), "UPDATE"),
|
||||
equalTo(maybeStable(DB_SQL_TABLE), "Customer"))));
|
||||
testing.clearData();
|
||||
Customer anonymousCustomer =
|
||||
testing.runWithSpan("parent", () -> repo.findByLastName("Anonymous").get(0));
|
||||
|
||||
assertThat(anonymousCustomer.getId()).isEqualTo(savedId);
|
||||
assertThat(anonymousCustomer.getFirstName()).isEqualTo("Bill");
|
||||
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(
|
||||
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, 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(
|
||||
"select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")),
|
||||
equalTo(maybeStable(DB_OPERATION), "SELECT"),
|
||||
equalTo(maybeStable(DB_SQL_TABLE), "Customer"))));
|
||||
testing.clearData();
|
||||
|
||||
testing.runWithSpan("parent", () -> repo.delete(anonymousCustomer));
|
||||
|
||||
testing.waitAndAssertTraces(
|
||||
trace ->
|
||||
trace.hasSpansSatisfyingExactly(
|
||||
span ->
|
||||
span.hasName("parent")
|
||||
.hasKind(INTERNAL)
|
||||
.hasNoParent()
|
||||
.hasAttributes(Attributes.empty()),
|
||||
span ->
|
||||
span.satisfies(
|
||||
val ->
|
||||
assertThat(val.getName())
|
||||
.matches("Session.(get|find) spring.jpa.Customer"))
|
||||
.hasKind(INTERNAL)
|
||||
.hasParent(trace.getSpan(0))
|
||||
.hasAttributesSatisfyingExactly(
|
||||
satisfies(
|
||||
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, 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(
|
||||
"select ([^.]+)\\.id([^,]*),([^.]+)\\.firstName([^,]*),([^.]+)\\.lastName (.*)from Customer (.*)(where ([^.]+)\\.lastName( ?)=( ?)\\?|)")),
|
||||
equalTo(maybeStable(DB_OPERATION), "SELECT"),
|
||||
equalTo(maybeStable(DB_SQL_TABLE), "Customer")),
|
||||
span ->
|
||||
span.hasName("Session.merge spring.jpa.Customer")
|
||||
.hasKind(INTERNAL)
|
||||
.hasParent(trace.getSpan(0))
|
||||
.hasAttributesSatisfyingExactly(
|
||||
satisfies(
|
||||
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(
|
||||
stringKey("hibernate.session_id"),
|
||||
val -> val.isInstanceOf(String.class))),
|
||||
span ->
|
||||
span.hasName("Transaction.commit")
|
||||
.hasKind(INTERNAL)
|
||||
.hasParent(trace.getSpan(0))
|
||||
.hasAttributesSatisfyingExactly(
|
||||
satisfies(
|
||||
stringKey("hibernate.session_id"),
|
||||
val -> val.isInstanceOf(String.class))),
|
||||
span ->
|
||||
span.hasName("DELETE test.Customer")
|
||||
.hasKind(CLIENT)
|
||||
.hasAttributesSatisfyingExactly(
|
||||
equalTo(DB_SYSTEM, 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"))));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue