Avoid conflicts between default JDWP sync port and transport address.

Establish the JDWP transport connection before binding the
sync socket, so that when the sync port is chosen by the OS,
the latter won't interfere with the transport address.

(cherry picked from commit dc011649298aefaae12c8cda3c0efe282b2383e1)

Bug: 28927931
Bug: 28869570

Change-Id: Icb4a011f84ecb83dc9a170441ab55f33d4a33523
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
index dec2841..7bc97a5 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
@@ -372,8 +372,8 @@
 
     /**
      * Returns TCP/IP port for synchronization channel.
-     * 
-     * @return string with port number or null
+     *
+     * @return port number if it is set, or DEFAULT_SYNC_PORT otherwise.
      */
     public int getSyncPortNumber() {
         String buf = getSyncPortString();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java
index 71c97ca..2e45529 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java
@@ -39,7 +39,7 @@
 
 /**
  * This class provides TransportWrapper for row TCP/IP socket connection.
- *  
+ *
  */
 public class SocketTransportWrapper implements TransportWrapper {
 
@@ -52,9 +52,12 @@
 
     /**
      * Starts listening for connection on given or default address.
-     * 
-     * @param address address to listen or null for default address
-     * @return string representation of listening address 
+     *
+     * @param address
+     *            address to listen to or null for default address,
+     *            parsed as "hostname:port" or "port", if it contains
+     *            no semi-colon.
+     * @return string representation of listening address
      */
     public String startListening(String address) throws IOException {
         String hostName = null;
@@ -82,7 +85,7 @@
         } else {
             serverSocket = new ServerSocket(port);
         }
-        
+
         // use as workaround for unspecified behaviour of isAnyLocalAddress()
         InetAddress iAddress = null;
         if (hostName != null) {
@@ -90,11 +93,11 @@
         } else {
             iAddress = InetAddress.getLocalHost();
         }
-        
+
         address = iAddress.getHostName() + ":" + serverSocket.getLocalPort();
         return address;
     }
-    
+
     /**
      * Stops listening for connection on current address.
      */
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java
index d50d3f4..08ce1f8 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java
@@ -52,14 +52,14 @@
      * It forces to use attaching connector and fixed transport address.
      */
 /*
-    protected void beforeDebuggeeStart(JDWPOnDemandDebuggeeWrapper debugeeWrapper) {
+    protected void beforeConnectionSetUp() {
     	settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(JPDADebuggerOnDemandOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("DEBUGGER: Use ATTACH connector kind");
        
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
  */
     	
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java
index c03dfca..f06b516 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java
@@ -101,12 +101,12 @@
         logWriter.println("==> testAttachConnector001 PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java
index 95e0ea0..e108ade 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java
@@ -128,12 +128,12 @@
         }
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java
index 1aa4e45..97de978 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java
@@ -89,12 +89,12 @@
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java
index 8ca45d9..75b14f0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java
@@ -130,12 +130,12 @@
         logWriter.println("==> testClassPrepare001 PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java
index c2b1e2d..f9b8abe 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java
@@ -147,12 +147,12 @@
         logWriter.println("==> testEnableCollection001 PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java
index 883f965..3f63819 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java
@@ -131,12 +131,12 @@
         logWriter.println("==> testException001 PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java
index 158dd8a..6cafc9e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java
@@ -126,12 +126,12 @@
         logWriter.println("==> testFieldAccess001 PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java
index 9b63b6d..5e3fd0a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java
@@ -127,12 +127,12 @@
         logWriter.println("==> testFieldModification001 PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java
index b977f35..284e677 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java
@@ -45,10 +45,10 @@
     /**
      * Sets kind of connection: listen kind.
      */
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setListenConnectorKind();
         logWriter.println("LISTEN connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 
     /**
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java
index ce0be25..2dc80d0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java
@@ -139,12 +139,12 @@
         }
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if(settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java
index 9013d55..9d70592 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java
@@ -90,12 +90,12 @@
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java
index c060791..ac31faf 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java
@@ -70,12 +70,12 @@
         logWriter.println("TEST PASSED");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java
index 2924030..72df3b6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java
@@ -180,12 +180,12 @@
         logWriter.println("==> testSingleStep001 PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java
index df6df7c..84259b0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java
@@ -121,12 +121,12 @@
         }
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java
index 3a7359f..3bb54cd 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java
@@ -125,12 +125,12 @@
         }
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java
index d63740f..6a6de6c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java
@@ -150,12 +150,12 @@
         logWriter.println("==> test PASSED!");
     }
 
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
             settings.setTransportAddress(TestOptions.DEFAULT_ATTACHING_ADDRESS);
         }
         logWriter.println("ATTACH connector kind");
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeConnectionSetUp();
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java
index e1f0d5a..d21ef57 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java
@@ -45,10 +45,10 @@
     }
 
     @Override
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeDebuggeeStart() {
         // Indicate that we expect the debuggee to exit with a particular code.
         debuggeeWrapper.setExpectedExitCode(EXIT_CODE);
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeDebuggeeStart();
     }
 
     /**
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java
index 8dbe400..5caf5c6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java
@@ -40,11 +40,11 @@
     /**
      * This method is invoked right before starting debuggee VM.
      */
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
+    protected void beforeDebuggeeStart() {
         synchronizer = createSynchronizer();
         int port = synchronizer.bindServer();
         debuggeeWrapper.savedVMOptions = "-Djpda.settings.syncPort=" + port;
-        super.beforeDebuggeeStart(debuggeeWrapper);
+        super.beforeDebuggeeStart();
     }
 
     /**
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java
index 86e776c..47d2a2b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java
@@ -57,7 +57,9 @@
 
         // launch debuggee process
         debuggeeWrapper = createDebuggeeWrapper();
-        beforeDebuggeeStart(debuggeeWrapper);
+        beforeConnectionSetUp();
+        setUpDebuggeeWrapperConnection();
+        beforeDebuggeeStart();
         startDebuggeeWrapper();
 
         // receive and handle initial event
@@ -80,19 +82,27 @@
     }
 
     /**
+     * Set up server side JDWP connection.
+     */
+    protected void setUpDebuggeeWrapperConnection() {
+        debuggeeWrapper.setUpConnection();
+        logWriter.println("Set up server side JDWP connection.");
+    }
+
+    /**
      * Starts wrapper for debuggee process.
      */
     protected void startDebuggeeWrapper() {
-    	debuggeeWrapper.start();
+        debuggeeWrapper.start();
         logWriter.println("Established JDWP connection with debuggee VM");
     }
-    	
+
     /**
      * Receives initial VM_INIT event if debuggee is suspended on event.
      */
     protected void receiveInitialEvent() {
         if (settings.isDebuggeeSuspend()) {
-            initialEvent = 
+            initialEvent =
                 debuggeeWrapper.vmMirror.receiveCertainEvent(JDWPConstants.EventKind.VM_INIT);
             logWriter.println("Received inital VM_INIT event");
         }
@@ -111,10 +121,17 @@
     }
 
     /**
+     * This method is invoked right before setting up the server side JDWP connection.
+     */
+    protected void beforeConnectionSetUp() {
+      // Empty.
+    }
+
+    /**
      * This method is invoked right before starting debuggee VM.
      */
-    protected void beforeDebuggeeStart(JDWPUnitDebuggeeWrapper debuggeeWrapper) {
-
+    protected void beforeDebuggeeStart() {
+      // Empty.
     }
 
     /**
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java
index 70b4c1a..fe31b59 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java
@@ -43,11 +43,25 @@
      */
     public String savedVMOptions = null;
 
+    /**
+     * Wrapper around JDWP transport connection.
+     */
     protected TransportWrapper transport;
 
     /**
+     * JDWP transport address.
+     */
+    protected String address;
+
+    /**
+     * Is this a "listen" JDWP connection? (If false, it is a an "attach" connection.)
+     */
+    boolean isListenConnection;
+
+
+    /**
      * Creates new instance with given data.
-     * 
+     *
      * @param settings
      *            test run options
      * @param logWriter
@@ -58,13 +72,12 @@
     }
 
     /**
-     * Launches new debuggee process according to test run options and
-     * establishes JDWP connection.
+     * Set up server side JDWP connection before launching the debuggee.
      */
-    public void start() {
-        boolean isListenConnection = settings.isListenConnectorKind();
+    public void setUpConnection() {
+        isListenConnection = settings.isListenConnectorKind();
         transport = createTransportWrapper();
-        String address = settings.getTransportAddress();
+        address = settings.getTransportAddress();
 
         if (isListenConnection) {
             logWriter.println("Start listening on: " + address);
@@ -77,7 +90,13 @@
         } else {
             logWriter.println("Attach to: " + address);
         }
+    }
 
+    /**
+     * Launches new debuggee process according to test run options and
+     * establishes JDWP connection.
+     */
+    public void start() {
         String cmdLine = settings.getDebuggeeJavaPath() + " -cp \""
                 + settings.getDebuggeeClassPath() + "\" -agentlib:"
                 + settings.getDebuggeeAgentName() + "="