From f911ba985aa7fe0096c386c5be385ac5825ea527 Mon Sep 17 00:00:00 2001
From: Tom Tromey <tromey@gcc.gnu.org>
Date: Sat, 16 Jul 2005 00:30:23 +0000
Subject: Initial revision

From-SVN: r102074
---
 .../testsuite/java.net/SocketSendReceiveTest.java  | 113 +++++++++++++++++++++
 1 file changed, 113 insertions(+)
 create mode 100644 libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java

(limited to 'libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java')

diff --git a/libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java b/libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java
new file mode 100644
index 0000000..15ab983
--- /dev/null
+++ b/libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java
@@ -0,0 +1,113 @@
+import java.net.*;
+import java.io.*;
+
+/*
+ * Start one thread for receiving a packet, wait for it to set up,
+ * send a packet to it, and wait until it completes.  Compare the
+ * packet to make sure it came thru without errors.
+ */
+
+public class SocketSendReceiveTest
+  implements Runnable
+{
+  public static final int port = 4000 + (int)(java.lang.Math.random() * 2000);
+  public static final String message = "hello";
+  public static int count = 0;
+  public static String received;
+
+  void send()
+    throws Exception
+    {
+      InetAddress local = InetAddress.getLocalHost();
+      Socket sender = new Socket(local, port);
+      byte []message_bytes = message.getBytes();
+
+      DataOutputStream out = new DataOutputStream(sender.getOutputStream());
+      out.write(message_bytes, 0, message_bytes.length);
+      out.flush();
+      sender.close();
+    }
+  void receive()
+    throws Exception
+    {
+      ServerSocket socket = new ServerSocket(port);
+
+      synchronized(this) {
+	  notifyAll();
+      }
+
+      Socket connection = socket.accept();
+      DataInputStream in = new DataInputStream(connection.getInputStream());
+
+      byte[] buffer = new byte[100];
+
+      int length = in.read(buffer);
+
+      connection.close();
+      socket.close();
+
+      received = new String(buffer, 0, length);
+
+      count++;
+      if ( message.length() != received.length() )
+	throw new Exception("Receved "+ received.length()+
+			    " bytes but sent "+message.length() + " bytes");
+
+      if ( ! message.equals(received) )
+	throw new Exception("Receved \""+ received+
+			    "\" but sent \""+message + "\"");
+    }
+
+  public void run()
+    {
+      String name = Thread.currentThread().getName();
+      if (name.equals("timer")) {
+	try {
+	  Thread.sleep(10000);
+	} catch (InterruptedException e){}
+	System.out.println("FAILED: timer triggered");
+	System.exit(0);
+      }
+      try {
+	receive();
+      } catch (Exception e) {
+	System.out.println("FAILED: receiver (port "+port + "): " + e);
+	System.exit(0);
+      }
+    }
+  public static void main(String args[])
+    {
+      try {
+	SocketSendReceiveTest sender = new SocketSendReceiveTest();
+	SocketSendReceiveTest receiver = new SocketSendReceiveTest();
+	Thread receiver_thread = new Thread(receiver);
+
+	/* Make sure the test terminates even if it hangs on network */
+	SocketSendReceiveTest timer = new SocketSendReceiveTest();
+	Thread timer_thread = new Thread(timer, "timer");
+	timer_thread.start();
+
+	synchronized(receiver) {
+	  receiver_thread.start();
+	  receiver.wait();
+	}
+	try {
+	  sender.send();
+	} catch (Exception e) {
+	  System.out.println("FAILED: receiver (port "+port + "): " + e);
+	  System.exit(0);
+	}
+	receiver_thread.join();
+
+	if (0 == count)
+	  throw new Exception("Nothing received");
+
+	System.out.println("PASSED: Socket send/receive count="+count+
+			   " message="+received);
+	System.exit(0);
+      } catch (Exception e) {
+	System.out.println("FAILED: " + e);
+	System.exit(0);
+      }
+    }
+}
-- 
cgit v1.1