//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.consumers;
import static org.junit.Assert.assertEquals;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.apache.uima.UIMAException;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
import org.apache.uima.fit.factory.ExternalResourceFactory;
import org.apache.uima.resource.ExternalResourceDescription;
import org.elasticsearch.action.admin.indices.refresh.RefreshRequest;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import uk.gov.dstl.baleen.resources.SharedCountryResource;
import uk.gov.dstl.baleen.resources.SharedElasticsearchResource;
import uk.gov.dstl.baleen.resources.SharedLocalElasticsearchResource;
import uk.gov.dstl.baleen.types.semantic.Location;
import uk.gov.dstl.baleen.uima.utils.TypeSystemSingleton;
public class ElasticsearchTest extends ElasticsearchTestBase{
private static final String ELASTICSEARCH = "elasticsearch";
@BeforeClass
public static void setupClass() throws UIMAException{
ExternalResourceDescription erd = ExternalResourceFactory.createExternalResourceDescription(ELASTICSEARCH, SharedLocalElasticsearchResource.class);
AnalysisEngineDescription aed = AnalysisEngineFactory.createEngineDescription(Elasticsearch.class, TypeSystemSingleton.getTypeSystemDescriptionInstance(), ELASTICSEARCH, erd);
ae = AnalysisEngineFactory.createEngine(aed);
client = ((SharedElasticsearchResource)ae.getUimaContext().getResourceObject(ELASTICSEARCH)).getClient();
}
@Test
@Ignore
public void testCountries() throws Exception{
//Explicitly test each country in SharedCountryResource,
//to make sure the GeoJSON is accepted by ES (see GitHub Issue #3)
//Only test this through the transport API, as it was an ES storage issue and only needs testing once
assertEquals(new Long(0), getCount());
ExternalResourceDescription erd = ExternalResourceFactory.createExternalResourceDescription("country", SharedCountryResource.class);
SharedCountryResource scr = new SharedCountryResource();
scr.initialize(erd.getResourceSpecifier(), Collections.emptyMap());
Set<String> countryCodes = new HashSet<>(scr.getCountryNames().values());
for(String cca3 : countryCodes){
jCas.reset();
jCas.setDocumentText(cca3);
Location l = new Location(jCas, 0, cca3.length());
l.setValue(cca3);
l.setGeoJson(scr.getGeoJson(cca3));
l.addToIndexes();
ae.process(jCas);
}
//Call refresh to force ES to write buffer
client.admin().indices().refresh(new RefreshRequest("baleen_index")).actionGet();
assertEquals(new Long(countryCodes.size()), getCount());
scr.destroy();
}
}