// Tags: JDK1.1 // Uses: DatagramSocketTestEchoServer DatagramSocketTestEchoTimeoutServer /* Copyright (C) 1999 Hewlett-Packard Company This file is part of Mauve. Mauve is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. Mauve is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Mauve; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // ****************************************************** // // ****************************************************** package gnu.testlet.wonka.net.DatagramSocket; import gnu.testlet.Testlet; import gnu.testlet.TestHarness; import java.net.*; import java.io.*; // mod for "equals" and remove dependency on NodeTest public class DatagramSocketTest implements Testlet { protected static TestHarness harness; public void test_Basics() { harness.checkPoint("Basics"); try { DatagramSocket sock1 = new DatagramSocket( 7000 ); harness.check ( sock1.getLocalPort(), 7000, "Error : test_Basics failed - 1 " + "returned port value is wrong"); } catch( SocketException e ){ harness.fail("Error : test_Basics failed - 2 " + "Not able to create a socket "); } catch(IOException e ) { harness.fail("Error : test_Basics failed - 3 " + "socket exception is not thrown properly"); } catch(IllegalArgumentException e ) { harness.fail("Error : test_Basics failed - 3a " + "Port 7000 causes IllegalArgumentException"); } catch(Exception e ) { harness.fail("Error : test_Basics failed - 3b "); e.printStackTrace(); } try { DatagramSocket sock3 = new DatagramSocket( 7001, InetAddress.getLocalHost()); harness.check (sock3.getLocalAddress().getHostAddress(), InetAddress.getLocalHost().getHostAddress (), "Error : test_Basics failed - 4 " + "ip address returned is not correct "); } catch ( SocketException e ){ harness.fail("Error : test_Basics failed - 5 " + "Not able to create a socket "); } catch ( UnknownHostException e ){ harness.fail("Error : test_Basics failed - 6 " + "Should not throw UnknownHostException "); } catch(IllegalArgumentException e ) { harness.fail("Error : test_Basics failed - 7 " + "Port 7001 causes IllegalArgumentException"); } catch(Exception e ) { harness.fail("Error : test_Basics failed - 8 "); e.printStackTrace(); } } public void test_echo() { DatagramSocketTestEchoServer srv = new DatagramSocketTestEchoServer(); srv.setDaemon(true); srv.setPriority(10); srv.start(); // System.out.println(" yield to server thread"); Thread.yield(); try { Thread.sleep(2000); } catch ( Exception e ){} // System.out.println(" server thread should be running"); byte buff[] = {(byte)'h' , (byte)'e', (byte)'l',(byte)'l',(byte)'o',(byte)'b',(byte)'u',(byte)'d',(byte)'d',(byte)'y'}; DatagramSocket client=null; DatagramPacket request=null; try { client = new DatagramSocket(); request = new DatagramPacket( buff, buff.length, InetAddress.getLocalHost(), 8000 ); // System.out.println("Packet Addressed to :"+InetAddress.getLocalHost().toString()+" "+String.valueOf(8000)); harness.check(true); } catch ( Exception e ){ harness.fail("Error : test_echo failed - 0 " + "Should not throw Exception "); } byte resp[] = new byte[10]; DatagramPacket reply = new DatagramPacket( resp , resp.length ); if (client==null) return; if (request==null) return; // System.out.println("test echo 1"); try { // System.out.println("test echo 2 send"); client.send(request); try { Thread.sleep(1000 ); } catch ( Exception e ){} // System.out.println("test echo 3 receive"); client.receive(reply); // System.out.println("test echo 4 received, close."); client.close(); //try { //System.out.println("test echo 4.5 close 2"); // client.close(); // harness.fail("Error : test_echo failed - 1 " + // "IOException to be thrown if a socket is closed twice "); //} //catch( Exception e ){} // System.out.println("test echo 5"); try { byte resp1[] = new byte[11]; DatagramPacket reply1 = new DatagramPacket( resp1 , resp1.length ); // System.out.println("test echo 6"); client.receive(reply1); harness.fail( "Error : test_echo failed - 2 " + "IOException should be thrown if try to read after the socket is closed"); } catch ( IOException e ) { harness.check(true); } } catch ( Exception e) { harness.fail("Error : test_echo failed - 3 " + "Exception occured while sending/receiving " ); } harness.check ( reply.getLength(), 10, "Error : test_echo failed - 4 " + "server did not return proper number of bytes " ); // System.out.println("test_echo: packet data: "+(new String(reply.getData())) ) ; harness.check (new String(reply.getData(),0,reply.getLength()), "hellobuddy", "Error : test_echo - 5 failed " + "The echo server did not send the expected data " ); } // 12/16/97, timeout is not a Java 1.0 feature public void test_echoWithTimeout() { DatagramSocketTestEchoTimeoutServer srv = new DatagramSocketTestEchoTimeoutServer(); srv.setDaemon(true); srv.setPriority(10); srv.start(); Thread.yield(); try { Thread.sleep(2000); } catch ( Exception e ){} byte buff[] = {(byte)'h' , (byte)'e', (byte)'l',(byte)'l',(byte)'o',(byte)'b',(byte)'u',(byte)'d',(byte)'d',(byte)'y'}; DatagramSocket client=null; DatagramPacket request=null; try { client = new DatagramSocket(); request = new DatagramPacket( buff, buff.length, InetAddress.getLocalHost(), 8001 ); harness.check(true); } catch ( Exception e ){ harness.fail("Error : test_echoWithTimeout failed - 0 " + "Should not throw Exception "); } if (client==null) return; if (request==null) return; try { client.setSoTimeout(500); harness.check(true); }catch ( SocketException e ){ harness.fail("Error : test_echoWithTimeout failed - 1 " + "Should not throw SocketException "); } try { harness.check ( client.getSoTimeout(), 500, "Error : test_echoWithTimeout failed - 2 " + "did not return proper timeout value "); }catch ( SocketException e ){ harness.fail("Error : test_echoWithTimeout failed - 3 " + "Should not throw SocketException "); } byte resp[] = new byte[10]; DatagramPacket reply = new DatagramPacket( resp , resp.length ); try { client.send(request); client.receive(reply); // don't send data & test that // receive times-out try { client.setSoTimeout(1); client.receive(reply); harness.fail("Error : test_echoWithTimeout failed - 2 " + "Should throw interrupted exception after the specified duration"); } catch (InterruptedIOException e ) { harness.check(true); } client.close(); try { byte resp1[] = new byte[10]; DatagramPacket reply1 = new DatagramPacket( resp1 , resp1.length ); client.receive(reply1); harness.fail( "Error : test_echoWithTimeout failed - 4 " + "IOException should be thrown if try to read after the socket is closed"); } catch ( IOException e ) { harness.check(true); } } catch ( Exception e) { harness.fail("Error : test_echoWithTimeout failed - 5 " + "Exception occured while sending/receiving " ); e.printStackTrace(); } harness.check ( reply.getLength(), 10, "Error : test_echoWithTimeout failed - 6 " + "server did not return proper number of bytes " ); // System.out.println("test_echoWithTimeout: packet data: "+(new String(reply.getData())) ) ; harness.check ( (new String(reply.getData())), "hellobuddy", "Error : test_echoWithTimeout - 7 failed " + "The echo server didnot send the expected data " ); } public void testall() { // System.out.println("test_basics"); test_Basics(); // System.out.println("test_echo"); test_echo(); test_echoWithTimeout(); // System.out.println("testall Done 1"); } public void test (TestHarness the_harness) { harness = the_harness; harness.setclass("java.net.DatagramSocket"); testall (); } }