You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by nd...@apache.org on 2007/04/21 00:20:18 UTC

svn commit: r530936 - /harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/SocketTest.java

Author: ndbeyer
Date: Fri Apr 20 15:20:10 2007
New Revision: 530936

URL: http://svn.apache.org/viewvc?view=rev&rev=530936
Log:
Apply test patch for HARMONY-2503 - [classlib][luni]ServerSocket refuses connection on 0.0.0.0 after successful connection on localhost

Modified:
    harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/SocketTest.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/SocketTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/SocketTest.java?view=diff&rev=530936&r1=530935&r2=530936
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/SocketTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/SocketTest.java Fri Apr 20 15:20:10 2007
@@ -40,17 +40,22 @@
 import tests.support.Support_PortManager;
 
 public class SocketTest extends SocketTestCase {
+    ServerSocket ss;
 
-	ServerSocket ss;
+    Socket s;
 
-	Socket s;
+    Thread t;
 
-	Thread t;
+    boolean interrupted;
 
-	boolean interrupted = false;
+    String host = "localhost";
 
-	class SServer extends Thread implements Runnable {
-		Socket s1 = null;
+    int port;
+
+    Exception failureException;
+
+	private class SServer extends Thread implements Runnable {
+		private Socket s1;
 
 		public void run() {
 			try {
@@ -73,6 +78,93 @@
 			}
 		}
 	}
+	
+	private class ServerThread implements Runnable {
+		public boolean ready = false;
+
+		private int serverSocketConstructor = 0;
+		
+		private static final int FIRST_TIME = 1;
+
+		private static final int SECOND_TIME = 2;
+		
+		private int backlog = 10;
+
+		public void run() {
+			try {
+
+				ServerSocket socket = null;
+				switch (serverSocketConstructor) {
+				case FIRST_TIME:
+					socket = new ServerSocket(port, backlog,
+							new InetSocketAddress(host, port).getAddress());
+                    port = socket.getLocalPort();
+					break;
+				case SECOND_TIME:
+					socket = new ServerSocket(port, backlog);
+					host = socket.getInetAddress().getHostName();
+                    port = socket.getLocalPort();
+					break;
+				default:
+					socket = new ServerSocket();
+					break;
+				}
+
+				synchronized (this) {
+					ready = true;
+					this.notifyAll();
+				}
+
+				socket.setSoTimeout(5000);
+				socket.accept();				
+
+				socket.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			} catch (Throwable e) {
+				e.printStackTrace();
+			}
+		}
+
+		public synchronized void waitCreated() throws Exception{
+			while (!ready) {				
+				this.wait();
+			}
+		}
+	}
+	
+	private class ClientThread implements Runnable {
+
+		public void run() {
+			try {
+				Socket socket = new Socket();
+				InetSocketAddress addr = new InetSocketAddress(host, port);				
+				socket.connect(addr);
+
+				socket.close();
+			}catch (Exception e) {
+                failureException = e;
+			} 
+		}
+	}
+	
+	private void connectTestImpl(int ssConsType) throws Exception {
+		ServerThread server = new ServerThread();
+		server.serverSocketConstructor = ssConsType;
+		Thread serverThread = new Thread(server);
+		serverThread.start();
+		server.waitCreated();
+
+		ClientThread client = new ClientThread();
+		Thread clientThread = new Thread(client);
+		clientThread.start();
+		try {
+			serverThread.join();
+			clientThread.join();
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}	
 
 	/**
 	 * @tests java.net.Socket#Socket()
@@ -2450,6 +2542,18 @@
     }
     
     /**
+     * Regression for Harmony-2503 
+     */
+    public void test_connectLjava_net_SocketAddress_AnyAddress()
+            throws Exception {
+        connectTestImpl(ServerThread.FIRST_TIME);
+        connectTestImpl(ServerThread.SECOND_TIME);
+        if (failureException != null) {
+            throw failureException;
+        }
+    }
+    
+    /**
      * @tests Socket#getOutputStream()
      */
     public void test_getOutputStream_shutdownOutput() throws Exception {
@@ -2491,37 +2595,30 @@
         }
     }
 
-	/**
-	 * Sets up the fixture, for example, open a network connection. This method
-	 * is called before a test is executed.
-	 * 
-	 * @throws Exception
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-	}
-
-	/**
-	 * Tears down the fixture, for example, close a network connection. This
-	 * method is called after a test is executed.
-	 */
-	protected void tearDown() {
-		try {
-			if (s != null)
-				s.close();
-		} catch (Exception e) {
-		}
-		try {
-			if (ss != null)
-				ss.close();
-		} catch (Exception e) {
-		}
-		try {
-			if (t != null)
-				t.interrupt();
-		} catch (Exception e) {
-		}
-	}
+    protected void tearDown() {
+        try {
+            if (s != null)
+                s.close();
+        } catch (Exception e) {
+        }
+        try {
+            if (ss != null)
+                ss.close();
+        } catch (Exception e) {
+        }
+        try {
+            if (t != null)
+                t.interrupt();
+        } catch (Exception e) {
+        }
+        this.t = null;
+        this.s = null;
+        this.ss = null;
+        this.interrupted = false;
+        this.host = "localhost";
+        this.port = 0;
+        this.failureException = null;
+    }
 
 	static class MockSecurityManager extends SecurityManager {