package org.elasticsearch.river.mongodb;
import static org.elasticsearch.common.io.Streams.copyToStringFromClasspath;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.river.mongodb.util.MongoDBHelper;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
@Test
public class ExcludeFieldsTest {
private final ESLogger logger = Loggers.getLogger(getClass());
public void testExcludeFields() {
try {
Set<String> excludeFields = new HashSet<String>(Arrays.asList("lastName", "hobbies", "address.apartment"));
// test-exclude-fields-document.json
String mongoDocument = copyToStringFromClasspath("/org/elasticsearch/river/mongodb/test-exclude-fields-document.json");
DBObject dbObject = (DBObject) JSON.parse(mongoDocument);
logger.debug("Initial BSON object: {}", dbObject);
DBObject filteredObject = MongoDBHelper.applyExcludeFields(dbObject, excludeFields);
logger.debug("Filtered BSON object: {}", filteredObject);
Assert.assertNotNull(filteredObject);
Assert.assertFalse(filteredObject.containsField("hobbies"));
Assert.assertTrue(filteredObject.containsField("address"));
Assert.assertFalse(((DBObject) filteredObject.get("address")).containsField("apartment"));
} catch (Throwable t) {
logger.error("testExcludeFields failed", t);
Assert.fail();
}
}
public void testIncludeFields() {
try {
Set<String> includeFields = new HashSet<String>(Arrays.asList("lastName", "hobbies", "address.street"));
// test-exclude-fields-document.json
String mongoDocument = copyToStringFromClasspath("/org/elasticsearch/river/mongodb/test-exclude-fields-document.json");
DBObject dbObject = (DBObject) JSON.parse(mongoDocument);
logger.debug("Initial BSON object: {}", dbObject);
DBObject filteredObject = MongoDBHelper.applyIncludeFields(dbObject, includeFields);
logger.debug("Filtered BSON object: {}", filteredObject);
Assert.assertNotNull(filteredObject);
Assert.assertFalse(filteredObject.containsField("firstName"));
Assert.assertTrue(filteredObject.containsField("lastName"));
Assert.assertTrue(filteredObject.containsField("hobbies"));
Assert.assertTrue(filteredObject.containsField("address"));
Assert.assertTrue(((DBObject) filteredObject.get("address")).containsField("street"));
Assert.assertFalse(((DBObject) filteredObject.get("address")).containsField("apartment"));
} catch (Throwable t) {
logger.error("testIncludeFields failed", t);
Assert.fail();
}
}
public void testIncludeFields204() {
try {
Set<String> includeFields = new HashSet<String>(Arrays.asList("system_info.userId", "place.area", "system_info.date",
"place.country", "system_info.removed", "system_info.premium", "place.default", "system_info.price"));
String mongoDocument = copyToStringFromClasspath("/org/elasticsearch/river/mongodb/test-include-fields-document-204.json");
DBObject dbObject = (DBObject) JSON.parse(mongoDocument);
logger.debug("Initial BSON object: {}", dbObject);
DBObject filteredObject = MongoDBHelper.applyIncludeFields(dbObject, includeFields);
logger.debug("Filtered BSON object: {}", filteredObject);
Assert.assertNotNull(filteredObject);
Assert.assertFalse(filteredObject.containsField("gross_weight"));
Assert.assertTrue(((DBObject) filteredObject.get("system_info")).containsField("userId"));
Assert.assertTrue(((DBObject) filteredObject.get("place")).containsField("area"));
Assert.assertTrue(((DBObject) filteredObject.get("system_info")).containsField("date"));
Assert.assertTrue(((DBObject) filteredObject.get("place")).containsField("country"));
Assert.assertTrue(((DBObject) filteredObject.get("system_info")).containsField("removed"));
Assert.assertTrue(((DBObject) filteredObject.get("system_info")).containsField("premium"));
Assert.assertTrue(((DBObject) filteredObject.get("place")).containsField("default"));
Assert.assertTrue(((DBObject) filteredObject.get("system_info")).containsField("price"));
Assert.assertFalse(filteredObject.containsField("truck_mounted_crane"));
Assert.assertFalse(((DBObject) filteredObject.get("system_info")).containsField("photos"));
} catch (Throwable t) {
logger.error("testIncludeFields204 failed", t);
Assert.fail();
}
}
}