📄 testclient.java
字号:
System.out.println("HEAD: " + headerName + ": " +
headerValue);
save(headerName, headerValue);
if ("Set-Cookie".equals(headerName))
parseSession(headerValue);
}
}
// Acquire the response data (if any)
String outData = "";
String outText = "";
int lines = 0;
while (true) {
line = read(is);
if (line == null)
break;
if (lines == 0)
outData = line;
else
outText += line + "\r\n";
saveResponse.add(line);
lines++;
}
is.close();
if (debug >= 1) {
System.out.println("DATA: " + outData);
if (outText.length() > 2)
System.out.println("TEXT: " + outText);
}
// Validate the response against our criteria
if (success) {
result = validateStatus(outStatus);
if (result != null)
success = false;
}
if (success) {
result = validateMessage(message);
if (result != null)
success = false;
}
if (success) {
result = validateHeaders();
if (result != null)
success = false;
}
if (success) {
result = validateData(outData);
if (result != null)
success = false;
}
if (success) {
result = validateGolden();
if (result != null)
success = false;
}
} catch (Throwable t) {
success = false;
result = "Status=" + outStatus +
", Message=" + outMessage;
throwable = null;
} finally {
if (pw != null) {
try {
pw.close();
} catch (Throwable w) {
;
}
}
if (os != null) {
try {
os.close();
} catch (Throwable w) {
;
}
}
if (is != null) {
try {
is.close();
} catch (Throwable w) {
;
}
}
if (socket != null) {
try {
socket.close();
} catch (Throwable w) {
;
}
}
}
if (success)
System.out.println("OK " + summary);
else {
System.out.println("FAIL " + summary + " " + result);
if (throwable != null)
throwable.printStackTrace(System.out);
}
}
/**
* Parse the session identifier from the specified Set-Cookie value.
*
* @param value The Set-Cookie value to parse
*/
protected void parseSession(String value) {
if (value == null)
return;
int equals = value.indexOf("JSESSIONID=");
if (equals < 0)
return;
value = value.substring(equals + "JSESSIONID=".length());
int semi = value.indexOf(";");
if (semi >= 0)
value = value.substring(0, semi);
if (debug >= 1)
System.out.println("SESSION ID: " + value);
sessionId = value;
}
/**
* Read and return the next line from the specified input stream, with
* no carriage return or line feed delimiters. If
* end of file is reached, return <code>null</code> instead.
*
* @param stream The input stream to read from
*
* @exception IOException if an input/output error occurs
*/
protected String read(InputStream stream) throws IOException {
StringBuffer result = new StringBuffer();
while (true) {
int b = stream.read();
if (b < 0) {
if (result.length() == 0)
return (null);
else
break;
}
char c = (char) b;
if (c == '\r')
continue;
else if (c == '\n')
break;
else
result.append(c);
}
return (result.toString());
}
/**
* Read and save the contents of the golden file for this test, if any.
* Otherwise, the <code>saveGolden</code> list will be empty.
*
* @exception IOException if an input/output error occurs
*/
protected void readGolden() throws IOException {
// Was a golden file specified?
saveGolden.clear();
if (golden == null)
return;
// Create a connection to receive the golden file contents
URL url = new URL("http", host, port, golden);
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
conn.setAllowUserInteraction(false);
conn.setDoInput(true);
conn.setDoOutput(false);
conn.setFollowRedirects(true);
conn.setRequestMethod("GET");
// Connect to the server and retrieve the golden file
conn.connect();
InputStream is = conn.getInputStream();
while (true) {
String line = read(is);
if (line == null)
break;
saveGolden.add(line);
}
is.close();
conn.disconnect();
}
/**
* Save the specified header name and value in our collection.
*
* @param name Header name to save
* @param value Header value to save
*/
protected void save(String name, String value) {
String key = name.toLowerCase();
ArrayList list = (ArrayList) saveHeaders.get(key);
if (list == null) {
list = new ArrayList();
saveHeaders.put(key, list);
}
list.add(value);
}
/**
* Validate the output data against what we expected. Return
* <code>null</code> for no problems, or an error message.
*
* @param data The output data to be tested
*/
protected String validateData(String data) {
if (outContent == null)
return (null);
else if (data.startsWith(outContent))
return (null);
else
return ("Expected data '" + outContent + "', got data '" +
data + "'");
}
/**
* Validate the response against the golden file (if any). Return
* <code>null</code> for no problems, or an error message.
*/
protected String validateGolden() {
if (golden == null)
return (null);
boolean ok = true;
if (saveGolden.size() != saveResponse.size())
ok = false;
if (ok) {
for (int i = 0; i < saveGolden.size(); i++) {
String golden = (String) saveGolden.get(i);
String response = (String) saveResponse.get(i);
if (!golden.equals(response)) {
ok = false;
break;
}
}
}
if (ok)
return (null);
System.out.println("EXPECTED: ======================================");
for (int i = 0; i < saveGolden.size(); i++)
System.out.println((String) saveGolden.get(i));
System.out.println("================================================");
System.out.println("RECEIVED: ======================================");
for (int i = 0; i < saveResponse.size(); i++)
System.out.println((String) saveResponse.get(i));
System.out.println("================================================");
return ("Failed Golden File Comparison");
}
/**
* Validate the saved headers against the <code>outHeaders</code>
* property, and return an error message if there is anything missing.
* If all of the expected headers are present, return <code>null</code>.
*/
protected String validateHeaders() {
// Do we have any headers to check for?
if (outHeaders == null)
return (null);
// Check each specified name:value combination
String headers = outHeaders;
while (headers.length() > 0) {
// Parse the next name:value combination
int delimiter = headers.indexOf("##");
String header = null;
if (delimiter < 0) {
header = headers;
headers = "";
} else {
header = headers.substring(0, delimiter);
headers = headers.substring(delimiter + 2);
}
int colon = header.indexOf(":");
String name = header.substring(0, colon).trim();
String value = header.substring(colon + 1).trim();
// Check for the occurrence of this header
ArrayList list = (ArrayList) saveHeaders.get(name.toLowerCase());
if (list == null)
return ("Missing header name '" + name + "'");
boolean found = false;
for (int i = 0; i < list.size(); i++) {
if (value.equals((String) list.get(i))) {
found = true;
break;
}
}
if (!found)
return ("Missing header name '" + name + "' with value '" +
value + "'");
}
// Everything was found successfully
return (null);
}
/**
* Validate the returned response message against what we expected.
* Return <code>null</code> for no problems, or an error message.
*
* @param message The returned response message
*/
protected String validateMessage(String message) {
if (this.message == null)
return (null);
else if (this.message.equals(message))
return (null);
else
return ("Expected message='" + this.message + "', got message='" +
message + "'");
}
/**
* Validate the returned status code against what we expected. Return
* <code>null</code> for no problems, or an error message.
*
* @param status The returned status code
*/
protected String validateStatus(int status) {
if (this.status == 0)
return (null);
if (this.status == status)
return (null);
else
return ("Expected status=" + this.status + ", got status=" +
status);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -