22
22
import org .junit .Test ;
23
23
import org .openqa .selenium .BuildInfo ;
24
24
import org .openqa .selenium .Platform ;
25
+ import org .openqa .selenium .TimeoutException ;
25
26
import org .openqa .selenium .environment .webserver .AppServer ;
26
27
import org .openqa .selenium .environment .webserver .NettyAppServer ;
27
28
import org .openqa .selenium .json .Json ;
29
+ import org .openqa .selenium .remote .http .ClientConfig ;
28
30
import org .openqa .selenium .remote .http .Contents ;
29
31
import org .openqa .selenium .remote .http .HttpClient ;
30
32
import org .openqa .selenium .remote .http .HttpHandler ;
33
35
34
36
import java .net .URI ;
35
37
import java .net .URL ;
38
+ import java .time .Duration ;
36
39
import java .util .Arrays ;
37
40
import java .util .List ;
38
41
import java .util .Map ;
42
45
import static java .util .Collections .singletonList ;
43
46
import static java .util .stream .Collectors .toList ;
44
47
import static org .assertj .core .api .Assertions .assertThat ;
48
+ import static org .assertj .core .api .Assertions .assertThatExceptionOfType ;
45
49
import static org .openqa .selenium .json .Json .MAP_TYPE ;
46
50
import static org .openqa .selenium .net .Urls .fromUri ;
47
51
import static org .openqa .selenium .remote .http .Contents .string ;
@@ -77,8 +81,8 @@ public void responseShouldKeepMultipleHeadersSeparate() {
77
81
HttpResponse response = getResponseWithHeaders (headers );
78
82
79
83
List <String > values = StreamSupport
80
- .stream (response .getHeaders ("Cheese" ).spliterator (), false )
81
- .collect (toList ());
84
+ .stream (response .getHeaders ("Cheese" ).spliterator (), false )
85
+ .collect (toList ());
82
86
83
87
assertThat (values ).contains ("Cheddar" );
84
88
assertThat (values ).contains ("Brie, Gouda" );
@@ -143,8 +147,8 @@ public void shouldAllowUrlsWithSchemesToBeUsed() throws Exception {
143
147
144
148
URI uri = URI .create (server .whereIs ("/" ));
145
149
HttpRequest request = new HttpRequest (
146
- GET ,
147
- String .format ("http://%s:%s/hello" , uri .getHost (), uri .getPort ()));
150
+ GET ,
151
+ String .format ("http://%s:%s/hello" , uri .getHost (), uri .getPort ()));
148
152
149
153
HttpResponse response = client .execute (request );
150
154
@@ -157,27 +161,43 @@ public void shouldAllowUrlsWithSchemesToBeUsed() throws Exception {
157
161
@ Test
158
162
public void shouldIncludeAUserAgentHeader () {
159
163
HttpResponse response = executeWithinServer (
160
- new HttpRequest (GET , "/foo" ),
161
- req -> new HttpResponse ().setContent (Contents .utf8String (req .getHeader ("user-agent" ))));
164
+ new HttpRequest (GET , "/foo" ),
165
+ req -> new HttpResponse ().setContent (Contents .utf8String (req .getHeader ("user-agent" ))));
162
166
163
167
String label = new BuildInfo ().getReleaseLabel ();
164
168
Platform platform = Platform .getCurrent ();
165
169
Platform family = platform .family () == null ? platform : platform .family ();
166
170
167
171
assertThat (string (response )).isEqualTo (String .format (
168
- "selenium/%s (java %s)" ,
169
- label ,
170
- family .toString ().toLowerCase ()));
172
+ "selenium/%s (java %s)" ,
173
+ label ,
174
+ family .toString ().toLowerCase ()));
171
175
}
172
176
173
- private HttpResponse getResponseWithHeaders (final Multimap <String , String > headers ) {
174
- return executeWithinServer (
177
+ @ Test
178
+ public void shouldAllowConfigurationOfRequestTimeout () {
179
+ assertThatExceptionOfType (TimeoutException .class )
180
+ .isThrownBy (() -> executeWithinServer (
175
181
new HttpRequest (GET , "/foo" ),
176
182
req -> {
177
- HttpResponse resp = new HttpResponse ();
178
- headers .forEach (resp ::addHeader );
179
- return resp ;
180
- });
183
+ try {
184
+ Thread .sleep (3000 );
185
+ } catch (InterruptedException e ) {
186
+ e .printStackTrace ();
187
+ }
188
+ return new HttpResponse ().setContent (Contents .utf8String (req .getHeader ("user-agent" )));
189
+ },
190
+ ClientConfig .defaultConfig ().readTimeout (Duration .ofSeconds (1 ))));
191
+ }
192
+
193
+ private HttpResponse getResponseWithHeaders (final Multimap <String , String > headers ) {
194
+ return executeWithinServer (
195
+ new HttpRequest (GET , "/foo" ),
196
+ req -> {
197
+ HttpResponse resp = new HttpResponse ();
198
+ headers .forEach (resp ::addHeader );
199
+ return resp ;
200
+ });
181
201
}
182
202
183
203
private HttpResponse getQueryParameterResponse (HttpRequest request ) {
@@ -203,4 +223,16 @@ private HttpResponse executeWithinServer(HttpRequest request, HttpHandler handle
203
223
server .stop ();
204
224
}
205
225
}
226
+
227
+ private HttpResponse executeWithinServer (HttpRequest request , HttpHandler handler , ClientConfig config ) {
228
+ AppServer server = new NettyAppServer (handler );
229
+ server .start ();
230
+
231
+ try {
232
+ HttpClient client = createFactory ().createClient (config .baseUri (URI .create (server .whereIs ("/" ))));
233
+ return client .execute (request );
234
+ } finally {
235
+ server .stop ();
236
+ }
237
+ }
206
238
}
0 commit comments