Convert lettuce 5.1 SyncClientAuthTest from groovy to java (#10045)
This commit is contained in:
parent
3213c86784
commit
0973f335c5
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,5 @@ dependencies {
|
||||||
implementation("org.testcontainers:testcontainers")
|
implementation("org.testcontainers:testcontainers")
|
||||||
implementation("com.google.guava:guava")
|
implementation("com.google.guava:guava")
|
||||||
|
|
||||||
implementation("org.apache.groovy:groovy")
|
|
||||||
implementation("io.opentelemetry:opentelemetry-api")
|
implementation("io.opentelemetry:opentelemetry-api")
|
||||||
implementation("org.spockframework:spock-core")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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"))));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue