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