Skip to content

Commit c2e8852

Browse files
Refactored flaky tests in vertex-redis-client-3.9 to retry connection rather than fail with NPE (#9390)
1 parent 269bad9 commit c2e8852

File tree

2 files changed

+32
-23
lines changed

2 files changed

+32
-23
lines changed

dd-java-agent/instrumentation/vertx-redis-client-3.9/src/test/groovy/VertxRedisAPITestBase.groovy

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import datadog.trace.test.util.Flaky
2-
3-
import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
4-
52
import io.vertx.core.AsyncResult
63
import io.vertx.core.Handler
74
import io.vertx.redis.client.RedisAPI
85
import io.vertx.redis.client.Response
96
import spock.lang.AutoCleanup
107
import spock.lang.Shared
8+
import spock.util.concurrent.PollingConditions
119

1210
import java.util.concurrent.CountDownLatch
1311
import java.util.concurrent.TimeUnit
1412

13+
import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
14+
1515
abstract class VertxRedisAPITestBase extends VertxRedisTestBase {
1616

1717
@AutoCleanup(quiet = true)
@@ -154,21 +154,34 @@ class VertxRedisAPIRedisForkedTest extends VertxRedisAPITestBase {
154154
class VertxRedisAPIRedisConnectionForkedTest extends VertxRedisAPITestBase {
155155
@Override
156156
RedisAPI createRedis() {
157+
RedisAPI api = null
158+
159+
new PollingConditions(delay: 3, timeout: 15).eventually {
160+
(api = connect()) != null
161+
}
162+
163+
return api
164+
}
165+
166+
private RedisAPI connect() {
157167
def latch = new CountDownLatch(1)
158-
def ret
159-
redis.connect({ar ->
168+
RedisAPI api = null
169+
redis.connect({ ar ->
160170
try {
161-
if (!ar.succeeded()) {
171+
if (ar.succeeded()) {
172+
api = RedisAPI.api(ar.result())
173+
} else {
174+
println "Redis connection failed"
162175
ar.cause().printStackTrace(System.out)
163176
}
164-
ret = RedisAPI.api(ar.result())
165177
} catch (Throwable t) {
166178
t.printStackTrace(System.out)
167179
} finally {
168180
latch.countDown()
169181
}
170182
})
171183
latch.await(10, TimeUnit.SECONDS)
172-
return ret
184+
185+
return api
173186
}
174187
}

dd-java-agent/instrumentation/vertx-redis-client-3.9/src/test/groovy/VertxRedisTestBase.groovy

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
import org.testcontainers.utility.DockerImageName
2-
3-
import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
4-
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
5-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan
6-
71
import com.redis.testcontainers.RedisContainer
82
import datadog.trace.agent.test.asserts.ListWriterAssert
93
import datadog.trace.agent.test.asserts.TraceAssert
@@ -21,13 +15,18 @@ import io.vertx.redis.client.Redis
2115
import io.vertx.redis.client.Request
2216
import io.vertx.redis.client.Response
2317
import org.testcontainers.containers.wait.strategy.Wait
18+
import org.testcontainers.utility.DockerImageName
2419
import spock.lang.AutoCleanup
2520
import spock.lang.Shared
2621

2722
import java.util.concurrent.CountDownLatch
2823
import java.util.concurrent.TimeUnit
2924
import java.util.function.Function
3025

26+
import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
27+
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
28+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan
29+
3130
abstract class VertxRedisTestBase extends VersionedNamingTestBase {
3231

3332
@Shared
@@ -86,11 +85,12 @@ abstract class VertxRedisTestBase extends VersionedNamingTestBase {
8685
TEST_WRITER.start()
8786
}
8887

89-
public <T, R> R runWithHandler(final Handler<Handler<AsyncResult<T>>> redisCommand,
90-
final Function<T, R> resultFunction = null) {
88+
<T, R> R runWithHandler(final Handler<Handler<AsyncResult<T>>> redisCommand,
89+
final Function<T, R> resultFunction = null) {
9190
R result = null
9291
CountDownLatch latch = new CountDownLatch(1)
93-
redisCommand.handle({ ar ->
92+
redisCommand.handle({
93+
ar ->
9494
runUnderTrace("handler") {
9595
if (resultFunction) {
9696
result = resultFunction.apply(ar.result())
@@ -102,8 +102,8 @@ abstract class VertxRedisTestBase extends VersionedNamingTestBase {
102102
result
103103
}
104104

105-
public <T, R> R runWithParentAndHandler(final Handler<Handler<AsyncResult<T>>> redisCommand,
106-
final Function<T, R> resultFunction = null) {
105+
def <T, R> R runWithParentAndHandler(final Handler<Handler<AsyncResult<T>>> redisCommand,
106+
final Function<T, R> resultFunction = null) {
107107
R result = null
108108
def parentSpan = runUnderTrace("parent") {
109109
result = runWithHandler(redisCommand, resultFunction)
@@ -160,8 +160,4 @@ abstract class VertxRedisTestBase extends VersionedNamingTestBase {
160160
List<String> responseToStrings(Response r) {
161161
r.iterator().collect { it.toString() }
162162
}
163-
164-
public <T> T identity(T t) {
165-
return t
166-
}
167163
}

0 commit comments

Comments
 (0)