blob: 2730b850b2a343abcd17ec29fa4b5af6fd7b8d49 [file] [log] [blame]
/*
* 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()));
}
}