From f06467b6a07d7ff4197cdb4c165bdaa1c072d7e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20B=C3=BCscher?= Date: Fri, 12 May 2017 11:48:44 +0200 Subject: [PATCH] [Tests] Add unit tests for InternalFilters (#24624) Relates to #22278 --- .../bucket/filters/InternalFilters.java | 42 +++++++++- .../bucket/filters/InternalFiltersTests.java | 83 +++++++++++++++++++ 2 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 core/src/test/java/org/elasticsearch/search/aggregations/bucket/filters/InternalFiltersTests.java diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/InternalFilters.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/InternalFilters.java index 51531222725..2cc146ba2f0 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/InternalFilters.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/InternalFilters.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; public class InternalFilters extends InternalMultiBucketAggregation implements Filters { public static class InternalBucket extends InternalMultiBucketAggregation.InternalBucket implements Filters.Bucket { @@ -113,13 +114,35 @@ public class InternalFilters extends InternalMultiBucketAggregation buckets; private final boolean keyed; - private Map bucketMap; + // bucketMap gets lazily initialized from buckets in getBucketByKey() + private transient Map bucketMap; - public InternalFilters(String name, List buckets, boolean keyed, List pipelineAggregators, Map metaData) { + public InternalFilters(String name, List buckets, boolean keyed, List pipelineAggregators, + Map metaData) { super(name, pipelineAggregators, metaData); this.buckets = buckets; this.keyed = keyed; @@ -200,7 +223,8 @@ public class InternalFilters extends InternalMultiBucketAggregation(bucketsList.size()), keyed, pipelineAggregators(), getMetaData()); + InternalFilters reduced = new InternalFilters(name, new ArrayList(bucketsList.size()), keyed, pipelineAggregators(), + getMetaData()); for (List sameRangeList : bucketsList) { reduced.buckets.add((sameRangeList.get(0)).reduce(sameRangeList, reduceContext)); } @@ -225,4 +249,16 @@ public class InternalFilters extends InternalMultiBucketAggregation { + + private boolean keyed; + private final List keys = new ArrayList<>(); + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + keyed = randomBoolean(); + int numKeys = randomIntBetween(1,10); + for (int i = 0; i < numKeys; i++) { + keys.add(randomAlphaOfLength(5)); + } + + } + + @Override + protected InternalFilters createTestInstance(String name, List pipelineAggregators, Map metaData) { + final List buckets = new ArrayList<>(); + for (int i = 0; i < keys.size(); ++i) { + String key = keys.get(i); + int docCount = randomIntBetween(0, 1000); + buckets.add( new InternalFilters.InternalBucket(key, docCount, InternalAggregations.EMPTY, keyed)); + } + return new InternalFilters(name, buckets, keyed, pipelineAggregators, metaData); + } + + @Override + protected void assertReduced(InternalFilters reduced, List inputs) { + final Map expectedCounts = new TreeMap<>(); + for (InternalFilters input : inputs) { + for (InternalFilters.InternalBucket bucket : input.getBuckets()) { + expectedCounts.compute(bucket.getKeyAsString(), + (key, oldValue) -> (oldValue == null ? 0 : oldValue) + bucket.getDocCount()); + } + } + final Map actualCounts = new TreeMap<>(); + for (InternalFilters.InternalBucket bucket : reduced.getBuckets()) { + actualCounts.compute(bucket.getKeyAsString(), + (key, oldValue) -> (oldValue == null ? 0 : oldValue) + bucket.getDocCount()); + } + assertEquals(expectedCounts, actualCounts); + } + + @Override + protected Reader instanceReader() { + return InternalFilters::new; + } + +}