diff --git a/tck/tck-runtime/src/main/java/servlet/tck/common/client/BaseTckTest.java b/tck/tck-runtime/src/main/java/servlet/tck/common/client/BaseTckTest.java index b2ddde640..23deda52b 100644 --- a/tck/tck-runtime/src/main/java/servlet/tck/common/client/BaseTckTest.java +++ b/tck/tck-runtime/src/main/java/servlet/tck/common/client/BaseTckTest.java @@ -476,9 +476,9 @@ protected void invoke() { _testCase = new WebTestCase(); setTestProperties(_testCase); logger.trace("[BaseUrlClient] EXECUTING"); -// if (_useSavedState && _state != null) { -// _testCase.getRequest().setState(_state); -// } + if (_useSavedState || _saveState) { + _testCase.getRequest().setState(true); + } if (_redirect) { logger.trace("##########Call setFollowRedirects"); _testCase.getRequest().setFollowRedirects(_redirect); diff --git a/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java b/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java index d6c036d27..ce1848e97 100644 --- a/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java +++ b/tck/tck-runtime/src/main/java/servlet/tck/common/request/HttpExchange.java @@ -106,6 +106,8 @@ public class HttpExchange { List headers = null; + private boolean state; + private String uri; private String query; @@ -326,15 +328,8 @@ public boolean getFollowRedirects() { return this.followRedirect; } - /** - * setState will set the HTTP state for the current request (i.e. - * session tracking). This has the side affect - */ -// public void setState(HttpState state) { -// _state = state; -// _useCookies = true; -// } + private static final ThreadLocal httpClientThreadLocal = new ThreadLocal<>(); /** * execute will dispatch the current request to the target * server. @@ -347,14 +342,9 @@ public HttpResponse execute() throws IOException { String method; int defaultPort; - CookieManager cookieManager = new CookieManager(); - cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); - //CookieHandler.setDefault(cookieManager); //.getDefault() - // FIXME do this later on requestt HttpClient.Builder builder = HttpClient.newBuilder().followRedirects(followRedirect?HttpClient.Redirect.ALWAYS:HttpClient.Redirect.NEVER) - .version(HttpClient.Version.HTTP_1_1) // not supporting 1.0? - // TODO _useCookies ? - .cookieHandler(cookieManager); + .version(HttpClient.Version.HTTP_1_1) + .cookieHandler(new CookieManager()); StringBuilder url = new StringBuilder(); @@ -384,8 +374,23 @@ protected PasswordAuthentication getPasswordAuthentication() { throw new UnsupportedOperationException("Digest Authentication is not currently " + "supported"); } + HttpClient httpClient = null; + + if(state) { + httpClient = httpClientThreadLocal.get(); + } else { + httpClientThreadLocal.set(null); + } + + if (httpClient == null) { + httpClient = builder.build(); + } + + if (state) { + httpClientThreadLocal.set(httpClient); + } + - HttpClient httpClient = builder.build(); HttpRequest.Builder httpRequestBuilder = HttpRequest.newBuilder().uri(URI.create(url.toString())); @@ -490,18 +495,6 @@ protected PasswordAuthentication getPasswordAuthentication() { */ } - /** - * Returns the current state for this request. - * - * @return HttpState current state - */ -// public HttpState getState() { -// if (_state == null) { -// _state = new HttpState(); -// } -// return _state; -// } - public String toString() { StringBuilder sb = new StringBuilder(255); sb.append("[REQUEST LINE] -> ").append(_requestLine).append('\n'); @@ -521,6 +514,14 @@ public String toString() { } + public boolean isState() { + return state; + } + + public void setState(boolean state) { + this.state = state; + } + /* * private methods * ========================================================================