Skip to content

Commit b51f636

Browse files
committed
add tests for terms
Signed-off-by: Karen Xu <[email protected]>
1 parent 5772dd8 commit b51f636

File tree

3 files changed

+230
-48
lines changed

3 files changed

+230
-48
lines changed

CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
4444
- Introduce 512 byte limit to search and ingest pipeline IDs ([#17786](https://github.com/opensearch-project/OpenSearch/pull/17786))
4545
- Avoid skewed segment replication lag metric ([#17831](https://github.com/opensearch-project/OpenSearch/pull/17831))
4646
- Increase the default segment counter step size when replica promoting ([#17568](https://github.com/opensearch-project/OpenSearch/pull/17568))
47-
- Increase the default segment counter step size when replica promoting ([#17568](https://github.com/opensearch-project/OpenSearch/pull/17568))
4847

4948
### Dependencies
5049
- Bump `com.nimbusds:nimbus-jose-jwt` from 9.41.1 to 10.0.2 ([#17607](https://github.com/opensearch-project/OpenSearch/pull/17607), [#17669](https://github.com/opensearch-project/OpenSearch/pull/17669))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* The OpenSearch Contributors require contributions made to
5+
* this file be licensed under the Apache-2.0 license or a
6+
* compatible open source license.
7+
*/
8+
9+
package org.opensearch.plugin.transport.grpc.proto.request.search.query;
10+
11+
import org.opensearch.index.query.MatchAllQueryBuilder;
12+
import org.opensearch.index.query.MatchNoneQueryBuilder;
13+
import org.opensearch.index.query.QueryBuilder;
14+
import org.opensearch.index.query.TermQueryBuilder;
15+
import org.opensearch.index.query.TermsQueryBuilder;
16+
import org.opensearch.protobufs.FieldValue;
17+
import org.opensearch.protobufs.MatchAllQuery;
18+
import org.opensearch.protobufs.MatchNoneQuery;
19+
import org.opensearch.protobufs.QueryContainer;
20+
import org.opensearch.protobufs.StringArray;
21+
import org.opensearch.protobufs.TermQuery;
22+
import org.opensearch.protobufs.TermsLookupFieldStringArrayMap;
23+
import org.opensearch.protobufs.TermsQueryField;
24+
import org.opensearch.test.OpenSearchTestCase;
25+
26+
import java.util.HashMap;
27+
import java.util.Map;
28+
29+
public class AbstractQueryBuilderProtoUtilsTests extends OpenSearchTestCase {
30+
31+
public void testParseInnerQueryBuilderProtoWithMatchAll() {
32+
// Create a QueryContainer with MatchAllQuery
33+
MatchAllQuery matchAllQuery = MatchAllQuery.newBuilder().build();
34+
QueryContainer queryContainer = QueryContainer.newBuilder()
35+
.setMatchAll(matchAllQuery)
36+
.build();
37+
38+
// Call parseInnerQueryBuilderProto
39+
QueryBuilder queryBuilder = AbstractQueryBuilderProtoUtils.parseInnerQueryBuilderProto(queryContainer);
40+
41+
// Verify the result
42+
assertNotNull("QueryBuilder should not be null", queryBuilder);
43+
assertTrue("QueryBuilder should be a MatchAllQueryBuilder", queryBuilder instanceof MatchAllQueryBuilder);
44+
}
45+
46+
public void testParseInnerQueryBuilderProtoWithMatchNone() {
47+
// Create a QueryContainer with MatchNoneQuery
48+
MatchNoneQuery matchNoneQuery = MatchNoneQuery.newBuilder().build();
49+
QueryContainer queryContainer = QueryContainer.newBuilder()
50+
.setMatchNone(matchNoneQuery)
51+
.build();
52+
53+
// Call parseInnerQueryBuilderProto
54+
QueryBuilder queryBuilder = AbstractQueryBuilderProtoUtils.parseInnerQueryBuilderProto(queryContainer);
55+
56+
// Verify the result
57+
assertNotNull("QueryBuilder should not be null", queryBuilder);
58+
assertTrue("QueryBuilder should be a MatchNoneQueryBuilder", queryBuilder instanceof MatchNoneQueryBuilder);
59+
}
60+
61+
public void testParseInnerQueryBuilderProtoWithTerm() {
62+
// Create a QueryContainer with Term query
63+
Map<String, TermQuery> termMap = new HashMap<>();
64+
65+
// Create a FieldValue for the term value
66+
FieldValue fieldValue = FieldValue.newBuilder()
67+
.setStringValue("test-value")
68+
.build();
69+
70+
// Create a TermQuery with the FieldValue
71+
TermQuery termQuery = TermQuery.newBuilder()
72+
.setValue(fieldValue)
73+
.build();
74+
75+
termMap.put("test-field", termQuery);
76+
77+
QueryContainer queryContainer = QueryContainer.newBuilder()
78+
.putAllTerm(termMap)
79+
.build();
80+
81+
// Call parseInnerQueryBuilderProto
82+
QueryBuilder queryBuilder = AbstractQueryBuilderProtoUtils.parseInnerQueryBuilderProto(queryContainer);
83+
84+
// Verify the result
85+
assertNotNull("QueryBuilder should not be null", queryBuilder);
86+
assertTrue("QueryBuilder should be a TermQueryBuilder", queryBuilder instanceof TermQueryBuilder);
87+
TermQueryBuilder termQueryBuilder = (TermQueryBuilder) queryBuilder;
88+
assertEquals("Field name should match", "test-field", termQueryBuilder.fieldName());
89+
assertEquals("Value should match", "test-value", termQueryBuilder.value());
90+
}
91+
92+
public void testParseInnerQueryBuilderProtoWithTerms() {
93+
// Create a StringArray for terms values
94+
StringArray stringArray = StringArray.newBuilder()
95+
.addStringArray("value1")
96+
.addStringArray("value2")
97+
.build();
98+
99+
// Create a TermsLookupFieldStringArrayMap
100+
TermsLookupFieldStringArrayMap termsLookupFieldStringArrayMap = TermsLookupFieldStringArrayMap.newBuilder()
101+
.setStringArray(stringArray)
102+
.build();
103+
104+
// Create a map for TermsLookupFieldStringArrayMap
105+
Map<String, TermsLookupFieldStringArrayMap> termsLookupFieldStringArrayMapMap = new HashMap<>();
106+
termsLookupFieldStringArrayMapMap.put("test-field", termsLookupFieldStringArrayMap);
107+
108+
// Create a TermsQueryField
109+
TermsQueryField termsQueryField = TermsQueryField.newBuilder()
110+
.putAllTermsLookupFieldStringArrayMap(termsLookupFieldStringArrayMapMap)
111+
.build();
112+
113+
// Create a QueryContainer with Terms query
114+
QueryContainer queryContainer = QueryContainer.newBuilder()
115+
.setTerms(termsQueryField)
116+
.build();
117+
118+
// Call parseInnerQueryBuilderProto
119+
QueryBuilder queryBuilder = AbstractQueryBuilderProtoUtils.parseInnerQueryBuilderProto(queryContainer);
120+
121+
// Verify the result
122+
assertNotNull("QueryBuilder should not be null", queryBuilder);
123+
assertTrue("QueryBuilder should be a TermsQueryBuilder", queryBuilder instanceof TermsQueryBuilder);
124+
TermsQueryBuilder termsQueryBuilder = (TermsQueryBuilder) queryBuilder;
125+
assertEquals("Field name should match", "test-field", termsQueryBuilder.fieldName());
126+
assertEquals("Values size should match", 2, termsQueryBuilder.values().size());
127+
assertEquals("First value should match", "value1", termsQueryBuilder.values().get(0));
128+
assertEquals("Second value should match", "value2", termsQueryBuilder.values().get(1));
129+
}
130+
131+
public void testParseInnerQueryBuilderProtoWithUnsupportedQueryType() {
132+
// Create an empty QueryContainer (no query type specified)
133+
QueryContainer queryContainer = QueryContainer.newBuilder().build();
134+
135+
// Call parseInnerQueryBuilderProto, should throw UnsupportedOperationException
136+
UnsupportedOperationException exception = expectThrows(
137+
UnsupportedOperationException.class,
138+
() -> AbstractQueryBuilderProtoUtils.parseInnerQueryBuilderProto(queryContainer)
139+
);
140+
141+
// Verify the exception message
142+
assertTrue("Exception message should mention 'not supported yet'",
143+
exception.getMessage().contains("not supported yet"));
144+
}
145+
}

0 commit comments

Comments
 (0)