test/jdk/java/net/DatagramPacket/ReuseBuf.java
branchdatagramsocketimpl-branch
changeset 58688 2b1e684c3ce6
parent 57965 ef15850629cd
equal deleted inserted replaced
58680:7e9e2f10a050 58688:2b1e684c3ce6
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    21  * questions.
    22  */
    22  */
    23 
    23 
    24 /**
    24 /*
    25  * @test
    25  * @test
    26  *
       
    27  * @bug 4424096
    26  * @bug 4424096
    28  *
       
    29  * @summary DatagramPacket spec needs clarification (reuse buf)
    27  * @summary DatagramPacket spec needs clarification (reuse buf)
       
    28  * @run main ReuseBuf
       
    29  * @run main/othervm -Djava.net.preferIPv4Stack=true ReuseBuf
       
    30  * @run main/othervm -Djdk.net.usePlainDatagramSocketImpl=true ReuseBuf
    30  */
    31  */
    31 import java.net.*;
    32 import java.net.*;
       
    33 import static java.lang.System.out;
    32 
    34 
    33 public class ReuseBuf {
    35 public class ReuseBuf {
    34     static String msgs[] = {"Hello World", "Java", "Good Bye"};
    36     static String msgs[] = {"Hello World", "Java", "Good Bye"};
    35     static int port;
    37     static int port;
    36 
    38 
    52             DatagramPacket dp = new DatagramPacket(b,b.length);
    54             DatagramPacket dp = new DatagramPacket(b,b.length);
    53             while (true) {
    55             while (true) {
    54                 try {
    56                 try {
    55                     ds.receive(dp);
    57                     ds.receive(dp);
    56                     String reply = new String(dp.getData(), dp.getOffset(), dp.getLength());
    58                     String reply = new String(dp.getData(), dp.getOffset(), dp.getLength());
    57                     ds.send(new DatagramPacket(reply.getBytes(),reply.length(),
    59                     out.println("server: received [" + reply + "]");
    58                                                dp.getAddress(),dp.getPort()));
    60                     for (int i=0; i<2; i++) {
       
    61                         out.println("server: sending [" + reply + "]");
       
    62                         ds.send(new DatagramPacket(reply.getBytes(), reply.length(),
       
    63                                 dp.getAddress(), dp.getPort()));
       
    64                     }
    59                     if (reply.equals(msgs[msgs.length-1])) {
    65                     if (reply.equals(msgs[msgs.length-1])) {
    60                         break;
    66                         break;
    61                     }
    67                     }
    62                 } catch (Exception e) {
    68                 } catch (Exception e) {
    63                     throw new RuntimeException(e.getMessage());
    69                     throw new RuntimeException(e.getMessage());
    74         InetSocketAddress bindaddr = new InetSocketAddress(local, 0);
    80         InetSocketAddress bindaddr = new InetSocketAddress(local, 0);
    75         DatagramSocket ds = new DatagramSocket(bindaddr);
    81         DatagramSocket ds = new DatagramSocket(bindaddr);
    76         byte b[] = new byte[100];
    82         byte b[] = new byte[100];
    77         DatagramPacket dp = new DatagramPacket(b,b.length);
    83         DatagramPacket dp = new DatagramPacket(b,b.length);
    78         for (int i = 0; i < msgs.length; i++) {
    84         for (int i = 0; i < msgs.length; i++) {
       
    85             out.println("client: sending [" + msgs[i] + "]");
    79             ds.send(new DatagramPacket(msgs[i].getBytes(),msgs[i].length(),
    86             ds.send(new DatagramPacket(msgs[i].getBytes(),msgs[i].length(),
    80                                        InetAddress.getLocalHost(),
    87                                        InetAddress.getLocalHost(),
    81                                        port));
    88                                        port));
    82             ds.receive(dp);
    89             ds.receive(dp);
    83             if (!msgs[i].equals(new String(dp.getData(), dp.getOffset(), dp.getLength()))) {
    90             String recvmsg = new String(dp.getData(), dp.getOffset(), dp.getLength());
    84                 throw new RuntimeException("Msg expected: "+msgs[i] +msgs[i].length()+
    91             out.println("client: received [" + recvmsg + "]");
    85                                            "msg received: "+new String(dp.getData(), dp.getOffset(), dp.getLength())+dp.getLength());
    92             if (!msgs[i].equals(recvmsg)) {
       
    93                 throw new RuntimeException("Msg expected: " + msgs[i] +
       
    94                                            ", msg received: " + recvmsg);
       
    95             }
       
    96 
       
    97             byte ba[] = new byte[1];
       
    98             DatagramPacket dp2 = new DatagramPacket(ba, ba.length);
       
    99             dp2.setData(new byte[99], 5, 3);  // only 3 bytes
       
   100             ds.receive(dp2);
       
   101             String expectedMsg = msgs[i].substring(0, 3);
       
   102             recvmsg = new String(dp2.getData(), dp2.getOffset(), dp2.getLength());
       
   103             out.println("client: received [" + recvmsg + "]");
       
   104             if (!expectedMsg.equals(recvmsg)) {
       
   105                 throw new RuntimeException("Msg truncated expected: " + expectedMsg +
       
   106                                             ", msg received: "+ recvmsg);
    86             }
   107             }
    87         }
   108         }
    88         ds.close();
   109         ds.close();
    89         System.out.println("Test Passed!!!");
   110         out.println("Test Passed!!!");
       
   111         st.join();
    90     }
   112     }
    91 }
   113 }