diff --git a/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java b/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java new file mode 100644 index 00000000000..7ec12a279b4 --- /dev/null +++ b/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java @@ -0,0 +1,1277 @@ +/* + * Copyright (c) 2022 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @library /test/lib + * @modules java.base/sun.net:+open + * java.base/sun.net.www.http:+open + * java.base/sun.net.www:+open + * java.base/sun.net.www.protocol.http:+open + * @run main/othervm KeepAliveTest 0 + * @run main/othervm KeepAliveTest 1 + * @run main/othervm KeepAliveTest 2 + * @run main/othervm KeepAliveTest 3 + * @run main/othervm KeepAliveTest 4 + * @run main/othervm KeepAliveTest 5 + * @run main/othervm KeepAliveTest 6 + * @run main/othervm KeepAliveTest 7 + * @run main/othervm KeepAliveTest 8 + * @run main/othervm KeepAliveTest 9 + * @run main/othervm KeepAliveTest 10 + * @run main/othervm KeepAliveTest 11 + * @run main/othervm KeepAliveTest 12 + * @run main/othervm KeepAliveTest 13 + * @run main/othervm KeepAliveTest 14 + * @run main/othervm KeepAliveTest 15 + * @run main/othervm KeepAliveTest 16 + * @run main/othervm KeepAliveTest 17 + * @run main/othervm KeepAliveTest 18 + * @run main/othervm KeepAliveTest 19 + * @run main/othervm KeepAliveTest 20 + * @run main/othervm KeepAliveTest 21 + * @run main/othervm KeepAliveTest 22 + * @run main/othervm KeepAliveTest 23 + * @run main/othervm KeepAliveTest 24 + * @run main/othervm KeepAliveTest 25 + * @run main/othervm KeepAliveTest 26 + * @run main/othervm KeepAliveTest 27 + * @run main/othervm KeepAliveTest 28 + * @run main/othervm KeepAliveTest 29 + * @run main/othervm KeepAliveTest 30 + * @run main/othervm KeepAliveTest 31 + * @run main/othervm KeepAliveTest 32 + * @run main/othervm KeepAliveTest 33 + * @run main/othervm KeepAliveTest 34 + * @run main/othervm KeepAliveTest 35 + * @run main/othervm KeepAliveTest 36 + * @run main/othervm KeepAliveTest 37 + * @run main/othervm KeepAliveTest 38 + * @run main/othervm KeepAliveTest 39 + * @run main/othervm KeepAliveTest 40 + * @run main/othervm KeepAliveTest 41 + * @run main/othervm KeepAliveTest 42 + * @run main/othervm KeepAliveTest 43 + * @run main/othervm KeepAliveTest 44 + * @run main/othervm KeepAliveTest 45 + * @run main/othervm KeepAliveTest 46 + * @run main/othervm KeepAliveTest 47 + * @run main/othervm KeepAliveTest 48 + * @run main/othervm KeepAliveTest 49 + * @run main/othervm KeepAliveTest 50 + * @run main/othervm KeepAliveTest 51 + * @run main/othervm KeepAliveTest 52 + * @run main/othervm KeepAliveTest 53 + * @run main/othervm KeepAliveTest 54 + * @run main/othervm KeepAliveTest 55 + * @run main/othervm KeepAliveTest 56 + * @run main/othervm KeepAliveTest 57 + * @run main/othervm KeepAliveTest 58 + * @run main/othervm KeepAliveTest 59 + * @run main/othervm KeepAliveTest 60 + * @run main/othervm KeepAliveTest 61 + * @run main/othervm KeepAliveTest 62 + * @run main/othervm KeepAliveTest 63 + * @run main/othervm KeepAliveTest 64 + * @run main/othervm KeepAliveTest 65 + * @run main/othervm KeepAliveTest 66 + * @run main/othervm KeepAliveTest 67 + * @run main/othervm KeepAliveTest 68 + * @run main/othervm KeepAliveTest 69 + * @run main/othervm KeepAliveTest 70 + * @run main/othervm KeepAliveTest 71 + * @run main/othervm KeepAliveTest 72 + * @run main/othervm KeepAliveTest 73 + * @run main/othervm KeepAliveTest 74 + * @run main/othervm KeepAliveTest 75 + * @run main/othervm KeepAliveTest 76 + * @run main/othervm KeepAliveTest 77 + * @run main/othervm KeepAliveTest 78 + * @run main/othervm KeepAliveTest 79 + * @run main/othervm KeepAliveTest 80 + * @run main/othervm KeepAliveTest 81 + * @run main/othervm KeepAliveTest 82 + * @run main/othervm KeepAliveTest 83 + * @run main/othervm KeepAliveTest 84 + * @run main/othervm KeepAliveTest 85 + * @run main/othervm KeepAliveTest 86 + * @run main/othervm KeepAliveTest 87 + * @run main/othervm KeepAliveTest 88 + * @run main/othervm KeepAliveTest 89 + * @run main/othervm KeepAliveTest 90 + * @run main/othervm KeepAliveTest 91 + * @run main/othervm KeepAliveTest 92 + * @run main/othervm KeepAliveTest 93 + * @run main/othervm KeepAliveTest 94 + * @run main/othervm KeepAliveTest 95 + * @run main/othervm KeepAliveTest 96 + * @run main/othervm KeepAliveTest 97 + * @run main/othervm KeepAliveTest 98 + * @run main/othervm KeepAliveTest 99 + * @run main/othervm KeepAliveTest 100 + * @run main/othervm KeepAliveTest 101 + * @run main/othervm KeepAliveTest 102 + * @run main/othervm KeepAliveTest 103 + * @run main/othervm KeepAliveTest 104 + * @run main/othervm KeepAliveTest 105 + * @run main/othervm KeepAliveTest 106 + * @run main/othervm KeepAliveTest 107 + * @run main/othervm KeepAliveTest 108 + * @run main/othervm KeepAliveTest 109 + * @run main/othervm KeepAliveTest 110 + * @run main/othervm KeepAliveTest 111 + * @run main/othervm KeepAliveTest 112 + * @run main/othervm KeepAliveTest 113 + * @run main/othervm KeepAliveTest 114 + * @run main/othervm KeepAliveTest 115 + * @run main/othervm KeepAliveTest 116 + * @run main/othervm KeepAliveTest 117 + * @run main/othervm KeepAliveTest 118 + * @run main/othervm KeepAliveTest 119 + * @run main/othervm KeepAliveTest 120 + * @run main/othervm KeepAliveTest 121 + * @run main/othervm KeepAliveTest 122 + * @run main/othervm KeepAliveTest 123 + * @run main/othervm KeepAliveTest 124 + * @run main/othervm KeepAliveTest 125 + * @run main/othervm KeepAliveTest 126 + * @run main/othervm KeepAliveTest 127 + * @run main/othervm KeepAliveTest 128 + * @run main/othervm KeepAliveTest 129 + * @run main/othervm KeepAliveTest 130 + * @run main/othervm KeepAliveTest 131 + * @run main/othervm KeepAliveTest 132 + * @run main/othervm KeepAliveTest 133 + * @run main/othervm KeepAliveTest 134 + * @run main/othervm KeepAliveTest 135 + * @run main/othervm KeepAliveTest 136 + * @run main/othervm KeepAliveTest 137 + * @run main/othervm KeepAliveTest 138 + * @run main/othervm KeepAliveTest 139 + * @run main/othervm KeepAliveTest 140 + * @run main/othervm KeepAliveTest 141 + * @run main/othervm KeepAliveTest 142 + * @run main/othervm KeepAliveTest 143 + * @run main/othervm KeepAliveTest 144 + * @run main/othervm KeepAliveTest 145 + * @run main/othervm KeepAliveTest 146 + * @run main/othervm KeepAliveTest 147 + * @run main/othervm KeepAliveTest 148 + * @run main/othervm KeepAliveTest 149 + * @run main/othervm KeepAliveTest 150 + * @run main/othervm KeepAliveTest 151 + * @run main/othervm KeepAliveTest 152 + * @run main/othervm KeepAliveTest 153 + * @run main/othervm KeepAliveTest 154 + * @run main/othervm KeepAliveTest 155 + * @run main/othervm KeepAliveTest 156 + * @run main/othervm KeepAliveTest 157 + * @run main/othervm KeepAliveTest 158 + * @run main/othervm KeepAliveTest 159 + */ + +import java.nio.charset.StandardCharsets; +import java.io.InputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.Proxy.Type; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.URL; +import java.util.List; +import java.util.Map.Entry; +import java.util.concurrent.CountDownLatch; +import java.util.logging.ConsoleHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import sun.net.www.http.HttpClient; +import sun.net.www.http.KeepAliveCache; +import sun.net.www.protocol.http.HttpURLConnection; +import jdk.test.lib.net.URIBuilder; + +public class KeepAliveTest { + private static final Logger logger = Logger.getLogger("sun.net.www.protocol.http.HttpURLConnection"); + private static final String NOT_CACHED = "NotCached"; + private static final String CLIENT_SEPARATOR = ";"; + private static final String NEW_LINE = "\r\n"; + private volatile int SERVER_PORT = 0; + /* + * isProxySet is shared variable between server thread and client thread(main) and it should be set and reset to false for each and + * every scenario. + * isProxySet variable should be set by server thread before proceeding to client thread(main). + */ + private volatile boolean isProxySet = false; + private static final String CONNECTION_KEEP_ALIVE_ONLY = "Connection: keep-alive"; + private static final String PROXY_CONNECTION_KEEP_ALIVE_ONLY = "Proxy-Connection: keep-alive"; + private static final String KEEP_ALIVE_TIMEOUT_NEG = "Keep-alive: timeout=-20"; + private static final String KEEP_ALIVE_TIMEOUT_ZERO = "Keep-alive: timeout=0"; + private static final String KEEP_ALIVE_TIMEOUT = "Keep-alive: timeout=20"; + private static final String KEEP_ALIVE_PROXY_TIMEOUT = "Keep-alive: timeout=120"; + private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_NEGATIVE = "http.keepAlive.time.server=-100"; + private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_NEGATIVE = "http.keepAlive.time.proxy=-200"; + private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_ZERO = "http.keepAlive.time.server=0"; + private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_ZERO = "http.keepAlive.time.proxy=0"; + private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_POSITIVE = "http.keepAlive.time.server=100"; + private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_POSITIVE = "http.keepAlive.time.proxy=200"; + private static final String CONNECTION_KEEP_ALIVE_WITH_TIMEOUT = CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + + KEEP_ALIVE_TIMEOUT; + /* + * Following Constants represents Client Side Properties and is used as reference in below table as + * CLIENT_INPUT_CONSTANT_NAMES + */ + private static final String SERVER_100_NEGATIVE = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_NEGATIVE; + private static final String PROXY_200_NEGATIVE = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_NEGATIVE; + private static final String SERVER_ZERO = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_ZERO; + private static final String PROXY_ZERO = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_ZERO; + private static final String SERVER_100 = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_POSITIVE; + private static final String PROXY_200 = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_POSITIVE; + + /* + * CONSTANTS A,B,C,D,E,NI,F,G,H,I represents ServerScenarios and is used as reference in below table + * as SERVER_RESPONSE_CONSTANT_NAME + */ + private static final String A = CONNECTION_KEEP_ALIVE_ONLY; + private static final String B = CONNECTION_KEEP_ALIVE_WITH_TIMEOUT; + private static final String C = PROXY_CONNECTION_KEEP_ALIVE_ONLY; + private static final String D = PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + CONNECTION_KEEP_ALIVE_ONLY; + private static final String E = C + NEW_LINE + KEEP_ALIVE_PROXY_TIMEOUT; + private static final String NI = "NO_INPUT"; + private static final String F = A + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG; + private static final String G = A + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO; + private static final String H = C + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG; + private static final String I = C + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO; + + /* + * There are 160 scenarios run by this program. + * For every scenario there is mapping between serverScenarios[int],clientScenarios[int] and expectedOutput[int] + * + * serverScenarios[0] clientScenarios[0] expectedOutput[0] + * serverScenarios[1] clientScenarios[1] expectedOutput[1] + * serverScenarios[2] clientScenarios[2] expectedOutput[2] + * + * ... + * + * serverScenarios[159] cientScenarios[159] expectedOutput[159] + * + * whereas serverScenarios[int] is retrieved using getServerScenario(int) + * whereas clientScenarios[int] is retrieved using clientScenario[getClientScenarioNumber[int]] + * and + * expectedOutput[int] is retrieved using expectedOuput[int] directly. + * + */ + + /* Here is the complete table of server_response, client system properties input and expected cached timeout at client side */ + /* ScNo | SERVER RESPONSE (SERVER_RESPONSE_CONSTANT_NAME)| CLIENT SYSTEM PROPERTIES INPUT (CLIENT_INPUT_CONSTANT_NAMES) | EXPECTED CACHED TIMEOUT AT CLIENT SIDE + ***************************************************************************************************************************************** + * 0 | Connection: keep-alive (A) | No Input Provided (NI) | Default Timeout set to 5 + *--------------------------------------------------------------------------------------------------------------------------- + * 1 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 (SERVER_100)| Client Timeout set to 100 + *-------------------------------------------------------------------------------------------------------------------------- + * 2 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=200 (PROXY_200) | Default Timeout set to 5 + *--------------------------------------------------------------------------------------------------------------------------- + * 3 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 100 + * | | (SERVER_100 && PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 4 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 | Default Timeout set to 5 + * | | (SERVER_100_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 5 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=-200 | Default Timeout set to 5 + * | | (PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 6 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Default Timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 7 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 | Connection Closed Immediately + * | | (SERVER_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 8 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=0 | Default Timeout set to 5 + * | | (PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 9 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Connection Closed Immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 10 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Connection Closed Immediately + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 11 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Default Timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 12 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 + * | | (SERVER_100 && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 13 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Connection Closed Immediately + * | | (SERVER_ZERO && PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 14 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 15 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Default Timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 16 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | No Input Provided (NI) | Timeout set to 20 + *------------------------------------------------------------------------------------------------------------------------ + * 17 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 | Timeout set to 20 + * | | (SERVER_100) | + *--------------------------------------------------------------------------------------------------------------------------- + * 18 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 + * | | (PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 19 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 + * | | (SERVER_100 && PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 20 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 | Timeout set to 20 + * | | (SERVER_100_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 21 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 + * | | (PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 22 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| + *--------------------------------------------------------------------------------------------------------------------------- + * 23 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 | Timeout set to 20 + * | | (SERVER_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 24 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 + * | | (PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 25 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 + * | | (SERVER_ZERO && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 26 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 27 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 28 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 + * | | (SERVER_100 && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 29 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 + * | | (SERVER_ZERO && PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 30 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 31 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 32 |Proxy-Connection: keep-alive (C) | No Input Provided (NI) | Default timeout set to 60 + *--------------------------------------------------------------------------------------------------------------------------- + * 33 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 | Default timeout set to 60 + * | | (SERVER_100) | + *--------------------------------------------------------------------------------------------------------------------------- + * 34 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------- + * 35 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_100 && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------- + * 36 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=-100 | Default timeout set to 60 + * | | (SERVER_100_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 37 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 + * | | (PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 38 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 + * | |(SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| + *--------------------------------------------------------------------------------------------------------------------------- + * 39 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 | Default timeout set to 60 + * | | (SERVER_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 40 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 41 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 42 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------------- + * 43 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------------- + * 44 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100 && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 45 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_ZERO && PROXY_200) | + *--------------------------------------------------------------------------------------------------------------------------- + * 46 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------- + * 47 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------- + * 48 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | No Input Provided (NI) | Default timeout set to 60 + *----------------------------------------------------------------------------------------------------------------------------- + * 49 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 | Default timeout set to 60 + * | | (SERVER_100) | + *--------------------------------------------------------------------------------------------------------------------------- + * 50 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------ + * 51 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_100 && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------ + * 52 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 | Default timeout set to 60 + * | | (SERVER_100_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------ + * 53 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 + * | | (PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------ + * 54 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100&& | + * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE | + *------------------------------------------------------------------------------------------------------------------------------- + * 55 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 | Default timeout set to 60 + * | | (SERVER_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 56 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 57 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 58 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 59 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 60 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100 && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 61 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_ZERO && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------ + * 62 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------ + * 63 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------- + * 64 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| No Input Provided (NI) | Timeout set to 120 + *------------------------------------------------------------------------------------------------------------------------------- + * 65 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 | Timeout set to 120 + * | | (SERVER_100) | + *------------------------------------------------------------------------------------------------------------------------------- + * 66 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 + * | | (PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------- + * 67 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 + * | | (SERVER_100 && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------- + * 68 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 | Timeout set to 120 + * | | (SERVER_100_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------- + * 69 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 + * | | (PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------- + * 70 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| + *------------------------------------------------------------------------------------------------------------------------------- + * 71 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 | Timeout set to 120 + * | | (SERVER_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------- + * 72 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 + * | | (PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------- + * 73 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 + * | | (SERVER_ZERO && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------- + * 74 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------- + * 75 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------- + * 76 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 + * | | (SERVER_100 && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------- + * 77 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 + * | | (SERVER_ZERO && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------- + * 78 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------- + * 79 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *----------------------------------------------------------------------------------------------------------------------------- + * 80 |No Input (NI) | No Input Provided (NI) | default timeout set to 5 + *----------------------------------------------------------------------------------------------------------------------------- + * 81 |No Input (NI) | -Dhttp.keepAlive.time.server=100 | Timeout set to 100 + * | | (SERVER_100) | + *----------------------------------------------------------------------------------------------------------------------------- + * 82 |No Input (NI) | -Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 + * | | (PROXY_200) | + *----------------------------------------------------------------------------------------------------------------------------- + * 83 |No Input (NI) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | client timeot set to 100 + * | | (SERVER_100 && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------ + * 84 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 | default timeout set to 5 + * | | (SERVER_100_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------ + * 85 |No Input (NI) | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 + * | | (PROXY_200_NEGATIVE) | + *---------------------------------------------------------------------------------------------------------------------------- + * 86 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| + *------------------------------------------------------------------------------------------------------------------------------ + * 87 |No Input (NI) | -Dhttp.keepAlive.time.server=0 | close connection immediately + * | | (SERVER_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------------- + * 88 |No Input (NI) | -Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 + * | | (PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------------- + * 89 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------------- + * 90 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 91 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 92 |No Input (NI) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 + * | | (SERVER_100 && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 93 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_ZERO && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 94 |No Input (NI) |-Dhttp.keepAlive.time.server=100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 95 |No Input (NI) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 96 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) | No Input Provided (NI) | default timeout set to 5 + *-------------------------------------------------------------------------------------------------------------------------------- + * 97 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 | Timeout set to 100 + * | | (SERVER_100) | + *-------------------------------------------------------------------------------------------------------------------------------- + * 98 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 + * | | (PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 99 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | + * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 100 + * | |(SERVER_100 && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 100 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 | default timeout set to 5 + * | |(SERVER_100_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 101 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 + * | |(PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 102 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| + *------------------------------------------------------------------------------------------------------------------------------------- + * 103 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 | close connection immediately + * | | (SERVER_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 104 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 + * | | (PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 105 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 106 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO_NEGATIVE)| + *------------------------------------------------------------------------------------------------------------------------------------- + * 107 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 108 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | + * | |-Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 + * | | (SERVER_100 && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 109 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | + * | |-Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_ZERO && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 110 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 + * | |(SERVER_100 && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 111 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 112 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | No Input Provided (NI) | close connection immediately + *------------------------------------------------------------------------------------------------------------------------------------- + * 113 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 | close connection immediately + * | | (SERVER_100) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 114 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 115 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_100 && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 116 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 | close connection immediately + * | | (SERVER_100_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------ + * 117 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 118 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) |-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 119 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 | close connection immediately + * | | (SERVER_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 120 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------ + * 121 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 122 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 123 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 124 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100 && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 125 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_ZERO && PROXY_200) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 126 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 127 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 &&| + * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 128 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| No Input Provided (NI) | default timeout set to 60 + --------------------------------------------------------------------------------------------------------------------------------------- + * 129 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 | default timeout set to 60 + * | | (SERVER_100) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 130 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 131 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_100 && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 132 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=-100 | default timeout set to 60 + * | | (SERVER_100_NEGATIVE) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 133 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 + * | | (PROXY_200_NEGATIVE) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 134 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| + *--------------------------------------------------------------------------------------------------------------------------------- + * 135 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 | default timeout set to 60 + * | | (SERVER_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 136 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (PROXY_ZERO) | + *---------------------------------------------------------------------------------------------------------------------------------- + * 137 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 138 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *--------------------------------------------------------------------------------------------------------------------------------------- + * 139 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 140 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100 && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 141 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 + * | | (SERVER_ZERO && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 142 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=100 && | + * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 143 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=-100 && | + * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 144 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | No Input Provided (NI) | close connection immediately + *-------------------------------------------------------------------------------------------------------------------------------------- + * 145 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 | close connection immediately + * | | (SERVER_100) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 146 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 147 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_100 && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 148 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 | close connection immediately + * | | (SERVER_100_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 149 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 150 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | + *------------------------------------------------------------------------------------------------------------------------------------ + * 151 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 | close connection immediately + * | | (SERVER_ZERO) | + *----------------------------------------------------------------------------------------------------------------------------------- + * 152 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (PROXY_ZERO) | + *--------------------------------------------------------------------------------------------------------------------------------- + * 153 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_ZERO && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------ + * 154 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 155 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | + *------------------------------------------------------------------------------------------------------------------------------------- + * 156 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately + * | | (SERVER_100 && PROXY_ZERO) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 157 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | + * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_ZERO && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 158 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | + * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately + * | | (SERVER_100 && PROXY_200_NEGATIVE) | + *-------------------------------------------------------------------------------------------------------------------------------------- + * 159 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | + * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately + * | | (SERVER_100_NEGATIVE && PROXY_200) | + *-------------------------------------------------------------------------------------------------------------------------------------- + */ + + /* private static final String[] serverScenarios = { + A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, + B, B, B, B, B, B, B, B, B, B,B, B, B, B, B, B, + C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, + D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, + E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, + NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, + F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, + G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, + H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, + I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I + }; */ + /* + * following are client scenarios which are repeated. + */ + private static final String[] a = { + NI, SERVER_100, PROXY_200, SERVER_100 + CLIENT_SEPARATOR + PROXY_200, SERVER_100_NEGATIVE, + PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, + SERVER_ZERO, PROXY_ZERO, SERVER_ZERO + CLIENT_SEPARATOR + PROXY_ZERO, + SERVER_ZERO + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_ZERO, + SERVER_100 + CLIENT_SEPARATOR + PROXY_ZERO, SERVER_ZERO + CLIENT_SEPARATOR + PROXY_200, + SERVER_100 + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_200 + }; + + /* private String[] clientScenarios = { + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], + }; */ + + private static final String[] clientScenarios = { + a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15] + }; + + private static final int[] expectedValues = { + 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, + 20, 20 , 20, 20, 20, 20, 20, 20, 20, 20 , 20, 20, 20, 20, 20, 20, + 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, + 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, + 120, 120, 120, 120,120,120,120,120,120, 120, 120, 120, 120, 120, 120, 120, + 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, + 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + + private final CountDownLatch countDownLatch = new CountDownLatch(1); + + private final CountDownLatch serverCountDownLatch = new CountDownLatch(1); + + /* + * setting of client properties -Dhttp.keepAlive.time.server and -Dhttp.keepAlive.time.proxy is handled through this method. + * There are 16 client scenarios in total starting with scenarioNumber 0(zero) and ending with 15. + * Server Scenarios are grouped into batch of 16 scenarios. + * There are 10 batches in total and each batch contains 16 scenarios so 10 * 16 = 160 scenarios in total. + * 16 Client Scenarios are used repeatedly for every server scenario batch. + * for serverscenario[0],serverscenario[16],serverscenario[32] ... serverscenario[144] is mapped to clientscenario[0] + * for serverscenario[1],serverscenario[17],serverscenario[33] ... serverscenario[145] is mapped to clientscenario[1] + * for serverscenario[2],serverscenario[18],serverscenario[34] ... serverscenario[146] is mapped to clientscenario[2] + * ... + * for serverscenario[15],serverscenario[31],serverscenario[47] ... serverscenario[159] is mapped to clientscenario[15] + */ + private int getClientScenarioNumber(int scenarioNumber) { + return scenarioNumber % 16 ; + } + + /* + * Returns SERVER_RESPONSE as String based on integer inputParameter scenarioNumber. + * Server Scenarios are grouped into batch of 16 scenarios starting with scenarioNumber 0 (zero) + * so there are 10 batches in total and each batch contains 16 scenarios so 10 * 16 = 160 scenarios in total. + * For each batch of 16 scenarios, there will be common SERVER_RESPONSE for all 16 scenarios in batch. + * for scenario numbers from 0 to 15 server response is: Connection:keep-alive + * for scenario numbers from 16 to 31 server response is: SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=20 + * for scenario numbers from 32 to 47 server response is: SERVER_RESPONSE=Proxy-Connection: keep-alive + * for scenario numbers from 48 to 63 server response is: SERVER_RESPONSE=Connection:keep-alive\r\nProxy-connection:keep-alive + * for scenario numbers from 64 to 79 server response is: SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 + * for scenario numbers from 80 to 95 server response is: SERVER_RESPONSE=No Input + * for scenario numbers from 96 to 111 server response is: SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=-20 + * for scenario numbers from 112 to 127 server resonse is: Connection: keep-alive\r\nKeep-alive: timeout=0 + * for scenario numbers from 128 to 143 server response is: Proxy-connection:keep-alive\r\nKeep-alive:timeout=-20 + * for scenario numbers from 144 to 159 server response is: Proxy-connection:keep-alive\r\nKeep-alive:timeout=0 + */ + private String getServerScenario(int scenarioNumber) { + /* + * ServerResponse for scenarios from 0 to 15 + * SERVER_RESPONSE:Connection:keep-alive + */ + if(scenarioNumber >= 0 && scenarioNumber <= 15) { + return A; + } + /* + * ServerResponse for scenarios from 16 to 31 + * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=20 + */ + else if (scenarioNumber >= 16 && scenarioNumber <= 31){ + return B; + } + /* + * ServerResponse for scenarios from 32 to 47 + * SERVER_RESPONSE=Proxy-Connection: keep-alive + */ + else if (scenarioNumber >= 32 && scenarioNumber <= 47){ + return C; + } + /* + * ServerResponse for scenarios from 48 to 63 + * SERVER_RESPONSE=Connection:keep-alive\r\nProxy-connection:keep-alive + */ + else if (scenarioNumber >= 48 && scenarioNumber <= 63){ + return D; + /* + * ServerResponse for scenarios from 64 to 79 + * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 + */ + } else if (scenarioNumber >= 64 && scenarioNumber <= 79){ + return E; + } + /* + * ServerResponse for scenarios from 80 to 95 + * SERVER_RESPONSE=No Input + */ + else if (scenarioNumber >= 80 && scenarioNumber <= 95){ + return NI; + } + /* + * ServerResponse for scenarios from 96 to 111 + * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=-20 + */ + else if (scenarioNumber >= 96 && scenarioNumber <= 111){ + return F; + } + /* + * ServerResponse for scenarios from 112 to 127 + * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=0 + */ + else if (scenarioNumber >= 112 && scenarioNumber <= 127){ + return G; + } + /* + * ServerResponse for scenarios from 128 to 143 + * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=-20 + */ + else if (scenarioNumber >= 128 && scenarioNumber <= 143){ + return H; + } + /* + * ServerResponse for scenarios from 144 to 159 + * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=0 + */ + else if (scenarioNumber >= 144 && scenarioNumber <= 159){ + return I; + } + /*Invalid Case*/ + return null; + } + + private void startScenario(int scenarioNumber) throws Exception { + //test scenarios are skipped because of JDK-8291638 + if((scenarioNumber >= 112 && scenarioNumber <= 127) || (scenarioNumber >= 144 && scenarioNumber <= 159)) { + System.out.println("Scenario Skipped:"+scenarioNumber); + this.countDownLatch.countDown(); + return; + } + System.out.println("serverScenarios[" + scenarioNumber + "]=" + getServerScenario(scenarioNumber)); + System.out.println("clientScenarios[" + scenarioNumber + "]=" + clientScenarios[getClientScenarioNumber(scenarioNumber)]); + if(expectedValues[scenarioNumber] == 0) { + System.out.println("ExpectedOutput=" + NOT_CACHED); + } else { + System.out.println("ExpectedOutput=" + expectedValues[scenarioNumber]); + } + System.out.println(); + startServer(scenarioNumber); + runClient(scenarioNumber); + } + + private void startServer(int scenarioNumber) { + Thread server = new Thread(new Runnable() { + @Override + public void run() { + try { + executeServer(scenarioNumber); + } catch (IOException e) { + e.printStackTrace(); + } + } + }, "SERVER"); + server.start(); + } + + private void readAll(Socket s) throws IOException { + byte[] buf = new byte[128]; + int c; + String request = ""; + InputStream is = s.getInputStream(); + while ((c = is.read(buf)) > 0) { + request += new String(buf, 0, c, StandardCharsets.US_ASCII); + if (request.contains("\r\n\r\n")) { + return; + } + } + if (c == -1) { + throw new IOException("Socket closed"); + } + } + + private void executeServer(int scenarioNumber) throws IOException { + String serverScenarioContent = null; + if (!getServerScenario(scenarioNumber).equalsIgnoreCase(NI)) { + serverScenarioContent = getServerScenario(scenarioNumber) + NEW_LINE; + /* + * isProxySet should be set before Server is moved to Listen State. + */ + if (serverScenarioContent.contains("Proxy")) { + isProxySet = true; + } else { + isProxySet = false; + } + } + ServerSocket serverSocket = null; + Socket socket = null; + OutputStreamWriter out = null; + InetAddress loopback = InetAddress.getLoopbackAddress(); + try { + serverSocket = new ServerSocket(); + serverSocket.bind(new InetSocketAddress(loopback, 0)); + SERVER_PORT = serverSocket.getLocalPort(); + //serverReady = true; + this.serverCountDownLatch.countDown(); + System.out + .println("SERVER_PORT= " + SERVER_PORT +" isProxySet=" + isProxySet); + /* + * Server will be waiting for clients to connect. + */ + socket = serverSocket.accept(); + readAll(socket); + out = new OutputStreamWriter(socket.getOutputStream()); + String BODY = "SERVER REPLY: Hello world"; + String CLEN = "Content-Length: " + BODY.length() + NEW_LINE; + /* send the header */ + out.write("HTTP/1.1 200 OK\r\n"); + out.write("Content-Type: text/plain; charset=iso-8859-1\r\n"); + /* + * append each scenario content from array. + */ + if(serverScenarioContent != null) { + out.write(serverScenarioContent); + } + out.write(CLEN); + out.write(NEW_LINE); + out.write(BODY); + out.flush(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (out != null) { + out.flush(); + out.close(); + } + if (socket != null) { + socket.close(); + } + if (serverSocket != null) { + serverSocket.close(); + } + } + } + + private void runClient(int scenarioNumber) throws Exception { + try { + connectToServerURL(scenarioNumber); + } finally { + System.out.println("client count down latch:" + scenarioNumber); + this.countDownLatch.countDown(); + System.out.println(); + System.out.println(); + } + } + + private void connectToServerURL(int scenarioNumber) throws Exception { + // System.setProperty("java.net.useSystemProxies", "false"); + // System.setProperty("http.nonProxyHosts", ""); + // System.setProperty("http.proxyHost", "localhost"); + // System.setProperty("http.proxyPort", String.valueOf(SERVER_PORT)); + System.out.println("Following are Existing System Properties if set any"); + System.out.println("http.keepAlive.time.server:" + System.getProperty("http.keepAlive.time.server")); + System.out.println("http.keepAlive.time.proxy:" + System.getProperty("http.keepAlive.time.proxy")); + System.setProperty("java.net.useSystemProxies", "false"); + System.out.println("http.proxyPort:"+System.getProperty("http.proxyPort")); + System.out.println("http.proxyHost:"+System.getProperty("http.proxyHost")); + System.clearProperty("http.keepAlive.time.server"); + System.clearProperty("http.keepAlive.time.proxy"); + // fetch clientScenearios for each scenarioNumber from array and set it to + // System property. + if (!clientScenarios[getClientScenarioNumber(scenarioNumber)].equalsIgnoreCase(NI)) { + System.out.println("Client Input Parsing"); + for (String clientScenarioString : clientScenarios[getClientScenarioNumber(scenarioNumber)].split(CLIENT_SEPARATOR)) { + System.out.println(clientScenarioString); + String key = clientScenarioString.split("=")[0]; + String value = clientScenarioString.split("=")[1]; + System.setProperty(key, value); + } + } + // wait until ServerSocket moves to listening state. + this.serverCountDownLatch.await(); + System.out.println("client started"); + URL url = URIBuilder.newBuilder().scheme("http").loopback().port(SERVER_PORT).toURL(); + System.out.println("connecting from client to SERVER URL:" + url); + HttpURLConnection httpUrlConnection = null; + /* + * isProxySet is set to true when Expected Server Response contains Proxy-Connection header. + */ + if (isProxySet) { + httpUrlConnection = (sun.net.www.protocol.http.HttpURLConnection) url + .openConnection(new Proxy(Type.HTTP, new InetSocketAddress("localhost", SERVER_PORT))); + } else { + httpUrlConnection = (sun.net.www.protocol.http.HttpURLConnection) url.openConnection(); + } + InputStreamReader inputStreamReader = new InputStreamReader(httpUrlConnection.getInputStream()); + BufferedReader bufferedReader = null; + try { + bufferedReader = new BufferedReader(inputStreamReader); + while (true) { + String eachLine = bufferedReader.readLine(); + if (eachLine == null) { + break; + } + System.out.println(eachLine); + } + } finally { + if (bufferedReader != null) { + bufferedReader.close(); + } + } + // System.out.println("ResponseCode:" + httpUrlConnection.getResponseCode()); + // System.out.println("ResponseMessage:" + httpUrlConnection.getResponseMessage()); + // System.out.println("Content:" + httpUrlConnection.getContent()); + // Thread.sleep(2000); + for (Entry> header : httpUrlConnection.getHeaderFields().entrySet()) { + System.out.println(header.getKey() + "=" + header.getValue()); + } + fetchInfo(scenarioNumber, httpUrlConnection); + } + + private void fetchInfo(int scenarioNumber, sun.net.www.protocol.http.HttpURLConnection httpUrlConnection) + throws Exception { + Field field = Class.forName("sun.net.www.protocol.http.HttpURLConnection").getDeclaredField("http"); + field.setAccessible(true); + HttpClient httpClient = (HttpClient) field.get(httpUrlConnection); + // System.out.println("httpclient=" + httpClient); + Field keepAliveField = Class.forName("sun.net.www.http.HttpClient").getDeclaredField("kac"); + keepAliveField.setAccessible(true); + KeepAliveCache keepAliveCache = (KeepAliveCache) keepAliveField.get(httpClient); + System.out.println("keepAliveCache" + keepAliveCache); + System.out.println("SERVER URL:" + httpUrlConnection.getURL()); + /* + * create KeepAliveKey(URL,Object) object and compare created KeepAliveKey and + * existing using equals() method: KeepAliveKey.equals() + */ + Class keepAliveKeyClass = Class.forName("sun.net.www.http.KeepAliveKey"); + // System.out.println("keepAliveKeyClass=" + keepAliveKeyClass); + Constructor keepAliveKeyClassconstructor = keepAliveKeyClass.getDeclaredConstructors()[0]; + keepAliveKeyClassconstructor.setAccessible(true); + Object expectedKeepAliveKey = keepAliveKeyClassconstructor.newInstance(httpUrlConnection.getURL(), null); + System.out.println("ExpectedKeepAliveKey=" + expectedKeepAliveKey); + Object clientVectorObjectInMap = keepAliveCache.get(expectedKeepAliveKey); + System.out.println("ClientVector=" + clientVectorObjectInMap); + HttpClient httpClientCached = keepAliveCache.get(httpUrlConnection.getURL(), null); + System.out.println("HttpClient in Cache:" + httpClientCached); + if(httpClientCached != null) { + System.out.println("KeepingAlive:" + httpClientCached.isKeepingAlive()); + System.out.println("UsingProxy:" + httpClientCached.getUsingProxy()); + System.out.println("ProxiedHost:" + httpClientCached.getProxyHostUsed()); + System.out.println("ProxiedPort:" + httpClientCached.getProxyPortUsed()); + System.out.println("ProxyPortUsingSystemProperty:" + System.getProperty("http.proxyPort")); + System.out.println("ProxyHostUsingSystemProperty:" + System.getProperty("http.proxyHost")); + System.out.println("http.keepAlive.time.server=" + System.getProperty("http.keepAlive.time.server")); + System.out.println("http.keepAlive.time.proxy=" + System.getProperty("http.keepAlive.time.proxy")); + Class clientVectorClass = Class.forName("sun.net.www.http.ClientVector"); + // System.out.println("clientVectorClass=" + clientVectorClass); + Field napField = clientVectorClass.getDeclaredField("nap"); + napField.setAccessible(true); + int napValue = (int) napField.get(clientVectorObjectInMap); + int actualValue = napValue / 1000; + // System.out.println("nap=" + napValue / 1000); + System.out.printf("ExpectedOutput:%d ActualOutput:%d ", expectedValues[scenarioNumber], actualValue); + System.out.println(); + if (expectedValues[scenarioNumber] != actualValue) { + throw new RuntimeException( + "ExpectedOutput:" + expectedValues[scenarioNumber] + " ActualOutput: " + actualValue); + } + } else { + //executed when value is not cached. + String expected = expectedValues[scenarioNumber] == 0 ? NOT_CACHED + : String.valueOf(expectedValues[scenarioNumber]); + System.out.println("ExpectedOutput:" + expected + " ActualOutput:" + NOT_CACHED); + if (!expected.equalsIgnoreCase(NOT_CACHED)) { + throw new RuntimeException("ExpectedOutput:" + expected + " ActualOutput:" + NOT_CACHED); + } + } + } + + public static void main(String[] args) throws Exception { + if (args.length != 1) { + throw new IllegalArgumentException("Usage:java KeepAliveTest.java "); + } + logger.setLevel(Level.FINEST); + ConsoleHandler h = new ConsoleHandler(); + h.setLevel(Level.FINEST); + logger.addHandler(h); + KeepAliveTest keepAliveTest = new KeepAliveTest(); + if (args.length != 0) { + keepAliveTest.startScenario(Integer.valueOf(args[0])); + } + // make main thread wait until server and client is completed. + keepAliveTest.countDownLatch.await(); + } +}