diff options
Diffstat (limited to 'libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java')
-rw-r--r-- | libjava/classpath/testsuite/java.net/SocketSendReceiveTest.java | 113 |
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); + } + } +} |