1c320b4381faed584a33ed69f53076dd32193144dElliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more 2c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * contributor license agreements. See the NOTICE file distributed with 3c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * this work for additional information regarding copyright ownership. 4c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 5c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * (the "License"); you may not use this file except in compliance with 6c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * the License. You may obtain a copy of the License at 7c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * 8c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * 10c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * Unless required by applicable law or agreed to in writing, software 11c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * See the License for the specific language governing permissions and 14c320b4381faed584a33ed69f53076dd32193144dElliott Hughes * limitations under the License. 15c320b4381faed584a33ed69f53076dd32193144dElliott Hughes */ 16c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 17c320b4381faed584a33ed69f53076dd32193144dElliott Hughespackage libcore.java.net; 18c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 19c320b4381faed584a33ed69f53076dd32193144dElliott Hughesimport java.net.InetAddress; 20c320b4381faed584a33ed69f53076dd32193144dElliott Hughesimport java.net.InetSocketAddress; 21c320b4381faed584a33ed69f53076dd32193144dElliott Hughesimport junit.framework.TestCase; 22c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 23c320b4381faed584a33ed69f53076dd32193144dElliott Hughespublic class InetSocketAddressTest extends TestCase { 24c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_ConstructorLjava_lang_StringI() throws Exception { 25c320b4381faed584a33ed69f53076dd32193144dElliott Hughes try { 26c320b4381faed584a33ed69f53076dd32193144dElliott Hughes new InetSocketAddress("127.0.0.1", -1); 27c320b4381faed584a33ed69f53076dd32193144dElliott Hughes fail(); 28c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } catch (IllegalArgumentException expected) { 29c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 30c320b4381faed584a33ed69f53076dd32193144dElliott Hughes try { 31c320b4381faed584a33ed69f53076dd32193144dElliott Hughes new InetSocketAddress("127.0.0.1", 65536); 32c320b4381faed584a33ed69f53076dd32193144dElliott Hughes fail(); 33c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } catch (IllegalArgumentException expected) { 34c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 35c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 36c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 37c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_ConstructorLInetAddressI() throws Exception { 38c320b4381faed584a33ed69f53076dd32193144dElliott Hughes String[] validIPAddresses = { 39c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "::1.2.3.4", 40c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "::", "::", 41c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "1::0", "1::", "::1", 42c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", 43c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:255.255.255.255", 44c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "0:0:0:0:0:0:0:0", "0:0:0:0:0:0:0.0.0.0", 45c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "127.0.0.1", "localhost", "42.42.42.42", "0.0.0.0" 46c320b4381faed584a33ed69f53076dd32193144dElliott Hughes }; 47c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 48c320b4381faed584a33ed69f53076dd32193144dElliott Hughes String[] results = { 49c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "0:0:0:0:0:0:102:304", 50c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "0:0:0:0:0:0:0:0", "0:0:0:0:0:0:0:0", 51c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "1:0:0:0:0:0:0:0", "1:0:0:0:0:0:0:0", "0:0:0:0:0:0:0:1", 52c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 53c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 54c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "0:0:0:0:0:0:0:0", "0:0:0:0:0:0:0:0", 55c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "localhost", "localhost", "42.42.42.42", "0.0.0.0" 56c320b4381faed584a33ed69f53076dd32193144dElliott Hughes }; 57c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 58c320b4381faed584a33ed69f53076dd32193144dElliott Hughes for (int i = 0; i < validIPAddresses.length; i++) { 59c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetAddress ia = InetAddress.getByName(validIPAddresses[i]); 60c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa = new InetSocketAddress(ia, 80); 61c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals(80,isa.getPort()); 62c320b4381faed584a33ed69f53076dd32193144dElliott Hughes //assertEquals(results[i], isa.getHostName()); 63c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 64c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 65c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa = new InetSocketAddress((InetAddress)null, 80); 66c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals("0.0.0.0", isa.getHostName()); 67c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 68c320b4381faed584a33ed69f53076dd32193144dElliott Hughes try { 69c320b4381faed584a33ed69f53076dd32193144dElliott Hughes new InetSocketAddress(InetAddress.getByName("localhost"), 65536); 70c320b4381faed584a33ed69f53076dd32193144dElliott Hughes fail(); 71c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } catch(IllegalArgumentException expected) { 72c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 73c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 74c320b4381faed584a33ed69f53076dd32193144dElliott Hughes try { 75c320b4381faed584a33ed69f53076dd32193144dElliott Hughes new InetSocketAddress(InetAddress.getByName("localhost"), -1); 76c320b4381faed584a33ed69f53076dd32193144dElliott Hughes fail(); 77c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } catch (IllegalArgumentException expected) { 78c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 79c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 80c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 81c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_ConstructorI() { 82c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa = new InetSocketAddress(65535); 83c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals("0.0.0.0", isa.getHostName()); 84c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals(65535, isa.getPort()); 85c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 86c320b4381faed584a33ed69f53076dd32193144dElliott Hughes try { 87c320b4381faed584a33ed69f53076dd32193144dElliott Hughes new InetSocketAddress(-1); 88c320b4381faed584a33ed69f53076dd32193144dElliott Hughes fail(); 89c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } catch (IllegalArgumentException expected) { 90c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 91c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 92c320b4381faed584a33ed69f53076dd32193144dElliott Hughes try { 93c320b4381faed584a33ed69f53076dd32193144dElliott Hughes new InetSocketAddress(65536); 94c320b4381faed584a33ed69f53076dd32193144dElliott Hughes fail(); 95c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } catch (IllegalArgumentException expected) { 96c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 97c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 98c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 99c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_equals() throws Exception { 100c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa1 = new InetSocketAddress(1); 101c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa2 = new InetSocketAddress(2); 102c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertFalse(isa1.equals(isa2)); 103c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa3 = new InetSocketAddress(1); 104c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertTrue(isa1.equals(isa3)); 105c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 106c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetAddress localhost = InetAddress.getByName("localhost"); 107c320b4381faed584a33ed69f53076dd32193144dElliott Hughes isa1 = new InetSocketAddress(localhost.getHostName(), 80); 108c320b4381faed584a33ed69f53076dd32193144dElliott Hughes isa2 = new InetSocketAddress(localhost.getHostAddress(), 80); 109c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertTrue(isa1.equals(isa2)); 110c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 111c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 112c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_getAddress() throws Exception { 113c320b4381faed584a33ed69f53076dd32193144dElliott Hughes String[] validIPAddresses = { 114c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "::1.2.3.4", "::", "::", "1::0", "1::", "::1", 115c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF", 116c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:255.255.255.255", 117c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "0:0:0:0:0:0:0:0", "0:0:0:0:0:0:0.0.0.0", 118c320b4381faed584a33ed69f53076dd32193144dElliott Hughes "127.0.0.1", "localhost", "42.42.42.42", "0.0.0.0" 119c320b4381faed584a33ed69f53076dd32193144dElliott Hughes }; 120c320b4381faed584a33ed69f53076dd32193144dElliott Hughes for (int i = 0; i < validIPAddresses.length; i++) { 121c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetAddress ia = InetAddress.getByName(validIPAddresses[i]); 122c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa = new InetSocketAddress(ia, 0); 123c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals(ia, isa.getAddress()); 124c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 125c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa = new InetSocketAddress((InetAddress) null, 0); 126c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertNotNull(isa.getAddress()); 127c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 128c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 129c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_hashCode() throws Exception { 130c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetAddress localhost = InetAddress.getByName("localhost"); 131c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa1 = new InetSocketAddress(localhost.getHostName(), 8080); 132c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa2 = new InetSocketAddress(localhost.getHostAddress(), 8080); 133c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertTrue(isa1.hashCode() == isa2.hashCode()); 134c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 135c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa3 = new InetSocketAddress("0.0.0.0", 8080); 136c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertFalse(isa1.hashCode() == isa3.hashCode()); 137c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 138c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 139c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_isUnresolved() { 140c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress isa1 = new InetSocketAddress("localhost", 80); 141c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertFalse(isa1.isUnresolved()); 142c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 143c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress sockAddr = new InetSocketAddress("unknown.host", 1000); 144c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertTrue(sockAddr.isUnresolved()); 145c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 146c320b4381faed584a33ed69f53076dd32193144dElliott Hughes 147c320b4381faed584a33ed69f53076dd32193144dElliott Hughes public void test_getHostString() throws Exception { 148c320b4381faed584a33ed69f53076dd32193144dElliott Hughes // When we have a hostname, we'll get it back because that doesn't cost a DNS lookup... 149c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress hasHostname = InetSocketAddress.createUnresolved("some host", 1234); 150c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals("some host", hasHostname.getHostString()); 151c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals("some host", hasHostname.getHostName()); 152c320b4381faed584a33ed69f53076dd32193144dElliott Hughes // When we don't have a hostname, whether or not we do the reverse lookup is the difference 153c320b4381faed584a33ed69f53076dd32193144dElliott Hughes // between getHostString and getHostName... 154c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetAddress address = InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }); 155c320b4381faed584a33ed69f53076dd32193144dElliott Hughes InetSocketAddress noHostname = new InetSocketAddress(address, 1234); 156c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals("127.0.0.1", noHostname.getHostString()); 157c320b4381faed584a33ed69f53076dd32193144dElliott Hughes assertEquals("localhost", noHostname.getHostName()); 158c320b4381faed584a33ed69f53076dd32193144dElliott Hughes } 159c320b4381faed584a33ed69f53076dd32193144dElliott Hughes} 160