You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by dr...@apache.org on 2020/03/29 12:54:14 UTC
[gora] branch master updated: GORA-647 Use Testcontainers for
MongoDB integration tests (#206)
This is an automated email from the ASF dual-hosted git repository.
drazzib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/gora.git
The following commit(s) were added to refs/heads/master by this push:
new e24756f GORA-647 Use Testcontainers for MongoDB integration tests (#206)
e24756f is described below
commit e24756f6441bf00c25d245e3ef37798ca9acacce
Author: Damien Raude-Morvan <dr...@drazzib.com>
AuthorDate: Sun Mar 29 14:54:07 2020 +0200
GORA-647 Use Testcontainers for MongoDB integration tests (#206)
* GORA-647 Update gora-mongodb/pom.xml to use testcontainers
Remove de.flapdoodle.embed.mongo dependency
Remove mongo.embed.version property
Add testcontainers dependency
* GORA-647 Create MongoContainer based on GenericContainer
* GORA-647 Use MongoContainer as JUnit @ClassRule
* GORA-647 Add new test for MongoDB 4.2
* GORA-647 Refactor GoraMongodbTestDriver
Provided container (passed in constructor) to configure Gora properties
* GORA-647 Update gora-benchmark/pom.xml to depends on gora-mongodb:test-jar
We can import MongoContainer in GoraClientTest
(with fixed MongoDB port on localhost)
* GORA-647 Refactor GoraMongodbAuthenticationTestDriver
Use MongoDB docker container feature to initialize superuser (via env)
Pass --auth and --setParameter authenticationMechanisms as commands
Use mongo shell CLI - inside container - to execute script
* GORA-647 Avoid using String.format
* GORA-647 Generate test-jar artifact in gora-mongodb
* GORA-647 Add apache licence headers
---
gora-benchmark/pom.xml | 11 +-
.../org/apache/gora/benchmark/GoraClientTest.java | 63 ++-----
gora-mongodb/pom.xml | 17 +-
.../apache/gora/mongodb/GoraMongodbTestDriver.java | 57 ++----
.../org/apache/gora/mongodb/MongoContainer.java | 46 +++++
.../GoraMongodbAuthenticationTestDriver.java | 193 ++++++---------------
.../authentications/PLAIN_AuthenticationTest.java | 6 +-
.../SCRAM_SHA_1_AuthenticationTest.java | 9 +-
.../mongodb/mapreduce/GoraMongoMapredTest.java | 8 +-
.../gora/mongodb/store/TestMongoStore34.java | 8 +-
.../gora/mongodb/store/TestMongoStore36.java | 8 +-
.../gora/mongodb/store/TestMongoStore40.java | 8 +-
...TestMongoStore40.java => TestMongoStore42.java} | 12 +-
pom.xml | 14 +-
14 files changed, 191 insertions(+), 269 deletions(-)
diff --git a/gora-benchmark/pom.xml b/gora-benchmark/pom.xml
index 1128017..c8d6e9d 100644
--- a/gora-benchmark/pom.xml
+++ b/gora-benchmark/pom.xml
@@ -175,8 +175,8 @@
</dependency>
<dependency>
- <groupId>de.flapdoodle.embed</groupId>
- <artifactId>de.flapdoodle.embed.mongo</artifactId>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
<scope>test</scope>
</dependency>
@@ -187,6 +187,13 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.gora</groupId>
+ <artifactId>gora-mongodb</artifactId>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
<!-- Apache CouchDB java client -->
<dependency>
<groupId>org.ektorp</groupId>
diff --git a/gora-benchmark/src/test/java/org/apache/gora/benchmark/GoraClientTest.java b/gora-benchmark/src/test/java/org/apache/gora/benchmark/GoraClientTest.java
index 321d151..b6a5cce 100644
--- a/gora-benchmark/src/test/java/org/apache/gora/benchmark/GoraClientTest.java
+++ b/gora-benchmark/src/test/java/org/apache/gora/benchmark/GoraClientTest.java
@@ -17,19 +17,9 @@
*/
package org.apache.gora.benchmark;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Vector;
-
+import com.mongodb.ServerAddress;
import org.apache.gora.benchmark.generated.User;
+import org.apache.gora.mongodb.MongoContainer;
import org.apache.gora.store.DataStoreFactory;
import org.apache.gora.util.GoraException;
import org.junit.After;
@@ -37,22 +27,19 @@ import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-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.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 site.ycsb.ByteIterator;
import site.ycsb.Status;
import site.ycsb.StringByteIterator;
import site.ycsb.workloads.CoreWorkload;
+import java.io.File;
+import java.util.*;
+
+import static org.apache.gora.mongodb.MongoContainer.MONGO_PORT;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
/**
* The Class GoraClientTest.
*/
@@ -63,9 +50,6 @@ public class GoraClientTest {
private static HashMap<String, ByteIterator> DATA_TO_INSERT;
private static HashMap<String, ByteIterator> DATA_TO_UPDATE;
private static HashMap<String, ByteIterator> INTEGER_DATA;
- private MongodExecutable mongodExecutable;
- private MongodProcess mongodProcess;
- private MongoClient mongoClient;
private static boolean isMongoDBSetupDone = false;
/**
@@ -74,28 +58,15 @@ public class GoraClientTest {
* {@link setUp() class} which is executed testUpdate after each test.
*/
private void setupMongoDBCluster() {
- MongodStarter starter = MongodStarter.getDefaultInstance();
- String bindIp = Constants.LOCALHOST;
- int port = Constants.MONGO_DEFAULT_PORT;
- IMongodConfig mongodConfig = null;
- try {
- mongodConfig = new MongodConfigBuilder().version(Version.Main.PRODUCTION)
- .net(new Net(bindIp, port, Network.localhostIsIPv6())).build();
- } catch (IOException e) {
- LOG.info("There is a problem in configuring MongoDB", e.getMessage(), e);
- }
- this.mongodExecutable = starter.prepare(mongodConfig);
try {
- LOG.info("Starting MongDB Server on port " + bindIp + ":" + port);
- this.mongodProcess = mongodExecutable.start();
- } catch (IOException e) {
- LOG.info("Cannot Start MongDB Server on port " + bindIp + ":" + port, e.getMessage(), e);
- this.mongodProcess.stop();
- this.mongodExecutable.stop();
- if (this.mongoClient != null)
- this.mongoClient.close();
+ MongoContainer mongo = new MongoContainer("3.6")
+ .withFixedExposedPort(MONGO_PORT, MONGO_PORT);
+ mongo.start();
+ ServerAddress address = mongo.getServerAddress();
+ LOG.info("Started MongoDB Server on " + address.getHost() + ":" + address.getPort());
+ } catch (Exception e) {
+ LOG.info("Cannot Start MongoDB Server {}", e.getMessage(), e);
}
- this.mongoClient = new MongoClient(bindIp, port);
}
/**
diff --git a/gora-mongodb/pom.xml b/gora-mongodb/pom.xml
index e3c9566..e802e0f 100644
--- a/gora-mongodb/pom.xml
+++ b/gora-mongodb/pom.xml
@@ -52,7 +52,6 @@
<properties>
<osgi.import>*</osgi.import>
<osgi.export>org.apache.gora.mongodb*;version="${project.version}";-noimport:=true</osgi.export>
- <mongo.embed.version>2.2.0</mongo.embed.version>
</properties>
<build>
@@ -73,6 +72,17 @@
</testResources>
<plugins>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${build-helper-maven-plugin.version}</version>
@@ -179,9 +189,8 @@
</dependency>
<dependency>
- <groupId>de.flapdoodle.embed</groupId>
- <artifactId>de.flapdoodle.embed.mongo</artifactId>
- <version>${mongo.embed.version}</version>
+ <groupId>org.testcontainers</groupId>
+ <artifactId>testcontainers</artifactId>
<scope>test</scope>
</dependency>
<!-- END of Testing Dependencies -->
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java
index a7fe2cf..df6e4ed 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/GoraMongodbTestDriver.java
@@ -19,81 +19,49 @@ package org.apache.gora.mongodb;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
-import de.flapdoodle.embed.mongo.Command;
-import de.flapdoodle.embed.mongo.MongodExecutable;
-import de.flapdoodle.embed.mongo.MongodProcess;
-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.config.RuntimeConfigBuilder;
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.process.config.IRuntimeConfig;
-import de.flapdoodle.embed.process.config.io.ProcessOutput;
-import de.flapdoodle.embed.process.runtime.Network;
+import com.mongodb.ServerAddress;
import org.apache.gora.GoraTestDriver;
import org.apache.gora.mongodb.store.MongoStore;
import org.apache.gora.mongodb.store.MongoStoreParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-
/**
* Driver to set up an embedded MongoDB database instance for use in our
- * unit tests. We use embedded mongodb which is available from
- * https://github.com/flapdoodle-oss/embedmongo.flapdoodle.de
+ * unit tests. We use testcontainers.org project.
*/
public class GoraMongodbTestDriver extends GoraTestDriver {
private static Logger log = LoggerFactory
.getLogger(GoraMongodbTestDriver.class);
- private MongodExecutable _mongodExe;
- private MongodProcess _mongod;
+ private MongoContainer _container;
private MongoClient _mongo;
- private final Version.Main version;
/**
* Constructor for this class.
*/
- public GoraMongodbTestDriver() {
- this(Version.Main.PRODUCTION);
- }
-
- public GoraMongodbTestDriver(Version.Main version) {
+ public GoraMongodbTestDriver(MongoContainer startedContainer) {
super(MongoStore.class);
- this.version = version;
+ this._container = startedContainer;
}
/**
* Initiate the MongoDB server on the default port
*/
@Override
- public void setUpClass() throws IOException {
- IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder()
- .defaultsWithLogger(Command.MongoD, log)
- .processOutput(ProcessOutput.getDefaultInstanceSilent())
- .build();
-
- MongodStarter runtime = MongodStarter.getInstance(runtimeConfig);
-
- int port = Network.getFreeServerPort();
- IMongodConfig mongodConfig = new MongodConfigBuilder()
- .version(version)
- .net(new Net(port, Network.localhostIsIPv6())).build();
+ public void setUpClass() {
+ ServerAddress address = _container.getServerAddress();
+ int port = address.getPort();
+ String host = address.getHost();
// Store Mongo server "host:port" in Hadoop configuration
// so that MongoStore will be able to get it latter
- conf.set(MongoStoreParameters.PROP_MONGO_SERVERS, "127.0.0.1:" + port);
+ conf.set(MongoStoreParameters.PROP_MONGO_SERVERS, host + ":" + port);
log.info("Starting embedded Mongodb server on {} port.", port);
try {
-
- _mongodExe = runtime.prepare(mongodConfig);
- _mongod = _mongodExe.start();
-
- _mongo = new MongoClient("localhost", port);
+ _mongo = new MongoClient(address);
} catch (Exception e) {
log.error("Error starting embedded Mongodb server... tearing down test driver.");
tearDownClass();
@@ -106,8 +74,7 @@ public class GoraMongodbTestDriver extends GoraTestDriver {
@Override
public void tearDownClass() {
log.info("Shutting down mongodb server...");
- _mongod.stop();
- _mongodExe.stop();
+ _container.stop();
}
public Mongo getMongo() {
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/MongoContainer.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/MongoContainer.java
new file mode 100644
index 0000000..9abf2a9
--- /dev/null
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/MongoContainer.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.gora.mongodb;
+
+import com.mongodb.ServerAddress;
+import org.testcontainers.containers.FixedHostPortGenericContainer;
+
+/**
+ * Use {@link FixedHostPortGenericContainer}
+ * from <a href="https://www.testcontainers.org/">Testcontainers.org</a> project
+ * to handle a MongoDB docker container.
+ */
+public class MongoContainer extends FixedHostPortGenericContainer<MongoContainer> {
+
+ public static final int MONGO_PORT = 27017;
+
+ public MongoContainer(String version) {
+ super("mongo:" + version);
+ withExposedPorts(MONGO_PORT);
+ }
+
+ public ServerAddress getServerAddress() {
+ String ipAddress = getContainerIpAddress();
+ int port = getMongoPort();
+ return new ServerAddress(ipAddress, port);
+ }
+
+ public int getMongoPort() {
+ return getMappedPort(MONGO_PORT);
+ }
+}
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/GoraMongodbAuthenticationTestDriver.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/GoraMongodbAuthenticationTestDriver.java
index 38e8616..b7d2c9e 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/GoraMongodbAuthenticationTestDriver.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/GoraMongodbAuthenticationTestDriver.java
@@ -17,91 +17,54 @@
*/
package org.apache.gora.mongodb.authentications;
-import de.flapdoodle.embed.mongo.*;
-import de.flapdoodle.embed.mongo.config.*;
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.process.config.IRuntimeConfig;
-import de.flapdoodle.embed.process.config.io.ProcessOutput;
-import de.flapdoodle.embed.process.io.IStreamProcessor;
-import de.flapdoodle.embed.process.io.LogWatchStreamProcessor;
-import de.flapdoodle.embed.process.io.NamedOutputStreamProcessor;
-import de.flapdoodle.embed.process.runtime.Network;
+import com.mongodb.ServerAddress;
import org.apache.gora.GoraTestDriver;
+import org.apache.gora.mongodb.MongoContainer;
import org.apache.gora.mongodb.store.MongoStore;
import org.apache.gora.mongodb.store.MongoStoreParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.Container;
-import java.io.File;
import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Collections;
-import java.util.HashSet;
+import java.time.Duration;
-import static de.flapdoodle.embed.process.io.Processors.console;
-import static de.flapdoodle.embed.process.io.Processors.namedConsole;
-import static java.util.Arrays.asList;
import static org.apache.commons.lang3.StringUtils.isEmpty;
/**
* Driver to set up an embedded MongoDB database instance for use in our * unit tests.
* This class is specially written to automate authentication mechanisms.
- * We use embedded mongodb which is available from
- * https://github.com/flapdoodle-oss/embedmongo.flapdoodle.de
*/
class GoraMongodbAuthenticationTestDriver extends GoraTestDriver {
private static final Logger log = LoggerFactory.getLogger(GoraMongodbAuthenticationTestDriver.class);
- private static final int INIT_TIMEOUT_MS = 30000;
- private static final String USER_ADDED_TOKEN = "Successfully added user";
- private ThreadLocal<Boolean> started = new ThreadLocal<>();
- private int port;
- private MongodExecutable _mongodExe;
- private MongodProcess _mongod;
- private MongodStarter runtime;
- private IMongodConfig mongodConfig;
- private String adminUsername = "madhawa";
- private String adminPassword = "123";
- private Version.Main useVersion;
- private String authMechanisms;
- private boolean auth = false;
-
- GoraMongodbAuthenticationTestDriver(String authMechanisms, Version.Main useVersion) throws IOException {
+ private MongoContainer _container;
+ private final String adminUsername = "madhawa";
+ private final String adminPassword = "123";
+ private final String useVersion;
+ private final String authMechanisms;
+
+ GoraMongodbAuthenticationTestDriver(String authMechanisms, String useVersion) {
super(MongoStore.class);
this.authMechanisms = authMechanisms;
this.useVersion = useVersion;
- started.set(false);
- if (!this.authMechanisms.equals("MONGODB-CR")) {
- auth = true;
- }
-
}
private void doStart() throws Exception {
- IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder()
- .defaultsWithLogger(Command.MongoD, log)
- .processOutput(ProcessOutput.getDefaultInstanceSilent())
- .build();
- runtime = MongodStarter.getInstance(runtimeConfig);
try {
- log.info("Starting the mongo server without authentications");
+ log.info("Starting the embedded Mongodb server");
startWithAuth();
- log.info("Adding admin user");
- addAdmin();
- if (this.authMechanisms.equals("SCRAM-SHA-1")) {
+ if (authMechanisms.equals("SCRAM-SHA-1")) {
setSCRAM_SHA_1Credentials();
}
- if (this.authMechanisms.equals("MONGODB-CR")) {
- setMongoDB_CRCredentials();
- tearDownClass();
- auth = true;
- startWithAuth();
- addAdmin();
- }
// Store Mongo server "host:port" in Hadoop configuration
// so that MongoStore will be able to get it latter
- conf.set(MongoStoreParameters.PROP_MONGO_SERVERS, "127.0.0.1:" + port);
+ ServerAddress address = _container.getServerAddress();
+ int port = address.getPort();
+ String host = address.getHost();
+
+ conf.set(MongoStoreParameters.PROP_MONGO_SERVERS, host + ":" + port);
conf.set(MongoStoreParameters.PROP_MONGO_DB, "admin");
- conf.set(MongoStoreParameters.PROP_MONGO_AUTHENTICATION_TYPE, this.authMechanisms);
+ conf.set(MongoStoreParameters.PROP_MONGO_AUTHENTICATION_TYPE, authMechanisms);
conf.set(MongoStoreParameters.PROP_MONGO_LOGIN, adminUsername);
conf.set(MongoStoreParameters.PROP_MONGO_SECRET, adminPassword);
} catch (Exception e) {
@@ -112,11 +75,8 @@ class GoraMongodbAuthenticationTestDriver extends GoraTestDriver {
private void startWithAuth() throws IOException {
try {
- if(!started.get()) {
- prepareExecutable();
- _mongod = _mongodExe.start();
- started.set(true);
- }
+ prepareExecutable();
+ _container.start();
} catch (Exception e) {
log.error("Error starting embedded Mongodb server... tearing down test driver.");
tearDownClass();
@@ -124,96 +84,51 @@ class GoraMongodbAuthenticationTestDriver extends GoraTestDriver {
}
private void prepareExecutable() throws IOException {
- final MongoCmdOptionsBuilder cmdBuilder = new MongoCmdOptionsBuilder();
- cmdBuilder.enableAuth(auth);
- final IMongoCmdOptions cmdOptions = cmdBuilder.build();
- MongodConfigBuilder builder = new MongodConfigBuilder()
- .version(useVersion)
- .cmdOptions(cmdOptions)
- .net(new Net(port, Network.localhostIsIPv6()));
- if (auth) {
- builder.setParameter("authenticationMechanisms", authMechanisms);
- }
-
- mongodConfig = builder.build();
- _mongodExe = runtime.prepare(mongodConfig);
- }
-
- private void addAdmin() throws IOException, InterruptedException {
- final String scriptText = "db.createUser(\n" +
- " {\n" +
- " user: \"madhawa\",\n" +
- " pwd: \"123\",\n" +
- " roles: [ { role: \"root\", db: \"admin\" } ]\n" +
- " }\n" +
- ");";
- runScriptAndWait(scriptText, USER_ADDED_TOKEN, new String[]{"couldn't add user", "failed to load", "login failed"}, "admin", null, null);
- }
-
- private void setMongoDB_CRCredentials() throws Exception {
- final String scriptText1 = "var schema = db.system.version.findOne({\"_id\" : \"authSchema\"});\nschema.currentVersion = 3;\ndb.system.version.save(schema);\n";
- // final String scriptText1 = "db.system.version.remove({});\ndb.system.version.insert({ \"_id\" : \"authSchema\", \"currentVersion\" : 3 });";
- runScriptAndWait(scriptText1, "Successfully added authSchema", null, "admin", adminUsername, adminPassword);
+ _container = new MongoContainer(useVersion);
+ // https://hub.docker.com/_/mongo
+ // These variables, used in conjunction, create a new user and set that user's password.
+ // This user is created in the admin authentication database
+ // and given the role of root, which is a "superuser" role.
+ _container.withEnv("MONGO_INITDB_ROOT_USERNAME", adminUsername);
+ _container.withEnv("MONGO_INITDB_ROOT_PASSWORD", adminPassword);
+
+ // To enable authentication, MongoDB will have to restart itself
+ // so wait for at least 5 sec
+ _container.withMinimumRunningDuration(Duration.ofSeconds(5));
+
+ // https://docs.mongodb.com/manual/tutorial/enable-authentication/
+ // https://docs.mongodb.com/manual/reference/parameters/#param.authenticationMechanisms
+ _container.withCommand("--auth", "--setParameter", "authenticationMechanisms=" + authMechanisms);
}
private void setSCRAM_SHA_1Credentials() throws Exception {
final String scriptText1 = "db.adminCommand({authSchemaUpgrade: 1});\n";
- runScriptAndWait(scriptText1, "Successfully added authSchema", null, "admin", adminUsername, adminPassword);
+ runScriptAndWait(scriptText1, "admin", adminUsername, adminPassword);
}
- private void runScriptAndWait(String scriptText, String token, String[] failures, String dbName, String username, String password) throws IOException {
- IStreamProcessor mongoOutput;
- if (!isEmpty(token)) {
- mongoOutput = new LogWatchStreamProcessor(
- token,
- (failures != null) ? new HashSet<>(asList(failures)) : Collections.emptySet(),
- namedConsole("[mongo shell output]"));
- } else {
- mongoOutput = new NamedOutputStreamProcessor("[mongo shell output]", console());
- }
- IRuntimeConfig runtimeConfig = new RuntimeConfigBuilder()
- .defaults(Command.Mongo)
- .processOutput(new ProcessOutput(
- mongoOutput,
- namedConsole("[mongo shell error]"),
- console()))
- .build();
- MongoShellStarter starter = MongoShellStarter.getInstance(runtimeConfig);
-
- final File scriptFile = writeTmpScriptFile(scriptText);
- final MongoShellConfigBuilder builder = new MongoShellConfigBuilder();
- if (!isEmpty(dbName)) {
- builder.dbName(dbName);
- }
+ private void runScriptAndWait(String scriptText, String dbName, String username, String password)
+ throws InterruptedException, IOException {
+ final StringBuilder builder = new StringBuilder("mongo --quiet");
if (!isEmpty(username)) {
- builder.username(username);
+ builder.append(" --username ").append(username);
}
if (!isEmpty(password)) {
- builder.password(password);
+ builder.append(" --password ").append(password);
}
- starter.prepare(builder
- .scriptName(scriptFile.getAbsolutePath())
- .version(mongodConfig.version())
- .net(mongodConfig.net())
- .build()).start();
- if (mongoOutput instanceof LogWatchStreamProcessor) {
- ((LogWatchStreamProcessor) mongoOutput).waitForResult(INIT_TIMEOUT_MS);
+ if (!isEmpty(dbName)) {
+ builder.append(" ").append(dbName);
}
- }
+ builder.append(" --eval '").append(scriptText).append("'");
- private File writeTmpScriptFile(String scriptText) throws IOException {
- File scriptFile = File.createTempFile("tempfile", ".js");
- scriptFile.deleteOnExit();
- PrintWriter writer = new PrintWriter(scriptFile, "UTF-8");
- writer.write(scriptText);
- writer.close();
- return scriptFile;
+ Container.ExecResult res = _container.execInContainer("/bin/bash", "-c", builder.toString());
+ if (!isEmpty(res.getStderr())) {
+ log.error("Unable to run script on Mongodb server {}: {}", scriptText, res.getStderr());
+ throw new IOException(res.getStderr());
+ }
}
@Override
public void setUpClass() throws Exception {
- port = Network.getFreeServerPort();
- log.info("Starting embedded Mongodb server on {} port.", port);
doStart();
}
@@ -223,12 +138,6 @@ class GoraMongodbAuthenticationTestDriver extends GoraTestDriver {
@Override
public void tearDownClass() {
log.info("Shutting down mongodb server...");
- if(started.get()) {
- _mongod.stop();
- _mongodExe.stop();
- started.set(false);
- }
+ _container.stop();
}
-
-
}
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/PLAIN_AuthenticationTest.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/PLAIN_AuthenticationTest.java
index efd14fc..a44f70d 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/PLAIN_AuthenticationTest.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/PLAIN_AuthenticationTest.java
@@ -17,21 +17,19 @@
*/
package org.apache.gora.mongodb.authentications;
-import de.flapdoodle.embed.mongo.distribution.Version;
-import org.apache.gora.mongodb.GoraMongodbTestDriver;
import org.apache.gora.mongodb.store.TestMongoStore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Perform {@link TestMongoStore} tests on MongoDB 3.2.x server with Plain Authentication mechanism.
+ * Perform {@link TestMongoStore} tests on MongoDB 3.6.x server with Plain Authentication mechanism.
*/
public class PLAIN_AuthenticationTest extends TestMongoStore {
private static Logger log = LoggerFactory
.getLogger(PLAIN_AuthenticationTest.class);
static {
try {
- setTestDriver(new GoraMongodbAuthenticationTestDriver("PLAIN", Version.Main.V3_4));
+ setTestDriver(new GoraMongodbAuthenticationTestDriver("PLAIN", "3.6"));
} catch (Exception e) {
log.error("MongoDb Test Driver initialization failed. "+ e.getMessage());
}
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/SCRAM_SHA_1_AuthenticationTest.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/SCRAM_SHA_1_AuthenticationTest.java
index c7fd045..c8e95fb 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/SCRAM_SHA_1_AuthenticationTest.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/authentications/SCRAM_SHA_1_AuthenticationTest.java
@@ -17,20 +17,15 @@
*/
package org.apache.gora.mongodb.authentications;
-import de.flapdoodle.embed.mongo.distribution.Version;
import org.apache.gora.mongodb.store.TestMongoStore;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
-
/**
- * Perform {@link TestMongoStore} tests on MongoDB 3.2.x server with SCRAM-SHA-1 Authentication mechanism
+ * Perform {@link TestMongoStore} tests on MongoDB 3.6.x server with SCRAM-SHA-1 Authentication mechanism
*/
public class SCRAM_SHA_1_AuthenticationTest extends TestMongoStore {
static {
try {
- setTestDriver(new GoraMongodbAuthenticationTestDriver("SCRAM-SHA-1", Version.Main.V3_4));
+ setTestDriver(new GoraMongodbAuthenticationTestDriver("SCRAM-SHA-1", "3.6"));
} catch (Exception e) {
log.error("MongoDb Test Driver initialization failed. "+ e.getMessage());
}
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/mapreduce/GoraMongoMapredTest.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/mapreduce/GoraMongoMapredTest.java
index 77cfc0d..7315192 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/mapreduce/GoraMongoMapredTest.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/mapreduce/GoraMongoMapredTest.java
@@ -19,14 +19,20 @@ package org.apache.gora.mongodb.mapreduce;
import org.apache.gora.GoraTestDriver;
import org.apache.gora.mongodb.GoraMongodbTestDriver;
+import org.apache.gora.mongodb.MongoContainer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
+import org.junit.ClassRule;
/**
* Created by drazzib on 24/05/14.
*/
public class GoraMongoMapredTest {
- protected static GoraTestDriver testDriver = new GoraMongodbTestDriver();
+
+ @ClassRule
+ public final static MongoContainer container = new MongoContainer("3.6");
+
+ protected static GoraTestDriver testDriver = new GoraMongodbTestDriver(container);
@BeforeClass
public static void setUpClass() throws Exception {
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore34.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore34.java
index 90c0359..5e54486 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore34.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore34.java
@@ -17,15 +17,19 @@
*/
package org.apache.gora.mongodb.store;
-import de.flapdoodle.embed.mongo.distribution.Version;
import org.apache.gora.mongodb.GoraMongodbTestDriver;
+import org.apache.gora.mongodb.MongoContainer;
+import org.junit.ClassRule;
/**
* Perform {@link TestMongoStore} tests on MongoDB 3.4.x server.
*/
public class TestMongoStore34 extends TestMongoStore {
+ @ClassRule
+ public final static MongoContainer container = new MongoContainer("3.4");
+
static {
- setTestDriver(new GoraMongodbTestDriver(Version.Main.V3_4));
+ setTestDriver(new GoraMongodbTestDriver(container));
}
}
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore36.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore36.java
index 7b5d0aa..dd69e42 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore36.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore36.java
@@ -17,15 +17,19 @@
*/
package org.apache.gora.mongodb.store;
-import de.flapdoodle.embed.mongo.distribution.Version;
import org.apache.gora.mongodb.GoraMongodbTestDriver;
+import org.apache.gora.mongodb.MongoContainer;
+import org.junit.ClassRule;
/**
* Perform {@link TestMongoStore} tests on MongoDB 3.6.x server.
*/
public class TestMongoStore36 extends TestMongoStore {
+ @ClassRule
+ public final static MongoContainer container = new MongoContainer("3.6");
+
static {
- setTestDriver(new GoraMongodbTestDriver(Version.Main.V3_6));
+ setTestDriver(new GoraMongodbTestDriver(container));
}
}
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore40.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore40.java
index 6cc9163..6eb3d8b 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore40.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore40.java
@@ -17,15 +17,19 @@
*/
package org.apache.gora.mongodb.store;
-import de.flapdoodle.embed.mongo.distribution.Version;
import org.apache.gora.mongodb.GoraMongodbTestDriver;
+import org.apache.gora.mongodb.MongoContainer;
+import org.junit.ClassRule;
/**
* Perform {@link TestMongoStore} tests on MongoDB 4.0.x server.
*/
public class TestMongoStore40 extends TestMongoStore {
+ @ClassRule
+ public final static MongoContainer container = new MongoContainer("4.0");
+
static {
- setTestDriver(new GoraMongodbTestDriver(Version.Main.V4_0));
+ setTestDriver(new GoraMongodbTestDriver(container));
}
}
diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore40.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore42.java
similarity index 73%
copy from gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore40.java
copy to gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore42.java
index 6cc9163..3d976c1 100644
--- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore40.java
+++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore42.java
@@ -17,15 +17,19 @@
*/
package org.apache.gora.mongodb.store;
-import de.flapdoodle.embed.mongo.distribution.Version;
import org.apache.gora.mongodb.GoraMongodbTestDriver;
+import org.apache.gora.mongodb.MongoContainer;
+import org.junit.ClassRule;
/**
- * Perform {@link TestMongoStore} tests on MongoDB 4.0.x server.
+ * Perform {@link TestMongoStore} tests on MongoDB 4.2.x server.
*/
-public class TestMongoStore40 extends TestMongoStore {
+public class TestMongoStore42 extends TestMongoStore {
+
+ @ClassRule
+ public final static MongoContainer container = new MongoContainer("4.2");
static {
- setTestDriver(new GoraMongodbTestDriver(Version.Main.V4_0));
+ setTestDriver(new GoraMongodbTestDriver(container));
}
}
diff --git a/pom.xml b/pom.xml
index 8f82b20..a375b96 100755
--- a/pom.xml
+++ b/pom.xml
@@ -869,7 +869,6 @@
<couchdb.version>1.4.2</couchdb.version>
<!-- MongoDB Dependencies -->
- <mongo.embed.version>2.0.0</mongo.embed.version>
<mongo.driver.version>3.12.2</mongo.driver.version>
<!-- HiveStore Dependencies -->
@@ -1069,6 +1068,12 @@
<artifactId>gora-mongodb</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.gora</groupId>
+ <artifactId>gora-mongodb</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ </dependency>
<!--Kudu DataStore dependencies -->
<dependency>
@@ -1825,13 +1830,6 @@
<!-- Gora MongoDB Dependencies -->
<dependency>
- <groupId>de.flapdoodle.embed</groupId>
- <artifactId>de.flapdoodle.embed.mongo</artifactId>
- <version>${mongo.embed.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>${mongo.driver.version}</version>