8266897: com/sun/net/httpserver/FilterTest.java fails intermittently with AssertionError
Reviewed-by: chegar, dfuchs, michaelm
This commit is contained in:
parent
da7c846a8c
commit
894547d2c1
src/jdk.httpserver/share/classes/sun/net/httpserver
test/jdk/com/sun/net/httpserver
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -24,11 +24,11 @@
|
||||
*/
|
||||
|
||||
package sun.net.httpserver;
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.lang.System.Logger;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import com.sun.net.httpserver.*;
|
||||
import com.sun.net.httpserver.spi.*;
|
||||
|
||||
/**
|
||||
* HttpContext represents a mapping between a protocol (http or https) together with a root URI path
|
||||
@ -40,17 +40,17 @@ import com.sun.net.httpserver.spi.*;
|
||||
*/
|
||||
class HttpContextImpl extends HttpContext {
|
||||
|
||||
private String path;
|
||||
private String protocol;
|
||||
private HttpHandler handler;
|
||||
private Map<String,Object> attributes = new HashMap<String,Object>();
|
||||
private ServerImpl server;
|
||||
private final String path;
|
||||
private final String protocol;
|
||||
private final ServerImpl server;
|
||||
private final AuthFilter authfilter;
|
||||
private final Map<String,Object> attributes = new ConcurrentHashMap<>();
|
||||
/* system filters, not visible to applications */
|
||||
private LinkedList<Filter> sfilters = new LinkedList<Filter>();
|
||||
private final List<Filter> sfilters = new CopyOnWriteArrayList<>();
|
||||
/* user filters, set by applications */
|
||||
private LinkedList<Filter> ufilters = new LinkedList<Filter>();
|
||||
private final List<Filter> ufilters = new CopyOnWriteArrayList<>();
|
||||
private Authenticator authenticator;
|
||||
private AuthFilter authfilter;
|
||||
private HttpHandler handler;
|
||||
|
||||
/**
|
||||
* constructor is package private.
|
||||
|
@ -654,11 +654,11 @@ class ServerImpl implements TimeSource {
|
||||
* They are linked together by a LinkHandler
|
||||
* so that they can both be invoked in one call.
|
||||
*/
|
||||
List<Filter> sf = ctx.getSystemFilters();
|
||||
List<Filter> uf = ctx.getFilters();
|
||||
final List<Filter> sf = ctx.getSystemFilters();
|
||||
final List<Filter> uf = ctx.getFilters();
|
||||
|
||||
Filter.Chain sc = new Filter.Chain(sf, ctx.getHandler());
|
||||
Filter.Chain uc = new Filter.Chain(uf, new LinkHandler (sc));
|
||||
final Filter.Chain sc = new Filter.Chain(sf, ctx.getHandler());
|
||||
final Filter.Chain uc = new Filter.Chain(uf, new LinkHandler (sc));
|
||||
|
||||
/* set up the two stream references */
|
||||
tx.getRequestBody();
|
||||
|
@ -38,8 +38,7 @@ import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.logging.ConsoleHandler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@ -165,9 +164,9 @@ public class FilterTest {
|
||||
@Test
|
||||
public void testAfterHandler() throws Exception {
|
||||
var handler = new EchoHandler();
|
||||
var respCode = new AtomicInteger();
|
||||
var respCode = new CompletableFuture<Integer>();
|
||||
var filter = Filter.afterHandler("Log response code",
|
||||
e -> respCode.set(e.getResponseCode()));
|
||||
e -> respCode.complete(e.getResponseCode()));
|
||||
var server = HttpServer.create(new InetSocketAddress(LOOPBACK_ADDR, 0), 10);
|
||||
server.createContext("/", handler).getFilters().add(filter);
|
||||
server.start();
|
||||
@ -176,7 +175,7 @@ public class FilterTest {
|
||||
var request = HttpRequest.newBuilder(uri(server, "")).build();
|
||||
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.statusCode(), respCode.get());
|
||||
assertEquals(response.statusCode(), (int)respCode.get());
|
||||
} finally {
|
||||
server.stop(0);
|
||||
}
|
||||
@ -185,12 +184,12 @@ public class FilterTest {
|
||||
@Test
|
||||
public void testAfterHandlerRepeated() throws Exception {
|
||||
var handler = new EchoHandler();
|
||||
var attr = new AtomicReference<String>();
|
||||
var attr = new CompletableFuture<String>();
|
||||
final var value = "some value";
|
||||
var filter1 = Filter.afterHandler("Set attribute",
|
||||
e -> e.setAttribute("test-attr", value));
|
||||
var filter2 = Filter.afterHandler("Read attribute",
|
||||
e -> attr.set((String) e.getAttribute("test-attr")));
|
||||
e -> attr.complete((String) e.getAttribute("test-attr")));
|
||||
var server = HttpServer.create(new InetSocketAddress(LOOPBACK_ADDR, 0), 10);
|
||||
var context = server.createContext("/", handler);
|
||||
context.getFilters().add(filter2);
|
||||
@ -210,7 +209,7 @@ public class FilterTest {
|
||||
@Test
|
||||
public void testAfterHandlerSendResponse() throws Exception {
|
||||
var handler = new NoResponseHandler();
|
||||
var respCode = new AtomicInteger();
|
||||
var respCode = new CompletableFuture<Integer>();
|
||||
var filter = Filter.afterHandler("Log response code and send response",
|
||||
e -> {
|
||||
try (InputStream is = e.getRequestBody();
|
||||
@ -219,7 +218,7 @@ public class FilterTest {
|
||||
var resp = "hello world".getBytes(StandardCharsets.UTF_8);
|
||||
e.sendResponseHeaders(200, resp.length);
|
||||
os.write(resp);
|
||||
respCode.set(e.getResponseCode());
|
||||
respCode.complete(e.getResponseCode());
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace(System.out);
|
||||
throw new UncheckedIOException(ioe);
|
||||
@ -233,7 +232,7 @@ public class FilterTest {
|
||||
var request = HttpRequest.newBuilder(uri(server, "")).build();
|
||||
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.statusCode(), respCode.get());
|
||||
assertEquals(response.statusCode(), (int)respCode.get());
|
||||
} finally {
|
||||
server.stop(0);
|
||||
}
|
||||
@ -242,11 +241,11 @@ public class FilterTest {
|
||||
@Test
|
||||
public void testBeforeAndAfterHandler() throws Exception {
|
||||
var handler = new EchoHandler();
|
||||
var respCode = new AtomicInteger();
|
||||
var respCode = new CompletableFuture<Integer>();
|
||||
var beforeFilter = Filter.beforeHandler("Add x-foo response header",
|
||||
e -> e.getResponseHeaders().set("x-foo", "bar"));
|
||||
var afterFilter = Filter.afterHandler("Log response code",
|
||||
e -> respCode.set(e.getResponseCode()));
|
||||
e -> respCode.complete(e.getResponseCode()));
|
||||
var server = HttpServer.create(new InetSocketAddress(LOOPBACK_ADDR, 0), 10);
|
||||
var context = server.createContext("/", handler);
|
||||
context.getFilters().add(beforeFilter);
|
||||
@ -257,9 +256,9 @@ public class FilterTest {
|
||||
var request = HttpRequest.newBuilder(uri(server, "")).build();
|
||||
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
assertEquals(response.statusCode(), 200);
|
||||
assertEquals(response.statusCode(), respCode.get());
|
||||
assertEquals(response.headers().map().size(), 3);
|
||||
assertEquals(response.headers().firstValue("x-foo").orElseThrow(), "bar");
|
||||
assertEquals(response.statusCode(), (int)respCode.get());
|
||||
} finally {
|
||||
server.stop(0);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user