harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mikhail Markov (JIRA)" <j...@apache.org>
Subject [jira] Updated: (HARMONY-2276) [classlib][net]DatagramPacket truncate packet length different than RI
Date Thu, 28 Dec 2006 20:42:23 GMT
     [ http://issues.apache.org/jira/browse/HARMONY-2276?page=all ]

Mikhail Markov updated HARMONY-2276:
------------------------------------

    Attachment: H-2276.patch

Hi, Tim, Leo!

1) I've checked patch from Leo - it really works :-).
When i applied it and recompile 'luni' module without full cleanup - i've also got the same
message as you, but after full classlib cleanup and rebuilding all the test passed.

2) I've slightly modified the patch from Leo to avoid getting java field from native.
Could you please take a look if it makes sense? Thanks!

> [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
>         Assigned To: Tim Ellison
>         Attachments: H-2276.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.
-
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