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