Merge pull request #285 from allanbank/ycsb_284

Fix #284 - Switch to travis starting the test mongod instance.
This commit is contained in:
Connor McCoy 2015-06-08 18:23:45 -07:00
Родитель facb9fe4fe 042f1458f8
Коммит 076b8024ba
4 изменённых файлов: 43 добавлений и 72 удалений

Просмотреть файл

@ -10,3 +10,7 @@ jdk:
install: mvn install -q -DskipTests=true
script: mvn test -q
# Services to start for tests.
services:
- mongodb

Просмотреть файл

@ -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>

Просмотреть файл

@ -129,7 +129,7 @@ public class MongoDbClient extends DB {
Document query = new Document("_id", key);
DeleteResult result = collection.withWriteConcern(writeConcern)
.deleteOne(query);
if (result.getDeletedCount() == 0) {
if (result.wasAcknowledged() && result.getDeletedCount() == 0) {
System.err.println("Nothing deleted for key " + key);
return 1;
}
@ -253,11 +253,14 @@ public class MongoDbClient extends DB {
if (batchSize <= 1) {
UpdateResult result = collection.withWriteConcern(writeConcern)
.replaceOne(criteria, toInsert, UPSERT);
if (result.getMatchedCount() > 0
|| result.getModifiedCount() > 0
if (!result.wasAcknowledged()
|| result.getMatchedCount() > 0
|| (result.isModifiedCountAvailable() && (result
.getModifiedCount() > 0))
|| result.getUpsertedId() != null) {
return 0;
}
System.err.println("Nothing inserted for key " + key);
return 1;
}
@ -272,7 +275,8 @@ public class MongoDbClient extends DB {
BulkWriteResult result = collection.withWriteConcern(
writeConcern).bulkWrite(bulkInserts,
new BulkWriteOptions().ordered(false));
if (result.getInsertedCount() == bulkInserts.size()) {
if (!result.wasAcknowledged()
|| result.getInsertedCount() == bulkInserts.size()) {
bulkInserts.clear();
return 0;
}
@ -445,7 +449,7 @@ public class MongoDbClient extends DB {
UpdateResult result = collection.withWriteConcern(writeConcern)
.updateOne(query, update);
if (result.getMatchedCount() == 0) {
if (result.wasAcknowledged() && result.getMatchedCount() == 0) {
System.err.println("Nothing updated for key " + key);
return 1;
}

Просмотреть файл

@ -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;
}
}