/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.harmony.tests.java.net; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import tests.support.Support_Configuration; public class DatagramPacketTest extends junit.framework.TestCase { volatile boolean started = false; /** * java.net.DatagramPacket#DatagramPacket(byte[], int) */ public void test_Constructor$BI() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5); assertEquals("Created incorrect packet", "Hello", new String(dp .getData(), 0, dp.getData().length)); assertEquals("Wrong length", 5, dp.getLength()); // Regression for HARMONY-890 dp = new DatagramPacket(new byte[942], 4); assertEquals(-1, dp.getPort()); try { dp.getSocketAddress(); fail("Should throw IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } } /** * java.net.DatagramPacket#DatagramPacket(byte[], int, int) */ public void test_Constructor$BII() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 2, 3); assertEquals("Created incorrect packet", "Hello", new String(dp .getData(), 0, dp.getData().length)); assertEquals("Wrong length", 3, dp.getLength()); assertEquals("Wrong offset", 2, dp.getOffset()); } /** * java.net.DatagramPacket#DatagramPacket(byte[], int, int, *java.net.InetAddress, int) */ public void test_Constructor$BIILjava_net_InetAddressI() throws IOException { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 2, 3, InetAddress.getLocalHost(), 0); assertEquals("Wrong host", InetAddress.getLocalHost(), dp.getAddress()); assertEquals("Wrong port", 0, dp.getPort()); assertEquals("Wrong length", 3, dp.getLength()); assertEquals("Wrong offset", 2, dp.getOffset()); } /** * java.net.DatagramPacket#DatagramPacket(byte[], int, *java.net.InetAddress, int) */ public void test_Constructor$BILjava_net_InetAddressI() throws IOException { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5, InetAddress.getLocalHost(), 0); assertEquals("Wrong address", InetAddress.getLocalHost(), dp .getAddress()); assertEquals("Wrong port", 0, dp.getPort()); assertEquals("Wrong length", 5, dp.getLength()); } /** * java.net.DatagramPacket#getAddress() */ public void test_getAddress() throws IOException { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5, InetAddress.getLocalHost(), 0); assertEquals("Incorrect address returned", InetAddress.getLocalHost(), dp.getAddress()); } /** * java.net.DatagramPacket#getData() */ public void test_getData() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5); assertEquals("Incorrect length returned", "Hello", new String(dp .getData(), 0, dp.getData().length)); } /** * java.net.DatagramPacket#getLength() */ public void test_getLength() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5); assertEquals("Incorrect length returned", 5, dp.getLength()); } /** * java.net.DatagramPacket#getOffset() */ public void test_getOffset() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 3, 2); assertEquals("Incorrect length returned", 3, dp.getOffset()); } /** * java.net.DatagramPacket#getPort() */ 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); } /** * java.net.DatagramPacket#setAddress(java.net.InetAddress) */ public void test_setAddressLjava_net_InetAddress() throws IOException { InetAddress ia = InetAddress.getByName("127.0.0.1"); DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5, InetAddress.getLocalHost(), 0); dp.setAddress(ia); assertEquals("Incorrect address returned", ia, dp.getAddress()); } /** * java.net.DatagramPacket#setData(byte[], int, int) */ public void test_setData$BII() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5); dp.setData("Wagga Wagga".getBytes(), 2, 3); assertEquals("Incorrect data set", "Wagga Wagga", new String(dp .getData())); } /** * java.net.DatagramPacket#setData(byte[]) */ public void test_setData$B() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5); dp.setData("Ralph".getBytes()); assertEquals("Incorrect data set", "Ralph", new String(dp.getData(), 0, dp.getData().length)); } /** * java.net.DatagramPacket#setLength(int) */ public void test_setLengthI() { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5); dp.setLength(1); assertEquals("Failed to set packet length", 1, dp.getLength()); } /** * java.net.DatagramPacket#setPort(int) */ public void test_setPortI() throws Exception { DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5, InetAddress.getLocalHost(), 1000); dp.setPort(2000); assertEquals("Port not set", 2000, dp.getPort()); } /** * java.net.DatagramPacket#DatagramPacket(byte[], int, *java.net.SocketAddress) */ public void test_Constructor$BILjava_net_SocketAddress() throws IOException { @SuppressWarnings("serial") class UnsupportedSocketAddress extends SocketAddress { public UnsupportedSocketAddress() { } } // Unsupported SocketAddress subclass byte buf[] = new byte[1]; try { new DatagramPacket(buf, 1, new UnsupportedSocketAddress()); fail("No exception when constructing using unsupported SocketAddress subclass"); } catch (IllegalArgumentException ex) { // Expected } // Case were we try to pass in null try { new DatagramPacket(buf, 1, null); fail("No exception when constructing address using null"); } catch (IllegalArgumentException ex) { // Expected } // Now validate we can construct InetSocketAddress theAddress = new InetSocketAddress(InetAddress .getLocalHost(), 2067); DatagramPacket thePacket = new DatagramPacket(buf, 1, theAddress); assertEquals("Socket address not set correctly (1)", theAddress, thePacket.getSocketAddress()); assertEquals("Socket address not set correctly (2)", theAddress, new InetSocketAddress(thePacket.getAddress(), thePacket .getPort())); } /** * java.net.DatagramPacket#DatagramPacket(byte[], int, int, *java.net.SocketAddress) */ public void test_Constructor$BIILjava_net_SocketAddress() throws IOException { @SuppressWarnings("serial") class UnsupportedSocketAddress extends SocketAddress { public UnsupportedSocketAddress() { } } // Unsupported SocketAddress subclass byte buf[] = new byte[2]; try { new DatagramPacket(buf, 1, 1, new UnsupportedSocketAddress()); fail("No exception when constructing using unsupported SocketAddress subclass"); } catch (IllegalArgumentException ex) { // Expected } // Case were we try to pass in null try { new DatagramPacket(buf, 1, 1, null); fail("No exception when constructing address using null"); } catch (IllegalArgumentException ex) { // Expected } // now validate we can construct InetSocketAddress theAddress = new InetSocketAddress(InetAddress .getLocalHost(), 2067); DatagramPacket thePacket = new DatagramPacket(buf, 1, 1, theAddress); assertEquals("Socket address not set correctly (1)", theAddress, thePacket.getSocketAddress()); assertEquals("Socket address not set correctly (2)", theAddress, new InetSocketAddress(thePacket.getAddress(), thePacket .getPort())); assertEquals("Offset not set correctly", 1, thePacket.getOffset()); } /** * java.net.DatagramPacket#getSocketAddress() */ public void test_getSocketAddress() throws IOException { byte buf[] = new byte[1]; DatagramPacket thePacket = new DatagramPacket(buf, 1); // Validate get returns the value we set InetSocketAddress theAddress = new InetSocketAddress(InetAddress .getLocalHost(), 0); thePacket = new DatagramPacket(buf, 1); thePacket.setSocketAddress(theAddress); assertEquals("Socket address not set correctly (1)", theAddress, thePacket.getSocketAddress()); } /** * java.net.DatagramPacket#setSocketAddress(java.net.SocketAddress) */ public void test_setSocketAddressLjava_net_SocketAddress() throws IOException { @SuppressWarnings("serial") class UnsupportedSocketAddress extends SocketAddress { public UnsupportedSocketAddress() { } } // Unsupported SocketAddress subclass byte buf[] = new byte[1]; DatagramPacket thePacket = new DatagramPacket(buf, 1); try { thePacket.setSocketAddress(new UnsupportedSocketAddress()); fail("No exception when setting address using unsupported SocketAddress subclass"); } catch (IllegalArgumentException ex) { // Expected } // Case were we try to pass in null thePacket = new DatagramPacket(buf, 1); try { thePacket.setSocketAddress(null); fail("No exception when setting address using null"); } catch (IllegalArgumentException ex) { // Expected } // Now validate we can set it correctly InetSocketAddress theAddress = new InetSocketAddress(InetAddress .getLocalHost(), 2049); thePacket = new DatagramPacket(buf, 1); thePacket.setSocketAddress(theAddress); assertEquals("Socket address not set correctly (1)", theAddress, thePacket.getSocketAddress()); assertEquals("Socket address not set correctly (2)", theAddress, new InetSocketAddress(thePacket.getAddress(), thePacket .getPort())); } }