package com.mongodb.hadoop.splitter;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoDatabase;
import com.mongodb.hadoop.testutils.BaseHadoopTest;
import com.mongodb.hadoop.util.MongoConfigUtil;
import org.apache.hadoop.conf.Configuration;
import org.bson.Document;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class MongoSplitterFactoryTest extends BaseHadoopTest {
private static MongoClientURI uri =
new MongoClientURI(
"mongodb://localhost:27017/mongo_hadoop.splitter_factory_test");
private static MongoClient client;
@BeforeClass
public static void setUpClass() {
client = new MongoClient(uri);
// Create collection so that we can call "collstats" on it.
client.getDatabase(uri.getDatabase())
.getCollection(uri.getCollection()).insertOne(
new Document("this collection exists now", true));
// Shard the collection if we're connected to a sharded cluster.
Document isMaster = client.getDatabase("admin")
.runCommand(new Document("ismaster", 1));
if (isMaster.get("msg") != null && isMaster.get("msg").equals("isdbgrid")) {
String ns = uri.getDatabase() + "." + uri.getCollection();
MongoDatabase adminDB = client.getDatabase("admin");
adminDB.runCommand(
new Document("enableSharding", uri.getDatabase()));
adminDB.runCommand(
new Document("shardCollection", ns)
.append("key", new Document("_id", 1)));
}
}
@AfterClass
public static void tearDownClass() {
client.dropDatabase(uri.getDatabase());
}
@Test
public void testDefaultSplitter() {
Configuration conf = new Configuration();
MongoConfigUtil.setInputURI(conf, uri);
MongoSplitter defaultSplitter = MongoSplitterFactory.getSplitter(conf);
if (isSharded(uri)) {
assertTrue(
defaultSplitter instanceof ShardChunkMongoSplitter);
MongoConfigUtil.setShardChunkSplittingEnabled(conf, false);
MongoConfigUtil.setReadSplitsFromShards(conf, true);
assertTrue(
MongoSplitterFactory.getSplitter(conf)
instanceof ShardMongoSplitter);
} else {
if (isSampleOperatorSupported(uri)) {
assertTrue(defaultSplitter instanceof SampleSplitter);
} else {
assertTrue(defaultSplitter instanceof StandaloneMongoSplitter);
}
}
}
}