From 5a3d9763a08cdc296adc61d37a9e08e7e73528d8 Mon Sep 17 00:00:00 2001
From: "Robert J. Moore" <Robert.J.Moore@allanbank.com>
Date: Sat, 6 Jun 2015 14:11:49 -0400
Subject: [PATCH] Fix #284 - Switch to travis starting the test mongod
 instance.

---
 .travis.yml                                   |  4 +
 mongodb/pom.xml                               |  6 --
 .../yahoo/ycsb/db/AbstractDBTestCases.java    | 91 ++++++-------------
 3 files changed, 34 insertions(+), 67 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 9cce8d6c..a0dcb824 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,3 +10,7 @@ jdk:
 install: mvn install -q -DskipTests=true
 
 script: mvn test -q
+
+# Services to start for tests.
+services:
+  - mongodb
diff --git a/mongodb/pom.xml b/mongodb/pom.xml
index 3038e17d..96f6e658 100644
--- a/mongodb/pom.xml
+++ b/mongodb/pom.xml
@@ -42,12 +42,6 @@
             <version>4.12</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>de.flapdoodle.embed</groupId>
-            <artifactId>de.flapdoodle.embed.mongo</artifactId>
-            <version>1.47.3</version>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java b/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java
index 503a83f3..79340e80 100644
--- a/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java
+++ b/mongodb/src/test/java/com/yahoo/ycsb/db/AbstractDBTestCases.java
@@ -17,20 +17,21 @@
 package com.yahoo.ycsb.db;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assume.assumeNoException;
 
-import java.io.File;
 import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Set;
 import java.util.Vector;
 
-import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -38,79 +39,47 @@ import com.yahoo.ycsb.ByteArrayByteIterator;
 import com.yahoo.ycsb.ByteIterator;
 import com.yahoo.ycsb.DB;
 
-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.ArtifactStoreBuilder;
-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.io.directories.FixedPath;
-import de.flapdoodle.embed.process.runtime.Network;
-
 /**
  * MongoDbClientTest provides runs the basic DB test cases.
+ * <p>
+ * The tests will be skipped if MongoDB is not running on port 27017 on the
+ * local machine. See the README.md for how to get MongoDB running.
+ * </p>
  */
 @SuppressWarnings("boxing")
 public abstract class AbstractDBTestCases {
 
-    /** The running Mongodb process. */
-    private static MongodProcess ourMongod = null;
-
-    /** The handle to the running server. */
-    private static MongodExecutable ourMongodExecutable = null;
-
-    /** The directory to download the MongoDB executables to. */
-    private static final File TMP_DIR = new File("target/mongodb");
+    /** The default port for MongoDB. */
+    private static final int MONGODB_DEFAULT_PORT = 27017;
 
     /**
-     * Start a test mongd instance.
+     * Verifies the mongod process (or some process) is running on port 27017,
+     * if not the tests are skipped.
      */
     @BeforeClass
     public static void setUpBeforeClass() {
-        TMP_DIR.mkdirs();
-
-        MongodStarter starter = MongodStarter
-                .getInstance(new RuntimeConfigBuilder()
-                        .defaults(Command.MongoD)
-                        .artifactStore(
-                                new ArtifactStoreBuilder()
-                                        .defaults(Command.MongoD)
-                                        .useCache(false)
-                                        .tempDir(
-                                                new FixedPath(TMP_DIR
-                                                        .getAbsolutePath())))
-                        .build());
-        int port = 27017;
-
+        // Test if we can connect.
+        Socket socket = null;
         try {
-            IMongodConfig mongodConfig = new MongodConfigBuilder()
-                    .version(Version.Main.PRODUCTION)
-                    .net(new Net(port, Network.localhostIsIPv6())).build();
-
-            ourMongodExecutable = starter.prepare(mongodConfig);
-            ourMongod = ourMongodExecutable.start();
+            // Connect
+            socket = new Socket(InetAddress.getLocalHost(),
+                    MONGODB_DEFAULT_PORT);
+            assertThat("Socket is not bound.", socket.getLocalPort(), not(-1));
         }
-        catch (IOException error) {
-            assumeNoException(error);
+        catch (IOException connectFailed) {
+            assumeNoException("MongoDB is not running. Skipping tests.",
+                    connectFailed);
         }
-    }
-
-    /**
-     * Stops the test server.
-     */
-    @AfterClass
-    public static void tearDownAfterClass() {
-        if (ourMongod != null) {
-            ourMongod.stop();
-            ourMongod = null;
-        }
-        if (ourMongodExecutable != null) {
-            ourMongodExecutable.stop();
-            ourMongodExecutable = null;
+        finally {
+            if (socket != null) {
+                try {
+                    socket.close();
+                }
+                catch (IOException ignore) {
+                    // Ignore.
+                }
+            }
+            socket = null;
         }
     }
 
-- 
GitLab