You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Tim Ellison (JIRA)" <ji...@apache.org> on 2007/05/29 12:38:16 UTC

[jira] Assigned: (HARMONY-2276) [classlib][net]DatagramPacket truncate packet length different than RI

     [ https://issues.apache.org/jira/browse/HARMONY-2276?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tim Ellison reassigned HARMONY-2276:
------------------------------------

    Assignee:     (was: Tim Ellison)

> [classlib][net]DatagramPacket truncate packet length different than RI
> ----------------------------------------------------------------------
>
>                 Key: HARMONY-2276
>                 URL: https://issues.apache.org/jira/browse/HARMONY-2276
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>            Reporter: Jimmy, Jing Lv
>         Attachments: H-2276.patch, H-2276_updated_1.patch, harmony-2276-updated.patch, patch-2276.diff
>
>
> 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.
-
You can reply to this email to add a comment to the issue online.