//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.jobs;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.fit.factory.ExternalResourceFactory;
import org.apache.uima.resource.ExternalResourceDescription;
import org.apache.uima.resource.ResourceInitializationException;
import org.bson.Document;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.mongodb.util.JSON;
import uk.gov.dstl.baleen.resources.SharedFongoResource;
import uk.gov.dstl.baleen.uima.AbstractBaleenTaskTest;
public class MongoStatsTest extends AbstractBaleenTaskTest {
private static final List<Document> DATA = Lists.newArrayList(
new Document("fake", "doc1"),
new Document("fake", "doc2"),
new Document("fake", "doc3"));
@Test
public void testNewFile() throws ResourceInitializationException, AnalysisEngineProcessException, IOException {
// Due to limitations in the shared fongo resource we only test document count here!
ExternalResourceDescription erd = ExternalResourceFactory.createExternalResourceDescription("mongo",
SharedFongoResource.class, SharedFongoResource.PARAM_FONGO_COLLECTION, "documents",
SharedFongoResource.PARAM_FONGO_DATA, JSON.serialize(DATA));
File tempFile = File.createTempFile("test", "mongostats");
tempFile.delete();
try {
AnalysisEngine task = create(MongoStats.class, "mongo", erd, "file", tempFile.getAbsolutePath());
execute(task);
task.destroy();
List<String> lines = Files.readAllLines(tempFile.toPath());
assertEquals(2, lines.size());
assertEquals("timestamp,documents,entities,relations", lines.get(0));
String[] split = lines.get(1).split(",");
assertEquals("3", split[1]);
assertEquals("0", split[2]);
assertEquals("0", split[3]);
} finally {
tempFile.delete();
}
}
@Test
public void testEmptyFile() throws ResourceInitializationException, AnalysisEngineProcessException, IOException {
// Due to limitations in the shared fongo resource we only test document count here!
ExternalResourceDescription erd = ExternalResourceFactory.createExternalResourceDescription("mongo",
SharedFongoResource.class, SharedFongoResource.PARAM_FONGO_COLLECTION, "documents",
SharedFongoResource.PARAM_FONGO_DATA, JSON.serialize(DATA));
File tempFile = File.createTempFile("test", "mongostats");
try {
AnalysisEngine task = create(MongoStats.class, "mongo", erd, "file", tempFile.getAbsolutePath());
execute(task);
task.destroy();
List<String> lines = Files.readAllLines(tempFile.toPath());
assertEquals(2, lines.size());
assertEquals("timestamp,documents,entities,relations", lines.get(0));
String[] split = lines.get(1).split(",");
assertEquals("3", split[1]);
assertEquals("0", split[2]);
assertEquals("0", split[3]);
} finally {
tempFile.delete();
}
}
@Test
public void testWritingToExistingFile()
throws ResourceInitializationException, AnalysisEngineProcessException, IOException {
// Due to limitations in the shared fongo resource we only test document count here!
ExternalResourceDescription erd = ExternalResourceFactory.createExternalResourceDescription("mongo",
SharedFongoResource.class, SharedFongoResource.PARAM_FONGO_COLLECTION, "documents",
SharedFongoResource.PARAM_FONGO_DATA, JSON.serialize(DATA));
File tempFile = File.createTempFile("test", "mongostats-existing");
try (FileWriter fileWriter = new FileWriter(tempFile)) {
fileWriter.write("hello\n");
}
try {
AnalysisEngine task = create(MongoStats.class, "mongo", erd, "file", tempFile.getAbsolutePath());
execute(task);
task.destroy();
List<String> lines = Files.readAllLines(tempFile.toPath());
assertEquals(2, lines.size());
assertEquals("hello", lines.get(0));
String[] split = lines.get(1).split(",");
assertEquals("3", split[1]);
assertEquals("0", split[2]);
assertEquals("0", split[3]);
} finally {
tempFile.delete();
}
}
}