17
17
import java .io .IOException ;
18
18
import java .util .ArrayList ;
19
19
import java .util .List ;
20
+ import java .util .function .Consumer ;
21
+ import java .util .function .Function ;
20
22
21
23
import static org .hamcrest .Matchers .containsString ;
22
24
23
25
public class SqlRequestParsersTests extends ESTestCase {
24
26
25
27
public void testUnknownFieldParsingErrors () throws IOException {
26
- XContentParser parser = parser ("{\" key\" : \" value\" }" );
27
- Exception e = expectThrows (IllegalArgumentException .class , () -> SqlClearCursorRequest .fromXContent (parser ));
28
- assertThat (e .getMessage (), containsString ("unknown field [key]" ));
29
-
30
- XContentParser parser2 = parser ("{\" key\" : \" value\" }" );
31
- e = expectThrows (IllegalArgumentException .class , () -> SqlQueryRequest .fromXContent (parser2 ));
32
- assertThat (e .getMessage (), containsString ("unknown field [key]" ));
33
-
34
- XContentParser parser3 = parser ("{\" key\" : \" value\" }" );
35
- e = expectThrows (IllegalArgumentException .class , () -> SqlTranslateRequest .fromXContent (parser3 ));
36
- assertThat (e .getMessage (), containsString ("unknown field [key]" ));
28
+ assertParsingErrorMessage ("{\" key\" : \" value\" }" , "unknown field [key]" , SqlClearCursorRequest ::fromXContent );
29
+ assertParsingErrorMessage ("{\" key\" : \" value\" }" , "unknown field [key]" , SqlQueryRequest ::fromXContent );
30
+ assertParsingErrorMessage ("{\" key\" : \" value\" }" , "unknown field [key]" , SqlTranslateRequest ::fromXContent );
37
31
}
38
32
39
33
public void testClearCursorRequestParser () throws IOException {
40
- XContentParser parser = parser ("{\" mode\" : \" jdbc\" }" );
41
- Exception e = expectThrows ( IllegalArgumentException . class , () -> SqlClearCursorRequest . fromXContent ( parser ));
42
- assertThat ( e . getMessage (), containsString ( "Required [cursor]" ) );
34
+ assertParsingErrorMessage ("{\" mode\" : \" jdbc\" }" , "Required [cursor]" , SqlClearCursorRequest :: fromXContent );
35
+ assertParsingErrorMessage ( "{ \" cursor \" : \" whatever \" , \" fetch_size \" :123}" , "unknown field [fetch_size]" ,
36
+ SqlClearCursorRequest :: fromXContent );
43
37
44
- XContentParser parser2 = parser ("{\" cursor\" : \" whatever\" , \" fetch_size\" :123}" );
45
- e = expectThrows (IllegalArgumentException .class , () -> SqlClearCursorRequest .fromXContent (parser2 ));
46
- assertThat (e .getMessage (), containsString ("unknown field [fetch_size]" ));
47
-
48
- XContentParser parser3 = parser ("{\" cursor\" : \" whatever\" , \" mode\" : \" jdbc\" , \" client.id\" : \" bla\" }" );
49
- SqlClearCursorRequest request = SqlClearCursorRequest .fromXContent (parser3 );
38
+ SqlClearCursorRequest request = generateRequest ("{\" cursor\" : \" whatever\" , \" mode\" : \" jdbc\" , \" client.id\" : \" bla\" }" ,
39
+ SqlClearCursorRequest ::fromXContent );
50
40
assertEquals ("bla" , request .clientId ());
51
41
assertEquals ("jdbc" , request .mode ().toString ());
52
42
assertEquals ("whatever" , request .getCursor ());
53
43
54
- XContentParser parser4 = parser ("{\" cursor\" : \" whatever\" , \" mode\" : \" some foo mode\" , \" client.id\" : \" bla\" }" );
55
- request = SqlClearCursorRequest . fromXContent ( parser4 );
44
+ request = generateRequest ("{\" cursor\" : \" whatever\" , \" mode\" : \" some foo mode\" , \" client.id\" : \" bla\" }" ,
45
+ SqlClearCursorRequest :: fromXContent );
56
46
assertEquals ("bla" , request .clientId ());
57
47
assertEquals ("plain" , request .mode ().toString ());
58
48
assertEquals ("whatever" , request .getCursor ());
49
+
50
+ request = generateRequest ("{\" cursor\" : \" whatever\" }" , SqlClearCursorRequest ::fromXContent );
51
+ assertNull (request .clientId ());
52
+ assertEquals ("plain" , request .mode ().toString ());
53
+ assertEquals ("whatever" , request .getCursor ());
59
54
}
60
55
61
56
public void testTranslateRequestParser () throws IOException {
62
- XContentParser parser = parser ("{\" qquery\" : \" select * from bla\" }" );
63
- Exception e = expectThrows (IllegalArgumentException .class , () -> SqlTranslateRequest .fromXContent (parser ));
64
- assertThat (e .getMessage (), containsString ("unknown field [qquery]" ));
57
+ assertParsingErrorMessage ("{\" qquery\" : \" select * from bla\" }" , "unknown field [qquery]" , SqlTranslateRequest ::fromXContent );
65
58
66
- XContentParser parser3 = parser ("{\" query\" : \" select * from foo\" }" );
67
- SqlTranslateRequest request = SqlTranslateRequest .fromXContent (parser3 );
59
+ SqlTranslateRequest request = generateRequest ("{\" query\" : \" select * from foo\" }" , SqlTranslateRequest ::fromXContent );
68
60
assertEquals ("select * from foo" , request .query ());
69
61
}
70
62
71
63
public void testQueryRequestParser () throws IOException {
72
- XContentParser parser = parser ("{\" mode\" : 123}" );
73
- Exception e = expectThrows (IllegalArgumentException .class , () -> SqlQueryRequest .fromXContent (parser ));
74
- assertThat (e .getMessage (), containsString ("mode doesn't support values of type: VALUE_NUMBER" ));
75
-
76
- XContentParser parser2 = parser ("{\" cursor\" : \" whatever\" , \" fetch_size\" :\" abc\" }" );
77
- e = expectThrows (IllegalArgumentException .class , () -> SqlQueryRequest .fromXContent (parser2 ));
78
- assertThat (e .getMessage (), containsString ("failed to parse field [fetch_size]" ));
79
-
80
- XContentParser parser3 = parser ("{\" client.id\" :123}" );
81
- e = expectThrows (IllegalArgumentException .class , () -> SqlQueryRequest .fromXContent (parser3 ));
82
- assertThat (e .getMessage (), containsString ("client.id doesn't support values of type: VALUE_NUMBER" ));
64
+ assertParsingErrorMessage ("{\" mode\" : 123}" , "mode doesn't support values of type: VALUE_NUMBER" , SqlQueryRequest ::fromXContent );
65
+ assertParsingErrorMessage ("{\" cursor\" : \" whatever\" , \" fetch_size\" :\" abc\" }" , "failed to parse field [fetch_size]" ,
66
+ SqlQueryRequest ::fromXContent );
67
+ assertParsingErrorMessage ("{\" client.id\" :123}" , "client.id doesn't support values of type: VALUE_NUMBER" ,
68
+ SqlQueryRequest ::fromXContent );
69
+ assertParsingErrorMessage ("{\" params\" :[{\" value\" :123}]}" , "failed to parse field [params]" , SqlQueryRequest ::fromXContent );
70
+ assertParsingErrorMessage ("{\" time_zone\" :12}" , "time_zone doesn't support values of type: VALUE_NUMBER" ,
71
+ SqlQueryRequest ::fromXContent );
83
72
84
- XContentParser parser4 = parser ("{\" params\" :[{\" value\" :123}]}" );
85
- e = expectThrows (IllegalArgumentException .class , () -> SqlQueryRequest .fromXContent (parser4 ));
86
- assertThat (e .getMessage (), containsString ("failed to parse field [params]" ));
87
-
88
- XContentParser parser5 = parser ("{\" time_zone\" :12}" );
89
- e = expectThrows (IllegalArgumentException .class , () -> SqlQueryRequest .fromXContent (parser5 ));
90
- assertThat (e .getMessage (), containsString ("time_zone doesn't support values of type: VALUE_NUMBER" ));
91
-
92
- XContentParser parser6 = parser ("{\" cursor\" : \" whatever\" , \" mode\" : \" jdbc\" , \" client.id\" : \" bla\" , \" query\" :\" select\" ,"
93
- + "\" params\" :[{\" value\" :123, \" type\" :\" whatever\" }], \" time_zone\" :\" UTC\" , \" request_timeout\" :\" 5s\" ,"
94
- + "\" page_timeout\" :\" 10s\" }" );
95
- SqlQueryRequest request = SqlQueryRequest .fromXContent (parser6 );
73
+ SqlQueryRequest request = generateRequest ("{\" cursor\" : \" whatever\" , \" mode\" : \" jdbc\" , \" client.id\" : \" bla\" ,"
74
+ + "\" query\" :\" select\" ,\" params\" :[{\" value\" :123, \" type\" :\" whatever\" }], \" time_zone\" :\" UTC\" ,"
75
+ + "\" request_timeout\" :\" 5s\" ,\" page_timeout\" :\" 10s\" }" , SqlQueryRequest ::fromXContent );
96
76
assertEquals ("bla" , request .clientId ());
97
77
assertEquals ("jdbc" , request .mode ().toString ());
98
78
assertEquals ("whatever" , request .cursor ());
@@ -101,12 +81,23 @@ public void testQueryRequestParser() throws IOException {
101
81
List <SqlTypedParamValue > list = new ArrayList <SqlTypedParamValue >(1 );
102
82
list .add (new SqlTypedParamValue ("whatever" , 123 ));
103
83
assertEquals (list , request .params ());
104
-
105
84
assertEquals ("UTC" , request .timeZone ().getID ());
106
85
assertEquals (TimeValue .parseTimeValue ("5s" , "request_timeout" ), request .requestTimeout ());
107
86
assertEquals (TimeValue .parseTimeValue ("10s" , "page_timeout" ), request .pageTimeout ());
108
87
}
109
88
89
+ private <R extends AbstractSqlRequest > R generateRequest (String json , Function <XContentParser , R > fromXContent )
90
+ throws IOException {
91
+ XContentParser parser = parser (json );
92
+ return fromXContent .apply (parser );
93
+ }
94
+
95
+ private void assertParsingErrorMessage (String json , String errorMessage , Consumer <XContentParser > consumer ) throws IOException {
96
+ XContentParser parser = parser (json );
97
+ Exception e = expectThrows (IllegalArgumentException .class , () -> consumer .accept (parser ));
98
+ assertThat (e .getMessage (), containsString (errorMessage ));
99
+ }
100
+
110
101
private XContentParser parser (String content ) throws IOException {
111
102
XContentType xContentType = XContentType .JSON ;
112
103
return xContentType .xContent ().createParser (
0 commit comments