8228508: [TESTBUG] java/net/httpclient/SmokeTest.java fails on Windows7
Reviewed-by: dfuchs, chegar
This commit is contained in:
parent
a8aedcea47
commit
b4a7fb856b
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2019, 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
|
||||
@ -21,37 +21,19 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.logging.*;
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.security.*;
|
||||
import javax.net.ssl.*;
|
||||
import com.sun.net.httpserver.*;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import com.sun.net.httpserver.Headers;
|
||||
import com.sun.net.httpserver.HttpExchange;
|
||||
import com.sun.net.httpserver.HttpHandler;
|
||||
|
||||
/**
|
||||
* Implements a basic static EchoHandler for an HTTP server
|
||||
*/
|
||||
public class EchoHandler implements HttpHandler {
|
||||
|
||||
byte[] read(InputStream is) throws IOException {
|
||||
byte[] buf = new byte[1024];
|
||||
byte[] result = new byte[0];
|
||||
|
||||
while (true) {
|
||||
int n = is.read(buf);
|
||||
if (n > 0) {
|
||||
byte[] b1 = new byte[result.length + n];
|
||||
System.arraycopy(result, 0, b1, 0, result.length);
|
||||
System.arraycopy(buf, 0, b1, result.length, n);
|
||||
result = b1;
|
||||
} else if (n == -1) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void handle (HttpExchange t)
|
||||
throws IOException
|
||||
{
|
||||
@ -61,32 +43,20 @@ public class EchoHandler implements HttpHandler {
|
||||
|
||||
// return the number of bytes received (no echo)
|
||||
String summary = map.getFirst ("XSummary");
|
||||
if (fixedrequest != null && summary == null) {
|
||||
byte[] in = read(is);
|
||||
t.sendResponseHeaders(200, in.length);
|
||||
OutputStream os = t.getResponseBody();
|
||||
os.write(in);
|
||||
close(t, os);
|
||||
close(t, is);
|
||||
} else {
|
||||
OutputStream os = t.getResponseBody();
|
||||
byte[] buf = new byte[64 * 1024];
|
||||
t.sendResponseHeaders(200, 0);
|
||||
int n, count=0;;
|
||||
|
||||
while ((n = is.read(buf)) != -1) {
|
||||
if (summary == null) {
|
||||
os.write(buf, 0, n);
|
||||
}
|
||||
count += n;
|
||||
}
|
||||
if (summary != null) {
|
||||
String s = Integer.toString(count);
|
||||
os.write(s.getBytes());
|
||||
}
|
||||
close(t, os);
|
||||
close(t, is);
|
||||
OutputStream os = t.getResponseBody();
|
||||
byte[] in;
|
||||
in = is.readAllBytes();
|
||||
if (summary != null) {
|
||||
in = Integer.toString(in.length).getBytes(StandardCharsets.UTF_8);
|
||||
}
|
||||
if (fixedrequest != null) {
|
||||
t.sendResponseHeaders(200, in.length == 0 ? -1 : in.length);
|
||||
} else {
|
||||
t.sendResponseHeaders(200, 0);
|
||||
}
|
||||
os.write(in);
|
||||
close(t, os);
|
||||
close(t, is);
|
||||
}
|
||||
|
||||
protected void close(OutputStream os) throws IOException {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2019, 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
|
||||
@ -30,7 +30,6 @@
|
||||
* @library /test/lib /
|
||||
* @build jdk.test.lib.net.SimpleSSLContext ProxyServer
|
||||
* @compile ../../../com/sun/net/httpserver/LogFilter.java
|
||||
* @compile ../../../com/sun/net/httpserver/EchoHandler.java
|
||||
* @compile ../../../com/sun/net/httpserver/FileServerHandler.java
|
||||
* @run main/othervm
|
||||
* -Djdk.internal.httpclient.debug=true
|
||||
@ -50,7 +49,10 @@ import com.sun.net.httpserver.HttpsServer;
|
||||
import java.net.InetAddress;
|
||||
import java.net.Proxy;
|
||||
import java.net.SocketAddress;
|
||||
import java.net.http.HttpHeaders;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.net.InetSocketAddress;
|
||||
@ -135,6 +137,22 @@ public class SmokeTest {
|
||||
static Path smallFile;
|
||||
static String fileroot;
|
||||
|
||||
static class HttpEchoHandler implements HttpHandler {
|
||||
|
||||
@Override
|
||||
public void handle(HttpExchange exchange) throws IOException {
|
||||
try (InputStream is = exchange.getRequestBody();
|
||||
OutputStream os = exchange.getResponseBody()) {
|
||||
byte[] bytes = is.readAllBytes();
|
||||
long responseLength = bytes.length == 0 ? -1 : bytes.length;
|
||||
boolean fixedLength = "yes".equals(exchange.getRequestHeaders()
|
||||
.getFirst("XFixed"));
|
||||
exchange.sendResponseHeaders(200, fixedLength ? responseLength : 0);
|
||||
os.write(bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static String getFileContent(String path) throws IOException {
|
||||
FileInputStream fis = new FileInputStream(path);
|
||||
byte[] buf = new byte[2000];
|
||||
@ -257,6 +275,8 @@ public class SmokeTest {
|
||||
|
||||
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
|
||||
|
||||
checkResponseContentLength(response.headers(), fixedLen);
|
||||
|
||||
String body = response.body();
|
||||
if (!body.equals("This is foo.txt\r\n")) {
|
||||
throw new RuntimeException("Did not get expected body: "
|
||||
@ -504,6 +524,8 @@ public class SmokeTest {
|
||||
|
||||
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
|
||||
|
||||
checkResponseContentLength(response.headers(), fixedLen);
|
||||
|
||||
String body = response.body();
|
||||
|
||||
if (!body.equals(requestBody)) {
|
||||
@ -529,6 +551,8 @@ public class SmokeTest {
|
||||
|
||||
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
|
||||
|
||||
checkResponseContentLength(response.headers(), fixedLen);
|
||||
|
||||
if (response.statusCode() != 200) {
|
||||
throw new RuntimeException(
|
||||
"Expected 200, got [ " + response.statusCode() + " ]");
|
||||
@ -694,7 +718,7 @@ public class SmokeTest {
|
||||
|
||||
try {
|
||||
HttpResponse<String> response = cf.join();
|
||||
throw new RuntimeException("Exepected Completion Exception");
|
||||
throw new RuntimeException("Expected Completion Exception");
|
||||
} catch (CompletionException e) {
|
||||
//System.out.println(e);
|
||||
}
|
||||
@ -739,12 +763,12 @@ public class SmokeTest {
|
||||
|
||||
HttpContext c1 = s1.createContext("/files", h);
|
||||
HttpContext c2 = s2.createContext("/files", h);
|
||||
HttpContext c3 = s1.createContext("/echo", new EchoHandler());
|
||||
HttpContext c3 = s1.createContext("/echo", new HttpEchoHandler());
|
||||
redirectHandler = new RedirectHandler("/redirect");
|
||||
redirectHandlerSecure = new RedirectHandler("/redirect");
|
||||
HttpContext c4 = s1.createContext("/redirect", redirectHandler);
|
||||
HttpContext c41 = s2.createContext("/redirect", redirectHandlerSecure);
|
||||
HttpContext c5 = s2.createContext("/echo", new EchoHandler());
|
||||
HttpContext c5 = s2.createContext("/echo", new HttpEchoHandler());
|
||||
HttpContext c6 = s1.createContext("/keepalive", new KeepAliveHandler());
|
||||
redirectErrorHandler = new RedirectErrorHandler("/redirecterror");
|
||||
redirectErrorHandlerSecure = new RedirectErrorHandler("/redirecterror");
|
||||
@ -776,6 +800,19 @@ public class SmokeTest {
|
||||
System.out.println("Proxy port = " + proxyPort);
|
||||
}
|
||||
|
||||
static void checkResponseContentLength(HttpHeaders responseHeaders, boolean fixedLen) {
|
||||
Optional<String> transferEncoding = responseHeaders.firstValue("transfer-encoding");
|
||||
Optional<String> contentLength = responseHeaders.firstValue("content-length");
|
||||
if (fixedLen) {
|
||||
assert contentLength.isPresent();
|
||||
assert !transferEncoding.isPresent();
|
||||
} else {
|
||||
assert !contentLength.isPresent();
|
||||
assert transferEncoding.isPresent();
|
||||
assert "chunked".equals(transferEncoding.get());
|
||||
}
|
||||
}
|
||||
|
||||
static class RedirectHandler implements HttpHandler {
|
||||
private final String root;
|
||||
private volatile int count = 0;
|
||||
@ -786,9 +823,8 @@ public class SmokeTest {
|
||||
|
||||
@Override
|
||||
public synchronized void handle(HttpExchange t) throws IOException {
|
||||
byte[] buf = new byte[2048];
|
||||
try (InputStream is = t.getRequestBody()) {
|
||||
while (is.read(buf) != -1) ;
|
||||
is.readAllBytes();
|
||||
}
|
||||
|
||||
Headers responseHeaders = t.getResponseHeaders();
|
||||
@ -1010,14 +1046,13 @@ class KeepAliveHandler implements HttpHandler {
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
byte[] buf = new byte[2048];
|
||||
|
||||
try (InputStream is = t.getRequestBody()) {
|
||||
while (is.read(buf) != -1) ;
|
||||
is.readAllBytes();
|
||||
}
|
||||
t.sendResponseHeaders(200, result.length());
|
||||
OutputStream o = t.getResponseBody();
|
||||
o.write(result.getBytes("US-ASCII"));
|
||||
o.write(result.getBytes(StandardCharsets.UTF_8));
|
||||
t.close();
|
||||
nparallel.getAndDecrement();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user