Convert lettuce 5.1 SyncClientAuthTest from groovy to java (#10045)

This commit is contained in:
Jay DeLuca 2023-12-12 15:50:50 -05:00 committed by GitHub
parent 3213c86784
commit 0973f335c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 135 additions and 126 deletions

View File

@ -1,17 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.lettuce.v5_1
import io.lettuce.core.RedisClient
import io.opentelemetry.instrumentation.lettuce.v5_1.AbstractLettuceSyncClientAuthTest
import io.opentelemetry.instrumentation.test.AgentTestTrait
class LettuceSyncClientAuthTest extends AbstractLettuceSyncClientAuthTest implements AgentTestTrait {
@Override
RedisClient createClient(String uri) {
return RedisClient.create(uri)
}
}

View File

@ -0,0 +1,27 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.lettuce.v5_1;
import io.lettuce.core.RedisClient;
import io.opentelemetry.instrumentation.lettuce.v5_1.AbstractLettuceSyncClientTest;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
class LettuceSyncClientAuthTest extends AbstractLettuceSyncClientTest {
@RegisterExtension
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
@Override
protected RedisClient createClient(String uri) {
return RedisClient.create(uri);
}
}

View File

@ -1,21 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.lettuce.v5_1
import io.lettuce.core.RedisClient
import io.lettuce.core.resource.ClientResources
import io.opentelemetry.instrumentation.test.LibraryTestTrait
class LettuceSyncClientAuthTest extends AbstractLettuceSyncClientAuthTest implements LibraryTestTrait {
@Override
RedisClient createClient(String uri) {
return RedisClient.create(
ClientResources.builder()
.tracing(LettuceTelemetry.create(getOpenTelemetry()).newTracing())
.build(),
uri)
}
}

View File

@ -0,0 +1,33 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.lettuce.v5_1;
import io.lettuce.core.RedisClient;
import io.lettuce.core.resource.ClientResources;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension;
import org.junit.jupiter.api.extension.RegisterExtension;
class LettuceSyncClientAuthTest extends AbstractLettuceSyncClientAuthTest {
@RegisterExtension
static InstrumentationExtension testing = LibraryInstrumentationExtension.create();
@Override
public InstrumentationExtension getInstrumentationExtension() {
return testing;
}
@Override
protected RedisClient createClient(String uri) {
return RedisClient.create(
ClientResources.builder()
.tracing(
LettuceTelemetry.create(getInstrumentationExtension().getOpenTelemetry())
.newTracing())
.build(),
uri);
}
}

View File

@ -11,7 +11,5 @@ dependencies {
implementation("org.testcontainers:testcontainers")
implementation("com.google.guava:guava")
implementation("org.apache.groovy:groovy")
implementation("io.opentelemetry:opentelemetry-api")
implementation("org.spockframework:spock-core")
}

View File

@ -1,86 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.lettuce.v5_1
import io.lettuce.core.RedisClient
import io.opentelemetry.instrumentation.api.semconv.network.internal.NetworkAttributes
import io.opentelemetry.instrumentation.test.InstrumentationSpecification
import io.opentelemetry.semconv.SemanticAttributes
import org.testcontainers.containers.GenericContainer
import spock.lang.Shared
import static io.opentelemetry.api.trace.SpanKind.CLIENT
abstract class AbstractLettuceSyncClientAuthTest extends InstrumentationSpecification {
public static final int DB_INDEX = 0
private static GenericContainer redisServer = new GenericContainer<>("redis:6.2.3-alpine").withExposedPorts(6379)
abstract RedisClient createClient(String uri)
@Shared
String expectedHostAttributeValue
@Shared
int port
@Shared
String password
RedisClient redisClient
def setupSpec() {
password = "password"
redisServer = redisServer
.withCommand("redis-server", "--requirepass $password")
}
def setup() {
redisServer.start()
port = redisServer.getMappedPort(6379)
String host = redisServer.getHost()
String dbAddr = host + ":" + port + "/" + DB_INDEX
String embeddedDbUri = "redis://" + dbAddr
expectedHostAttributeValue = host == "127.0.0.1" ? null : host
redisClient = createClient(embeddedDbUri)
redisClient.setOptions(LettuceTestUtil.CLIENT_OPTIONS)
}
def cleanup() {
redisClient.shutdown()
redisServer.stop()
}
def "auth command"() {
setup:
def res = redisClient.connect().sync().auth(password)
expect:
res == "OK"
assertTraces(1) {
trace(0, 1) {
span(0) {
name "AUTH"
kind CLIENT
attributes {
"$SemanticAttributes.NETWORK_TYPE" "ipv4"
"$NetworkAttributes.NETWORK_PEER_ADDRESS" "127.0.0.1"
"$NetworkAttributes.NETWORK_PEER_PORT" port
"$SemanticAttributes.DB_SYSTEM" "redis"
"$SemanticAttributes.DB_STATEMENT" "AUTH ?"
}
event(0) {
eventName "redis.encode.start"
}
event(1) {
eventName "redis.encode.end"
}
}
}
}
}
}

View File

@ -0,0 +1,75 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.lettuce.v5_1;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
import static org.assertj.core.api.Assertions.assertThat;
import io.lettuce.core.api.sync.RedisCommands;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.instrumentation.api.semconv.network.internal.NetworkAttributes;
import io.opentelemetry.semconv.SemanticAttributes;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
public abstract class AbstractLettuceSyncClientAuthTest extends AbstractLettuceClientTest {
@BeforeAll
void setUp() {
redisServer = redisServer.withCommand("redis-server", "--requirepass password");
redisServer.start();
host = redisServer.getHost();
port = redisServer.getMappedPort(6379);
embeddedDbUri = "redis://" + host + ":" + port + "/" + DB_INDEX;
redisClient = createClient(embeddedDbUri);
redisClient.setOptions(LettuceTestUtil.CLIENT_OPTIONS);
}
@AfterAll
static void cleanUp() {
redisClient.shutdown();
redisServer.stop();
// Set back so other tests don't fail due to NOAUTH error
redisServer = redisServer.withCommand("redis-server", "--requirepass \"\"");
}
@Test
void testAuthCommand() throws Exception {
Class<?> commandsClass = RedisCommands.class;
java.lang.reflect.Method authMethod;
// the auth() argument type changed between 5.x -> 6.x
try {
authMethod = commandsClass.getMethod("auth", String.class);
} catch (NoSuchMethodException unused) {
authMethod = commandsClass.getMethod("auth", CharSequence.class);
}
String result = (String) authMethod.invoke(redisClient.connect().sync(), "password");
assertThat(result).isEqualTo("OK");
getInstrumentationExtension()
.waitAndAssertTraces(
trace ->
trace.hasSpansSatisfyingExactly(
span ->
span.hasName("AUTH")
.hasKind(SpanKind.CLIENT)
.hasAttributesSatisfyingExactly(
equalTo(SemanticAttributes.NETWORK_TYPE, "ipv4"),
equalTo(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1"),
equalTo(NetworkAttributes.NETWORK_PEER_PORT, port),
equalTo(SemanticAttributes.DB_SYSTEM, "redis"),
equalTo(SemanticAttributes.DB_STATEMENT, "AUTH ?"))
.hasEventsSatisfyingExactly(
event -> event.hasName("redis.encode.start"),
event -> event.hasName("redis.encode.end"))));
}
}