1919
2020package org .elasticsearch .script .mustache ;
2121
22- import org .elasticsearch .common .bytes .BytesReference ;
23- import org .elasticsearch .common .xcontent .ToXContent ;
24- import org .elasticsearch .common .xcontent .XContentBuilder ;
25- import org .elasticsearch .common .xcontent .XContentFactory ;
26- import org .elasticsearch .common .xcontent .XContentParseException ;
27- import org .elasticsearch .common .xcontent .XContentParser ;
28- import org .elasticsearch .common .xcontent .XContentType ;
29- import org .elasticsearch .common .xcontent .json .JsonXContent ;
3022import org .elasticsearch .script .ScriptType ;
3123import org .elasticsearch .search .RandomSearchRequestGenerator ;
3224import org .elasticsearch .search .builder .SearchSourceBuilder ;
3325import org .elasticsearch .test .AbstractStreamableTestCase ;
34- import org .elasticsearch .test .AbstractXContentTestCase ;
3526
3627import java .io .IOException ;
3728import java .util .ArrayList ;
4031import java .util .Map ;
4132import java .util .function .Consumer ;
4233
43- import static org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertToXContentEquivalent ;
44- import static org .hamcrest .Matchers .equalTo ;
45- import static org .hamcrest .Matchers .hasEntry ;
46- import static org .hamcrest .Matchers .nullValue ;
47-
4834public class SearchTemplateRequestTests extends AbstractStreamableTestCase <SearchTemplateRequest > {
4935
5036 @ Override
@@ -54,23 +40,7 @@ protected SearchTemplateRequest createBlankInstance() {
5440
5541 @ Override
5642 protected SearchTemplateRequest createTestInstance () {
57- SearchTemplateRequest request = new SearchTemplateRequest ();
58- request .setScriptType (randomFrom (ScriptType .values ()));
59- request .setScript (randomAlphaOfLength (50 ));
60-
61- Map <String , Object > scriptParams = new HashMap <>();
62- for (int i = 0 ; i < randomInt (10 ); i ++) {
63- scriptParams .put (randomAlphaOfLength (5 ), randomAlphaOfLength (10 ));
64- }
65- request .setScriptParams (scriptParams );
66-
67- request .setExplain (randomBoolean ());
68- request .setProfile (randomBoolean ());
69- request .setSimulate (randomBoolean ());
70-
71- request .setRequest (RandomSearchRequestGenerator .randomSearchRequest (
72- SearchSourceBuilder ::searchSource ));
73- return request ;
43+ return createRandomRequest ();
7444 }
7545
7646 @ Override
@@ -102,148 +72,24 @@ protected SearchTemplateRequest mutateInstance(SearchTemplateRequest instance) t
10272 return mutatedInstance ;
10373 }
10474
105- public void testToXContentWithInlineTemplate () throws IOException {
106- SearchTemplateRequest request = new SearchTemplateRequest ();
10775
108- request .setScriptType (ScriptType .INLINE );
109- request .setScript ("{\" query\" : { \" match\" : { \" {{my_field}}\" : \" {{my_value}}\" } } }" );
110- request .setProfile (true );
76+ public static SearchTemplateRequest createRandomRequest () {
77+ SearchTemplateRequest request = new SearchTemplateRequest ();
78+ request .setScriptType (randomFrom (ScriptType .values ()));
79+ request .setScript (randomAlphaOfLength (50 ));
11180
11281 Map <String , Object > scriptParams = new HashMap <>();
113- scriptParams .put ("my_field" , "foo" );
114- scriptParams .put ("my_value" , "bar" );
82+ for (int i = 0 ; i < randomInt (10 ); i ++) {
83+ scriptParams .put (randomAlphaOfLength (5 ), randomAlphaOfLength (10 ));
84+ }
11585 request .setScriptParams (scriptParams );
11686
117- XContentType contentType = randomFrom (XContentType .values ());
118- XContentBuilder expectedRequest = XContentFactory .contentBuilder (contentType )
119- .startObject ()
120- .field ("source" , "{\" query\" : { \" match\" : { \" {{my_field}}\" : \" {{my_value}}\" } } }" )
121- .startObject ("params" )
122- .field ("my_field" , "foo" )
123- .field ("my_value" , "bar" )
124- .endObject ()
125- .field ("explain" , false )
126- .field ("profile" , true )
127- .endObject ();
128-
129- XContentBuilder actualRequest = XContentFactory .contentBuilder (contentType );
130- request .toXContent (actualRequest , ToXContent .EMPTY_PARAMS );
131-
132- assertToXContentEquivalent (BytesReference .bytes (expectedRequest ),
133- BytesReference .bytes (actualRequest ),
134- contentType );
135- }
136-
137- public void testToXContentWithStoredTemplate () throws IOException {
138- SearchTemplateRequest request = new SearchTemplateRequest ();
139-
140- request .setScriptType (ScriptType .STORED );
141- request .setScript ("match_template" );
142- request .setExplain (true );
143-
144- Map <String , Object > params = new HashMap <>();
145- params .put ("my_field" , "foo" );
146- params .put ("my_value" , "bar" );
147- request .setScriptParams (params );
148-
149- XContentType contentType = randomFrom (XContentType .values ());
150- XContentBuilder expectedRequest = XContentFactory .contentBuilder (contentType )
151- .startObject ()
152- .field ("id" , "match_template" )
153- .startObject ("params" )
154- .field ("my_field" , "foo" )
155- .field ("my_value" , "bar" )
156- .endObject ()
157- .field ("explain" , true )
158- .field ("profile" , false )
159- .endObject ();
160-
161- XContentBuilder actualRequest = XContentFactory .contentBuilder (contentType );
162- request .toXContent (actualRequest , ToXContent .EMPTY_PARAMS );
163-
164- assertToXContentEquivalent (
165- BytesReference .bytes (expectedRequest ),
166- BytesReference .bytes (actualRequest ),
167- contentType );
168- }
169-
170- /**
171- * Note that for xContent parsing, we omit two parts of the request:
172- * - The 'simulate' option is always held constant, since this parameter is not included
173- * in the request's xContent (it's instead used to determine the request endpoint).
174- * - We omit the random SearchRequest, since this component only affects the request
175- * parameters and also isn't captured in the request's xContent.
176- */
177- public void testFromXContent () throws IOException {
178- AbstractXContentTestCase .testFromXContent (NUMBER_OF_TEST_RUNS ,
179- this ::createTestInstanceForXContent ,
180- false ,
181- new String []{}, field -> false ,
182- this ::createParser ,
183- SearchTemplateRequest ::fromXContent ,
184- this ::assertEqualInstances , true );
185- }
87+ request .setExplain (randomBoolean ());
88+ request .setProfile (randomBoolean ());
89+ request .setSimulate (randomBoolean ());
18690
187- private SearchTemplateRequest createTestInstanceForXContent () {
188- SearchTemplateRequest request = createTestInstance ();
189- request .setSimulate (false );
190- request .setRequest (null );
91+ request .setRequest (RandomSearchRequestGenerator .randomSearchRequest (
92+ SearchSourceBuilder ::searchSource ));
19193 return request ;
19294 }
193-
194- public void testFromXContentWithEmbeddedTemplate () throws Exception {
195- String source = "{" +
196- " 'source' : {\n " +
197- " 'query': {\n " +
198- " 'terms': {\n " +
199- " 'status': [\n " +
200- " '{{#status}}',\n " +
201- " '{{.}}',\n " +
202- " '{{/status}}'\n " +
203- " ]\n " +
204- " }\n " +
205- " }\n " +
206- " }" +
207- "}" ;
208-
209- SearchTemplateRequest request = SearchTemplateRequest .fromXContent (newParser (source ));
210- assertThat (request .getScript (), equalTo ("{\" query\" :{\" terms\" :{\" status\" :[\" {{#status}}\" ,\" {{.}}\" ,\" {{/status}}\" ]}}}" ));
211- assertThat (request .getScriptType (), equalTo (ScriptType .INLINE ));
212- assertThat (request .getScriptParams (), nullValue ());
213- }
214-
215- public void testFromXContentWithEmbeddedTemplateAndParams () throws Exception {
216- String source = "{" +
217- " 'source' : {" +
218- " 'query': { 'match' : { '{{my_field}}' : '{{my_value}}' } }," +
219- " 'size' : '{{my_size}}'" +
220- " }," +
221- " 'params' : {" +
222- " 'my_field' : 'foo'," +
223- " 'my_value' : 'bar'," +
224- " 'my_size' : 5" +
225- " }" +
226- "}" ;
227-
228- SearchTemplateRequest request = SearchTemplateRequest .fromXContent (newParser (source ));
229- assertThat (request .getScript (), equalTo ("{\" query\" :{\" match\" :{\" {{my_field}}\" :\" {{my_value}}\" }},\" size\" :\" {{my_size}}\" }" ));
230- assertThat (request .getScriptType (), equalTo (ScriptType .INLINE ));
231- assertThat (request .getScriptParams ().size (), equalTo (3 ));
232- assertThat (request .getScriptParams (), hasEntry ("my_field" , "foo" ));
233- assertThat (request .getScriptParams (), hasEntry ("my_value" , "bar" ));
234- assertThat (request .getScriptParams (), hasEntry ("my_size" , 5 ));
235- }
236-
237- public void testFromXContentWithMalformedRequest () {
238- // Unclosed template id
239- expectThrows (XContentParseException .class , () -> SearchTemplateRequest .fromXContent (newParser ("{'id' : 'another_temp }" )));
240- }
241-
242- /**
243- * Creates a {@link XContentParser} with the given String while replacing single quote to double quotes.
244- */
245- private XContentParser newParser (String s ) throws IOException {
246- assertNotNull (s );
247- return createParser (JsonXContent .jsonXContent , s .replace ("'" , "\" " ));
248- }
24995}
0 commit comments