This is an automated email from the ASF dual-hosted git repository. drazzib pushed a commit to branch GORA-669-improve-tests-stability in repository https://gitbox.apache.org/repos/asf/gora.git
commit 0713d547f658a497c48e7f74a04aff851802200c Author: Damien Raude-Morvan <draz...@drazzib.com> AuthorDate: Sat Oct 31 21:34:40 2020 +0100 GORA-669 Replace custom-made MongoContainer by org.testcontainers.containers.MongoDBContainer --- gora-benchmark/pom.xml | 12 ++++-- .../org/apache/gora/benchmark/GoraClientTest.java | 14 +++---- gora-mongodb/pom.xml | 8 ++++ .../apache/gora/mongodb/GoraMongodbTestDriver.java | 11 +++--- .../org/apache/gora/mongodb/MongoContainer.java | 46 ---------------------- .../GoraMongodbAuthenticationTestDriver.java | 17 ++++---- .../authentications/PLAIN_AuthenticationTest.java | 2 +- .../SCRAM_SHA_1_AuthenticationTest.java | 2 +- .../mongodb/mapreduce/GoraMongoMapredTest.java | 5 ++- .../gora/mongodb/store/TestMongoStore34.java | 5 ++- .../gora/mongodb/store/TestMongoStore36.java | 5 ++- .../gora/mongodb/store/TestMongoStore40.java | 5 ++- .../gora/mongodb/store/TestMongoStore42.java | 5 ++- .../store/TestMongoStoreMappingFromProperties.java | 12 +++--- .../store/TestMongoStoreMetadataAnalyzer.java | 6 +-- 15 files changed, 62 insertions(+), 93 deletions(-) diff --git a/gora-benchmark/pom.xml b/gora-benchmark/pom.xml index c8d6e9d..e29c5bb 100644 --- a/gora-benchmark/pom.xml +++ b/gora-benchmark/pom.xml @@ -188,9 +188,9 @@ </dependency> <dependency> - <groupId>org.apache.gora</groupId> - <artifactId>gora-mongodb</artifactId> - <type>test-jar</type> + <groupId>org.testcontainers</groupId> + <artifactId>mongodb</artifactId> + <version>${test.container.version}</version> <scope>test</scope> </dependency> @@ -199,5 +199,11 @@ <groupId>org.ektorp</groupId> <artifactId>org.ektorp</artifactId> </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>mongodb</artifactId> + <version>1.15.0-rc2</version> + <scope>test</scope> + </dependency> </dependencies> </project> 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 91a7c07..85f83ef 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,9 +17,7 @@ */ package org.apache.gora.benchmark; -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; @@ -27,6 +25,8 @@ import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; import site.ycsb.ByteIterator; import site.ycsb.Status; import site.ycsb.StringByteIterator; @@ -50,7 +50,7 @@ public class GoraClientTest { private static HashMap<String, ByteIterator> DATA_TO_UPDATE; private static HashMap<String, ByteIterator> INTEGER_DATA; private static boolean isMongoDBSetupDone = false; - private static MongoContainer mongo; + private static MongoDBContainer mongo; /** * Setup MongoDB embed cluster. This function will auto provision a MongoDB @@ -60,11 +60,10 @@ public class GoraClientTest { private void setupMongoDBCluster() { try { if (!isMongoDBSetupDone) { - mongo = new MongoContainer("3.6"); + mongo = new MongoDBContainer(DockerImageName.parse("mongo:3.6")); mongo.start(); } - ServerAddress address = mongo.getServerAddress(); - LOG.info("Started MongoDB Server on " + address.getHost() + ":" + address.getPort()); + LOG.info("Started MongoDB Server on " + mongo.getReplicaSetUrl()); isMongoDBSetupDone = true; } catch (Exception e) { LOG.info("Cannot Start MongoDB Server {}", e.getMessage(), e); @@ -99,8 +98,7 @@ public class GoraClientTest { String dataStoreToTest = GoraBenchmarkUtils.getDataBase(dataStoreProperties); if (Constants.MONGODB.equals(dataStoreToTest)) { setupMongoDBCluster(); - ServerAddress address = mongo.getServerAddress(); - properties.setProperty("gora.mongodb.servers", address.getHost() + ":" + address.getPort()); + properties.setProperty("gora.mongodb.servers", mongo.getContainerIpAddress() + ":" + mongo.getFirstMappedPort()); } benchmarkClient = new GoraBenchmarkClient(); diff --git a/gora-mongodb/pom.xml b/gora-mongodb/pom.xml index e802e0f..0578bb7 100644 --- a/gora-mongodb/pom.xml +++ b/gora-mongodb/pom.xml @@ -193,6 +193,14 @@ <artifactId>testcontainers</artifactId> <scope>test</scope> </dependency> + + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>mongodb</artifactId> + <version>${test.container.version}</version> + <scope>test</scope> + </dependency> + <!-- END of Testing Dependencies --> </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 73a60bb..e0729a3 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 @@ -18,12 +18,12 @@ package org.apache.gora.mongodb; import com.mongodb.MongoClient; -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 org.testcontainers.containers.MongoDBContainer; /** * Driver to set up an embedded MongoDB database instance for use in our @@ -34,13 +34,13 @@ public class GoraMongodbTestDriver extends GoraTestDriver { private static Logger log = LoggerFactory .getLogger(GoraMongodbTestDriver.class); - private MongoContainer _container; + private MongoDBContainer _container; private MongoClient _mongo; /** * Constructor for this class. */ - public GoraMongodbTestDriver(MongoContainer startedContainer) { + public GoraMongodbTestDriver(MongoDBContainer startedContainer) { super(MongoStore.class); this._container = startedContainer; } @@ -50,9 +50,8 @@ public class GoraMongodbTestDriver extends GoraTestDriver { */ @Override public void setUpClass() { - ServerAddress address = _container.getServerAddress(); - int port = address.getPort(); - String host = address.getHost(); + int port = _container.getMappedPort(27017); + String host = _container.getContainerIpAddress(); // Store Mongo server "host:port" in Hadoop configuration // so that MongoStore will be able to get it latter 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 deleted file mode 100644 index 231d82c..0000000 --- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/MongoContainer.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * 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.GenericContainer; - -/** - * Use {@link GenericContainer} - * from <a href="https://www.testcontainers.org/">Testcontainers.org</a> project - * to handle a MongoDB docker container. - */ -public class MongoContainer extends GenericContainer<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 b7d2c9e..37643fa 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,14 +17,14 @@ */ package org.apache.gora.mongodb.authentications; -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 org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; import java.io.IOException; import java.time.Duration; @@ -37,16 +37,16 @@ import static org.apache.commons.lang3.StringUtils.isEmpty; */ class GoraMongodbAuthenticationTestDriver extends GoraTestDriver { private static final Logger log = LoggerFactory.getLogger(GoraMongodbAuthenticationTestDriver.class); - private MongoContainer _container; + private MongoDBContainer _container; private final String adminUsername = "madhawa"; private final String adminPassword = "123"; - private final String useVersion; + private final DockerImageName useVersion; private final String authMechanisms; GoraMongodbAuthenticationTestDriver(String authMechanisms, String useVersion) { super(MongoStore.class); this.authMechanisms = authMechanisms; - this.useVersion = useVersion; + this.useVersion = DockerImageName.parse(useVersion); } private void doStart() throws Exception { @@ -58,9 +58,8 @@ class GoraMongodbAuthenticationTestDriver extends GoraTestDriver { } // Store Mongo server "host:port" in Hadoop configuration // so that MongoStore will be able to get it latter - ServerAddress address = _container.getServerAddress(); - int port = address.getPort(); - String host = address.getHost(); + int port = _container.getMappedPort(27017); + String host = _container.getContainerIpAddress(); conf.set(MongoStoreParameters.PROP_MONGO_SERVERS, host + ":" + port); conf.set(MongoStoreParameters.PROP_MONGO_DB, "admin"); @@ -84,7 +83,7 @@ class GoraMongodbAuthenticationTestDriver extends GoraTestDriver { } private void prepareExecutable() throws IOException { - _container = new MongoContainer(useVersion); + _container = new MongoDBContainer(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 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 a44f70d..4f96792 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 @@ -29,7 +29,7 @@ public class PLAIN_AuthenticationTest extends TestMongoStore { .getLogger(PLAIN_AuthenticationTest.class); static { try { - setTestDriver(new GoraMongodbAuthenticationTestDriver("PLAIN", "3.6")); + setTestDriver(new GoraMongodbAuthenticationTestDriver("PLAIN", "mongo: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 c8e95fb..1e620f3 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 @@ -25,7 +25,7 @@ import org.apache.gora.mongodb.store.TestMongoStore; public class SCRAM_SHA_1_AuthenticationTest extends TestMongoStore { static { try { - setTestDriver(new GoraMongodbAuthenticationTestDriver("SCRAM-SHA-1", "3.6")); + setTestDriver(new GoraMongodbAuthenticationTestDriver("SCRAM-SHA-1", "mongo: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 7315192..68ce0e6 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,10 +19,11 @@ 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; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; /** * Created by drazzib on 24/05/14. @@ -30,7 +31,7 @@ import org.junit.ClassRule; public class GoraMongoMapredTest { @ClassRule - public final static MongoContainer container = new MongoContainer("3.6"); + public final static MongoDBContainer container = new MongoDBContainer(DockerImageName.parse("mongo:3.6")); protected static GoraTestDriver testDriver = new GoraMongodbTestDriver(container); 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 5e54486..41255bd 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 @@ -18,8 +18,9 @@ package org.apache.gora.mongodb.store; import org.apache.gora.mongodb.GoraMongodbTestDriver; -import org.apache.gora.mongodb.MongoContainer; import org.junit.ClassRule; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; /** * Perform {@link TestMongoStore} tests on MongoDB 3.4.x server. @@ -27,7 +28,7 @@ import org.junit.ClassRule; public class TestMongoStore34 extends TestMongoStore { @ClassRule - public final static MongoContainer container = new MongoContainer("3.4"); + public final static MongoDBContainer container = new MongoDBContainer(DockerImageName.parse("mongo:3.4")); static { 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 dd69e42..8ac5587 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 @@ -18,8 +18,9 @@ package org.apache.gora.mongodb.store; import org.apache.gora.mongodb.GoraMongodbTestDriver; -import org.apache.gora.mongodb.MongoContainer; import org.junit.ClassRule; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; /** * Perform {@link TestMongoStore} tests on MongoDB 3.6.x server. @@ -27,7 +28,7 @@ import org.junit.ClassRule; public class TestMongoStore36 extends TestMongoStore { @ClassRule - public final static MongoContainer container = new MongoContainer("3.6"); + public final static MongoDBContainer container = new MongoDBContainer(DockerImageName.parse("mongo:3.6")); static { 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 6eb3d8b..26f52b9 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 @@ -18,8 +18,9 @@ package org.apache.gora.mongodb.store; import org.apache.gora.mongodb.GoraMongodbTestDriver; -import org.apache.gora.mongodb.MongoContainer; import org.junit.ClassRule; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; /** * Perform {@link TestMongoStore} tests on MongoDB 4.0.x server. @@ -27,7 +28,7 @@ import org.junit.ClassRule; public class TestMongoStore40 extends TestMongoStore { @ClassRule - public final static MongoContainer container = new MongoContainer("4.0"); + public final static MongoDBContainer container = new MongoDBContainer(DockerImageName.parse("mongo:4.0")); static { setTestDriver(new GoraMongodbTestDriver(container)); diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore42.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore42.java index 3d976c1..0461628 100644 --- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore42.java +++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStore42.java @@ -18,8 +18,9 @@ package org.apache.gora.mongodb.store; import org.apache.gora.mongodb.GoraMongodbTestDriver; -import org.apache.gora.mongodb.MongoContainer; import org.junit.ClassRule; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; /** * Perform {@link TestMongoStore} tests on MongoDB 4.2.x server. @@ -27,7 +28,7 @@ import org.junit.ClassRule; public class TestMongoStore42 extends TestMongoStore { @ClassRule - public final static MongoContainer container = new MongoContainer("4.2"); + public final static MongoDBContainer container = new MongoDBContainer(DockerImageName.parse("mongo:4.2")); static { setTestDriver(new GoraMongodbTestDriver(container)); diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMappingFromProperties.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMappingFromProperties.java index 550d25e..155cf06 100644 --- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMappingFromProperties.java +++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMappingFromProperties.java @@ -22,12 +22,13 @@ import com.mongodb.ServerAddress; import junit.framework.Assert; import org.apache.commons.io.IOUtils; import org.apache.gora.examples.generated.Employee; -import org.apache.gora.mongodb.MongoContainer; import org.apache.gora.store.DataStoreFactory; import org.apache.hadoop.conf.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; import java.io.IOException; import java.nio.charset.Charset; @@ -37,12 +38,12 @@ import java.util.Properties; * Test case for loading mappings from properties */ public class TestMongoStoreMappingFromProperties { - private MongoContainer _container; + private MongoDBContainer _container; @Before public void setUp() { // Container for MongoStore - this._container = new MongoContainer("4.2"); + this._container = new MongoDBContainer(DockerImageName.parse("mongo:4.2")); _container.start(); } @@ -57,9 +58,8 @@ public class TestMongoStoreMappingFromProperties { "</gora-otd>"; // Initiate the MongoDB server on the default port - ServerAddress address = _container.getServerAddress(); - int port = address.getPort(); - String host = address.getHost(); + int port = _container.getFirstMappedPort(); + String host = _container.getContainerIpAddress(); Properties prop = DataStoreFactory.createProps(); diff --git a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMetadataAnalyzer.java b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMetadataAnalyzer.java index 34f280d..f5e32ac 100644 --- a/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMetadataAnalyzer.java +++ b/gora-mongodb/src/test/java/org/apache/gora/mongodb/store/TestMongoStoreMetadataAnalyzer.java @@ -21,18 +21,18 @@ import com.google.common.collect.Sets; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoDatabase; import org.apache.gora.mongodb.GoraMongodbTestDriver; -import org.apache.gora.mongodb.MongoContainer; import org.apache.gora.store.DataStoreFactory; import org.apache.gora.store.DataStoreMetadataFactory; import org.apache.gora.store.impl.DataStoreMetadataAnalyzer; import org.apache.gora.util.GoraException; import org.apache.hadoop.conf.Configuration; import org.bson.Document; -import org.bson.types.ObjectId; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; +import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.utility.DockerImageName; import java.util.*; @@ -44,7 +44,7 @@ public class TestMongoStoreMetadataAnalyzer extends TestMongoStore { private MongoDatabase mongoDatabase; @ClassRule - public final static MongoContainer container = new MongoContainer("4.2"); + public final static MongoDBContainer container = new MongoDBContainer(DockerImageName.parse("mongo:4.2")); static { setTestDriver(new GoraMongodbTestDriver(container));