diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-03-24 17:43:27 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-03-24 17:43:27 +0100 |
commit | f892050296c4ab4c231e20cec23285608cb4163c (patch) | |
tree | 1260edf7a4b4e37844c9fef5697ee355e1dd23d0 /container-search/src/test/java/com/yahoo/search/grouping | |
parent | 51346c0606f7d859baf5b6aee1395e1926821d0a (diff) |
Add 'grouping.globalMaxGroups' query parameter
Diffstat (limited to 'container-search/src/test/java/com/yahoo/search/grouping')
-rw-r--r-- | container-search/src/test/java/com/yahoo/search/grouping/vespa/RequestBuilderTestCase.java | 73 |
1 files changed, 69 insertions, 4 deletions
diff --git a/container-search/src/test/java/com/yahoo/search/grouping/vespa/RequestBuilderTestCase.java b/container-search/src/test/java/com/yahoo/search/grouping/vespa/RequestBuilderTestCase.java index c1b9e74757b..ccf11d82541 100644 --- a/container-search/src/test/java/com/yahoo/search/grouping/vespa/RequestBuilderTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/grouping/vespa/RequestBuilderTestCase.java @@ -1,13 +1,38 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.grouping.vespa; +import com.yahoo.processing.IllegalInputException; import com.yahoo.search.grouping.Continuation; -import com.yahoo.search.grouping.request.*; -import com.yahoo.searchlib.aggregation.*; -import com.yahoo.searchlib.expression.*; +import com.yahoo.search.grouping.request.AllOperation; +import com.yahoo.search.grouping.request.AttributeValue; +import com.yahoo.search.grouping.request.EachOperation; +import com.yahoo.search.grouping.request.GroupingOperation; +import com.yahoo.search.grouping.request.SummaryValue; +import com.yahoo.searchlib.aggregation.AggregationResult; +import com.yahoo.searchlib.aggregation.CountAggregationResult; +import com.yahoo.searchlib.aggregation.ExpressionCountAggregationResult; +import com.yahoo.searchlib.aggregation.Group; +import com.yahoo.searchlib.aggregation.Grouping; +import com.yahoo.searchlib.aggregation.GroupingLevel; +import com.yahoo.searchlib.aggregation.HitsAggregationResult; +import com.yahoo.searchlib.aggregation.SumAggregationResult; +import com.yahoo.searchlib.expression.AddFunctionNode; +import com.yahoo.searchlib.expression.AttributeMapLookupNode; +import com.yahoo.searchlib.expression.AttributeNode; +import com.yahoo.searchlib.expression.ConstantNode; +import com.yahoo.searchlib.expression.ExpressionNode; +import com.yahoo.searchlib.expression.StrCatFunctionNode; +import com.yahoo.searchlib.expression.StringResultNode; +import com.yahoo.searchlib.expression.TimeStampFunctionNode; +import com.yahoo.searchlib.expression.ToStringFunctionNode; +import org.assertj.core.api.Assertions; import org.junit.Test; -import java.util.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.TimeZone; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -742,6 +767,46 @@ public class RequestBuilderTestCase { } } + @Test + public void require_that_total_groups_and_summaries_calculation_is_correct() { + assertTotalGroupsAndSummaries(5, "all(group(a) max(5) each(output(count())))"); + assertTotalGroupsAndSummaries(5+5*7, "all(group(a) max(5) each(max(7) each(output(summary()))))"); + assertTotalGroupsAndSummaries(3+3*5+3*5*7+3*5*7*11, + "all( group(a) max(3) each(output(count())" + + " all(group(b) max(5) each(output(count())" + + " all(group(c) max(7) each(max(11) output(count())" + + " each(output(summary()))))))))"); + assertTotalGroupsAndSummaries(2*(3+3*5), + "all(" + + " all(group(a) max(3) each(output(count()) max(5) each(output(summary())))) " + + " all(group(b) max(3) each(output(count()) max(5) each(output(summary())))))"); + } + + @Test + public void require_that_unbounded_queries_fails_when_global_max_is_enabled() { + assertQueryFailsOnGlobalMax(4, "all(group(a) max(5) each(output(count())))", "5 > 4"); + assertQueryFailsOnGlobalMax(Long.MAX_VALUE, "all(group(a) each(output(count())))", "unbounded number of groups"); + assertQueryFailsOnGlobalMax(Long.MAX_VALUE, "all(group(a) max(5) each(each(output(summary()))))", "unbounded number of summaries"); + } + + private static void assertTotalGroupsAndSummaries(long expected, String query) { + RequestBuilder builder = new RequestBuilder(0) + .setRootOperation(GroupingOperation.fromString(query)).setGlobalMaxGroups(Long.MAX_VALUE); + builder.build(); + assertEquals(expected, builder.totalGroupsAndSummaries().orElseThrow()); + } + + private static void assertQueryFailsOnGlobalMax(long globalMax, String query, String errorSubstring) { + RequestBuilder builder = new RequestBuilder(0) + .setRootOperation(GroupingOperation.fromString(query)).setGlobalMaxGroups(globalMax); + try { + builder.build(); + fail(); + } catch (IllegalInputException e) { + Assertions.assertThat(e.getMessage()).contains(errorSubstring); + } + } + private static CompositeContinuation newComposite(EncodableContinuation... conts) { CompositeContinuation ret = new CompositeContinuation(); for (EncodableContinuation cont : conts) { |