1- package org .elasticsearch .client ;/*
1+ package org .elasticsearch .client ;
2+ /*
23 * Licensed to Elasticsearch under one or more contributor
34 * license agreements. See the NOTICE file distributed with
45 * this work for additional information regarding copyright
1718 * under the License.
1819 */
1920
20-
21- import org .apache .http .entity .ContentType ;
22- import org .apache .http .entity .StringEntity ;
23- import org .apache .http .util .EntityUtils ;
2421import org .elasticsearch .ElasticsearchStatusException ;
2522import org .elasticsearch .action .admin .cluster .storedscripts .DeleteStoredScriptRequest ;
2623import org .elasticsearch .action .admin .cluster .storedscripts .DeleteStoredScriptResponse ;
2724import org .elasticsearch .action .admin .cluster .storedscripts .GetStoredScriptRequest ;
2825import org .elasticsearch .action .admin .cluster .storedscripts .GetStoredScriptResponse ;
29- import org .elasticsearch .common .Strings ;
30- import org .elasticsearch .common .xcontent .ToXContent ;
26+ import org .elasticsearch .action .admin .cluster .storedscripts .PutStoredScriptRequest ;
27+ import org .elasticsearch .action .admin .cluster .storedscripts .PutStoredScriptResponse ;
28+ import org .elasticsearch .common .bytes .BytesArray ;
3129import org .elasticsearch .common .xcontent .XContentType ;
3230import org .elasticsearch .rest .RestStatus ;
3331import org .elasticsearch .script .Script ;
3432import org .elasticsearch .script .StoredScriptSource ;
3533
3634import java .util .Collections ;
35+ import java .util .Map ;
3736
38- import static java .util .Collections .emptyMap ;
39- import static org .elasticsearch .common .xcontent .XContentFactory .jsonBuilder ;
37+ import static org .elasticsearch .common .xcontent .support .XContentMapValues .extractValue ;
4038import static org .hamcrest .Matchers .equalTo ;
4139
4240public class StoredScriptsIT extends ESRestHighLevelClientTestCase {
4341
44- final String id = "calculate-score" ;
42+ private static final String id = "calculate-score" ;
4543
4644 public void testGetStoredScript () throws Exception {
4745 final StoredScriptSource scriptSource =
4846 new StoredScriptSource ("painless" ,
4947 "Math.log(_score * 2) + params.my_modifier" ,
5048 Collections .singletonMap (Script .CONTENT_TYPE_OPTION , XContentType .JSON .mediaType ()));
5149
52- final String script = Strings .toString (scriptSource .toXContent (jsonBuilder (), ToXContent .EMPTY_PARAMS ));
53- // TODO: change to HighLevel PutStoredScriptRequest when it will be ready
54- // so far - using low-level REST API
55- Response putResponse =
56- adminClient ()
57- .performRequest ("PUT" , "/_scripts/calculate-score" , emptyMap (),
58- new StringEntity ("{\" script\" :" + script + "}" ,
59- ContentType .APPLICATION_JSON ));
60- assertEquals (putResponse .getStatusLine ().getReasonPhrase (), 200 , putResponse .getStatusLine ().getStatusCode ());
61- assertEquals ("{\" acknowledged\" :true}" , EntityUtils .toString (putResponse .getEntity ()));
62-
63- GetStoredScriptRequest getRequest = new GetStoredScriptRequest ("calculate-score" );
50+ PutStoredScriptRequest request =
51+ new PutStoredScriptRequest (id , "search" , new BytesArray ("{}" ), XContentType .JSON , scriptSource );
52+ PutStoredScriptResponse putResponse = execute (request , highLevelClient ()::putScript ,
53+ highLevelClient ()::putScriptAsync );
54+ assertThat (putResponse .isAcknowledged (), equalTo (true ));
55+
56+ GetStoredScriptRequest getRequest = new GetStoredScriptRequest (id );
6457 getRequest .masterNodeTimeout ("50s" );
6558
6659 GetStoredScriptResponse getResponse = execute (getRequest , highLevelClient ()::getScript ,
@@ -75,16 +68,11 @@ public void testDeleteStoredScript() throws Exception {
7568 "Math.log(_score * 2) + params.my_modifier" ,
7669 Collections .singletonMap (Script .CONTENT_TYPE_OPTION , XContentType .JSON .mediaType ()));
7770
78- final String script = Strings .toString (scriptSource .toXContent (jsonBuilder (), ToXContent .EMPTY_PARAMS ));
79- // TODO: change to HighLevel PutStoredScriptRequest when it will be ready
80- // so far - using low-level REST API
81- Response putResponse =
82- adminClient ()
83- .performRequest ("PUT" , "/_scripts/" + id , emptyMap (),
84- new StringEntity ("{\" script\" :" + script + "}" ,
85- ContentType .APPLICATION_JSON ));
86- assertEquals (putResponse .getStatusLine ().getReasonPhrase (), 200 , putResponse .getStatusLine ().getStatusCode ());
87- assertEquals ("{\" acknowledged\" :true}" , EntityUtils .toString (putResponse .getEntity ()));
71+ PutStoredScriptRequest request =
72+ new PutStoredScriptRequest (id , "search" , new BytesArray ("{}" ), XContentType .JSON , scriptSource );
73+ PutStoredScriptResponse putResponse = execute (request , highLevelClient ()::putScript ,
74+ highLevelClient ()::putScriptAsync );
75+ assertThat (putResponse .isAcknowledged (), equalTo (true ));
8876
8977 DeleteStoredScriptRequest deleteRequest = new DeleteStoredScriptRequest (id );
9078 deleteRequest .masterNodeTimeout ("50s" );
@@ -102,4 +90,23 @@ public void testDeleteStoredScript() throws Exception {
10290 highLevelClient ()::getScriptAsync ));
10391 assertThat (statusException .status (), equalTo (RestStatus .NOT_FOUND ));
10492 }
93+
94+ public void testPutScript () throws Exception {
95+ final StoredScriptSource scriptSource =
96+ new StoredScriptSource ("painless" ,
97+ "Math.log(_score * 2) + params.my_modifier" ,
98+ Collections .singletonMap (Script .CONTENT_TYPE_OPTION , XContentType .JSON .mediaType ()));
99+
100+ PutStoredScriptRequest request =
101+ new PutStoredScriptRequest (id , "search" , new BytesArray ("{}" ), XContentType .JSON , scriptSource );
102+ PutStoredScriptResponse putResponse = execute (request , highLevelClient ()::putScript ,
103+ highLevelClient ()::putScriptAsync );
104+ assertThat (putResponse .isAcknowledged (), equalTo (true ));
105+
106+ Map <String , Object > script = getAsMap ("/_scripts/" + id );
107+ assertThat (extractValue ("_id" , script ), equalTo (id ));
108+ assertThat (extractValue ("found" , script ), equalTo (true ));
109+ assertThat (extractValue ("script.lang" , script ), equalTo ("painless" ));
110+ assertThat (extractValue ("script.source" , script ), equalTo ("Math.log(_score * 2) + params.my_modifier" ));
111+ }
105112}
0 commit comments