package com.mongodb.hadoop.hive; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.sql.SQLException; import java.util.List; import java.util.Random; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; public class TestHDFSToMongoDB extends HiveTest { @Before public void setUp() throws SQLException { loadDataIntoHDFSHiveTable(); loadDataIntoMongoDBHiveTable(false); } @After public void tearDown() throws SQLException { dropTable(MONGO_BACKED_TABLE); dropTable(HDFS_BACKED_TABLE); } @Test public void testSameDataHDFSAndMongoHiveTables() { Results hiveData = getAllDataFromTable(HDFS_BACKED_TABLE); Results mongoData = getAllDataFromTable(MONGO_BACKED_TABLE); assertNotEquals(hiveData.size(), 0); assertNotEquals(mongoData.size(), 0); assertEquals(hiveData, mongoData); } @Test public void testDeleteReflectData() { Results results = getAllDataFromTable(MONGO_BACKED_TABLE); int size = results.size(); assertTrue(size > 0); List<String> t = results.get(new Random().nextInt(size)); DBObject toDelete = new BasicDBObject(); int i = 0; for (Results.Field field : results.getFields()) { // add more types as necessary if (field.getType().equals("int")) { toDelete.put(field.getName(), Integer.valueOf(t.get(i))); } else if (field.getType().equals("string")) { toDelete.put(field.getName(), t.get(i)); } else { toDelete.put(field.getName(), t.get(i)); } i++; } deleteFromCollection(toDelete); // get data from table now that the first row has been removed Results newResults = getAllDataFromTable(MONGO_BACKED_TABLE); // now make sure that 'toDelete' doesn't exist anymore for (List<String> newResult : newResults) { assertNotEquals(newResult, t); } } private void deleteFromCollection(final DBObject toDelete) { getCollection(MONGO_COLLECTION).remove(toDelete); } @Test public void testDropReflectData() { assertTrue(getAllDataFromTable(MONGO_BACKED_TABLE).size() > 0); getCollection(MONGO_COLLECTION).drop(); assertEquals(0, getAllDataFromTable(MONGO_BACKED_TABLE).size()); } @Test public void testJOINHDFSMongoDB() { Results mongoTblData = getAllDataFromTable(MONGO_BACKED_TABLE); Results hiveTblData = getAllDataFromTable(HDFS_BACKED_TABLE); assertNotEquals(hiveTblData.size(), 0); assertNotEquals(mongoTblData.size(), 0); Results joinedData = performTwoTableJOIN(MONGO_BACKED_TABLE, HDFS_BACKED_TABLE); assertEquals(hiveTblData.size() * mongoTblData.size(), joinedData.size()); } }