diff --git a/restx-jongo-specs-tests/pom.xml b/restx-jongo-specs-tests/pom.xml index ff64593fc..047e4891b 100644 --- a/restx-jongo-specs-tests/pom.xml +++ b/restx-jongo-specs-tests/pom.xml @@ -18,6 +18,7 @@ 0.32-SNAPSHOT + 1.42 1.7 1.7 @@ -38,5 +39,10 @@ restx-jongo ${restx.version} + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + ${de.flapdoodle.embed.version} + diff --git a/restx-jongo-specs-tests/src/main/java/restx/jongo/specs/tests/MongoEmbedRule.java b/restx-jongo-specs-tests/src/main/java/restx/jongo/specs/tests/MongoEmbedRule.java new file mode 100644 index 000000000..c02bf5a00 --- /dev/null +++ b/restx-jongo-specs-tests/src/main/java/restx/jongo/specs/tests/MongoEmbedRule.java @@ -0,0 +1,63 @@ +package restx.jongo.specs.tests; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import restx.mongo.MongoModule; + +import com.mongodb.MongoClient; + +import de.flapdoodle.embed.mongo.MongodExecutable; +import de.flapdoodle.embed.mongo.MongodProcess; +import de.flapdoodle.embed.mongo.MongodStarter; +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; + +public class MongoEmbedRule implements TestRule { + + @Override + public Statement apply(final Statement base, Description description) { + return new Statement() { + + @Override + public void evaluate() throws Throwable { + InetAddress addr = Network.getLocalHost(); + int port = Network.getFreeServerPort(addr); + + System.setProperty(MongoModule.MONGO_URI, new StringBuilder( + "mongodb://").append(addr.getHostName()).append(":") + .append(port).toString()); + + MongodStarter runtime = MongodStarter.getDefaultInstance(); + MongodExecutable _mongodExe = runtime + .prepare(new MongodConfigBuilder() + .version(Version.Main.PRODUCTION) + .net(new Net(port, hostIsIPv6(addr))).build()); + MongodProcess _mongod = _mongodExe.start(); + new MongoClient(addr.getHostName(), port); + + base.evaluate(); + + _mongod.stop(); + _mongodExe.stop(); + } + + private boolean hostIsIPv6(InetAddress addr) + throws UnknownHostException { + byte[] ipAddr = addr.getAddress(); + if (ipAddr.length > 4) { + return true; + } + return false; + } + + }; + } + +} diff --git a/restx-jongo/src/main/java/restx/mongo/MongoModule.java b/restx-jongo/src/main/java/restx/mongo/MongoModule.java index 2d0204efe..b99f87b75 100644 --- a/restx-jongo/src/main/java/restx/mongo/MongoModule.java +++ b/restx-jongo/src/main/java/restx/mongo/MongoModule.java @@ -26,6 +26,7 @@ public class MongoModule { public static final String MONGO_CLIENT_NAME = "mongoClient"; public static final String MONGO_DB_NAME = "mongo.db"; + public static final String MONGO_URI = "mongo.uri"; @Provides @Named(MONGO_CLIENT_NAME) public MongoClient mongoClient(MongoSettings settings) { diff --git a/restx-jongo/src/main/java/restx/mongo/MongoSettings.java b/restx-jongo/src/main/java/restx/mongo/MongoSettings.java index c6f4529ac..3e1f6e2ce 100644 --- a/restx-jongo/src/main/java/restx/mongo/MongoSettings.java +++ b/restx-jongo/src/main/java/restx/mongo/MongoSettings.java @@ -12,7 +12,7 @@ public interface MongoSettings { @SettingsKey(key = MongoModule.MONGO_DB_NAME, doc = "the name of the mongo database to use") String dbName(); - @SettingsKey(key = "mongo.uri", defaultValue = "mongodb://localhost:27017", + @SettingsKey(key = MongoModule.MONGO_URI, defaultValue = "mongodb://localhost:27017", doc = "the mongo URI to use to connect to mongodb. " + "See http://api.mongodb.org/java/current/com/mongodb/MongoClientURI.html") String uri();