package org.mongodb.morphia; import com.mongodb.BasicDBObject; import com.mongodb.CommandResult; import com.mongodb.DB; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.client.MongoDatabase; import org.junit.After; import org.junit.Assume; import org.junit.Before; import java.util.Iterator; @SuppressWarnings({"deprecation", "WeakerAccess"}) public abstract class TestBase { protected static final String TEST_DB_NAME = "morphia_test"; private final MongoClient mongoClient; private final Morphia morphia = new Morphia(); private final DB db; private final MongoDatabase database; private final Datastore ds; protected TestBase() { this(new MongoClient(new MongoClientURI(getMongoURI()))); } protected TestBase(final MongoClient mongoClient) { this.mongoClient = mongoClient; this.db = getMongoClient().getDB(TEST_DB_NAME); this.database = getMongoClient().getDatabase(TEST_DB_NAME); this.ds = getMorphia().createDatastore(getMongoClient(), getDb().getName()); } protected static String getMongoURI() { return System.getProperty("MONGO_URI", "mongodb://localhost:27017"); } public AdvancedDatastore getAds() { return (AdvancedDatastore) getDs(); } public DB getDb() { return db; } public MongoDatabase getDatabase() { return database; } public Datastore getDs() { return ds; } public MongoClient getMongoClient() { return mongoClient; } public Morphia getMorphia() { return morphia; } public boolean isReplicaSet() { return runIsMaster().get("setName") != null; } @Before public void setUp() { cleanup(); } @After public void tearDown() { cleanup(); getMongoClient().close(); } protected void checkMinServerVersion(final double version) { Assume.assumeTrue(serverIsAtLeastVersion(version)); } protected void cleanup() { DB db = getDb(); if (db != null) { db.dropDatabase(); } } protected int count(final Iterator<?> iterator) { int count = 0; while (iterator.hasNext()) { count++; iterator.next(); } return count; } /** * @param version must be a major version, e.g. 1.8, 2,0, 2.2 * @return true if server is at least specified version */ protected boolean serverIsAtLeastVersion(final double version) { String serverVersion = (String) getMongoClient().getDB("admin").command("serverStatus").get("version"); return Double.parseDouble(serverVersion.substring(0, 3)) >= version; } /** * @param version must be a major version, e.g. 1.8, 2,0, 2.2 * @return true if server is at least specified version */ protected boolean serverIsAtMostVersion(final double version) { String serverVersion = (String) getMongoClient().getDB("admin").command("serverStatus").get("version"); return Double.parseDouble(serverVersion.substring(0, 3)) <= version; } private CommandResult runIsMaster() { // Check to see if this is a replica set... if not, get out of here. return mongoClient.getDB("admin").command(new BasicDBObject("ismaster", 1)); } public BasicDBObject obj(final String key, final Object value) { return new BasicDBObject(key, value); } }