diff -r 7e9e2f10a050 -r 2b1e684c3ce6 test/jdk/java/net/DatagramPacket/ReuseBuf.java --- a/test/jdk/java/net/DatagramPacket/ReuseBuf.java Thu Oct 17 21:15:33 2019 +0100 +++ b/test/jdk/java/net/DatagramPacket/ReuseBuf.java Fri Oct 18 17:08:59 2019 +0100 @@ -21,14 +21,16 @@ * questions. */ -/** +/* * @test - * * @bug 4424096 - * * @summary DatagramPacket spec needs clarification (reuse buf) + * @run main ReuseBuf + * @run main/othervm -Djava.net.preferIPv4Stack=true ReuseBuf + * @run main/othervm -Djdk.net.usePlainDatagramSocketImpl=true ReuseBuf */ import java.net.*; +import static java.lang.System.out; public class ReuseBuf { static String msgs[] = {"Hello World", "Java", "Good Bye"}; @@ -54,8 +56,12 @@ try { ds.receive(dp); String reply = new String(dp.getData(), dp.getOffset(), dp.getLength()); - ds.send(new DatagramPacket(reply.getBytes(),reply.length(), - dp.getAddress(),dp.getPort())); + out.println("server: received [" + reply + "]"); + for (int i=0; i<2; i++) { + out.println("server: sending [" + reply + "]"); + ds.send(new DatagramPacket(reply.getBytes(), reply.length(), + dp.getAddress(), dp.getPort())); + } if (reply.equals(msgs[msgs.length-1])) { break; } @@ -76,16 +82,32 @@ byte b[] = new byte[100]; DatagramPacket dp = new DatagramPacket(b,b.length); for (int i = 0; i < msgs.length; i++) { + out.println("client: sending [" + msgs[i] + "]"); ds.send(new DatagramPacket(msgs[i].getBytes(),msgs[i].length(), InetAddress.getLocalHost(), port)); ds.receive(dp); - if (!msgs[i].equals(new String(dp.getData(), dp.getOffset(), dp.getLength()))) { - throw new RuntimeException("Msg expected: "+msgs[i] +msgs[i].length()+ - "msg received: "+new String(dp.getData(), dp.getOffset(), dp.getLength())+dp.getLength()); + String recvmsg = new String(dp.getData(), dp.getOffset(), dp.getLength()); + out.println("client: received [" + recvmsg + "]"); + if (!msgs[i].equals(recvmsg)) { + throw new RuntimeException("Msg expected: " + msgs[i] + + ", msg received: " + recvmsg); + } + + byte ba[] = new byte[1]; + DatagramPacket dp2 = new DatagramPacket(ba, ba.length); + dp2.setData(new byte[99], 5, 3); // only 3 bytes + ds.receive(dp2); + String expectedMsg = msgs[i].substring(0, 3); + recvmsg = new String(dp2.getData(), dp2.getOffset(), dp2.getLength()); + out.println("client: received [" + recvmsg + "]"); + if (!expectedMsg.equals(recvmsg)) { + throw new RuntimeException("Msg truncated expected: " + expectedMsg + + ", msg received: "+ recvmsg); } } ds.close(); - System.out.println("Test Passed!!!"); + out.println("Test Passed!!!"); + st.join(); } }