From e0ed06bccc1e3119b956d4caddc08e8d545c86f3 Mon Sep 17 00:00:00 2001 From: Josef Smrcka Date: Fri, 17 Sep 2021 10:53:43 +0200 Subject: [PATCH] Make MongoTestResource configurable Makes `MongoTestResource`'s port configurable. Replaces the use of a custom `MongoTestResource` in the `mongodb-rest-data-panache` integration tests. Fixes https://github.com/quarkusio/quarkus/issues/20211. --- .../panache/MongoDbRestDataPanacheTest.java | 9 +- .../rest/data/panache/MongoTestResource.java | 84 ------------------- .../test/mongodb/MongoTestResource.java | 10 ++- 3 files changed, 13 insertions(+), 90 deletions(-) delete mode 100644 integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoTestResource.java diff --git a/integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoDbRestDataPanacheTest.java b/integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoDbRestDataPanacheTest.java index 8fcbb28da9270..87ce6ab1f42be 100644 --- a/integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoDbRestDataPanacheTest.java +++ b/integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoDbRestDataPanacheTest.java @@ -3,10 +3,7 @@ import static io.restassured.RestAssured.given; import static io.restassured.RestAssured.when; import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.endsWith; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.*; import javax.json.Json; import javax.json.JsonObject; @@ -19,12 +16,14 @@ import org.junit.jupiter.api.condition.OS; import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.common.ResourceArg; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.mongodb.MongoTestResource; import io.restassured.response.Response; @QuarkusTest @DisabledOnOs(OS.WINDOWS) -@QuarkusTestResource(MongoTestResource.class) +@QuarkusTestResource(value = MongoTestResource.class, initArgs = @ResourceArg(name = MongoTestResource.PORT, value = "37017")) class MongoDbRestDataPanacheTest { private Author dostoevsky; diff --git a/integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoTestResource.java b/integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoTestResource.java deleted file mode 100644 index f086d7a74df25..0000000000000 --- a/integration-tests/mongodb-rest-data-panache/src/test/java/io/quarkus/it/mongodb/rest/data/panache/MongoTestResource.java +++ /dev/null @@ -1,84 +0,0 @@ -package io.quarkus.it.mongodb.rest.data.panache; - -import java.util.Collections; -import java.util.Map; - -import org.jboss.logging.Logger; - -import de.flapdoodle.embed.mongo.MongodExecutable; -import de.flapdoodle.embed.mongo.MongodStarter; -import de.flapdoodle.embed.mongo.config.IMongodConfig; -import de.flapdoodle.embed.mongo.config.MongodConfigBuilder; -import de.flapdoodle.embed.mongo.config.Net; -import de.flapdoodle.embed.mongo.distribution.Version; -import de.flapdoodle.embed.process.runtime.Network; -import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; - -public class MongoTestResource implements QuarkusTestResourceLifecycleManager { - - private static final Logger LOGGER = Logger.getLogger(MongoTestResource.class); - private static MongodExecutable MONGO; - - @Override - public Map start() { - try { - //JDK bug workaround - //https://github.com/quarkusio/quarkus/issues/14424 - //force class init to prevent possible deadlock when done by mongo threads - Class.forName("sun.net.ext.ExtendedSocketOptions", true, ClassLoader.getSystemClassLoader()); - } catch (ClassNotFoundException e) { - } - try { - Version.Main version = Version.Main.V4_0; - int port = 37017; - LOGGER.infof("Starting Mongo %s on port %s", version, port); - IMongodConfig config = new MongodConfigBuilder() - .version(version) - .net(new Net(port, Network.localhostIsIPv6())) - .build(); - MONGO = getMongodExecutable(config); - try { - MONGO.start(); - } catch (Exception e) { - //every so often mongo fails to start on CI runs - //see if this helps - Thread.sleep(1000); - MONGO.start(); - } - - // don't return any properties, since we want Service Binding to configure Quarkus - return Collections.emptyMap(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private MongodExecutable getMongodExecutable(IMongodConfig config) { - try { - return doGetExecutable(config); - } catch (Exception e) { - // sometimes the download process can timeout so just sleep and try again - try { - Thread.sleep(1000); - } catch (InterruptedException ignored) { - - } - return doGetExecutable(config); - } - } - - private MongodExecutable doGetExecutable(IMongodConfig config) { - return MongodStarter.getDefaultInstance().prepare(config); - } - - private void initData() { - - } - - @Override - public void stop() { - if (MONGO != null) { - MONGO.stop(); - } - } -} diff --git a/test-framework/mongodb/src/main/java/io/quarkus/test/mongodb/MongoTestResource.java b/test-framework/mongodb/src/main/java/io/quarkus/test/mongodb/MongoTestResource.java index c4cb1b51cbeb3..e3ecd04c668de 100644 --- a/test-framework/mongodb/src/main/java/io/quarkus/test/mongodb/MongoTestResource.java +++ b/test-framework/mongodb/src/main/java/io/quarkus/test/mongodb/MongoTestResource.java @@ -3,6 +3,7 @@ import java.io.IOException; import java.util.Collections; import java.util.Map; +import java.util.Optional; import org.jboss.logging.Logger; @@ -20,9 +21,17 @@ import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; public class MongoTestResource implements QuarkusTestResourceLifecycleManager { + public static final String PORT = "port"; + private static final int DEFAULT_PORT = 27017; private static MongodExecutable MONGO; private static final Logger LOGGER = Logger.getLogger(MongoTestResource.class); + private Integer port; + + @Override + public void init(Map initArgs) { + port = Optional.ofNullable(initArgs.get(PORT)).map(Integer::parseInt).orElse(DEFAULT_PORT); + } @Override public Map start() { @@ -35,7 +44,6 @@ public Map start() { } try { Version.Main version = Version.Main.V4_0; - int port = 27017; LOGGER.infof("Starting Mongo %s on port %s", version, port); IMongodConfig config = new MongodConfigBuilder() .version(version)