branch | http-client-branch |
changeset 56265 | ec34ae013fbe |
parent 56167 | 96fa4f49a9ff |
child 56369 | 24a8fafec3ff |
56264:c012b93297b0 | 56265:ec34ae013fbe |
---|---|
59 import java.io.InputStream; |
59 import java.io.InputStream; |
60 import java.io.File; |
60 import java.io.File; |
61 import java.io.OutputStream; |
61 import java.io.OutputStream; |
62 import java.lang.reflect.Constructor; |
62 import java.lang.reflect.Constructor; |
63 import java.net.BindException; |
63 import java.net.BindException; |
64 import java.net.InetAddress; |
|
64 import java.net.InetSocketAddress; |
65 import java.net.InetSocketAddress; |
65 import java.net.ProxySelector; |
66 import java.net.ProxySelector; |
66 import java.net.URI; |
67 import java.net.URI; |
67 import java.net.URLClassLoader; |
68 import java.net.URLClassLoader; |
68 import java.net.URL; |
69 import java.net.URL; |
177 |
178 |
178 static void setupTests() { |
179 static void setupTests() { |
179 tests = new TestAndResult[]{ |
180 tests = new TestAndResult[]{ |
180 // (0) policy does not have permission for file. Should fail |
181 // (0) policy does not have permission for file. Should fail |
181 test(false, () -> { // Policy 0 |
182 test(false, () -> { // Policy 0 |
182 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
183 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
183 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
184 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
184 HttpResponse<?> response = client.send(request, ofString()); |
185 HttpResponse<?> response = client.send(request, ofString()); |
185 }), |
186 }), |
186 // (1) policy has permission for file URL |
187 // (1) policy has permission for file URL |
187 test(true, () -> { //Policy 1 |
188 test(true, () -> { //Policy 1 |
188 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
189 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
189 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
190 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
190 HttpResponse<?> response = client.send(request, ofString()); |
191 HttpResponse<?> response = client.send(request, ofString()); |
191 }), |
192 }), |
192 // (2) policy has permission for all file URLs under /files |
193 // (2) policy has permission for all file URLs under /files |
193 test(true, () -> { // Policy 2 |
194 test(true, () -> { // Policy 2 |
194 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
195 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
195 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
196 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
196 HttpResponse<?> response = client.send(request, ofString()); |
197 HttpResponse<?> response = client.send(request, ofString()); |
197 }), |
198 }), |
198 // (3) policy has permission for first URL but not redirected URL |
199 // (3) policy has permission for first URL but not redirected URL |
199 test(false, () -> { // Policy 3 |
200 test(false, () -> { // Policy 3 |
200 URI u = URI.create("http://127.0.0.1:" + port + "/redirect/foo.txt"); |
201 URI u = URI.create("http://localhost:" + port + "/redirect/foo.txt"); |
201 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
202 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
202 HttpResponse<?> response = client.send(request, ofString()); |
203 HttpResponse<?> response = client.send(request, ofString()); |
203 }), |
204 }), |
204 // (4) policy has permission for both first URL and redirected URL |
205 // (4) policy has permission for both first URL and redirected URL |
205 test(true, () -> { // Policy 4 |
206 test(true, () -> { // Policy 4 |
206 URI u = URI.create("http://127.0.0.1:" + port + "/redirect/foo.txt"); |
207 URI u = URI.create("http://localhost:" + port + "/redirect/foo.txt"); |
207 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
208 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
208 HttpResponse<?> response = client.send(request, ofString()); |
209 HttpResponse<?> response = client.send(request, ofString()); |
209 }), |
210 }), |
210 // (5) policy has permission for redirected but not first URL |
211 // (5) policy has permission for redirected but not first URL |
211 test(false, () -> { // Policy 5 |
212 test(false, () -> { // Policy 5 |
212 URI u = URI.create("http://127.0.0.1:" + port + "/redirect/foo.txt"); |
213 URI u = URI.create("http://localhost:" + port + "/redirect/foo.txt"); |
213 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
214 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
214 HttpResponse<?> response = client.send(request, ofString()); |
215 HttpResponse<?> response = client.send(request, ofString()); |
215 }), |
216 }), |
216 // (6) policy has permission for file URL, but not method |
217 // (6) policy has permission for file URL, but not method |
217 test(false, () -> { //Policy 6 |
218 test(false, () -> { //Policy 6 |
218 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
219 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
219 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
220 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
220 HttpResponse<?> response = client.send(request, ofString()); |
221 HttpResponse<?> response = client.send(request, ofString()); |
221 }), |
222 }), |
222 // (7) policy has permission for file URL, method, but not header |
223 // (7) policy has permission for file URL, method, but not header |
223 test(false, () -> { //Policy 7 |
224 test(false, () -> { //Policy 7 |
224 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
225 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
225 HttpRequest request = HttpRequest.newBuilder(u) |
226 HttpRequest request = HttpRequest.newBuilder(u) |
226 .header("X-Foo", "bar") |
227 .header("X-Foo", "bar") |
227 .GET() |
228 .GET() |
228 .build(); |
229 .build(); |
229 HttpResponse<?> response = client.send(request, ofString()); |
230 HttpResponse<?> response = client.send(request, ofString()); |
230 }), |
231 }), |
231 // (8) policy has permission for file URL, method and header |
232 // (8) policy has permission for file URL, method and header |
232 test(true, () -> { //Policy 8 |
233 test(true, () -> { //Policy 8 |
233 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
234 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
234 HttpRequest request = HttpRequest.newBuilder(u) |
235 HttpRequest request = HttpRequest.newBuilder(u) |
235 .header("X-Foo", "bar") |
236 .header("X-Foo", "bar") |
236 .GET() |
237 .GET() |
237 .build(); |
238 .build(); |
238 HttpResponse<?> response = client.send(request, ofString()); |
239 HttpResponse<?> response = client.send(request, ofString()); |
239 }), |
240 }), |
240 // (9) policy has permission for file URL, method and header |
241 // (9) policy has permission for file URL, method and header |
241 test(true, () -> { //Policy 9 |
242 test(true, () -> { //Policy 9 |
242 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
243 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
243 HttpRequest request = HttpRequest.newBuilder(u) |
244 HttpRequest request = HttpRequest.newBuilder(u) |
244 .headers("X-Foo", "bar", "X-Bar", "foo") |
245 .headers("X-Foo", "bar", "X-Bar", "foo") |
245 .GET() |
246 .GET() |
246 .build(); |
247 .build(); |
247 HttpResponse<?> response = client.send(request, ofString()); |
248 HttpResponse<?> response = client.send(request, ofString()); |
258 test(false, () -> { //Policy 11 |
259 test(false, () -> { //Policy 11 |
259 directProxyTest(proxyPort, false); |
260 directProxyTest(proxyPort, false); |
260 }), |
261 }), |
261 // (13) async version of test 0 |
262 // (13) async version of test 0 |
262 test(false, () -> { // Policy 0 |
263 test(false, () -> { // Policy 0 |
263 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
264 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
264 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
265 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
265 try { |
266 try { |
266 HttpResponse<?> response = client.sendAsync(request, ofString()).get(); |
267 HttpResponse<?> response = client.sendAsync(request, ofString()).get(); |
267 } catch (ExecutionException e) { |
268 } catch (ExecutionException e) { |
268 if (e.getCause() instanceof SecurityException) { |
269 if (e.getCause() instanceof SecurityException) { |
272 } |
273 } |
273 } |
274 } |
274 }), |
275 }), |
275 // (14) async version of test 1 |
276 // (14) async version of test 1 |
276 test(true, () -> { //Policy 1 |
277 test(true, () -> { //Policy 1 |
277 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
278 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
278 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
279 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
279 try { |
280 try { |
280 HttpResponse<?> response = client.sendAsync(request, ofString()).get(); |
281 HttpResponse<?> response = client.sendAsync(request, ofString()).get(); |
281 } catch (ExecutionException e) { |
282 } catch (ExecutionException e) { |
282 if (e.getCause() instanceof SecurityException) { |
283 if (e.getCause() instanceof SecurityException) { |
287 } |
288 } |
288 }), |
289 }), |
289 // (15) check that user provided unprivileged code running on a worker |
290 // (15) check that user provided unprivileged code running on a worker |
290 // thread does not gain ungranted privileges. |
291 // thread does not gain ungranted privileges. |
291 test(false, () -> { //Policy 12 |
292 test(false, () -> { //Policy 12 |
292 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
293 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
293 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
294 HttpRequest request = HttpRequest.newBuilder(u).GET().build(); |
294 HttpResponse.BodyHandler<String> sth = ofString(); |
295 HttpResponse.BodyHandler<String> sth = ofString(); |
295 |
296 |
296 CompletableFuture<HttpResponse<String>> cf = |
297 CompletableFuture<HttpResponse<String>> cf = |
297 client.sendAsync(request, new HttpResponse.BodyHandler<String>() { |
298 client.sendAsync(request, new HttpResponse.BodyHandler<String>() { |
360 } |
361 } |
361 System.out.println("Proxy port = " + proxyPort); |
362 System.out.println("Proxy port = " + proxyPort); |
362 if (!samePort) |
363 if (!samePort) |
363 proxyPort++; |
364 proxyPort++; |
364 |
365 |
365 InetSocketAddress addr = new InetSocketAddress("127.0.0.1", proxyPort); |
366 InetSocketAddress addr = new InetSocketAddress(InetAddress.getLoopbackAddress(), |
367 proxyPort); |
|
366 HttpClient cl = HttpClient.newBuilder() |
368 HttpClient cl = HttpClient.newBuilder() |
367 .proxy(ProxySelector.of(addr)) |
369 .proxy(ProxySelector.of(addr)) |
368 .build(); |
370 .build(); |
369 clients.add(cl); |
371 clients.add(cl); |
370 |
372 |
371 URI u = URI.create("http://127.0.0.1:" + port + "/files/foo.txt"); |
373 URI u = URI.create("http://localhost:" + port + "/files/foo.txt"); |
372 HttpRequest request = HttpRequest.newBuilder(u) |
374 HttpRequest request = HttpRequest.newBuilder(u) |
373 .headers("X-Foo", "bar", "X-Bar", "foo") |
375 .headers("X-Foo", "bar", "X-Bar", "foo") |
374 .build(); |
376 .build(); |
375 HttpResponse<?> response = cl.send(request, ofString()); |
377 HttpResponse<?> response = cl.send(request, ofString()); |
376 } |
378 } |
434 ConsoleHandler ch = new ConsoleHandler(); |
436 ConsoleHandler ch = new ConsoleHandler(); |
435 logger.setLevel(Level.ALL); |
437 logger.setLevel(Level.ALL); |
436 ch.setLevel(Level.ALL); |
438 ch.setLevel(Level.ALL); |
437 logger.addHandler(ch); |
439 logger.addHandler(ch); |
438 String root = System.getProperty ("test.src")+ "/docs"; |
440 String root = System.getProperty ("test.src")+ "/docs"; |
439 InetSocketAddress addr = new InetSocketAddress (port); |
441 InetSocketAddress addr = new InetSocketAddress(InetAddress.getLoopbackAddress(), port); |
440 s1 = HttpServer.create (addr, 0); |
442 s1 = HttpServer.create (addr, 0); |
441 if (s1 instanceof HttpsServer) { |
443 if (s1 instanceof HttpsServer) { |
442 throw new RuntimeException ("should not be httpsserver"); |
444 throw new RuntimeException ("should not be httpsserver"); |
443 } |
445 } |
444 HttpHandler h = new FileServerHandler (root); |
446 HttpHandler h = new FileServerHandler (root); |
457 if (s1.getAddress().getPort() != port) |
459 if (s1.getAddress().getPort() != port) |
458 throw new RuntimeException("Error wrong port"); |
460 throw new RuntimeException("Error wrong port"); |
459 System.out.println("Port was assigned by Driver"); |
461 System.out.println("Port was assigned by Driver"); |
460 } |
462 } |
461 System.out.println("HTTP server port = " + port); |
463 System.out.println("HTTP server port = " + port); |
462 httproot = "http://127.0.0.1:" + port + "/files/"; |
464 httproot = "http://localhost:" + port + "/files/"; |
463 redirectroot = "http://127.0.0.1:" + port + "/redirect/"; |
465 redirectroot = "http://localhost:" + port + "/redirect/"; |
464 uri = new URI(httproot); |
466 uri = new URI(httproot); |
465 fileuri = httproot + "foo.txt"; |
467 fileuri = httproot + "foo.txt"; |
466 } |
468 } |
467 |
469 |
468 static class RedirectHandler implements HttpHandler { |
470 static class RedirectHandler implements HttpHandler { |