harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jimmy, Jing Lv (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-2276) [classlib][net]DatagramPacket truncate packet length different than RI
Date Thu, 23 Nov 2006 06:34:02 GMT
[classlib][net]DatagramPacket truncate packet length different than RI
----------------------------------------------------------------------

                 Key: HARMONY-2276
                 URL: http://issues.apache.org/jira/browse/HARMONY-2276
             Project: Harmony
          Issue Type: Bug
          Components: Classlib
            Reporter: Jimmy, Jing Lv


Hi,
    Though spec reads un-clear, RI sets packet length of DatagramPacket to its orginal length
in receiving, but Harmony remember its perious received length. As a result, if the perious
received bytes are shorter than the next input, it will cause a truncate different than RI.
testcase:
public class DatagramSocketTest extends TestCase {
   private final String ADDRESS = "239.255.2.3";
   private final int PORT = 6155;
   private MulticastSocket socket = null;
   private byte[] recvData = null;
   private DatagramPacket recvDatagram = null;

   @Override
   protected void setUp() throws Exception {
       super.setUp();
       // open a multicast socket
       socket = new MulticastSocket(PORT);
       socket.joinGroup(InetAddress.getByName(ADDRESS));
       recvData = new byte[100];
       recvDatagram = new DatagramPacket(recvData, recvData.length);
   }

   @Override
   protected void tearDown() throws Exception {
       if (socket != null) socket.close();
       super.tearDown();
   }

   private void sendMessage(String message) throws IOException {
       // send the datagram
       byte[] sendData = message.getBytes();
       DatagramPacket sendDatagram = new DatagramPacket(sendData, 0,
sendData.length,
               new InetSocketAddress(InetAddress.getByName(ADDRESS), PORT));
       socket.send(sendDatagram);
   }

   private String receiveMessage() throws IOException {
       // receive the datagram
       socket.setSoTimeout(5000);           // prevent eternal block
in socket.receive()
       socket.receive(recvDatagram);
       String recvMessage = new String(recvData, 0, recvDatagram.getLength());
       return recvMessage;
   }

   public void testReceive() {
       String message = "Hello, world!";
       String longerMessage = message + " again.";

       try {
           sendMessage(message);
           assertEquals(message, receiveMessage());

           sendMessage(longerMessage);
           assertEquals(longerMessage, receiveMessage());
       } catch (IOException e) {
           //ignore
       }
   }
}
Result: RI pass, but Harmony fails.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message