aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java')
-rw-r--r--libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java113
1 files changed, 113 insertions, 0 deletions
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);
+ }
+ }
+}