/** * This file is hereby placed into the Public Domain. This means anyone is * free to do whatever they wish with this file. */ package mil.nga.giat.process.elasticsearch; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; public class NestedAggGeoHashGridTest { private static final int[] AGG_RESULTS = {1, 2, 3, 4, 5}; private NestedAggGeoHashGrid geohashGrid; @Before public void setup() { this.geohashGrid = new NestedAggGeoHashGrid(); } @Test public void testSetParams_defaults() { geohashGrid.setParams(null); assertEquals(NestedAggGeoHashGrid.DEFAULT_AGG_KEY, geohashGrid.getNestedAggKey()); assertEquals(NestedAggGeoHashGrid.DEFAULT_METRIC_KEY, geohashGrid.getMetricKey()); assertEquals(GeoHashGrid.VALUE_KEY, geohashGrid.getValueKey()); assertEquals(NestedAggGeoHashGrid.SELECT_LARGEST, geohashGrid.getSelectionStrategy()); assertEquals(NestedAggGeoHashGrid.RASTER_FROM_VALUE, geohashGrid.getRasterStrategy()); assertNull(geohashGrid.getTermsMap()); } @Test public void testSetParams() { String aggKey = "myagg"; String metricKey = "mymetric"; String valueKey = "myvalue"; List<String> params = new ArrayList<String>(); params.add(aggKey); params.add(metricKey); params.add(valueKey); params.add(NestedAggGeoHashGrid.SELECT_SMALLEST); params.add(NestedAggGeoHashGrid.RASTER_FROM_KEY); params.add("key1:1;key2:2"); geohashGrid.setParams(params); assertEquals(aggKey, geohashGrid.getNestedAggKey()); assertEquals(metricKey, geohashGrid.getMetricKey()); assertEquals(valueKey, geohashGrid.getValueKey()); assertEquals(NestedAggGeoHashGrid.SELECT_SMALLEST, geohashGrid.getSelectionStrategy()); assertEquals(NestedAggGeoHashGrid.RASTER_FROM_KEY, geohashGrid.getRasterStrategy()); Map<String, Integer> termsMap = geohashGrid.getTermsMap(); assertEquals(2, termsMap.size()); assertEquals(new Integer(1), (Integer) termsMap.get("key1")); assertEquals(new Integer(2), (Integer) termsMap.get("key2")); } @Test public void testSetParams_ignoreInvalidParams() { String aggKey = "myagg"; String metricKey = "mymetric"; String valueKey = "myvalue"; List<String> params = new ArrayList<String>(); params.add(aggKey); params.add(metricKey); params.add(valueKey); params.add("invalid token"); params.add("invalid token"); geohashGrid.setParams(params); assertEquals(aggKey, geohashGrid.getNestedAggKey()); assertEquals(metricKey, geohashGrid.getMetricKey()); assertEquals(valueKey, geohashGrid.getValueKey()); assertEquals(NestedAggGeoHashGrid.SELECT_LARGEST, geohashGrid.getSelectionStrategy()); assertEquals(NestedAggGeoHashGrid.RASTER_FROM_VALUE, geohashGrid.getRasterStrategy()); assertNull(geohashGrid.getTermsMap()); } @Test(expected=IllegalArgumentException.class) public void testSetParams_notEnoughParameters() { geohashGrid.setParams(new ArrayList<String>()); } @Test public void testComputeCellValue() { Number rasterValue = geohashGrid.computeCellValue(TestUtil.createAggBucket(NestedAggGeoHashGrid.DEFAULT_AGG_KEY, AGG_RESULTS)); assertEquals(5, rasterValue); } @Test public void testSelectLargest() { Number rasterValue = geohashGrid.selectLargest(TestUtil.createBuckets(AGG_RESULTS)); assertEquals(5, rasterValue); } @Test public void testSelectSmallest() { Number rasterValue = geohashGrid.selectSmallest(TestUtil.createBuckets(AGG_RESULTS)); assertEquals(1, rasterValue); } @Test public void testBucketToRaster_rasterFromValue() { Number bucketValue = 5.0; Number rasterValue = geohashGrid.bucketToRaster("bucket_key", bucketValue); assertEquals(bucketValue, rasterValue); } @Test public void testBucketToRaster_rasterFromNumericKey() { List<String> params = new ArrayList<String>(); params.add("aggKey"); params.add("metricKey"); params.add("valueKey"); params.add(NestedAggGeoHashGrid.SELECT_SMALLEST); params.add(NestedAggGeoHashGrid.RASTER_FROM_KEY); geohashGrid.setParams(params); Number rasterValue = geohashGrid.bucketToRaster("1.0", 5.0); assertEquals(1.0, rasterValue); } @Test(expected=IllegalArgumentException.class) public void testBucketToRaster_rasterFromNumericKey_keyIsString() { List<String> params = new ArrayList<String>(); params.add("aggKey"); params.add("metricKey"); params.add("valueKey"); params.add(NestedAggGeoHashGrid.SELECT_SMALLEST); params.add(NestedAggGeoHashGrid.RASTER_FROM_KEY); geohashGrid.setParams(params); geohashGrid.bucketToRaster("I am not a number!", 5.0); } @Test public void testBucketToRaster_rasterFromStringKey() { List<String> params = new ArrayList<String>(); params.add("aggKey"); params.add("metricKey"); params.add("valueKey"); params.add(NestedAggGeoHashGrid.SELECT_SMALLEST); params.add(NestedAggGeoHashGrid.RASTER_FROM_KEY); params.add("key1:1;key2:2"); geohashGrid.setParams(params); Number rasterValue = geohashGrid.bucketToRaster("key1", 5.0); assertEquals(1, rasterValue); } @Test(expected=IllegalArgumentException.class) public void testBucketToRaster_rasterFromStringKey_keyNotInMap() { List<String> params = new ArrayList<String>(); params.add("aggKey"); params.add("metricKey"); params.add("valueKey"); params.add(NestedAggGeoHashGrid.SELECT_SMALLEST); params.add(NestedAggGeoHashGrid.RASTER_FROM_KEY); params.add("key1:1;key2:2"); geohashGrid.setParams(params); geohashGrid.bucketToRaster("key3", 5.0); } }