Line 0
Link Here
|
|
|
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.tomcat.util.net; |
19 |
|
20 |
import junit.framework.TestCase; |
21 |
|
22 |
/** |
23 |
* Mostly examples from RFC 5952 |
24 |
*/ |
25 |
public class IPv6UtilsTest extends TestCase { |
26 |
|
27 |
public void testMayBeIPv6Address() { |
28 |
assertFalse(IPv6Utils.mayBeIPv6Address(null)); |
29 |
|
30 |
assertTrue(IPv6Utils.mayBeIPv6Address("::1")); |
31 |
assertTrue(IPv6Utils.mayBeIPv6Address("::")); |
32 |
assertTrue(IPv6Utils.mayBeIPv6Address("2001:db8:0:0:1:0:0:1")); |
33 |
|
34 |
assertFalse(IPv6Utils.mayBeIPv6Address("")); |
35 |
assertFalse(IPv6Utils.mayBeIPv6Address(":1")); |
36 |
assertFalse(IPv6Utils.mayBeIPv6Address("123.123.123.123")); |
37 |
assertFalse(IPv6Utils.mayBeIPv6Address("tomcat.eu.apache.org:443")); |
38 |
} |
39 |
|
40 |
public void testCanonize() { |
41 |
assertNull(IPv6Utils.canonize(null)); |
42 |
assertEquals("", IPv6Utils.canonize("")); |
43 |
|
44 |
// IPv4-safe |
45 |
assertEquals("123.123.123.123", IPv6Utils.canonize("123.123.123.123")); |
46 |
assertEquals("123.1.2.23", IPv6Utils.canonize("123.1.2.23")); |
47 |
|
48 |
// Introductory RFC 5952 examples |
49 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:db8:0:0:1:0:0:1")); |
50 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:0db8:0:0:1:0:0:1")); |
51 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:db8::1:0:0:1")); |
52 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:db8::0:1:0:0:1")); |
53 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:0db8::1:0:0:1")); |
54 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:db8:0:0:1::1")); |
55 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:db8:0000:0:1::1")); |
56 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:DB8:0:0:1::1")); |
57 |
|
58 |
assertEquals("::ffff", IPv6Utils.canonize("0:0:0:0:0:FFFF")); |
59 |
assertEquals("::", IPv6Utils.canonize("0:0:0:0:0:0")); |
60 |
|
61 |
// Strip leading zeros (2.1) |
62 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:0001")); |
63 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:001")); |
64 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:01")); |
65 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1")); |
66 |
|
67 |
// Zero compression (2.2) |
68 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:0:1", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd::1")); |
69 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:0:1", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:0:1")); |
70 |
|
71 |
assertEquals("2001:db8::1", IPv6Utils.canonize("2001:db8:0:0:0::1")); |
72 |
assertEquals("2001:db8::1", IPv6Utils.canonize("2001:db8:0:0::1")); |
73 |
assertEquals("2001:db8::1", IPv6Utils.canonize("2001:db8:0::1")); |
74 |
assertEquals("2001:db8::1", IPv6Utils.canonize("2001:db8::1")); |
75 |
|
76 |
assertEquals("2001:db8::aaaa:0:0:1", IPv6Utils.canonize("2001:db8::aaaa:0:0:1")); |
77 |
assertEquals("2001:db8::aaaa:0:0:1", IPv6Utils.canonize("2001:db8:0:0:aaaa::1")); |
78 |
|
79 |
// Uppercase or lowercase (2.3) |
80 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa")); |
81 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AAAA")); |
82 |
assertEquals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa", IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AaAa")); |
83 |
|
84 |
// Some more zero compression for localhost addresses |
85 |
assertEquals("::1", IPv6Utils.canonize("0:0:0:0:0:0:0:1")); |
86 |
assertEquals("::1", IPv6Utils.canonize("0000:0:0:0:0:0:0:0001")); |
87 |
assertEquals("::1", IPv6Utils.canonize("00:00:0:0:00:00:0:01")); |
88 |
assertEquals("::1", IPv6Utils.canonize("::0001")); |
89 |
assertEquals("::1", IPv6Utils.canonize("::1")); |
90 |
|
91 |
// IPv6 unspecified address |
92 |
assertEquals("::", IPv6Utils.canonize("0:0:0:0:0:0:0:0")); |
93 |
assertEquals("::", IPv6Utils.canonize("0000:0:0:0:0:0:0:0000")); |
94 |
assertEquals("::", IPv6Utils.canonize("00:00:0:0:00:00:0:00")); |
95 |
assertEquals("::", IPv6Utils.canonize("::0000")); |
96 |
assertEquals("::", IPv6Utils.canonize("::0")); |
97 |
assertEquals("::", IPv6Utils.canonize("::")); |
98 |
|
99 |
// Leading zeros (4.1) |
100 |
assertEquals("2001:db8::1", IPv6Utils.canonize("2001:0db8::0001")); |
101 |
|
102 |
// Shorten as much as possible (4.2.1) |
103 |
assertEquals("2001:db8::2:1", IPv6Utils.canonize("2001:db8:0:0:0:0:2:1")); |
104 |
assertEquals("2001:db8::", IPv6Utils.canonize("2001:db8:0:0:0:0:0:0")); |
105 |
|
106 |
// Handling One 16-Bit 0 Field (4.2.2) |
107 |
assertEquals("2001:db8:0:1:1:1:1:1", IPv6Utils.canonize("2001:db8:0:1:1:1:1:1")); |
108 |
assertEquals("2001:db8:0:1:1:1:1:1", IPv6Utils.canonize("2001:db8::1:1:1:1:1")); |
109 |
|
110 |
// Choice in Placement of "::" (4.2.3) |
111 |
assertEquals("2001:0:0:1::1", IPv6Utils.canonize("2001:0:0:1:0:0:0:1")); |
112 |
assertEquals("2001:db8::1:0:0:1", IPv6Utils.canonize("2001:db8:0:0:1:0:0:1")); |
113 |
|
114 |
// IPv4 inside IPv6 |
115 |
assertEquals("::ffff:192.0.2.1", IPv6Utils.canonize("::ffff:192.0.2.1")); |
116 |
assertEquals("::ffff:192.0.2.1", IPv6Utils.canonize("0:0:0:0:0:ffff:192.0.2.1")); |
117 |
assertEquals("::192.0.2.1", IPv6Utils.canonize("::192.0.2.1")); |
118 |
assertEquals("::192.0.2.1", IPv6Utils.canonize("0:0:0:0:0:0:192.0.2.1")); |
119 |
|
120 |
// Zone ID |
121 |
assertEquals("fe80::f0f0:c0c0:1919:1234%4", IPv6Utils.canonize("fe80::f0f0:c0c0:1919:1234%4")); |
122 |
assertEquals("fe80::f0f0:c0c0:1919:1234%4", IPv6Utils.canonize("fe80:0:0:0:f0f0:c0c0:1919:1234%4")); |
123 |
|
124 |
assertEquals("::%4", IPv6Utils.canonize("::%4")); |
125 |
assertEquals("::%4", IPv6Utils.canonize("::0%4")); |
126 |
assertEquals("::%4", IPv6Utils.canonize("0:0::0%4")); |
127 |
assertEquals("::%4", IPv6Utils.canonize("0:0:0:0:0:0:0:0%4")); |
128 |
|
129 |
assertEquals("::1%4", IPv6Utils.canonize("::1%4")); |
130 |
assertEquals("::1%4", IPv6Utils.canonize("0:0::1%4")); |
131 |
assertEquals("::1%4", IPv6Utils.canonize("0:0:0:0:0:0:0:1%4")); |
132 |
|
133 |
assertEquals("::1%eth0", IPv6Utils.canonize("::1%eth0")); |
134 |
assertEquals("::1%eth0", IPv6Utils.canonize("0:0::1%eth0")); |
135 |
assertEquals("::1%eth0", IPv6Utils.canonize("0:0:0:0:0:0:0:1%eth0")); |
136 |
|
137 |
// Hostname safety |
138 |
assertEquals("www.apache.org", IPv6Utils.canonize("www.apache.org")); |
139 |
assertEquals("ipv6.google.com", IPv6Utils.canonize("ipv6.google.com")); |
140 |
|
141 |
} |
142 |
} |