You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2007/03/29 08:39:40 UTC

svn commit: r523583 - in /harmony/enhanced/classlib/trunk/modules/luni: ./ src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/ src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/ src/test/impl/org/apache/harmony/tes...

Author: pyang
Date: Wed Mar 28 23:39:39 2007
New Revision: 523583

URL: http://svn.apache.org/viewvc?view=rev&rev=523583
Log:
roll back patch for HARMONY-617( [classlib][luni] HttpURLConnection does not support persistent connections), because it causes regression on JBoss application test and HARMONY-3434 test cases

Removed:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpConfiguration.java
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpConnection.java
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpConnectionManager.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/impl/org/apache/harmony/tests/internal/net/www/protocol/http/PersistenceTest.java
Modified:
    harmony/enhanced/classlib/trunk/modules/luni/.classpath
    harmony/enhanced/classlib/trunk/modules/luni/build.xml
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/.classpath
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/.classpath?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/.classpath (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/.classpath Wed Mar 28 23:39:39 2007
@@ -1,11 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" output="bin/main" path="src/main/java"/>
-	<classpathentry kind="src" output="bin/main" path="src/main/resources"/>
-	<classpathentry kind="src" output="bin/test" path="src/test/java"/>
-	<classpathentry kind="src" output="bin/test" path="src/test/resources"/>
-	<classpathentry kind="src" path="src/test/impl"/>
+	<classpathentry output="bin/main" kind="src" path="src/main/java"/>
+	<classpathentry output="bin/main" kind="src" path="src/main/resources"/>
+	<classpathentry output="bin/test" kind="src" path="src/test/java"/>
+	<classpathentry output="bin/test" kind="src" path="src/test/resources"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="var" path="JUNIT_HOME/junit.jar" sourcepath="JUNIT_SRC_HOME/junitsrc.zip"/>
+	<classpathentry sourcepath="JUNIT_SRC_HOME/junitsrc.zip" kind="var" path="JUNIT_HOME/junit.jar"/>
 	<classpathentry kind="output" path="bin/main"/>
 </classpath>

Modified: harmony/enhanced/classlib/trunk/modules/luni/build.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/build.xml?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/build.xml (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/build.xml Wed Mar 28 23:39:39 2007
@@ -264,7 +264,6 @@
             <javac-elements>
                 <src>
                     <pathelement location="${hy.luni.src.test}/java"/>
-                	<pathelement location="${hy.luni.src.test}/impl"/>
                 </src>
                 <include name="**/*.java" />
             </javac-elements>

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnection.java Wed Mar 28 23:39:39 2007
@@ -17,6 +17,7 @@
 
 package org.apache.harmony.luni.internal.net.www.protocol.http;
 
+import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -32,6 +33,8 @@
 import java.net.Proxy;
 import java.net.ProxySelector;
 import java.net.ResponseCache;
+import java.net.Socket;
+import java.net.SocketAddress;
 import java.net.SocketPermission;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -71,12 +74,12 @@
 
     private int httpVersion = 1; // Assume HTTP/1.1
 
-    protected HttpConnection connection;
-
     private InputStream is;
 
     private InputStream uis;
 
+    protected Socket socket;
+
     private OutputStream socketOut;
 
     private OutputStream cacheOut;
@@ -127,12 +130,8 @@
 
         @Override
         public void close() throws IOException {
-            if(bytesRemaining > 0) {
-                bytesRemaining = 0;
-                disconnect(true); // Should close the socket if client hasn't read all the data
-            } else {
-                disconnect(false);
-            }
+            bytesRemaining = 0;
+            closeSocket();
             /*
              * if user has set useCache to true and cache exists, aborts it when
              * closing
@@ -154,7 +153,6 @@
         @Override
         public int read() throws IOException {
             if (bytesRemaining <= 0) {
-                disconnect(false);
                 return -1;
             }
             int result = is.read();
@@ -164,9 +162,6 @@
                 cacheOut.write(result);
             }
             bytesRemaining--;
-            if (bytesRemaining <= 0) {
-                disconnect(false);
-            }
             return result;
         }
 
@@ -181,7 +176,6 @@
                 throw new ArrayIndexOutOfBoundsException();
             }
             if (bytesRemaining <= 0) {
-                disconnect(false);
                 return -1;
             }
             if (length > bytesRemaining) {
@@ -196,15 +190,11 @@
                     cacheOut.write(buf, offset, result);
                 }
             }
-            if (bytesRemaining <= 0) {
-                disconnect(false);
-            }
             return result;
         }
 
         public long skip(int amount) throws IOException {
             if (bytesRemaining <= 0) {
-                disconnect(false);
                 return -1;
             }
             if (amount > bytesRemaining) {
@@ -214,9 +204,6 @@
             if (result > 0) {
                 bytesRemaining -= result;
             }
-            if (bytesRemaining <= 0) {
-                disconnect(false);
-            }
             return result;
         }
     }
@@ -232,12 +219,8 @@
 
         @Override
         public void close() throws IOException {
-            if(!atEnd && available() > 0) {
-                disconnect(true);
-            } else {
-                disconnect(false);
-            }
             atEnd = true;
+            closeSocket();
             // if user has set useCache to true and cache exists, abort
             if (useCaches && null != cacheRequest) {
                 cacheRequest.abort();
@@ -278,7 +261,6 @@
                 readChunkSize();
             }
             if (atEnd) {
-                disconnect(false);
                 return -1;
             }
             bytesRemaining--;
@@ -304,7 +286,6 @@
                 readChunkSize();
             }
             if (atEnd) {
-                disconnect(false);
                 return -1;
             }
             if (length > bytesRemaining) {
@@ -324,7 +305,6 @@
 
         public long skip(int amount) throws IOException {
             if (atEnd) {
-                disconnect(false);
                 return -1;
             }
             if (bytesRemaining <= 0) {
@@ -448,7 +428,6 @@
                 }
                 sendCache(closed);
             }
-            disconnect(false);
         }
 
         @Override
@@ -606,13 +585,13 @@
             return;
         }
         // socket to be used for connection
-        connection = null;
+        Socket socket = null;
         // try to determine: to use the proxy or not
         if (proxy != null) {
             // try to make the connection to the proxy
             // specified in constructor.
             // IOException will be thrown in the case of failure
-            connection = getHTTPConnection(proxy);
+            socket = getHTTPConnection(proxy);
         } else {
             // Use system-wide ProxySelect to select proxy list,
             // then try to connect via elements in the proxy list.
@@ -625,7 +604,7 @@
                         continue;
                     }
                     try {
-                        connection = getHTTPConnection(selectedProxy);
+                        socket = getHTTPConnection(selectedProxy);
                         proxy = selectedProxy;
                         break; // connected
                     } catch (IOException e) {
@@ -635,38 +614,64 @@
                 }
             }
         }
-        if (connection == null) {
+        if (socket == null) {
             // make direct connection
-            connection = getHTTPConnection(null);
+            socket = getHTTPConnection(null);
         }
-        connection.setSoTimeout(getReadTimeout());
-        setUpTransportIO(connection);
+        socket.setSoTimeout(getReadTimeout());
+        setUpTransportIO(socket);
         connected = true;
     }
 
     /**
-     * Returns connected socket to be used for this HTTP connection. 
+     * Returns connected socket to be used for this HTTP connection. TODO:
+     * implement persistent connections.
      */
-    protected HttpConnection getHTTPConnection(Proxy proxy) throws IOException {
-        HttpConnection connection;
+    protected Socket getHTTPConnection(Proxy proxy) throws IOException {
+        Socket socket;
         if (proxy == null || proxy.type() == Proxy.Type.DIRECT) {
-          this.proxy = null; // not using proxy
-          connection = HttpConnectionManager.getDefault().getConnection(uri, getConnectTimeout());
+            this.proxy = null; // not using proxy
+            socket = new Socket();
+            socket.connect(new InetSocketAddress(getHostName(), getHostPort()),
+                    getConnectTimeout());
+        } else if (proxy.type() == Proxy.Type.HTTP) {
+            socket = new Socket();
+
+            SocketAddress proxyAddr = proxy.address();
+
+            if (!(proxyAddr instanceof InetSocketAddress)) {
+                throw new IllegalArgumentException(Msg.getString(
+                        "K0316", proxyAddr.getClass())); //$NON-NLS-1$
+            }
+
+            InetSocketAddress iProxyAddr = (InetSocketAddress) proxyAddr;
+
+            if( iProxyAddr.getAddress() == null ) {
+                // Resolve proxy, see HARMONY-3113
+                socket.connect(new InetSocketAddress((iProxyAddr.getHostName()),
+                    iProxyAddr.getPort()), getConnectTimeout());
+            } else {
+                socket.connect(iProxyAddr, getConnectTimeout());
+            }
         } else {
-            connection = HttpConnectionManager.getDefault().getConnection(uri, proxy, getConnectTimeout());
+            // using SOCKS proxy
+            socket = new Socket(proxy);
+            socket.connect(new InetSocketAddress(getHostName(), getHostPort()),
+                    getConnectTimeout());
         }
-        return connection;
+        return socket;
     }
 
     /**
      * Sets up the data streams used to send request[s] and read response[s].
      * 
-     * @param connection
-     *            HttpConnection to be used
+     * @param socket
+     *            socket to be used for connection
      */
-    protected void setUpTransportIO(HttpConnection connection) throws IOException {
-        socketOut = connection.getOutputStream();
-        is = connection.getInputStream();
+    protected void setUpTransportIO(Socket socket) throws IOException {
+        this.socket = socket;
+        socketOut = socket.getOutputStream();
+        is = new BufferedInputStream(socket.getInputStream());
     }
 
     // Tries to get head and body from cache, return true if has got this time
@@ -716,17 +721,16 @@
      */
     @Override
     public void disconnect() {
-        disconnect(true);
+        try {
+            closeSocket();
+        } catch (IOException e) {
+        }
     }
 
-    private void disconnect(boolean closeSocket) {
-        if(closeSocket && connection != null) {
-            connection.closeSocketAndStreams();
-        } else if (connection != null) {
-            HttpConnectionManager.getDefault().returnConnectionToPool(connection);
-            connection = null;
+    void closeSocket() throws IOException {
+        if (is != null) {
+            is.close();
         }
-        connection = null;
     }
 
     protected void endRequest() throws IOException {
@@ -1066,7 +1070,7 @@
         if (method == HEAD || (responseCode >= 100 && responseCode < 200)
                 || responseCode == HTTP_NO_CONTENT
                 || responseCode == HTTP_NOT_MODIFIED) {
-            disconnect();
+            closeSocket();
             uis = new LimitedInputStream(0);
         }
         putToCache();
@@ -1159,7 +1163,8 @@
         // if we are doing output make sure the appropriate headers are sent
         if (os != null) {
             if (reqHeader.get("Content-Type") == null) { //$NON-NLS-1$
-                output.append("Content-Type: application/x-www-form-urlencoded\r\n"); //$NON-NLS-1$
+                output
+                        .append("Content-Type: application/x-www-form-urlencoded\r\n"); //$NON-NLS-1$
             }
             if (os.isCached()) {
                 if (reqHeader.get("Content-Length") == null) { //$NON-NLS-1$
@@ -1193,7 +1198,8 @@
                          * if both setFixedLengthStreamingMode and
                          * content-length are set, use fixedContentLength first
                          */
-                        output.append((fixedContentLength >= 0) ? String
+                        output
+                                .append((fixedContentLength >= 0) ? String
                                         .valueOf(fixedContentLength)
                                         : reqHeader.get(i));
                     } else {
@@ -1375,7 +1381,7 @@
                 // drop everything and reconnect, might not be required for
                 // HTTP/1.1
                 endRequest();
-                disconnect();
+                closeSocket();
                 connected = false;
                 String credentials = getAuthorizationCredentials(challenge);
                 if (credentials == null) {
@@ -1398,7 +1404,7 @@
                 // drop everything and reconnect, might not be required for
                 // HTTP/1.1
                 endRequest();
-                disconnect();
+                closeSocket();
                 connected = false;
                 String credentials = getAuthorizationCredentials(challenge);
                 if (credentials == null) {
@@ -1444,7 +1450,7 @@
                             hostPort = -1;
                         }
                         endRequest();
-                        disconnect();
+                        closeSocket();
                         connected = false;
                         continue;
                     }
@@ -1461,7 +1467,7 @@
      * authorization challenge
      * 
      * @param challenge
-     * @return authorization credentials
+     * @return
      * @throws IOException
      */
     private String getAuthorizationCredentials(String challenge)
@@ -1511,4 +1517,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/org/apache/harmony/luni/internal/net/www/protocol/https/HttpsURLConnection.java Wed Mar 28 23:39:39 2007
@@ -14,6 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package org.apache.harmony.luni.internal.net.www.protocol.https;
 
 import java.io.IOException;
@@ -21,6 +22,7 @@
 import java.io.OutputStream;
 import java.net.ProtocolException;
 import java.net.Proxy;
+import java.net.Socket;
 import java.net.URL;
 import java.security.Permission;
 import java.security.Principal;
@@ -385,7 +387,7 @@
                             responseMessage, responseCode));
                 }
                 // if there are some remaining data in the stream - read it out
-                InputStream is = connection.getInputStream();
+                InputStream is = socket.getInputStream();
                 while (is.available() != 0) {
                     is.read();
                 }
@@ -395,8 +397,7 @@
                 super.connect();
             }
             if (!makingSSLTunnel) {
-                sslSocket = connection.getSecureSocket(getSSLSocketFactory(), getHostnameVerifier());
-                setUpTransportIO(connection);
+                setUpTransportIO(wrapConnection(socket));
             }
         }
 
@@ -419,5 +420,21 @@
             return super.requestString();
         }
 
+        /**
+         * Create the secure socket over the connected socket and verify remote
+         * hostname.
+         */
+        private Socket wrapConnection(Socket socket) throws IOException {
+            String hostname = url.getHost();
+            // create the wrapper over connected socket
+            sslSocket = (SSLSocket) getSSLSocketFactory().createSocket(socket,
+                    hostname, url.getPort(), true);
+            sslSocket.setUseClientMode(true);
+            sslSocket.startHandshake();
+            if (!getHostnameVerifier().verify(hostname, sslSocket.getSession())) {
+                throw new IOException(Messages.getString("luni.02", hostname)); //$NON-NLS-1$
+            }
+            return sslSocket;
+        }
     }
 }

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/http/HttpURLConnectionTest.java Wed Mar 28 23:39:39 2007
@@ -14,14 +14,13 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package org.apache.harmony.luni.tests.internal.net.www.protocol.http;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.Authenticator;
 import java.net.HttpURLConnection;
 import java.net.InetSocketAddress;
-import java.net.MalformedURLException;
 import java.net.PasswordAuthentication;
 import java.net.Proxy;
 import java.net.ProxySelector;
@@ -31,18 +30,17 @@
 import java.net.SocketTimeoutException;
 import java.net.URI;
 import java.net.URL;
-import java.security.Permission;
 import java.util.ArrayList;
 
 import junit.framework.TestCase;
 
+
 /**
- * Tests for <code>HttpURLConnection</code> class constructors and methods.
+ * Tests for <code>HTTPURLConnection</code> class constructors and methods.
+ *
  */
 public class HttpURLConnectionTest extends TestCase {
 
-    private static final boolean DEBUG = false;
-
     private final static Object bound = new Object();
 
     static class MockServer extends Thread {
@@ -53,7 +51,7 @@
         public MockServer(String name) throws IOException {
             super(name);
             serverSocket = new ServerSocket(0);
-            serverSocket.setSoTimeout(5000);
+            serverSocket.setSoTimeout(1000);
         }
 
         public int port() {
@@ -79,128 +77,6 @@
         }
     }
 
-    static class MockHTTPServer extends MockServer {
-        // HTTP response codes
-        static final int OK_CODE = 200;
-        static final int NOT_FOUND_CODE = 404;
-        // how many times persistent connection will be used
-        // by server
-        int persUses;
-        // result code to be sent to client
-        int responseCode;
-        // response content to be sent to client
-        String response = "<html></html>";
-        // client's POST message
-        String clientPost = "Hello from client!";
-
-        public MockHTTPServer(String name, int persUses) throws IOException {
-            this(name, persUses, OK_CODE);
-        }
-
-        public MockHTTPServer(String name, int persUses,
-                int responseCode) throws IOException {
-            super(name);
-            this.persUses = persUses;
-            this.responseCode = responseCode;
-        }
-
-        public int port() {
-            return serverSocket.getLocalPort();
-        }
-
-        @Override
-        public void run() {
-            try {
-                synchronized (bound) {
-                    started = true;
-                    bound.notify();
-                }
-                InputStream is = null;
-                Socket client = null;
-                try {
-                    client = serverSocket.accept();
-                    accepted = true;
-                    for (int i=0; i<persUses; i++) {
-                        if (DEBUG) {
-                            System.out.println("*** Using connection for "
-                                    + (i+1) + " time ***");
-                        }
-                        byte[] buff = new byte[1024];
-                        is = client.getInputStream();
-                        int num = 0; // number of read bytes
-                        int bytik; // read byte value
-                        boolean wasEOL = false;
-                        // read header (until empty string)
-                        while (((bytik = is.read()) > 0)) {
-                            if (bytik == '\r') {
-                                bytik = is.read();
-                            }
-                            if (wasEOL && (bytik == '\n')) {
-                                break;
-                            }
-                            wasEOL = (bytik == '\n');
-                            buff[num++] = (byte) bytik;
-                        }
-                        //int num = is.read(buff);
-                        String message = new String(buff, 0, num);
-                        if (DEBUG) {
-                            System.out.println("---- Server got request: ----\n"
-                                + message + "-----------------------------");
-                        }
-                        
-                        // Act as Server (not Proxy) side
-                        if (message.startsWith("POST")) {
-                            // client connection sent some data
-                            // if the data was not read with header
-                            if (DEBUG) {
-                                System.out.println(
-                                        "---- Server read client's data: ----");
-                            }
-                            num = is.read(buff);
-                            message = new String(buff, 0, num);
-                            if (DEBUG) {
-                                System.out.println("'" + message + "'");
-                                System.out.println(
-                                        "------------------------------------");
-                            }
-                            // check the received data
-                            assertEquals(clientPost, message);
-                        }
-
-                        client.getOutputStream().write((
-                            "HTTP/1.1 " + responseCode + " OK\n"
-                            + "Content-type: text/html\n"
-                            + "Content-length: " 
-                            + response.length() + "\n\n"
-                            + response).getBytes());
-
-                        if (responseCode != OK_CODE) {
-                            // wait while test case check closed connection
-                            // and interrupt this thread
-                            try {
-                                while (!isInterrupted()) {
-                                    Thread.sleep(1000);
-                                }
-                            } catch (Exception ignore) { }
-                        }
-                    }
-                } catch (SocketTimeoutException ignore) {
-                    ignore.printStackTrace();
-                } finally {
-                    if (is != null) {
-                        is.close();
-                    }
-                    if (client != null) {
-                        client.close();
-                    }
-                    serverSocket.close();
-                }
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        }
-    }
-
     static class MockProxyServer extends MockServer {
 
         boolean acceptedAuthorizedRequest;
@@ -213,18 +89,18 @@
         public void run() {
             try {
                 Socket socket = serverSocket.accept();
-                socket.setSoTimeout(5000);
+                socket.setSoTimeout(1000);
                 byte[] buff = new byte[1024];
                 int num = socket.getInputStream().read(buff);
                 socket.getOutputStream().write((
-                    "HTTP/1.0 407 Proxy authentication required\n"
-                        + "Proxy-authenticate: Basic realm=\"remotehost\"\n\n")
+                    "HTTP/1.0 407 Proxy authentication required\n" 
+                  + "Proxy-authenticate: Basic realm=\"remotehost\"\n\n")
                         .getBytes());
                 num = socket.getInputStream().read(buff);
                 if (num == -1) {
                     // this connection was closed, create new one:
                     socket = serverSocket.accept();
-                    socket.setSoTimeout(5000);
+                    socket.setSoTimeout(1000);
                     num = socket.getInputStream().read(buff);
                 }
                 String request = new String(buff, 0, num);
@@ -238,15 +114,7 @@
             }
         }
     }
-
-    public void setUp() {
-        if (DEBUG) {
-            System.out.println("\n==============================");
-            System.out.println("===== Execution: "+getName());
-            System.out.println("==============================");
-        }
-    }
-
+    
     /**
      * ProxySelector implementation used in the test.
      */
@@ -388,7 +256,7 @@
             server.join();
             proxy.join();
 
-            assertTrue("Connection does not use proxy",
+            assertTrue("Connection does not use proxy", 
                                             connection.usingProxy());
             assertTrue("Proxy server was not used", proxy.accepted);
         } finally {
@@ -406,17 +274,17 @@
                     "user", "password".toCharArray());
             }
         });
-
+        
         try {
             MockProxyServer proxy = new MockProxyServer("ProxyServer");
 
             URL url = new URL("http://remotehost:55555/requested.data");
-            HttpURLConnection connection =
+            HttpURLConnection connection = 
                 (HttpURLConnection) url.openConnection(
-                        new Proxy(Proxy.Type.HTTP,
+                        new Proxy(Proxy.Type.HTTP, 
                             new InetSocketAddress("localhost", proxy.port())));
-            connection.setConnectTimeout(5000);
-            connection.setReadTimeout(5000);
+            connection.setConnectTimeout(1000);
+            connection.setReadTimeout(1000);
 
             proxy.start();
 
@@ -431,398 +299,5 @@
             Authenticator.setDefault(null);
         }
     }
-
-    /**
-     * Test that a connection is not closed if the client reads all the data 
-     * but not closes input stream. read until -1.
-     */
-    public void testConnectionPersistence() throws Exception {
-        MockHTTPServer httpServer =
-            new MockHTTPServer("HTTP Server for persistence checking", 2);
-        httpServer.start();
-        synchronized(bound) {
-            if (!httpServer.started) {
-                bound.wait(5000);
-            }
-        }
-
-        HttpURLConnection c = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        if (DEBUG) {
-            System.out.println("Actual connection class: "+c.getClass());
-        }
-
-        c.setDoInput(true);
-        c.setConnectTimeout(5000);
-        c.setReadTimeout(5000);
-        InputStream is = c.getInputStream();
-        byte[] buffer = new byte[128];
-        int totalBytes = 0;
-        int bytesRead = 0;
-        while((bytesRead = is.read(buffer)) > 0){
-            if (DEBUG) {
-                System.out.println("Client got response: '"
-                        + new String(buffer, 0, bytesRead) + "'");
-            }
-            totalBytes += bytesRead;
-        }
-
-        HttpURLConnection c2 = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        c2.setDoInput(true);
-        c2.setConnectTimeout(5000);
-        c2.setReadTimeout(5000);
-        is = c2.getInputStream();
-        buffer = new byte[128];
-        totalBytes = 0;
-        bytesRead = 0;
-        while((bytesRead = is.read(buffer)) > 0){
-            if (DEBUG) {
-                System.out.println("Client got response: '"
-                        + new String(buffer, 0, bytesRead) + "'");
-                totalBytes += bytesRead;
-            }
-        }
-    }
-
-    /**
-     * Test that a connection is not closed if the client reads all the data 
-     * but not closes input stream. read() not receives -1.
-     */
-    public void testConnectionPersistence2() throws Exception {
-        MockHTTPServer httpServer =
-            new MockHTTPServer("HTTP Server for persistence checking", 2);
-        httpServer.start();
-        synchronized(bound) {
-            if (!httpServer.started) {
-                bound.wait(5000);
-            }
-        }
-
-        HttpURLConnection c = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        if (DEBUG) {
-            System.out.println("Actual connection class: "+c.getClass());
-        }
-
-        c.setDoInput(true);
-        c.setConnectTimeout(5000);
-        c.setReadTimeout(5000);
-        InputStream is = c.getInputStream();
-        int bytes2Read = httpServer.response.length();
-        byte[] buffer = new byte[httpServer.response.length()];
-        while((bytes2Read -= is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-
-        HttpURLConnection c2 = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        c2.setDoInput(true);
-        c2.setConnectTimeout(5000);
-        c2.setReadTimeout(5000);
-        is = c2.getInputStream();
-        buffer = new byte[httpServer.response.length()];
-        bytes2Read = httpServer.response.length();
-        while((bytes2Read -= is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-    }
-
-    /**
-     * Test that a connection is not closed if it firstly does POST, 
-     * and then does GET requests.
-     */
-    public void testConnectionPersistence3() throws Exception {
-        MockHTTPServer httpServer =
-            new MockHTTPServer("HTTP Server for persistence checking", 2);
-        httpServer.start();
-        synchronized(bound) {
-            if (!httpServer.started) {
-                bound.wait(5000);
-            }
-        }
-
-        HttpURLConnection c = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        if (DEBUG) {
-            System.out.println("Actual connection class: "+c.getClass());
-        }
-
-        c.setDoInput(true);
-        c.setDoOutput(true);
-        c.setConnectTimeout(5000);
-        c.setReadTimeout(5000);
-        c.getOutputStream().write(httpServer.clientPost.getBytes());
-
-        InputStream is = c.getInputStream(); 
-        int bytes2Read = httpServer.response.length();
-        byte[] buffer = new byte[httpServer.response.length()];
-        while((bytes2Read -= is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-
-        HttpURLConnection c2 = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        c2.setDoInput(true);
-        c2.setConnectTimeout(5000);
-        c2.setReadTimeout(5000);
-        is = c2.getInputStream();
-        buffer = new byte[httpServer.response.length()];
-        bytes2Read = httpServer.response.length();
-        while((bytes2Read -= is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-    }
-
-    /**
-     * Test that a connection is not closed if it firstly does GET, 
-     * and then does POST requests.
-     */
-    public void testConnectionPersistence4() throws Exception {
-        MockHTTPServer httpServer =
-            new MockHTTPServer("HTTP Server for persistence checking", 2);
-        httpServer.start();
-        synchronized(bound) {
-            if (!httpServer.started) {
-                bound.wait(5000);
-            }
-        }
-
-        HttpURLConnection c = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        if (DEBUG) {
-            System.out.println("Actual connection class: "+c.getClass());
-        }
-
-        c.setDoInput(true);
-        c.setConnectTimeout(5000);
-        c.setReadTimeout(5000);
-
-        InputStream is = c.getInputStream(); 
-        int bytes2Read = httpServer.response.length();
-        byte[] buffer = new byte[httpServer.response.length()];
-        while((bytes2Read = is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-        
-        HttpURLConnection c2 = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        c2.setDoOutput(true);
-        c2.setDoInput(true);
-        c2.setConnectTimeout(5000);
-        c2.setReadTimeout(5000);
-        c2.getOutputStream().write(httpServer.clientPost.getBytes());
-        is = c2.getInputStream();
-        buffer = new byte[httpServer.response.length()];
-        bytes2Read = httpServer.response.length();
-        while((bytes2Read = is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-    }
-
-    /**
-     * Test that a connection is not closed if it does POST for 2 times.
-     */
-    public void testConnectionPersistence5() throws Exception {
-        MockHTTPServer httpServer =
-            new MockHTTPServer("HTTP Server for persistence checking", 2);
-        httpServer.start();
-        synchronized(bound) {
-            if (!httpServer.started) {
-                bound.wait(5000);
-            }
-        }
-
-        HttpURLConnection c = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        if (DEBUG) {
-            System.out.println("Actual connection class: "+c.getClass());
-        }
-        c.setDoOutput(true);
-        c.setDoInput(true);
-        c.setConnectTimeout(5000);
-        c.setReadTimeout(5000);
-        c.getOutputStream().write(httpServer.clientPost.getBytes());
-        InputStream is = c.getInputStream(); 
-        int bytes2Read = httpServer.response.length();
-        byte[] buffer = new byte[httpServer.response.length()];
-        while((bytes2Read = is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-
-        HttpURLConnection c2 = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-        c2.setDoOutput(true);
-        c2.setDoInput(true);
-        c2.setConnectTimeout(5000);
-        c2.setReadTimeout(5000);
-        c2.getOutputStream().write(httpServer.clientPost.getBytes());
-        is = c2.getInputStream();
-        buffer = new byte[httpServer.response.length()];
-        bytes2Read = httpServer.response.length();
-        while((bytes2Read = is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-    }
-
-    /**
-     * Test that a connection made through proxy will be reused
-     * for connection establishing without proxy.
-     */
-    public void testProxiedConnectionPersistence() throws Exception {
-        MockHTTPServer httpServer =
-            new MockHTTPServer("HTTP Server for persistence checking", 2);
-        httpServer.start();
-        synchronized(bound) {
-            if (!httpServer.started) {
-                bound.wait(5000);
-            }
-        }
-
-        HttpURLConnection c = (HttpURLConnection)
-            new URL("http://some.host:1234")
-                    .openConnection(new Proxy(Proxy.Type.HTTP,
-                            new InetSocketAddress("localhost",
-                                httpServer.port())));
-        if (DEBUG) {
-            System.out.println("Actual connection class: "+c.getClass());
-        }
-        c.setDoOutput(true);
-        c.setDoInput(true);
-        c.setConnectTimeout(5000);
-        c.setReadTimeout(5000);
-        c.getOutputStream().write(httpServer.clientPost.getBytes());
-        InputStream is = c.getInputStream(); 
-        int bytes2Read = httpServer.response.length();
-        byte[] buffer = new byte[httpServer.response.length()];
-        while((bytes2Read = is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-
-        HttpURLConnection c2 = (HttpURLConnection)
-            new URL("http://some.host:1234").openConnection();
-        c2.setDoOutput(true);
-        c2.setDoInput(true);
-        c2.setConnectTimeout(5000);
-        c2.setReadTimeout(5000);
-        c2.getOutputStream().write(httpServer.clientPost.getBytes());
-        is = c2.getInputStream(); 
-        buffer = new byte[httpServer.response.length()];
-        bytes2Read = httpServer.response.length();
-        while((bytes2Read = is.read(buffer)) > 0) { }
-        if (DEBUG) {
-            System.out.println("Client got response: '"
-                    + new String(buffer) + "'");
-        }
-    }
-
-    public void testSecurityManager() throws MalformedURLException, IOException, InterruptedException {
-        try {
-            MockHTTPServer httpServer =
-                new MockHTTPServer("HTTP Server for persistence checking", 2);
-            httpServer.start();
-            synchronized(bound) {
-                if (!httpServer.started) {
-                    bound.wait(5000);
-                }
-            }
-            MySecurityManager sm = new MySecurityManager();
-            System.setSecurityManager(sm);
-
-            // Check that a first connection calls checkConnect
-            try {
-                HttpURLConnection c = (HttpURLConnection)
-                    new URL("http://localhost:"+httpServer.port()).openConnection();
-                if (DEBUG) {
-                    System.out.println("Actual connection class: "+c.getClass());
-                }
-                c.connect();
-                fail("Should have thrown a SecurityException upon connection");
-
-            } catch (SecurityException e) {
-            }
-
-            // Now create a connection properly
-            System.setSecurityManager(null);
-            HttpURLConnection c = (HttpURLConnection)
-            new URL("http://localhost:"+httpServer.port()).openConnection();
-            c.setDoInput(true);
-            c.setConnectTimeout(5000);
-            c.setReadTimeout(5000);
-            InputStream is = c.getInputStream();
-            byte[] buffer = new byte[128];
-            int totalBytes = 0;
-            int bytesRead = 0;
-            while((bytesRead = is.read(buffer)) > 0){
-                if (DEBUG) {
-                    System.out.println("Client got response: '"
-                            + new String(buffer, 0, bytesRead) + "'");
-                }
-                totalBytes += bytesRead;
-            }
-
-            // Now check that a second connection also calls checkConnect
-            System.setSecurityManager(sm);
-            try {
-                HttpURLConnection c2 = (HttpURLConnection)
-                    new URL("http://localhost:"+httpServer.port()).openConnection();
-                c2.setDoInput(true);
-                c2.setConnectTimeout(5000);
-                c2.setReadTimeout(5000);
-                is = c2.getInputStream();
-                buffer = new byte[128];
-                totalBytes = 0;
-                bytesRead = 0;
-                while((bytesRead = is.read(buffer)) > 0){
-                    if (DEBUG) {
-                        System.out.println("Client got response: '"
-                                + new String(buffer, 0, bytesRead) + "'");
-                        totalBytes += bytesRead;
-                    }
-                }
-                fail("Expected a SecurityException to be thrown");
-            } catch (SecurityException e) {
-            }
-        } finally {
-            System.setSecurityManager(null);
-        }
-    }
-
-    private static class MySecurityManager extends SecurityManager {
-
-        @Override
-        public void checkConnect(String host, int port) {
-           throw new SecurityException();
-        }
-        
-        @Override
-        public void checkConnect(String host, int port, Object context) {
-            throw new SecurityException();
-        }
-        
-        @Override
-        public void checkPermission(Permission permission) {
-            // allows a new security manager to be set
-        }
-
-    }
-
+    
 }

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java?view=diff&rev=523583&r1=523582&r2=523583
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/luni/tests/internal/net/www/protocol/https/HttpsURLConnectionTest.java Wed Mar 28 23:39:39 2007
@@ -161,48 +161,6 @@
     }
 
     /**
-     * Checks if HTTPS connection performs initial SSL handshake with the
-     * server working over SSL, sends encrypted HTTP request,
-     * and receives expected HTTP response. After that it checks that the
-     * established connection is persistent.
-     * After HTTPS session if finished
-     * test checks connection state parameters established by
-     * HttpsURLConnection.
-     */
-    public void testHttpsPersistentConnection() throws Throwable {
-        // set up the properties defining the default values needed by SSL stuff
-        setUpStoreProperties();
-
-        try {
-            // create the SSL server socket acting as a server
-            SSLContext ctx = getContext();
-            ServerSocket ss = ctx.getServerSocketFactory()
-                    .createServerSocket(0);
-
-            // create the HostnameVerifier to check hostname verification
-            TestHostnameVerifier hnv = new TestHostnameVerifier();
-            HttpsURLConnection.setDefaultHostnameVerifier(hnv);
-
-            // create url connection to be tested
-            URL url = new URL("https://localhost:" + ss.getLocalPort());
-            HttpsURLConnection connection = (HttpsURLConnection) url
-                    .openConnection();
-
-            // perform the interaction between the peers
-            SSLSocket peerSocket = (SSLSocket) doPersistentInteraction(connection, ss);
-
-            // check the connection state
-            checkConnectionStateParameters(connection, peerSocket);
-
-            // should silently exit
-            connection.connect();
-        } finally {
-            // roll the properties back to system values
-            tearDownStoreProperties();
-        }
-    }
-
-    /**
      * Tests the behaviour of HTTPS connection in case of unavailability
      * of requested resource.
      */
@@ -450,43 +408,6 @@
     }
 
     /**
-     * Tests the behaviour in case of sending the data to the server 
-     * over persistent connection.
-     */
-    public void testPersistence_doOutput() throws Throwable {
-        // setting up the properties pointing to the key/trust stores
-        setUpStoreProperties();
-
-        try {
-            // create the SSLServerSocket which will be used by server side
-            SSLServerSocket ss = (SSLServerSocket) getContext()
-                    .getServerSocketFactory().createServerSocket(0);
-
-            // create the HostnameVerifier to check that Hostname verification
-            // is done
-            TestHostnameVerifier hnv = new TestHostnameVerifier();
-            HttpsURLConnection.setDefaultHostnameVerifier(hnv);
-
-            // create HttpsURLConnection to be tested
-            URL url = new URL("https://localhost:" + ss.getLocalPort());
-            HttpsURLConnection connection = (HttpsURLConnection) url
-                    .openConnection();
-            connection.setDoOutput(true);
-
-            // perform the interaction between the peers and check the results
-            SSLSocket peerSocket = (SSLSocket) 
-                doPersistentInteraction(connection, ss);
-            checkConnectionStateParameters(connection, peerSocket);
-
-            // should silently exit
-            connection.connect();
-        } finally {
-            // roll the properties back to system values
-            tearDownStoreProperties();
-        }
-    }
-
-    /**
      * Tests HTTPS connection process made through the proxy server.
      */
     public void testProxyConnection() throws Throwable {
@@ -523,43 +444,6 @@
 
     /**
      * Tests HTTPS connection process made through the proxy server.
-     * Checks that persistent connection to the host exists and can
-     * be used no in spite of explicit Proxy specifying.
-     */
-    public void testPersistentProxyConnection() throws Throwable {
-        // setting up the properties pointing to the key/trust stores
-        setUpStoreProperties();
-
-        try {
-            // create the SSLServerSocket which will be used by server side
-            ServerSocket ss = new ServerSocket(0);
-
-            // create the HostnameVerifier to check that Hostname verification
-            // is done
-            TestHostnameVerifier hnv = new TestHostnameVerifier();
-            HttpsURLConnection.setDefaultHostnameVerifier(hnv);
-
-            // create HttpsURLConnection to be tested
-            URL url = new URL("https://requested.host:55556/requested.data");
-            HttpsURLConnection connection = (HttpsURLConnection) url
-                    .openConnection(new Proxy(Proxy.Type.HTTP,
-                            new InetSocketAddress("localhost", ss
-                                    .getLocalPort())));
-
-            // perform the interaction between the peers and check the results
-            SSLSocket peerSocket = (SSLSocket) doPersistentInteraction(connection, ss);
-            checkConnectionStateParameters(connection, peerSocket);
-
-            // should silently exit
-            connection.connect();
-        } finally {
-            // roll the properties back to system values
-            tearDownStoreProperties();
-        }
-    }
-
-    /**
-     * Tests HTTPS connection process made through the proxy server.
      * Proxy server needs authentication.
      */
     public void testProxyAuthConnection() throws Throwable {
@@ -684,7 +568,7 @@
 
             // perform the interaction between the peers and check the results
             SSLSocket peerSocket = (SSLSocket) doInteraction(connection, ss,
-                    OK_CODE);
+                    OK_CODE, true);
             checkConnectionStateParameters(connection, peerSocket);
         } finally {
             // roll the properties back to system values
@@ -719,7 +603,8 @@
 
             // perform the interaction between the peers and check the results
             try {
-                doInteraction(connection, ss, AUTHENTICATION_REQUIRED_CODE);
+                doInteraction(connection, ss, AUTHENTICATION_REQUIRED_CODE,
+                        true);
             } catch (IOException e) {
                 // SSL Tunnelling failed
                 if (DO_LOG) {
@@ -819,10 +704,10 @@
     }
 
     /**
-     * Returns the file name of the key/trust store. The key store file
+     * Returns the file name of the key/trust store. The key store file 
      * (named as "key_store." + extension equals to the default KeyStore
      * type installed in the system in lower case) is searched in classpath.
-     * @throws AssertionFailedError if property was not set
+     * @throws AssertionFailedError if property was not set 
      * or file does not exist.
      */
     private static String getKeyStoreFileName() throws Exception {
@@ -941,7 +826,7 @@
     public static Socket doInteraction(
             final HttpURLConnection clientConnection,
             final ServerSocket serverSocket) throws Throwable {
-        return doInteraction(clientConnection, serverSocket, OK_CODE, false, false);
+        return doInteraction(clientConnection, serverSocket, OK_CODE, false);
     }
 
     /**
@@ -954,31 +839,7 @@
             final ServerSocket serverSocket, final int responseCode)
             throws Throwable {
         return doInteraction(clientConnection, serverSocket, responseCode,
-                false, false);
-    }
-
-    /**
-     * Performs interaction between client's HttpURLConnection and
-     * servers side (ServerSocket) over persistent connection.
-     */
-    public static Socket doPersistentInteraction(
-            final HttpURLConnection clientConnection,
-            final ServerSocket serverSocket) throws Throwable {
-        return doInteraction(clientConnection, serverSocket, OK_CODE,
-                false, true);
-    }
-
-    /**
-     * Performs interaction between client's HttpURLConnection and
-     * servers side (ServerSocket) over persistent connection.
-     * Server will response with specified response code.
-     */
-    public static Socket doPersistentInteraction(
-            final HttpURLConnection clientConnection,
-            final ServerSocket serverSocket, final int responseCode)
-            throws Throwable {
-        return doInteraction(clientConnection, serverSocket, responseCode,
-                false, true);
+                false);
     }
 
     /**
@@ -991,8 +852,7 @@
     public static Socket doInteraction(
             final HttpURLConnection clientConnection,
             final ServerSocket serverSocket, final int responseCode,
-            final boolean doAuthentication, 
-            final boolean checkPersistence) throws Throwable {
+            final boolean doAuthentication) throws Throwable {
 
         // set up the connection
         clientConnection.setDoInput(true);
@@ -1000,7 +860,7 @@
         clientConnection.setReadTimeout(TIMEOUT);
 
         ServerWork server = new ServerWork(serverSocket, responseCode,
-                doAuthentication, checkPersistence);
+                doAuthentication);
 
         ClientConnectionWork client = new ClientConnectionWork(clientConnection);
 
@@ -1008,6 +868,8 @@
         client.start();
 
         client.join();
+        server.join();
+
         if (client.thrown != null) {
             if (responseCode != OK_CODE) { // not OK response expected
                 // it is probably expected exception, keep it as is
@@ -1021,30 +883,6 @@
                 throw new Exception(client.thrown);
             }
         }
-
-        if (checkPersistence) {
-            ClientConnectionWork client2 =
-                new ClientConnectionWork((HttpURLConnection)
-                        clientConnection.getURL().openConnection());
-            client2.start();
-            client2.join();
-            if (client2.thrown != null) {
-                if (responseCode != OK_CODE) { // not OK response expected
-                    // it is probably expected exception, keep it as is
-                    throw client2.thrown;
-                }
-                if ((client2.thrown instanceof SocketTimeoutException)
-                        && (server.thrown != null)) {
-                    // server's exception is more informative in this case
-                    throw new Exception(server.thrown);
-                } else {
-                    throw new Exception(client2.thrown);
-                }
-            }
-        }
-
-        server.join();
-
         if (server.thrown != null) {
             throw server.thrown;
         }
@@ -1160,9 +998,6 @@
         // indicates if the server needs proxy authentication
         private boolean needProxyAuthentication;
 
-        // do we check for connection persistence
-        private boolean checkPersistence;
-
         // response code to be send to the client peer
         private int responseCode;
 
@@ -1172,7 +1007,7 @@
         public ServerWork(ServerSocket serverSocket) {
             // the server does not require proxy authentication
             // and sends OK_CODE (OK) response code
-            this(serverSocket, OK_CODE, false, false);
+            this(serverSocket, OK_CODE, false);
         }
 
         /**
@@ -1183,11 +1018,10 @@
          * indicates if the server needs proxy authentication
          */
         public ServerWork(ServerSocket serverSocket, int responseCode,
-                boolean needProxyAuthentication, boolean checkPersistence) {
+                boolean needProxyAuthentication) {
             this.serverSocket = serverSocket;
             this.responseCode = responseCode;
             this.needProxyAuthentication = needProxyAuthentication;
-            this.checkPersistence = checkPersistence;
             // will act as a proxy server if the specified server socket
             // is not a secure server socket
             if (serverSocket instanceof SSLServerSocket) {
@@ -1239,120 +1073,105 @@
                 InputStream is = peerSocket.getInputStream();
                 OutputStream os = peerSocket.getOutputStream();
 
-                // how many times established connection will be used
-                int number_of_uses = checkPersistence ? 2 : 1;
-                for (int it=0; it<number_of_uses; it++) {
-                    if (checkPersistence) {
-                        log("==========================================");
-                        log("Use established connection for "+(it+1)+" time");
+                num = is.read(buff);
+                String message = new String(buff, 0, num);
+                log("Got request:\n" + message);
+                log("------------------");
+
+                if (!actAsProxy) {
+                    // Act as Server (not Proxy) side
+                    if (message.startsWith("POST")) {
+                        // client connection sent some data
+                        log("try to read client data");
+                        num = is.read(buff);
+                        message = new String(buff, 0, num);
+                        log("client's data: '" + message + "'");
+                        // check the received data
+                        assertEquals(clientsData, message);
                     }
+                    // just send the response
+                    os
+                            .write(("HTTP/1.1 " + responseCode + "\n" + httpsResponseTail)
+                                    .getBytes());
+                    // and return
+                    log("Work is DONE");
+                    return;
+                }
 
+                // Do proxy work
+                if (needProxyAuthentication) {
+                    log("Authentication required ...");
+                    // send Authentication Request
+                    os.write(respAuthenticationRequired.getBytes());
+                    // read response
                     num = is.read(buff);
-                    String message = new String(buff, 0, num);
-                    log("Got request:\n" + message);
-                    log("------------------");
-
-                    if (!actAsProxy) {
-                        // Act as Server (not Proxy) side
-                        if (message.startsWith("POST")) {
-                            // client connection sent some data
-                            log("try to read client data");
-                            num = is.read(buff);
-                            message = new String(buff, 0, num);
-                            log("client's data: '" + message + "'");
-                            // check the received data
-                            assertEquals(clientsData, message);
-                        }
-                        // just send the response
-                        os.write(("HTTP/1.1 " + responseCode + "\n" 
-                                    + httpsResponseTail).getBytes());
-                        log("Simple NON-Proxy work is DONE");
-                        continue;
-                    }
-
-                    // Do proxy work
-                    if (needProxyAuthentication) {
-                        log("Authentication required ...");
-                        // send Authentication Request
-                        os.write(respAuthenticationRequired.getBytes());
-                        // read response
+                    if (num == -1) {
+                        // this connection was closed, 
+                        // do clean up and create new one:
+                        closeSocket(peerSocket);
+                        peerSocket = serverSocket.accept();
+                        peerSocket.setSoTimeout(TIMEOUT);
+                        log("New client connection ACCEPTED");
+                        is = peerSocket.getInputStream();
+                        os = peerSocket.getOutputStream();
                         num = is.read(buff);
-                        if (num == -1) {
-                            // this connection was closed, 
-                            // do clean up and create new one:
-                            closeSocket(peerSocket);
-                            peerSocket = serverSocket.accept();
-                            peerSocket.setSoTimeout(TIMEOUT);
-                            log("New client connection ACCEPTED");
-                            is = peerSocket.getInputStream();
-                            os = peerSocket.getOutputStream();
-                            num = is.read(buff);
-                        }
-                        message = new String(buff, 0, num);
-                        log("Got authenticated request:\n" + message);
-                        log("------------------");
-                        // check provided authorization credentials
-                        assertTrue("Received message does not contain "
-                                + "authorization credentials", message
-                                .toLowerCase().indexOf("proxy-authorization:") > 0);
                     }
+                    message = new String(buff, 0, num);
+                    log("Got authenticated request:\n" + message);
+                    log("------------------");
+                    // check provided authorization credentials
+                    assertTrue("Received message does not contain "
+                            + "authorization credentials", message
+                            .toLowerCase().indexOf("proxy-authorization:") > 0);
+                }
 
-                    if (peerSocket instanceof SSLSocket) {
-                        // it will be so if we are have second iteration 
-                        // over persistent connection
-                        os.write(("HTTP/1.1 " + OK_CODE
-                                    + "\n" + httpsResponseTail).getBytes());
-                        log("Sent OK RESPONSE over SSL");
-                    } else {
-                        // The content of this response will reach proxied
-                        // HTTPUC but will not reach proxied HTTPSUC
-                        // In case of HTTP connection it will be the final 
-                        // message, in case of HTTPS connection this message
-                        // will just indicate that connection with remote
-                        // host has been done
-                        // (i.e. SSL tunnel has been established).
-                        os.write(plainResponse.getBytes());
-                        log("Sent OK RESPONSE");
-                    }
+                // The content of this response will reach proxied HTTPUC
+                // but will not reach proxied HTTPSUC
+                // In case of HTTP connection it will be the final message,
+                // in case of HTTPS connection this message will just indicate
+                // that connection with remote host has been done
+                // (i.e. SSL tunnel has been established).
+                os.write(plainResponse.getBytes());
+                log("Sent OK RESPONSE");
+
+                if (message.startsWith("CONNECT")) { // request for SSL tunnel
+                    log("Perform SSL Handshake...");
+                    // create sslSocket acting as a remote server peer
+                    SSLSocket sslSocket = (SSLSocket) getContext()
+                            .getSocketFactory().createSocket(peerSocket,
+                                    "localhost", peerSocket.getPort(), true); // do autoclose
+                    sslSocket.setUseClientMode(false);
+                    // demand client authentication
+                    sslSocket.setNeedClientAuth(true);
+                    sslSocket.startHandshake();
+                    peerSocket = sslSocket;
+                    is = peerSocket.getInputStream();
+                    os = peerSocket.getOutputStream();
 
-                    if (message.startsWith("CONNECT")) { // request for SSL tunnel
-                        log("Perform SSL Handshake...");
-                        // create sslSocket acting as a remote server peer
-                        SSLSocket sslSocket = (SSLSocket) getContext()
-                                .getSocketFactory().createSocket(peerSocket,
-                                        "localhost", peerSocket.getPort(), true); // do autoclose
-                        sslSocket.setUseClientMode(false);
-                        // demand client authentication
-                        sslSocket.setNeedClientAuth(true);
-                        sslSocket.startHandshake();
-                        peerSocket = sslSocket;
-                        is = peerSocket.getInputStream();
-                        os = peerSocket.getOutputStream();
+                    // read the HTTP request sent by secure connection
+                    // (HTTPS request)
+                    num = is.read(buff);
+                    message = new String(buff, 0, num);
+                    log("[Remote Server] Request from SSL tunnel:\n" + message);
+                    log("------------------");
 
-                        // read the HTTP request sent by secure connection
-                        // (HTTPS request)
+                    if (message.startsWith("POST")) {
+                        // client connection sent some data
+                        log("[Remote Server] try to read client data");
                         num = is.read(buff);
                         message = new String(buff, 0, num);
-                        log("[Remote Server] Request from SSL tunnel:\n" + message);
-                        log("------------------");
-
-                        if (message.startsWith("POST")) {
-                            // client connection sent some data
-                            log("[Remote Server] try to read client data");
-                            num = is.read(buff);
-                            message = new String(buff, 0, num);
-                            log("[Remote Server] client's data: '" + message + "'");
-                            // check the received data
-                            assertEquals(clientsData, message);
-                        }
-
-                        log("[Remote Server] Sending the response by SSL tunnel..");
-                        // send the response with specified response code
-                        os.write(("HTTP/1.1 " + responseCode 
-                                    + "\n" + httpsResponseTail).getBytes());
+                        log("[Remote Server] client's data: '" + message + "'");
+                        // check the received data
+                        assertEquals(clientsData, message);
                     }
-                    log("Work is DONE");
-                };
+
+                    log("[Remote Server] Sending the response by SSL tunnel..");
+                    // send the response with specified response code
+                    os
+                            .write(("HTTP/1.1 " + responseCode + "\n" + httpsResponseTail)
+                                    .getBytes());
+                }
+                log("Work is DONE");
             } catch (Throwable e) {
                 if (DO_LOG) {
                     e.printStackTrace();
@@ -1403,7 +1222,7 @@
                 }
                 // read the content of HTTP(s) response
                 InputStream is = connection.getInputStream();
-                log("Input Stream obtained: "+is.getClass());
+                log("Input Stream obtained");
                 byte[] buff = new byte[2048];
                 int num = 0;
                 int byt = 0;