20
20
package org .elasticsearch .search .scroll ;
21
21
22
22
import org .elasticsearch .action .search .SearchScrollRequest ;
23
+ import org .elasticsearch .client .node .NodeClient ;
23
24
import org .elasticsearch .common .bytes .BytesArray ;
24
25
import org .elasticsearch .common .settings .Settings ;
25
- import org .elasticsearch .common .unit .TimeValue ;
26
- import org .elasticsearch .common .xcontent .XContentFactory ;
27
- import org .elasticsearch .common .xcontent .XContentParser ;
28
26
import org .elasticsearch .common .xcontent .XContentType ;
29
27
import org .elasticsearch .rest .RestController ;
30
28
import org .elasticsearch .rest .RestRequest ;
31
29
import org .elasticsearch .rest .action .search .RestSearchScrollAction ;
32
30
import org .elasticsearch .test .ESTestCase ;
31
+ import org .elasticsearch .test .rest .FakeRestChannel ;
33
32
import org .elasticsearch .test .rest .FakeRestRequest ;
33
+ import org .mockito .ArgumentCaptor ;
34
+
35
+ import java .util .HashMap ;
36
+ import java .util .Map ;
34
37
35
38
import static org .hamcrest .Matchers .equalTo ;
36
- import static org .hamcrest .Matchers .startsWith ;
39
+ import static org .mockito .Matchers .any ;
40
+ import static org .mockito .Matchers .anyObject ;
41
+ import static org .mockito .Mockito .doNothing ;
37
42
import static org .mockito .Mockito .mock ;
43
+ import static org .mockito .Mockito .verify ;
38
44
39
45
public class RestSearchScrollActionTests extends ESTestCase {
40
- public void testParseSearchScrollRequest () throws Exception {
41
- XContentParser content = createParser (XContentFactory .jsonBuilder ()
42
- .startObject ()
43
- .field ("scroll_id" , "SCROLL_ID" )
44
- .field ("scroll" , "1m" )
45
- .endObject ());
46
-
47
- SearchScrollRequest searchScrollRequest = new SearchScrollRequest ();
48
- RestSearchScrollAction .buildFromContent (content , searchScrollRequest );
49
-
50
- assertThat (searchScrollRequest .scrollId (), equalTo ("SCROLL_ID" ));
51
- assertThat (searchScrollRequest .scroll ().keepAlive (), equalTo (TimeValue .parseTimeValue ("1m" , null , "scroll" )));
52
- }
53
46
54
47
public void testParseSearchScrollRequestWithInvalidJsonThrowsException () throws Exception {
55
48
RestSearchScrollAction action = new RestSearchScrollAction (Settings .EMPTY , mock (RestController .class ));
@@ -59,16 +52,24 @@ public void testParseSearchScrollRequestWithInvalidJsonThrowsException() throws
59
52
assertThat (e .getMessage (), equalTo ("Failed to parse request body" ));
60
53
}
61
54
62
- public void testParseSearchScrollRequestWithUnknownParamThrowsException () throws Exception {
63
- SearchScrollRequest searchScrollRequest = new SearchScrollRequest ();
64
- XContentParser invalidContent = createParser (XContentFactory .jsonBuilder ()
65
- .startObject ()
66
- .field ("scroll_id" , "value_2" )
67
- .field ("unknown" , "keyword" )
68
- .endObject ());
55
+ public void testBodyParamsOverrideQueryStringParams () throws Exception {
56
+ NodeClient nodeClient = mock (NodeClient .class );
57
+ doNothing ().when (nodeClient ).searchScroll (any (), any ());
58
+
59
+ RestSearchScrollAction action = new RestSearchScrollAction (Settings .EMPTY , mock (RestController .class ));
60
+ Map <String , String > params = new HashMap <>();
61
+ params .put ("scroll_id" , "QUERY_STRING" );
62
+ params .put ("scroll" , "1000m" );
63
+ RestRequest request = new FakeRestRequest .Builder (xContentRegistry ())
64
+ .withParams (params )
65
+ .withContent (new BytesArray ("{\" scroll_id\" :\" BODY\" , \" scroll\" :\" 1m\" }" ), XContentType .JSON ).build ();
66
+ FakeRestChannel channel = new FakeRestChannel (request , false , 0 );
67
+ action .handleRequest (request , channel , nodeClient );
69
68
70
- Exception e = expectThrows (IllegalArgumentException .class ,
71
- () -> RestSearchScrollAction .buildFromContent (invalidContent , searchScrollRequest ));
72
- assertThat (e .getMessage (), startsWith ("Unknown parameter [unknown]" ));
69
+ ArgumentCaptor <SearchScrollRequest > argument = ArgumentCaptor .forClass (SearchScrollRequest .class );
70
+ verify (nodeClient ).searchScroll (argument .capture (), anyObject ());
71
+ SearchScrollRequest searchScrollRequest = argument .getValue ();
72
+ assertEquals ("BODY" , searchScrollRequest .scrollId ());
73
+ assertEquals ("1m" , searchScrollRequest .scroll ().keepAlive ().getStringRep ());
73
74
}
74
75
}
0 commit comments