Home | History | Annotate | Download | only in net
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.tests.java.net;
     19 
     20 import java.io.IOException;
     21 import java.net.DatagramPacket;
     22 import java.net.DatagramSocket;
     23 import java.net.InetAddress;
     24 import java.net.InetSocketAddress;
     25 import java.net.SocketAddress;
     26 
     27 import tests.support.Support_Configuration;
     28 
     29 public class DatagramPacketTest extends junit.framework.TestCase {
     30 
     31     volatile boolean started = false;
     32 
     33     /**
     34      * java.net.DatagramPacket#DatagramPacket(byte[], int)
     35      */
     36     public void test_Constructor$BI() {
     37         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5);
     38         assertEquals("Created incorrect packet", "Hello", new String(dp
     39                 .getData(), 0, dp.getData().length));
     40         assertEquals("Wrong length", 5, dp.getLength());
     41 
     42         // Regression for HARMONY-890
     43         dp = new DatagramPacket(new byte[942], 4);
     44         assertEquals(-1, dp.getPort());
     45         try {
     46             dp.getSocketAddress();
     47             fail("Should throw IllegalArgumentException");
     48         } catch (IllegalArgumentException e) {
     49             // expected
     50         }
     51     }
     52 
     53     /**
     54      * java.net.DatagramPacket#DatagramPacket(byte[], int, int)
     55      */
     56     public void test_Constructor$BII() {
     57         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 2, 3);
     58         assertEquals("Created incorrect packet", "Hello", new String(dp
     59                 .getData(), 0, dp.getData().length));
     60         assertEquals("Wrong length", 3, dp.getLength());
     61         assertEquals("Wrong offset", 2, dp.getOffset());
     62     }
     63 
     64     /**
     65      * java.net.DatagramPacket#DatagramPacket(byte[], int, int,
     66      *java.net.InetAddress, int)
     67      */
     68     public void test_Constructor$BIILjava_net_InetAddressI() throws IOException {
     69         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 2, 3,
     70                 InetAddress.getLocalHost(), 0);
     71         assertEquals("Wrong host", InetAddress.getLocalHost(), dp.getAddress());
     72         assertEquals("Wrong port", 0, dp.getPort());
     73         assertEquals("Wrong length", 3, dp.getLength());
     74         assertEquals("Wrong offset", 2, dp.getOffset());
     75     }
     76 
     77     /**
     78      * java.net.DatagramPacket#DatagramPacket(byte[], int,
     79      *java.net.InetAddress, int)
     80      */
     81     public void test_Constructor$BILjava_net_InetAddressI() throws IOException {
     82         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5,
     83                 InetAddress.getLocalHost(), 0);
     84         assertEquals("Wrong address", InetAddress.getLocalHost(), dp
     85                 .getAddress());
     86         assertEquals("Wrong port", 0, dp.getPort());
     87         assertEquals("Wrong length", 5, dp.getLength());
     88     }
     89 
     90     /**
     91      * java.net.DatagramPacket#getAddress()
     92      */
     93     public void test_getAddress() throws IOException {
     94         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5,
     95                 InetAddress.getLocalHost(), 0);
     96         assertEquals("Incorrect address returned", InetAddress.getLocalHost(),
     97                 dp.getAddress());
     98     }
     99 
    100     /**
    101      * java.net.DatagramPacket#getData()
    102      */
    103     public void test_getData() {
    104         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5);
    105         assertEquals("Incorrect length returned", "Hello", new String(dp
    106                 .getData(), 0, dp.getData().length));
    107     }
    108 
    109     /**
    110      * java.net.DatagramPacket#getLength()
    111      */
    112     public void test_getLength() {
    113         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5);
    114         assertEquals("Incorrect length returned", 5, dp.getLength());
    115     }
    116 
    117     /**
    118      * java.net.DatagramPacket#getOffset()
    119      */
    120     public void test_getOffset() {
    121         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 3, 2);
    122         assertEquals("Incorrect length returned", 3, dp.getOffset());
    123     }
    124 
    125     /**
    126      * java.net.DatagramPacket#getPort()
    127      */
    128     public void test_getPort() throws IOException {
    129         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5,
    130                 InetAddress.getLocalHost(), 1000);
    131         assertEquals("Incorrect port returned", 1000, dp.getPort());
    132 
    133         final InetAddress localhost = InetAddress.getLocalHost();
    134         DatagramSocket socket = new DatagramSocket(0, localhost);
    135         final int port = socket.getLocalPort();
    136 
    137         socket.setSoTimeout(3000);
    138         DatagramPacket packet = new DatagramPacket(new byte[] { 1, 2, 3, 4, 5,
    139                 6 }, 6, localhost, port);
    140         socket.send(packet);
    141         socket.receive(packet);
    142         socket.close();
    143         assertTrue("datagram received wrong port: " + packet.getPort(), packet
    144                 .getPort() == port);
    145     }
    146 
    147     /**
    148      * java.net.DatagramPacket#setAddress(java.net.InetAddress)
    149      */
    150     public void test_setAddressLjava_net_InetAddress() throws IOException {
    151         InetAddress ia = InetAddress.getByName("127.0.0.1");
    152         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5,
    153                 InetAddress.getLocalHost(), 0);
    154         dp.setAddress(ia);
    155         assertEquals("Incorrect address returned", ia, dp.getAddress());
    156     }
    157 
    158     /**
    159      * java.net.DatagramPacket#setData(byte[], int, int)
    160      */
    161     public void test_setData$BII() {
    162         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5);
    163         dp.setData("Wagga Wagga".getBytes(), 2, 3);
    164         assertEquals("Incorrect data set", "Wagga Wagga", new String(dp
    165                 .getData()));
    166     }
    167 
    168     /**
    169      * java.net.DatagramPacket#setData(byte[])
    170      */
    171     public void test_setData$B() {
    172         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5);
    173         dp.setData("Ralph".getBytes());
    174         assertEquals("Incorrect data set", "Ralph", new String(dp.getData(), 0,
    175                 dp.getData().length));
    176     }
    177 
    178     /**
    179      * java.net.DatagramPacket#setLength(int)
    180      */
    181     public void test_setLengthI() {
    182         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5);
    183         dp.setLength(1);
    184         assertEquals("Failed to set packet length", 1, dp.getLength());
    185     }
    186 
    187     /**
    188      * java.net.DatagramPacket#setPort(int)
    189      */
    190     public void test_setPortI() throws Exception {
    191         DatagramPacket dp = new DatagramPacket("Hello".getBytes(), 5,
    192                 InetAddress.getLocalHost(), 1000);
    193         dp.setPort(2000);
    194         assertEquals("Port not set", 2000, dp.getPort());
    195     }
    196 
    197     /**
    198      * java.net.DatagramPacket#DatagramPacket(byte[], int,
    199      *java.net.SocketAddress)
    200      */
    201     public void test_Constructor$BILjava_net_SocketAddress() throws IOException {
    202         @SuppressWarnings("serial")
    203         class UnsupportedSocketAddress extends SocketAddress {
    204 
    205             public UnsupportedSocketAddress() {
    206             }
    207         }
    208 
    209         // Unsupported SocketAddress subclass
    210         byte buf[] = new byte[1];
    211         try {
    212             new DatagramPacket(buf, 1, new UnsupportedSocketAddress());
    213             fail("No exception when constructing using unsupported SocketAddress subclass");
    214         } catch (IllegalArgumentException ex) {
    215             // Expected
    216         }
    217 
    218         // Case were we try to pass in null
    219         try {
    220             new DatagramPacket(buf, 1, null);
    221             fail("No exception when constructing address using null");
    222         } catch (IllegalArgumentException ex) {
    223             // Expected
    224         }
    225 
    226         // Now validate we can construct
    227         InetSocketAddress theAddress = new InetSocketAddress(InetAddress
    228                 .getLocalHost(), 2067);
    229         DatagramPacket thePacket = new DatagramPacket(buf, 1, theAddress);
    230         assertEquals("Socket address not set correctly (1)", theAddress,
    231                 thePacket.getSocketAddress());
    232         assertEquals("Socket address not set correctly (2)", theAddress,
    233                 new InetSocketAddress(thePacket.getAddress(), thePacket
    234                         .getPort()));
    235     }
    236 
    237     /**
    238      * java.net.DatagramPacket#DatagramPacket(byte[], int, int,
    239      *java.net.SocketAddress)
    240      */
    241     public void test_Constructor$BIILjava_net_SocketAddress()
    242             throws IOException {
    243         @SuppressWarnings("serial")
    244         class UnsupportedSocketAddress extends SocketAddress {
    245 
    246             public UnsupportedSocketAddress() {
    247             }
    248         }
    249 
    250         // Unsupported SocketAddress subclass
    251         byte buf[] = new byte[2];
    252         try {
    253             new DatagramPacket(buf, 1, 1, new UnsupportedSocketAddress());
    254             fail("No exception when constructing using unsupported SocketAddress subclass");
    255         } catch (IllegalArgumentException ex) {
    256             // Expected
    257         }
    258 
    259         // Case were we try to pass in null
    260         try {
    261             new DatagramPacket(buf, 1, 1, null);
    262             fail("No exception when constructing address using null");
    263         } catch (IllegalArgumentException ex) {
    264             // Expected
    265         }
    266 
    267         // now validate we can construct
    268         InetSocketAddress theAddress = new InetSocketAddress(InetAddress
    269                 .getLocalHost(), 2067);
    270         DatagramPacket thePacket = new DatagramPacket(buf, 1, 1, theAddress);
    271         assertEquals("Socket address not set correctly (1)", theAddress,
    272                 thePacket.getSocketAddress());
    273         assertEquals("Socket address not set correctly (2)", theAddress,
    274                 new InetSocketAddress(thePacket.getAddress(), thePacket
    275                         .getPort()));
    276         assertEquals("Offset not set correctly", 1, thePacket.getOffset());
    277     }
    278 
    279     /**
    280      * java.net.DatagramPacket#getSocketAddress()
    281      */
    282     public void test_getSocketAddress() throws IOException {
    283         byte buf[] = new byte[1];
    284         DatagramPacket thePacket = new DatagramPacket(buf, 1);
    285 
    286         // Validate get returns the value we set
    287         InetSocketAddress theAddress = new InetSocketAddress(InetAddress
    288                 .getLocalHost(), 0);
    289         thePacket = new DatagramPacket(buf, 1);
    290         thePacket.setSocketAddress(theAddress);
    291         assertEquals("Socket address not set correctly (1)", theAddress,
    292                 thePacket.getSocketAddress());
    293     }
    294 
    295     /**
    296      * java.net.DatagramPacket#setSocketAddress(java.net.SocketAddress)
    297      */
    298     public void test_setSocketAddressLjava_net_SocketAddress()
    299             throws IOException {
    300 
    301         @SuppressWarnings("serial")
    302         class UnsupportedSocketAddress extends SocketAddress {
    303 
    304             public UnsupportedSocketAddress() {
    305             }
    306         }
    307 
    308         // Unsupported SocketAddress subclass
    309         byte buf[] = new byte[1];
    310         DatagramPacket thePacket = new DatagramPacket(buf, 1);
    311         try {
    312             thePacket.setSocketAddress(new UnsupportedSocketAddress());
    313             fail("No exception when setting address using unsupported SocketAddress subclass");
    314         } catch (IllegalArgumentException ex) {
    315             // Expected
    316         }
    317 
    318         // Case were we try to pass in null
    319         thePacket = new DatagramPacket(buf, 1);
    320         try {
    321             thePacket.setSocketAddress(null);
    322             fail("No exception when setting address using null");
    323         } catch (IllegalArgumentException ex) {
    324             // Expected
    325         }
    326 
    327         // Now validate we can set it correctly
    328         InetSocketAddress theAddress = new InetSocketAddress(InetAddress
    329                 .getLocalHost(), 2049);
    330         thePacket = new DatagramPacket(buf, 1);
    331         thePacket.setSocketAddress(theAddress);
    332         assertEquals("Socket address not set correctly (1)", theAddress,
    333                 thePacket.getSocketAddress());
    334         assertEquals("Socket address not set correctly (2)", theAddress,
    335                 new InetSocketAddress(thePacket.getAddress(), thePacket
    336                         .getPort()));
    337     }
    338 }
    339