From 5a143b82b7cec3cf64a1ef97a4c31c7b208de442 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Fri, 1 Nov 2024 19:55:21 +0800 Subject: [PATCH 1/8] add ut --- .../instrumentation/rediscala/RediscalaClientTest.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java new file mode 100644 index 000000000000..26683a1ec792 --- /dev/null +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -0,0 +1,5 @@ +package io.opentelemetry.javaagent.instrumentation.rediscala; + +class RediscalaClientTest { + +} From e644f5904fe073f43852a406ae3e95a31c086a0f Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Fri, 1 Nov 2024 20:55:55 +0800 Subject: [PATCH 2/8] add ut --- .../test/groovy/RediscalaClientTest.groovy | 145 --------------- .../rediscala/RediscalaClientTest.java | 173 +++++++++++++++++- 2 files changed, 172 insertions(+), 146 deletions(-) delete mode 100644 instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy b/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy deleted file mode 100644 index e81106cbdf84..000000000000 --- a/instrumentation/rediscala-1.8/javaagent/src/test/groovy/RediscalaClientTest.groovy +++ /dev/null @@ -1,145 +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.testcontainers.containers.GenericContainer -import redis.ByteStringDeserializerDefault -import redis.ByteStringSerializerLowPriority -import redis.RedisClient -import redis.RedisDispatcher -import scala.Option -import scala.concurrent.Await -import scala.concurrent.duration.Duration -import spock.lang.Shared - -import static io.opentelemetry.api.trace.SpanKind.CLIENT -import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable - -class RediscalaClientTest extends AgentInstrumentationSpecification { - - private static GenericContainer redisServer = new GenericContainer<>("redis:6.2.3-alpine").withExposedPorts(6379) - - @Shared - int port - - @Shared - def system - - @Shared - RedisClient redisClient - - def setupSpec() { - redisServer.start() - String host = redisServer.getHost() - port = redisServer.getMappedPort(6379) - // latest has separate artifacts for akka an pekko, currently latestDepTestLibrary picks the - // pekko one - try { - def clazz = Class.forName("akka.actor.ActorSystem") - system = clazz.getMethod("create").invoke(null) - } catch (ClassNotFoundException exception) { - def clazz = Class.forName("org.apache.pekko.actor.ActorSystem") - system = clazz.getMethod("create").invoke(null) - } - // latest RedisClient constructor takes username as argument - if (RedisClient.metaClass.getMetaMethod("username") != null) { - redisClient = new RedisClient(host, - port, - Option.apply(null), - Option.apply(null), - Option.apply(null), - "RedisClient", - Option.apply(null), - system, - new RedisDispatcher("rediscala.rediscala-client-worker-dispatcher")) - } else { - redisClient = new RedisClient(host, - port, - Option.apply(null), - Option.apply(null), - "RedisClient", - Option.apply(null), - system, - new RedisDispatcher("rediscala.rediscala-client-worker-dispatcher")) - } - } - - def cleanupSpec() { - redisServer.stop() - system?.terminate() - } - - def "set command"() { - when: - def value = redisClient.set("foo", - "bar", - Option.apply(null), - Option.apply(null), - false, - false, - new ByteStringSerializerLowPriority.String$()) - - - then: - Await.result(value, Duration.apply("3 second")) == true - assertTraces(1) { - trace(0, 1) { - span(0) { - name "SET" - kind CLIENT - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SET" - } - } - } - } - } - - def "get command"() { - when: - def (write, value) = runWithSpan("parent") { - def w = redisClient.set("bar", - "baz", - Option.apply(null), - Option.apply(null), - false, - false, - new ByteStringSerializerLowPriority.String$()) - def v = redisClient.get("bar", new ByteStringDeserializerDefault.String$()) - return new Tuple(w, v) - } - - then: - Await.result(write, Duration.apply("3 second")) == true - Await.result(value, Duration.apply("3 second")) == Option.apply("baz") - assertTraces(1) { - trace(0, 3) { - span(0) { - name "parent" - } - span(1) { - name "SET" - kind CLIENT - childOf span(0) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "SET" - } - } - span(2) { - name "GET" - kind CLIENT - childOf span(0) - attributes { - "$DbIncubatingAttributes.DB_SYSTEM" "redis" - "${maybeStable(DbIncubatingAttributes.DB_OPERATION)}" "GET" - } - } - } - } - } -} diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java index 26683a1ec792..4efeb0f22274 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -1,5 +1,176 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package io.opentelemetry.javaagent.instrumentation.rediscala; -class RediscalaClientTest { +import static io.opentelemetry.api.trace.SpanKind.CLIENT; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; + +import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension; +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.testcontainers.containers.GenericContainer; +import org.testcontainers.shaded.org.apache.commons.lang3.tuple.Pair; +import redis.ByteStringDeserializer; +import redis.ByteStringDeserializer$; +import redis.ByteStringSerializer; +import redis.ByteStringSerializer$; +import redis.RedisClient; +import redis.RedisDispatcher; +import scala.Option; +import scala.concurrent.Future; + +public class RediscalaClientTest { + + @RegisterExtension + static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + + @RegisterExtension static final AutoCleanupExtension cleanup = AutoCleanupExtension.create(); + + private static GenericContainer redisServer; + + private static String host; + private static int port; + private static Object system; + private static RedisClient redisClient; + + @BeforeAll + static void setUp() throws Exception { + redisServer = new GenericContainer<>("redis:6.2.3-alpine").withExposedPorts(6379); + redisServer.start(); + cleanup.deferCleanup(redisServer::stop); + + host = redisServer.getHost(); + port = redisServer.getMappedPort(6379); + + try { + Class clazz = Class.forName("akka.actor.ActorSystem"); + system = clazz.getMethod("create").invoke(null); + } catch (ClassNotFoundException exception) { + Class clazz = Class.forName("org.apache.pekko.actor.ActorSystem"); + system = clazz.getMethod("create").invoke(null); + } + + try { + RedisClient.class.getMethod("username"); + redisClient = + (RedisClient) + RedisClient.class.getConstructors()[0].newInstance( + host, + port, + Option.apply(null), + Option.apply(null), + Option.apply(null), + "RedisClient", + Option.apply(null), + system, + new RedisDispatcher("rediscala.rediscala-client-worker-dispatcher")); + } catch (Exception e) { + redisClient = + (RedisClient) + RedisClient.class.getConstructors()[0].newInstance( + host, + port, + Option.apply(null), + Option.apply(null), + "RedisClient", + Option.apply(null), + system, + new RedisDispatcher("rediscala.rediscala-client-worker-dispatcher")); + } + } + + @AfterAll + static void tearDown() throws Exception { + if (system != null) { + system.getClass().getMethod("terminate").invoke(system); + } + } + + @Test + void testGetCommand() throws Exception { + Pair, Future>> result = + testing.runWithSpan( + "parent", + () -> { + ByteStringSerializer serializer = ByteStringSerializer$.MODULE$.String(); + ByteStringDeserializer deserializer = + ByteStringDeserializer$.MODULE$.String(); + Future writeFuture = + redisClient.set( + "bar", + "baz", + Option.apply(null), + Option.apply(null), + false, + false, + serializer); + Future> valueFuture = redisClient.get("bar", deserializer); + return Pair.of(writeFuture, valueFuture); + }); + + await().atMost(java.time.Duration.ofSeconds(3)).until(() -> result.getLeft().isCompleted()); + await().atMost(java.time.Duration.ofSeconds(3)).until(() -> result.getRight().isCompleted()); + assertThat(result.getLeft().value().get().get()).isEqualTo(true); + assertThat(result.getRight().value().get().get().get()).isEqualTo("baz"); + + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent").hasNoParent(), + span -> + span.hasName("SET") + .hasKind(CLIENT) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfying( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")), + span -> + span.hasName("GET") + .hasKind(CLIENT) + .hasParent(trace.getSpan(1)) + .hasAttributesSatisfying( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); + } + + @Test + public void testSetCommand() throws Exception { + ByteStringSerializer serializer = ByteStringSerializer$.MODULE$.String(); + Future value = + testing.runWithSpan( + "parent", + () -> + redisClient.set( + "foo", + "bar", + Option.apply(null), + Option.apply(null), + false, + false, + serializer)); + await().atMost(java.time.Duration.ofSeconds(3)).until(value::isCompleted); + assertThat(value.value().get().get()).isEqualTo(true); + testing.waitAndAssertTraces( + trace -> + trace.hasSpansSatisfyingExactly( + span -> span.hasName("parent").hasNoParent(), + span -> + span.hasName("SET") + .hasKind(CLIENT) + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfying( + equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), + equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")))); + } } From 568ce4a76d632308a46c9b340c6de143e5e6e06b Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Fri, 8 Nov 2024 20:17:57 +0800 Subject: [PATCH 3/8] add spotless --- .../instrumentation/rediscala/RediscalaClientTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java index 4efeb0f22274..4412ffe9f35e 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -90,7 +90,7 @@ static void setUp() throws Exception { } @AfterAll - static void tearDown() throws Exception { + static void tearDown() throws Exception { if (system != null) { system.getClass().getMethod("terminate").invoke(system); } From ff4303c86f6ae8c2b9a88d2272f699a1b183316e Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Fri, 8 Nov 2024 20:40:31 +0800 Subject: [PATCH 4/8] fix ut --- .../rediscala/RediscalaClientTest.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java index 4412ffe9f35e..9e24c6d1276a 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; +import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; @@ -38,6 +39,9 @@ public class RediscalaClientTest { private static GenericContainer redisServer; + @SuppressWarnings("deprecation") // DB_OPERATION is deprecated + public static final AttributeKey DB_OPERATION = DbIncubatingAttributes.DB_OPERATION; + private static String host; private static int port; private static Object system; @@ -47,7 +51,7 @@ public class RediscalaClientTest { static void setUp() throws Exception { redisServer = new GenericContainer<>("redis:6.2.3-alpine").withExposedPorts(6379); redisServer.start(); - cleanup.deferCleanup(redisServer::stop); + // cleanup.deferCleanup(redisServer::stop); host = redisServer.getHost(); port = redisServer.getMappedPort(6379); @@ -97,7 +101,7 @@ static void tearDown() throws Exception { } @Test - void testGetCommand() throws Exception { + void testGetCommand() { Pair, Future>> result = testing.runWithSpan( "parent", @@ -131,20 +135,20 @@ void testGetCommand() throws Exception { span.hasName("SET") .hasKind(CLIENT) .hasParent(trace.getSpan(0)) - .hasAttributesSatisfying( + .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")), + equalTo(DB_OPERATION, "SET")), span -> span.hasName("GET") .hasKind(CLIENT) - .hasParent(trace.getSpan(1)) - .hasAttributesSatisfying( + .hasParent(trace.getSpan(0)) + .hasAttributesSatisfyingExactly( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "GET")))); + equalTo(DB_OPERATION, "GET")))); } @Test - public void testSetCommand() throws Exception { + public void testSetCommand() { ByteStringSerializer serializer = ByteStringSerializer$.MODULE$.String(); Future value = @@ -171,6 +175,6 @@ public void testSetCommand() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DbIncubatingAttributes.DB_OPERATION_NAME, "SET")))); + equalTo(DB_OPERATION, "SET")))); } } From b95cb65c85db03974a2ba617874a8f17fd3ecb05 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Mon, 11 Nov 2024 14:43:01 +0800 Subject: [PATCH 5/8] fix review --- .../instrumentation/rediscala/RediscalaClientTest.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java index 9e24c6d1276a..88e6173022c4 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -30,7 +30,7 @@ import scala.Option; import scala.concurrent.Future; -public class RediscalaClientTest { +class RediscalaClientTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); @@ -42,8 +42,6 @@ public class RediscalaClientTest { @SuppressWarnings("deprecation") // DB_OPERATION is deprecated public static final AttributeKey DB_OPERATION = DbIncubatingAttributes.DB_OPERATION; - private static String host; - private static int port; private static Object system; private static RedisClient redisClient; @@ -51,10 +49,9 @@ public class RediscalaClientTest { static void setUp() throws Exception { redisServer = new GenericContainer<>("redis:6.2.3-alpine").withExposedPorts(6379); redisServer.start(); - // cleanup.deferCleanup(redisServer::stop); - host = redisServer.getHost(); - port = redisServer.getMappedPort(6379); + String host = redisServer.getHost(); + Integer port = redisServer.getMappedPort(6379); try { Class clazz = Class.forName("akka.actor.ActorSystem"); @@ -98,6 +95,7 @@ static void tearDown() throws Exception { if (system != null) { system.getClass().getMethod("terminate").invoke(system); } + redisServer.stop(); } @Test From 1d5d240df1cafaa654ea4b7e1afdaa3c6619dbbd Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Mon, 11 Nov 2024 14:44:05 +0800 Subject: [PATCH 6/8] fix review --- .../instrumentation/rediscala/RediscalaClientTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java index 88e6173022c4..171fd1d32a55 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -92,10 +92,10 @@ static void setUp() throws Exception { @AfterAll static void tearDown() throws Exception { + redisServer.stop(); if (system != null) { system.getClass().getMethod("terminate").invoke(system); } - redisServer.stop(); } @Test From b9c424c268d216cf392c9b99033940e4aa018ac0 Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Mon, 11 Nov 2024 15:06:54 +0800 Subject: [PATCH 7/8] fix SemconvStabilityUtil --- .../instrumentation/rediscala/RediscalaClientTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java index 171fd1d32a55..ea218ca19f1e 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -11,9 +11,9 @@ import static org.awaitility.Awaitility.await; import io.opentelemetry.api.common.AttributeKey; -import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -35,12 +35,11 @@ class RediscalaClientTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); - @RegisterExtension static final AutoCleanupExtension cleanup = AutoCleanupExtension.create(); - private static GenericContainer redisServer; @SuppressWarnings("deprecation") // DB_OPERATION is deprecated - public static final AttributeKey DB_OPERATION = DbIncubatingAttributes.DB_OPERATION; + private static final AttributeKey DB_OPERATION = + SemconvStabilityUtil.maybeStable(DbIncubatingAttributes.DB_OPERATION); private static Object system; private static RedisClient redisClient; From 5263e9a2b7d8f40e870e7f3d1e26b3f2445ca3da Mon Sep 17 00:00:00 2001 From: "shalk(xiao kun)" Date: Mon, 11 Nov 2024 20:55:36 +0800 Subject: [PATCH 8/8] fix review --- .../rediscala/RediscalaClientTest.java | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java index ea218ca19f1e..864ed10b4934 100644 --- a/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java +++ b/instrumentation/rediscala-1.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/rediscala/RediscalaClientTest.java @@ -7,20 +7,23 @@ import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DbSystemIncubatingValues.REDIS; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; +import com.google.common.util.concurrent.SettableFuture; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil; import io.opentelemetry.semconv.incubating.DbIncubatingAttributes; +import java.time.Duration; 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.testcontainers.containers.GenericContainer; -import org.testcontainers.shaded.org.apache.commons.lang3.tuple.Pair; import redis.ByteStringDeserializer; import redis.ByteStringDeserializer$; import redis.ByteStringSerializer; @@ -98,31 +101,26 @@ static void tearDown() throws Exception { } @Test - void testGetCommand() { - Pair, Future>> result = - testing.runWithSpan( - "parent", - () -> { - ByteStringSerializer serializer = ByteStringSerializer$.MODULE$.String(); - ByteStringDeserializer deserializer = - ByteStringDeserializer$.MODULE$.String(); - Future writeFuture = - redisClient.set( - "bar", - "baz", - Option.apply(null), - Option.apply(null), - false, - false, - serializer); - Future> valueFuture = redisClient.get("bar", deserializer); - return Pair.of(writeFuture, valueFuture); - }); - - await().atMost(java.time.Duration.ofSeconds(3)).until(() -> result.getLeft().isCompleted()); - await().atMost(java.time.Duration.ofSeconds(3)).until(() -> result.getRight().isCompleted()); - assertThat(result.getLeft().value().get().get()).isEqualTo(true); - assertThat(result.getRight().value().get().get().get()).isEqualTo("baz"); + void testGetCommand() throws Exception { + SettableFuture> writeFutureRef = SettableFuture.create(); + ; + SettableFuture>> valueFutureRef = SettableFuture.create(); + + testing.runWithSpan( + "parent", + () -> { + ByteStringSerializer serializer = ByteStringSerializer$.MODULE$.String(); + ByteStringDeserializer deserializer = ByteStringDeserializer$.MODULE$.String(); + writeFutureRef.set( + redisClient.set( + "bar", "baz", Option.apply(null), Option.apply(null), false, false, serializer)); + valueFutureRef.set(redisClient.get("bar", deserializer)); + }); + + await().atMost(Duration.ofSeconds(3)).until(() -> writeFutureRef.get().isCompleted()); + await().atMost(Duration.ofSeconds(3)).until(() -> valueFutureRef.get().isCompleted()); + assertThat(writeFutureRef.get().value().get().get()).isEqualTo(true); + assertThat(valueFutureRef.get().value().get().get().get()).isEqualTo("baz"); testing.waitAndAssertTraces( trace -> @@ -133,15 +131,13 @@ void testGetCommand() { .hasKind(CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DB_OPERATION, "SET")), + equalTo(DB_SYSTEM, REDIS), equalTo(DB_OPERATION, "SET")), span -> span.hasName("GET") .hasKind(CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DB_OPERATION, "GET")))); + equalTo(DB_SYSTEM, REDIS), equalTo(DB_OPERATION, "GET")))); } @Test @@ -160,7 +156,7 @@ public void testSetCommand() { false, false, serializer)); - await().atMost(java.time.Duration.ofSeconds(3)).until(value::isCompleted); + await().atMost(Duration.ofSeconds(3)).until(value::isCompleted); assertThat(value.value().get().get()).isEqualTo(true); testing.waitAndAssertTraces( trace -> @@ -171,7 +167,6 @@ public void testSetCommand() { .hasKind(CLIENT) .hasParent(trace.getSpan(0)) .hasAttributesSatisfying( - equalTo(DbIncubatingAttributes.DB_SYSTEM, "redis"), - equalTo(DB_OPERATION, "SET")))); + equalTo(DB_SYSTEM, REDIS), equalTo(DB_OPERATION, "SET")))); } }