package com.mongodb.hadoop; import com.mongodb.MongoClientURI; import com.mongodb.hadoop.examples.treasury.TreasuryYieldXMLConfig; import com.mongodb.hadoop.mapred.output.MongoOutputCommitter; import com.mongodb.hadoop.splitter.MultiMongoCollectionSplitter; import com.mongodb.hadoop.splitter.SingleMongoSplitter; import com.mongodb.hadoop.testutils.MapReduceJob; import com.mongodb.hadoop.util.MongoClientURIBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.node.ArrayNode; import org.codehaus.jackson.node.JsonNodeFactory; import org.codehaus.jackson.node.ObjectNode; import org.junit.Before; import org.junit.Test; import static com.mongodb.hadoop.splitter.MultiMongoCollectionSplitter.MULTI_COLLECTION_CONF_KEY; import static com.mongodb.hadoop.util.MongoConfigUtil.INPUT_NOTIMEOUT; import static com.mongodb.hadoop.util.MongoConfigUtil.INPUT_URI; import static com.mongodb.hadoop.util.MongoConfigUtil.MONGO_SPLITTER_CLASS; import static com.mongodb.hadoop.util.MongoConfigUtil.SPLITS_USE_RANGEQUERY; import static org.junit.Assume.assumeFalse; public class TestStandalone extends TreasuryTest { private static final Log LOG = LogFactory.getLog(TestStandalone.class); private final MongoClientURI inputUri2; public TestStandalone() { inputUri2 = authCheck(new MongoClientURIBuilder() .collection("mongo_hadoop", "yield_historical.in2")) .build(); } @Before public void checkConfiguration() { assumeFalse(isSharded(getInputUri())); } @Test public void testBasicInputSource() { LOG.info("testing basic input source"); MapReduceJob treasuryJob = new MapReduceJob(TreasuryYieldXMLConfig.class.getName()) .jar(JOBJAR_PATH) .param("mongo.input.notimeout", "true") .inputUris(getInputUri()) .outputUri(getOutputUri()); if (isHadoopV1()) { treasuryJob.outputCommitter(MongoOutputCommitter.class); } treasuryJob.execute(isRunTestInVm()); compareResults(getClient(getInputUri()).getDB(getOutputUri().getDatabase()).getCollection(getOutputUri().getCollection()), getReference()); } @Test public void testTreasuryJsonConfig() { mongoImport("yield_historical.in3", TREASURY_JSON_PATH); MapReduceJob treasuryJob = new MapReduceJob("com.mongodb.hadoop.examples.treasury.TreasuryYieldXMLConfig") .jar(JOBJAR_PATH) .param(MONGO_SPLITTER_CLASS, MultiMongoCollectionSplitter.class.getName()) .param(MULTI_COLLECTION_CONF_KEY, collectionSettings().toString()) .outputUri(getOutputUri()); if (isHadoopV1()) { treasuryJob.outputCommitter(MongoOutputCommitter.class); } treasuryJob.execute(isRunTestInVm()); compareDoubled(getClient(getInputUri()).getDB(getOutputUri().getDatabase()).getCollection(getOutputUri().getCollection())); } @Test public void testMultipleCollectionSupport() { mongoImport(getInputUri().getCollection(), TREASURY_JSON_PATH); mongoImport(inputUri2.getCollection(), TREASURY_JSON_PATH); MapReduceJob treasuryJob = new MapReduceJob("com.mongodb.hadoop.examples.treasury.TreasuryYieldXMLConfig") .jar(JOBJAR_PATH) .param(MONGO_SPLITTER_CLASS, MultiMongoCollectionSplitter.class.getName()) .inputUris(getInputUri(), inputUri2) .outputUri(getOutputUri()); if (isHadoopV1()) { treasuryJob.outputCommitter(MongoOutputCommitter.class); } treasuryJob.execute(isRunTestInVm()); compareDoubled(getClient(getInputUri()).getDB(getOutputUri().getDatabase()).getCollection(getOutputUri().getCollection())); } private JsonNode collectionSettings() { ArrayNode settings = new ArrayNode(JsonNodeFactory.instance); ObjectNode node = new ObjectNode(JsonNodeFactory.instance); node.put(INPUT_URI, getInputUri().toString()); ObjectNode dow = new ObjectNode(JsonNodeFactory.instance); dow.put("dayOfWeek", "FRIDAY"); node.put("query", dow); node.put(MONGO_SPLITTER_CLASS, SingleMongoSplitter.class.getName()); node.put(SPLITS_USE_RANGEQUERY, true); node.put(INPUT_NOTIMEOUT, true); settings.add(node); MongoClientURI inputUri3 = authCheck(new MongoClientURIBuilder() .collection("mongo_hadoop", "yield_historical.in3")) .build(); node = new ObjectNode(JsonNodeFactory.instance); node.put(INPUT_URI, inputUri3.toString()); node.put(SPLITS_USE_RANGEQUERY, true); node.put(INPUT_NOTIMEOUT, true); settings.add(node); return settings; } }