Home | History | Annotate | Download | only in net
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.net;
     18 
     19 import static android.test.MoreAsserts.assertNotEqual;
     20 
     21 import android.net.LocalServerSocket;
     22 import android.net.LocalSocket;
     23 import android.net.LocalSocketAddress;
     24 import android.net.Network;
     25 import android.test.suitebuilder.annotation.SmallTest;
     26 
     27 import java.io.File;
     28 import java.io.FileDescriptor;
     29 import java.io.FileInputStream;
     30 import java.io.IOException;
     31 import java.net.DatagramSocket;
     32 import java.net.InetAddress;
     33 import java.net.Inet6Address;
     34 import java.net.SocketException;
     35 
     36 import junit.framework.TestCase;
     37 
     38 public class NetworkTest extends TestCase {
     39     final Network mNetwork = new Network(99);
     40 
     41     @SmallTest
     42     public void testBindSocketOfInvalidFdThrows() throws Exception {
     43 
     44         final FileDescriptor fd = new FileDescriptor();
     45         assertFalse(fd.valid());
     46 
     47         try {
     48             mNetwork.bindSocket(fd);
     49             fail("SocketException not thrown");
     50         } catch (SocketException expected) {}
     51     }
     52 
     53     @SmallTest
     54     public void testBindSocketOfNonSocketFdThrows() throws Exception {
     55         final File devNull = new File("/dev/null");
     56         assertTrue(devNull.canRead());
     57 
     58         final FileInputStream fis = new FileInputStream(devNull);
     59         assertTrue(null != fis.getFD());
     60         assertTrue(fis.getFD().valid());
     61 
     62         try {
     63             mNetwork.bindSocket(fis.getFD());
     64             fail("SocketException not thrown");
     65         } catch (SocketException expected) {}
     66     }
     67 
     68     @SmallTest
     69     public void testBindSocketOfConnectedDatagramSocketThrows() throws Exception {
     70         final DatagramSocket mDgramSocket = new DatagramSocket(0, (InetAddress) Inet6Address.ANY);
     71         mDgramSocket.connect((InetAddress) Inet6Address.LOOPBACK, 53);
     72         assertTrue(mDgramSocket.isConnected());
     73 
     74         try {
     75             mNetwork.bindSocket(mDgramSocket);
     76             fail("SocketException not thrown");
     77         } catch (SocketException expected) {}
     78     }
     79 
     80     @SmallTest
     81     public void testBindSocketOfLocalSocketThrows() throws Exception {
     82         final LocalSocket mLocalClient = new LocalSocket();
     83         mLocalClient.bind(new LocalSocketAddress("testClient"));
     84         assertTrue(mLocalClient.getFileDescriptor().valid());
     85 
     86         try {
     87             mNetwork.bindSocket(mLocalClient.getFileDescriptor());
     88             fail("SocketException not thrown");
     89         } catch (SocketException expected) {}
     90 
     91         final LocalServerSocket mLocalServer = new LocalServerSocket("testServer");
     92         mLocalClient.connect(mLocalServer.getLocalSocketAddress());
     93         assertTrue(mLocalClient.isConnected());
     94 
     95         try {
     96             mNetwork.bindSocket(mLocalClient.getFileDescriptor());
     97             fail("SocketException not thrown");
     98         } catch (SocketException expected) {}
     99     }
    100 
    101     @SmallTest
    102     public void testZeroIsObviousForDebugging() {
    103         Network zero = new Network(0);
    104         assertEquals(0, zero.hashCode());
    105         assertEquals(0, zero.getNetworkHandle());
    106         assertEquals("0", zero.toString());
    107     }
    108 
    109     @SmallTest
    110     public void testGetNetworkHandle() {
    111         Network one = new Network(1);
    112         Network two = new Network(2);
    113         Network three = new Network(3);
    114 
    115         // None of the hashcodes are zero.
    116         assertNotEqual(0, one.hashCode());
    117         assertNotEqual(0, two.hashCode());
    118         assertNotEqual(0, three.hashCode());
    119 
    120         // All the hashcodes are distinct.
    121         assertNotEqual(one.hashCode(), two.hashCode());
    122         assertNotEqual(one.hashCode(), three.hashCode());
    123         assertNotEqual(two.hashCode(), three.hashCode());
    124 
    125         // None of the handles are zero.
    126         assertNotEqual(0, one.getNetworkHandle());
    127         assertNotEqual(0, two.getNetworkHandle());
    128         assertNotEqual(0, three.getNetworkHandle());
    129 
    130         // All the handles are distinct.
    131         assertNotEqual(one.getNetworkHandle(), two.getNetworkHandle());
    132         assertNotEqual(one.getNetworkHandle(), three.getNetworkHandle());
    133         assertNotEqual(two.getNetworkHandle(), three.getNetworkHandle());
    134 
    135         // The handles are not equal to the hashcodes.
    136         assertNotEqual(one.hashCode(), one.getNetworkHandle());
    137         assertNotEqual(two.hashCode(), two.getNetworkHandle());
    138         assertNotEqual(three.hashCode(), three.getNetworkHandle());
    139 
    140         // Adjust as necessary to test an implementation's specific constants.
    141         // When running with runtest, "adb logcat -s TestRunner" can be useful.
    142         assertEquals(4311403230L, one.getNetworkHandle());
    143         assertEquals(8606370526L, two.getNetworkHandle());
    144         assertEquals(12901337822L, three.getNetworkHandle());
    145     }
    146 }
    147