Skip to content

Commit 90ccce3

Browse files
committed
add tests
Signed-off-by: bowenlan-amzn <[email protected]>
1 parent 1d00684 commit 90ccce3

File tree

3 files changed

+54
-3
lines changed

3 files changed

+54
-3
lines changed

server/src/main/java/org/opensearch/common/settings/FeatureFlagSettings.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ protected FeatureFlagSettings(
3939
FeatureFlags.TERM_VERSION_PRECOMMIT_ENABLE_SETTING,
4040
FeatureFlags.ARROW_STREAMS_SETTING,
4141
FeatureFlags.STREAM_TRANSPORT_SETTING,
42-
FeatureFlags.MERGED_SEGMENT_WARMER_EXPERIMENTAL_SETTING
42+
FeatureFlags.MERGED_SEGMENT_WARMER_EXPERIMENTAL_SETTING,
43+
FeatureFlags.STREAM_SEARCH_SETTING
4344
);
4445
}

server/src/main/java/org/opensearch/rest/action/search/RestSearchAction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,12 +446,11 @@ public boolean allowsUnsafeBuffers() {
446446

447447
/**
448448
* Determines if a search request can use stream search.
449-
* Stream search is only supported for requests with exactly one terms aggregation and no other aggregations.
450449
*
451450
* @param searchRequest the search request to validate
452451
* @return true if the request can use stream search, false otherwise
453452
*/
454-
private static boolean canUseStreamSearch(SearchRequest searchRequest) {
453+
static boolean canUseStreamSearch(SearchRequest searchRequest) {
455454
if (searchRequest.source() == null || searchRequest.source().aggregations() == null) {
456455
return true; // No aggregations, stream search is allowed
457456
}

server/src/test/java/org/opensearch/rest/action/search/RestSearchActionTests.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111
import org.opensearch.action.ActionRequest;
1212
import org.opensearch.action.ActionType;
1313
import org.opensearch.action.search.SearchAction;
14+
import org.opensearch.action.search.SearchRequest;
1415
import org.opensearch.action.search.StreamSearchAction;
1516
import org.opensearch.common.SetOnce;
1617
import org.opensearch.common.util.FeatureFlags;
1718
import org.opensearch.core.action.ActionListener;
1819
import org.opensearch.core.action.ActionResponse;
20+
import org.opensearch.index.query.QueryBuilders;
1921
import org.opensearch.rest.RestRequest;
22+
import org.opensearch.search.aggregations.AggregationBuilders;
23+
import org.opensearch.search.builder.SearchSourceBuilder;
2024
import org.opensearch.tasks.Task;
2125
import org.opensearch.test.OpenSearchTestCase;
2226
import org.opensearch.test.client.NoOpNodeClient;
@@ -91,4 +95,51 @@ public void testWithStreamSearchAndTransportEnabled() throws Exception {
9195
testActionExecution(StreamSearchAction.INSTANCE);
9296
}
9397
}
98+
99+
// Tests for canUseStreamSearch method
100+
public void testCanUseStreamSearchWithNullSource() {
101+
SearchRequest searchRequest = new SearchRequest();
102+
assertTrue(RestSearchAction.canUseStreamSearch(searchRequest));
103+
}
104+
105+
public void testCanUseStreamSearchWithNoAggregations() {
106+
SearchRequest searchRequest = new SearchRequest();
107+
SearchSourceBuilder source = new SearchSourceBuilder();
108+
source.query(QueryBuilders.matchAllQuery());
109+
searchRequest.source(source);
110+
assertTrue(RestSearchAction.canUseStreamSearch(searchRequest));
111+
}
112+
113+
public void testCanUseStreamSearchWithSingleTermsAggregation() {
114+
SearchRequest searchRequest = new SearchRequest();
115+
SearchSourceBuilder source = new SearchSourceBuilder();
116+
source.aggregation(AggregationBuilders.terms("test_terms").field("category"));
117+
searchRequest.source(source);
118+
assertTrue(RestSearchAction.canUseStreamSearch(searchRequest));
119+
}
120+
121+
public void testCanUseStreamSearchWithMultipleAggregations() {
122+
SearchRequest searchRequest = new SearchRequest();
123+
SearchSourceBuilder source = new SearchSourceBuilder();
124+
source.aggregation(AggregationBuilders.terms("test_terms").field("category"));
125+
source.aggregation(AggregationBuilders.avg("test_avg").field("price"));
126+
searchRequest.source(source);
127+
assertFalse(RestSearchAction.canUseStreamSearch(searchRequest));
128+
}
129+
130+
public void testCanUseStreamSearchWithSingleNonTermsAggregation() {
131+
SearchRequest searchRequest = new SearchRequest();
132+
SearchSourceBuilder source = new SearchSourceBuilder();
133+
source.aggregation(AggregationBuilders.avg("test_avg").field("price"));
134+
searchRequest.source(source);
135+
assertFalse(RestSearchAction.canUseStreamSearch(searchRequest));
136+
}
137+
138+
public void testCanUseStreamSearchWithSingleHistogramAggregation() {
139+
SearchRequest searchRequest = new SearchRequest();
140+
SearchSourceBuilder source = new SearchSourceBuilder();
141+
source.aggregation(AggregationBuilders.histogram("test_histogram").field("timestamp").interval(1000));
142+
searchRequest.source(source);
143+
assertFalse(RestSearchAction.canUseStreamSearch(searchRequest));
144+
}
94145
}

0 commit comments

Comments
 (0)