harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Charles Lee <littlee1...@gmail.com>
Subject Re: [classlib][luni] Confusing DatagramPacketTest
Date Wed, 09 Jun 2010 01:26:13 GMT
It seems the original one transfer packet in two directions, but the new
version only transfer the packet in one way.

On Tue, Jun 8, 2010 at 3:18 PM, Mark Hindess <mark.hindess@googlemail.com>wrote:

>
> I was looking at failing tests on FreeBSD and I spotted the following
> test in DatagramPacketTest.java:
>
>    public void test_getPort() throws IOException {
>        DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5,
>                InetAddress.getLocalHost(), 1000);
>        assertEquals("Incorrect port returned", 1000, dp.getPort());
>
>        final InetAddress localhost = InetAddress.getLocalHost();
>        DatagramSocket socket = new DatagramSocket(0, localhost);
>        final int port = socket.getLocalPort();
>
>        final Object lock = new Object();
>
>        Thread thread = new Thread(new Runnable() {
>            public void run() {
>                DatagramSocket socket = null;
>                try {
>                    socket = new DatagramSocket(0, localhost);
>                    synchronized (lock) {
>                        started = true;
>                        lock.notifyAll();
>                    }
>                    socket.setSoTimeout(3000);
>                    DatagramPacket packet = new DatagramPacket(new
> byte[256],
>                            256);
>                    socket.receive(packet);
>                    socket.send(packet);
>                    socket.close();
>                } catch (IOException e) {
>                    System.out.println("thread exception: " + e);
>                    if (socket != null)
>                        socket.close();
>                }
>            }
>        });
>        thread.start();
>
>        socket.setSoTimeout(3000);
>        DatagramPacket packet = new DatagramPacket(new byte[] { 1, 2, 3, 4,
> 5,
>                6 }, 6, localhost, port);
>        synchronized (lock) {
>            while (!started) {
>                try {
>                    lock.wait();
>                } catch (InterruptedException e) {
>                }
>            }
>        }
>        socket.send(packet);
>        socket.receive(packet);
>        socket.close();
>        assertTrue("datagram received wrong port: " + packet.getPort(),
> packet
>                .getPort() == port);
>    }
>
> Notice that main threads socket is being used to send to itself - not to
> the other socket which is left waiting until timeout for a packet from
> itself that it hasn't sent yet!  I think this can be more simply written
> as:
>
>    public void test_getPort() throws IOException {
>        DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5,
>                InetAddress.getLocalHost(), 1000);
>        assertEquals("Incorrect port returned", 1000, dp.getPort());
>
>        final InetAddress localhost = InetAddress.getLocalHost();
>        DatagramSocket socket = new DatagramSocket(0, localhost);
>        final int port = socket.getLocalPort();
>
>        socket.setSoTimeout(3000);
>        DatagramPacket packet = new DatagramPacket(new byte[] { 1, 2, 3, 4,
> 5,
>                6 }, 6, localhost, port);
>        socket.send(packet);
>        socket.receive(packet);
>        socket.close();
>        assertTrue("datagram received wrong port: " + packet.getPort(),
> packet
>                .getPort() == port);
>    }
>
> Does that make sense or am I missing something?
>
> Sadly they both fail on FreeBSD.
>
> Regards,
>  Mark.
>
>
>


-- 
Yours sincerely,
Charles Lee

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message