diff options
Diffstat (limited to 'core/src/test/java/org/elasticsearch/search/aggregations/bucket')
7 files changed, 133 insertions, 49 deletions
diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregationTestCase.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregationTestCase.java index 8da1f0a90e..f84a364ab1 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregationTestCase.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/InternalSingleBucketAggregationTestCase.java @@ -29,31 +29,43 @@ import org.elasticsearch.test.InternalAggregationTestCase; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; public abstract class InternalSingleBucketAggregationTestCase<T extends InternalSingleBucketAggregation> extends InternalAggregationTestCase<T> { + private final boolean hasInternalMax = randomBoolean(); private final boolean hasInternalMin = randomBoolean(); + public Supplier<InternalAggregations> subAggregationsSupplier; + + @Override + public void setUp() throws Exception { + super.setUp(); + subAggregationsSupplier = () -> { + List<InternalAggregation> aggs = new ArrayList<>(); + if (hasInternalMax) { + aggs.add(new InternalMax("max", randomDouble(), randomNumericDocValueFormat(), emptyList(), emptyMap())); + } + if (hasInternalMin) { + aggs.add(new InternalMin("min", randomDouble(), randomNumericDocValueFormat(), emptyList(), emptyMap())); + } + return new InternalAggregations(aggs); + }; + } + protected abstract T createTestInstance(String name, long docCount, InternalAggregations aggregations, List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData); protected abstract void extraAssertReduced(T reduced, List<T> inputs); @Override protected final T createTestInstance(String name, List<PipelineAggregator> pipelineAggregators, Map<String, Object> metaData) { - List<InternalAggregation> internal = new ArrayList<>(); - if (hasInternalMax) { - internal.add(new InternalMax("max", randomDouble(), randomNumericDocValueFormat(), emptyList(), emptyMap())); - } - if (hasInternalMin) { - internal.add(new InternalMin("min", randomDouble(), randomNumericDocValueFormat(), emptyList(), emptyMap())); - } // we shouldn't use the full long range here since we sum doc count on reduce, and don't want to overflow the long range there long docCount = between(0, Integer.MAX_VALUE); - return createTestInstance(name, docCount, new InternalAggregations(internal), pipelineAggregators, metaData); + return createTestInstance(name, docCount, subAggregationsSupplier.get(), pipelineAggregators, metaData); } @Override diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogramTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogramTests.java index aafad557bc..50cb453049 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogramTests.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalDateHistogramTests.java @@ -22,6 +22,8 @@ package org.elasticsearch.search.aggregations.bucket.histogram; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.InternalAggregations; +import org.elasticsearch.search.aggregations.InternalMultiBucketAggregationTestCase; +import org.elasticsearch.search.aggregations.ParsedMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.test.InternalAggregationTestCase; import org.joda.time.DateTime; @@ -35,14 +37,23 @@ import static org.elasticsearch.common.unit.TimeValue.timeValueHours; import static org.elasticsearch.common.unit.TimeValue.timeValueMinutes; import static org.elasticsearch.common.unit.TimeValue.timeValueSeconds; -public class InternalDateHistogramTests extends InternalAggregationTestCase<InternalDateHistogram> { +public class InternalDateHistogramTests extends InternalMultiBucketAggregationTestCase<InternalDateHistogram> { + + private boolean keyed; + private DocValueFormat format; @Override - protected InternalDateHistogram createTestInstance(String name, List<PipelineAggregator> pipelineAggregators, - Map<String, Object> metaData) { + public void setUp() throws Exception { + super.setUp(); + keyed = randomBoolean(); + format = randomNumericDocValueFormat(); + } - boolean keyed = randomBoolean(); - DocValueFormat format = DocValueFormat.RAW; + @Override + protected InternalDateHistogram createTestInstance(String name, + List<PipelineAggregator> pipelineAggregators, + Map<String, Object> metaData, + InternalAggregations aggregations) { int nbBuckets = randomInt(10); List<InternalDateHistogram.Bucket> buckets = new ArrayList<>(nbBuckets); long startingDate = System.currentTimeMillis(); @@ -52,7 +63,7 @@ public class InternalDateHistogramTests extends InternalAggregationTestCase<Inte for (int i = 0; i < nbBuckets; i++) { long key = startingDate + (intervalMillis * i); - buckets.add(i, new InternalDateHistogram.Bucket(key, randomIntBetween(1, 100), keyed, format, InternalAggregations.EMPTY)); + buckets.add(i, new InternalDateHistogram.Bucket(key, randomIntBetween(1, 100), keyed, format, aggregations)); } InternalOrder order = (InternalOrder) randomFrom(InternalHistogram.Order.KEY_ASC, InternalHistogram.Order.KEY_DESC); @@ -80,4 +91,9 @@ public class InternalDateHistogramTests extends InternalAggregationTestCase<Inte protected Writeable.Reader<InternalDateHistogram> instanceReader() { return InternalDateHistogram::new; } + + @Override + protected Class<? extends ParsedMultiBucketAggregation> implementationClass() { + return ParsedDateHistogram.class; + } } diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogramTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogramTests.java index 0dd4a163f3..b4ecf828e7 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogramTests.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/histogram/InternalHistogramTests.java @@ -23,6 +23,8 @@ import org.apache.lucene.util.TestUtil; import org.elasticsearch.common.io.stream.Writeable.Reader; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.InternalAggregations; +import org.elasticsearch.search.aggregations.InternalMultiBucketAggregationTestCase; +import org.elasticsearch.search.aggregations.ParsedMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import org.elasticsearch.test.InternalAggregationTestCase; @@ -31,23 +33,33 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; -public class InternalHistogramTests extends InternalAggregationTestCase<InternalHistogram> { +public class InternalHistogramTests extends InternalMultiBucketAggregationTestCase<InternalHistogram> { + + private boolean keyed; + private DocValueFormat format; + + @Override + public void setUp() throws Exception{ + super.setUp(); + keyed = randomBoolean(); + format = randomNumericDocValueFormat(); + } @Override - protected InternalHistogram createTestInstance(String name, List<PipelineAggregator> pipelineAggregators, - Map<String, Object> metaData) { - final boolean keyed = randomBoolean(); - final DocValueFormat format = DocValueFormat.RAW; + protected InternalHistogram createTestInstance(String name, + List<PipelineAggregator> pipelineAggregators, + Map<String, Object> metaData, + InternalAggregations aggregations) { final int base = randomInt(50) - 30; final int numBuckets = randomInt(10); final int interval = randomIntBetween(1, 3); List<InternalHistogram.Bucket> buckets = new ArrayList<>(); for (int i = 0; i < numBuckets; ++i) { final int docCount = TestUtil.nextInt(random(), 1, 50); - buckets.add(new InternalHistogram.Bucket(base + i * interval, docCount, keyed, format, InternalAggregations.EMPTY)); + buckets.add(new InternalHistogram.Bucket(base + i * interval, docCount, keyed, format, aggregations)); } - return new InternalHistogram(name, buckets, (InternalOrder) InternalHistogram.Order.KEY_ASC, - 1, null, format, keyed, pipelineAggregators, metaData); + InternalOrder order = (InternalOrder) randomFrom(InternalHistogram.Order.KEY_ASC, InternalHistogram.Order.KEY_DESC); + return new InternalHistogram(name, buckets, order, 1, null, format, keyed, pipelineAggregators, metaData); } @Override @@ -72,4 +84,8 @@ public class InternalHistogramTests extends InternalAggregationTestCase<Internal return InternalHistogram::new; } + @Override + protected Class<? extends ParsedMultiBucketAggregation> implementationClass() { + return ParsedHistogram.class; + } } diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTermsTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTermsTests.java index 757d5647a1..45531e27dd 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTermsTests.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/DoubleTermsTests.java @@ -22,6 +22,7 @@ package org.elasticsearch.search.aggregations.bucket.terms; import org.elasticsearch.common.io.stream.Writeable.Reader; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.InternalAggregations; +import org.elasticsearch.search.aggregations.ParsedMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import java.util.ArrayList; @@ -33,17 +34,17 @@ import java.util.Set; public class DoubleTermsTests extends InternalTermsTestCase { @Override - protected InternalTerms<?, ?> createTestInstance( - String name, - List<PipelineAggregator> pipelineAggregators, - Map<String, Object> metaData) { + protected InternalTerms<?, ?> createTestInstance(String name, + List<PipelineAggregator> pipelineAggregators, + Map<String, Object> metaData, + InternalAggregations aggregations, + boolean showTermDocCountError, + long docCountError) { Terms.Order order = Terms.Order.count(false); long minDocCount = 1; int requiredSize = 3; int shardSize = requiredSize + 2; - DocValueFormat format = DocValueFormat.RAW; - boolean showTermDocCountError = false; - long docCountError = -1; + DocValueFormat format = randomNumericDocValueFormat(); long otherDocCount = 0; List<DoubleTerms.Bucket> buckets = new ArrayList<>(); final int numBuckets = randomInt(shardSize); @@ -51,8 +52,7 @@ public class DoubleTermsTests extends InternalTermsTestCase { for (int i = 0; i < numBuckets; ++i) { double term = randomValueOtherThanMany(d -> terms.add(d) == false, random()::nextDouble); int docCount = randomIntBetween(1, 100); - buckets.add(new DoubleTerms.Bucket(term, docCount, InternalAggregations.EMPTY, - showTermDocCountError, docCountError, format)); + buckets.add(new DoubleTerms.Bucket(term, docCount, aggregations, showTermDocCountError, docCountError, format)); } return new DoubleTerms(name, order, requiredSize, minDocCount, pipelineAggregators, metaData, format, shardSize, showTermDocCountError, otherDocCount, buckets, docCountError); @@ -63,4 +63,9 @@ public class DoubleTermsTests extends InternalTermsTestCase { return DoubleTerms::new; } + @Override + protected Class<? extends ParsedMultiBucketAggregation> implementationClass() { + return ParsedDoubleTerms.class; + } + } diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/InternalTermsTestCase.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/InternalTermsTestCase.java index 118f190bca..b8c44d5c9b 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/InternalTermsTestCase.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/InternalTermsTestCase.java @@ -19,7 +19,10 @@ package org.elasticsearch.search.aggregations.bucket.terms; +import org.elasticsearch.search.aggregations.InternalAggregations; +import org.elasticsearch.search.aggregations.InternalMultiBucketAggregationTestCase; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; +import org.junit.Before; import org.elasticsearch.test.InternalAggregationTestCase; import java.util.HashMap; @@ -30,7 +33,31 @@ import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; -public abstract class InternalTermsTestCase extends InternalAggregationTestCase<InternalTerms<?,?>> { +public abstract class InternalTermsTestCase extends InternalMultiBucketAggregationTestCase<InternalTerms<?, ?>> { + + private boolean showDocCount; + private long docCountError; + + @Before + public void init() { + showDocCount = randomBoolean(); + docCountError = showDocCount ? randomInt(1000) : -1; + } + + @Override + protected InternalTerms<?, ?> createTestInstance(String name, + List<PipelineAggregator> pipelineAggregators, + Map<String, Object> metaData, + InternalAggregations aggregations) { + return createTestInstance(name, pipelineAggregators, metaData, aggregations, showDocCount, docCountError); + } + + protected abstract InternalTerms<?, ?> createTestInstance(String name, + List<PipelineAggregator> pipelineAggregators, + Map<String, Object> metaData, + InternalAggregations aggregations, + boolean showTermDocCountError, + long docCountError); @Override protected InternalTerms<?, ?> createUnmappedInstance( diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/LongTermsTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/LongTermsTests.java index ff95984bc3..cc97e4989a 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/LongTermsTests.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/LongTermsTests.java @@ -22,6 +22,7 @@ package org.elasticsearch.search.aggregations.bucket.terms; import org.elasticsearch.common.io.stream.Writeable.Reader; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.InternalAggregations; +import org.elasticsearch.search.aggregations.ParsedMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import java.util.ArrayList; @@ -33,17 +34,17 @@ import java.util.Set; public class LongTermsTests extends InternalTermsTestCase { @Override - protected InternalTerms<?, ?> createTestInstance( - String name, - List<PipelineAggregator> pipelineAggregators, - Map<String, Object> metaData) { + protected InternalTerms<?, ?> createTestInstance(String name, + List<PipelineAggregator> pipelineAggregators, + Map<String, Object> metaData, + InternalAggregations aggregations, + boolean showTermDocCountError, + long docCountError) { Terms.Order order = Terms.Order.count(false); long minDocCount = 1; int requiredSize = 3; int shardSize = requiredSize + 2; - DocValueFormat format = DocValueFormat.RAW; - boolean showTermDocCountError = false; - long docCountError = -1; + DocValueFormat format = randomNumericDocValueFormat(); long otherDocCount = 0; List<LongTerms.Bucket> buckets = new ArrayList<>(); final int numBuckets = randomInt(shardSize); @@ -51,8 +52,7 @@ public class LongTermsTests extends InternalTermsTestCase { for (int i = 0; i < numBuckets; ++i) { long term = randomValueOtherThanMany(l -> terms.add(l) == false, random()::nextLong); int docCount = randomIntBetween(1, 100); - buckets.add(new LongTerms.Bucket(term, docCount, InternalAggregations.EMPTY, - showTermDocCountError, docCountError, format)); + buckets.add(new LongTerms.Bucket(term, docCount, aggregations, showTermDocCountError, docCountError, format)); } return new LongTerms(name, order, requiredSize, minDocCount, pipelineAggregators, metaData, format, shardSize, showTermDocCountError, otherDocCount, buckets, docCountError); @@ -63,4 +63,8 @@ public class LongTermsTests extends InternalTermsTestCase { return LongTerms::new; } + @Override + protected Class<? extends ParsedMultiBucketAggregation> implementationClass() { + return ParsedLongTerms.class; + } } diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsTests.java index 64e814bd81..e909358be5 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsTests.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/bucket/terms/StringTermsTests.java @@ -23,6 +23,7 @@ import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.io.stream.Writeable.Reader; import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.InternalAggregations; +import org.elasticsearch.search.aggregations.ParsedMultiBucketAggregation; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import java.util.ArrayList; @@ -34,17 +35,17 @@ import java.util.Set; public class StringTermsTests extends InternalTermsTestCase { @Override - protected InternalTerms<?, ?> createTestInstance( - String name, - List<PipelineAggregator> pipelineAggregators, - Map<String, Object> metaData) { + protected InternalTerms<?, ?> createTestInstance(String name, + List<PipelineAggregator> pipelineAggregators, + Map<String, Object> metaData, + InternalAggregations aggregations, + boolean showTermDocCountError, + long docCountError) { Terms.Order order = Terms.Order.count(false); long minDocCount = 1; int requiredSize = 3; int shardSize = requiredSize + 2; DocValueFormat format = DocValueFormat.RAW; - boolean showTermDocCountError = false; - long docCountError = -1; long otherDocCount = 0; List<StringTerms.Bucket> buckets = new ArrayList<>(); final int numBuckets = randomInt(shardSize); @@ -52,8 +53,7 @@ public class StringTermsTests extends InternalTermsTestCase { for (int i = 0; i < numBuckets; ++i) { BytesRef term = randomValueOtherThanMany(b -> terms.add(b) == false, () -> new BytesRef(randomAlphaOfLength(10))); int docCount = randomIntBetween(1, 100); - buckets.add(new StringTerms.Bucket(term, docCount, InternalAggregations.EMPTY, - showTermDocCountError, docCountError, format)); + buckets.add(new StringTerms.Bucket(term, docCount, aggregations, showTermDocCountError, docCountError, format)); } return new StringTerms(name, order, requiredSize, minDocCount, pipelineAggregators, metaData, format, shardSize, showTermDocCountError, otherDocCount, buckets, docCountError); @@ -64,4 +64,8 @@ public class StringTermsTests extends InternalTermsTestCase { return StringTerms::new; } + @Override + protected Class<? extends ParsedMultiBucketAggregation> implementationClass() { + return ParsedStringTerms.class; + } } |