GEODE-8577: Re-enable PubSubNativeRedisAcceptanceTest (#5847)
- Could not reproduce after ~8000 runs
- Added some debugging to dump 'docker ps' output if a connection cannot
be obtained.
Authored-by: Jens Deppe <jdeppe@vmware.com>
diff --git a/geode-redis/build.gradle b/geode-redis/build.gradle
index bd332e3..c35fd9b 100644
--- a/geode-redis/build.gradle
+++ b/geode-redis/build.gradle
@@ -54,6 +54,8 @@
integrationTestImplementation('redis.clients:jedis')
integrationTestImplementation('io.lettuce:lettuce-core')
integrationTestImplementation('org.apache.logging.log4j:log4j-core')
+ // This only exists for debugging PubSubNativeRedisAcceptanceTest
+ integrationTestImplementation('org.buildobjects:jproc:2.3.0')
integrationTestRuntime(project(':geode-log4j'))
acceptanceTestImplementation(sourceSets.integrationTest.output)
@@ -70,6 +72,8 @@
acceptanceTestImplementation('org.springframework.boot:spring-boot-starter-data-redis')
acceptanceTestImplementation('org.springframework.session:spring-session-data-redis')
acceptanceTestImplementation('org.apache.logging.log4j:log4j-core')
+ // This only exists for debugging PubSubNativeRedisAcceptanceTest
+ acceptanceTestImplementation('org.buildobjects:jproc:2.3.0')
distributedTestCompile('org.apache.logging.log4j:log4j-core')
distributedTestImplementation(project(':geode-dunit'))
diff --git a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/pubsub/PubSubNativeRedisAcceptanceTest.java b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/pubsub/PubSubNativeRedisAcceptanceTest.java
index 772ebb1..ce7778f 100644
--- a/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/pubsub/PubSubNativeRedisAcceptanceTest.java
+++ b/geode-redis/src/acceptanceTest/java/org/apache/geode/redis/internal/executor/pubsub/PubSubNativeRedisAcceptanceTest.java
@@ -16,11 +16,9 @@
package org.apache.geode.redis.internal.executor.pubsub;
import org.junit.ClassRule;
-import org.junit.Ignore;
import org.apache.geode.NativeRedisTestRule;
-@Ignore("GEODE-8577")
public class PubSubNativeRedisAcceptanceTest extends AbstractPubSubIntegrationTest {
@ClassRule
public static NativeRedisTestRule redis = new NativeRedisTestRule();
diff --git a/geode-redis/src/commonTest/java/org/apache/geode/NativeRedisTestRule.java b/geode-redis/src/commonTest/java/org/apache/geode/NativeRedisTestRule.java
index 1cb47ed..5d0710d 100644
--- a/geode-redis/src/commonTest/java/org/apache/geode/NativeRedisTestRule.java
+++ b/geode-redis/src/commonTest/java/org/apache/geode/NativeRedisTestRule.java
@@ -17,16 +17,20 @@
import java.io.Serializable;
+import org.apache.logging.log4j.Logger;
import org.junit.rules.ExternalResource;
import org.junit.rules.RuleChain;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.testcontainers.containers.GenericContainer;
+import org.apache.geode.logging.internal.log4j.api.LogService;
import org.apache.geode.test.junit.rules.IgnoreOnWindowsRule;
public class NativeRedisTestRule extends ExternalResource implements Serializable {
+ private static final Logger logger = LogService.getLogger();
+
private GenericContainer<?> redisContainer;
private final RuleChain delegate;
private final int PORT_TO_EXPOSE = 6379;
@@ -57,6 +61,8 @@
.withExposedPorts(PORT_TO_EXPOSE);
redisContainer.start();
+ logger.info("Started redis container with exposed port {} -> {}", PORT_TO_EXPOSE,
+ getPort());
try {
base.evaluate(); // This will run the test.
} finally {
diff --git a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/pubsub/AbstractPubSubIntegrationTest.java b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/pubsub/AbstractPubSubIntegrationTest.java
index 6e5bf5e..9e3f323 100644
--- a/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/pubsub/AbstractPubSubIntegrationTest.java
+++ b/geode-redis/src/integrationTest/java/org/apache/geode/redis/internal/executor/pubsub/AbstractPubSubIntegrationTest.java
@@ -17,6 +17,8 @@
import static org.assertj.core.api.Assertions.assertThat;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -32,6 +34,8 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
+import org.buildobjects.process.ProcBuilder;
+import org.buildobjects.process.StreamConsumer;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
@@ -733,10 +737,31 @@
}
}
+ runit("docker", "ps", "-a");
+
throw new RuntimeException("Tried 10 times, but could not get a good connection.",
lastException);
}
+ // TODO: This exists for debugging some flakiness in this test. If this is fully resolved in the
+ // future, please delete this and the associated dependency in build.gradle
+ private void runit(String command, String... args) {
+ StreamConsumer consumer = stream -> {
+ InputStreamReader inputStreamReader = new InputStreamReader(stream);
+ BufferedReader bufReader = new BufferedReader(inputStreamReader);
+ String line;
+ while ((line = bufReader.readLine()) != null) {
+ System.err.println("::::: " + line);
+ }
+ };
+
+ new ProcBuilder(command)
+ .withArgs(args)
+ .withOutputConsumer(consumer)
+ .withTimeoutMillis(60000)
+ .run();
+ }
+
int doPublishing(int index, int minimumIterations, AtomicBoolean running) {
int iterationCount = 0;
int publishedMessages = 0;