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 testCanonize() { |
28 |
assertTrue(IPv6Utils.canonize(null) == null); |
29 |
assertTrue(IPv6Utils.canonize("").equals("")); |
30 |
|
31 |
// IPv4-safe |
32 |
assertTrue(IPv6Utils.canonize("123.123.123.123").equals( |
33 |
"123.123.123.123")); |
34 |
assertTrue(IPv6Utils.canonize("123.1.2.23").equals("123.1.2.23")); |
35 |
|
36 |
// Introductory RFC 5952 examples |
37 |
assertTrue(IPv6Utils.canonize("2001:db8:0:0:1:0:0:1").equals( |
38 |
"2001:db8::1:0:0:1")); |
39 |
assertTrue(IPv6Utils.canonize("2001:0db8:0:0:1:0:0:1").equals( |
40 |
"2001:db8::1:0:0:1")); |
41 |
assertTrue(IPv6Utils.canonize("2001:db8::1:0:0:1").equals( |
42 |
"2001:db8::1:0:0:1")); |
43 |
assertTrue(IPv6Utils.canonize("2001:db8::0:1:0:0:1").equals( |
44 |
"2001:db8::1:0:0:1")); |
45 |
assertTrue(IPv6Utils.canonize("2001:0db8::1:0:0:1").equals( |
46 |
"2001:db8::1:0:0:1")); |
47 |
assertTrue(IPv6Utils.canonize("2001:db8:0:0:1::1").equals( |
48 |
"2001:db8::1:0:0:1")); |
49 |
assertTrue(IPv6Utils.canonize("2001:db8:0000:0:1::1").equals( |
50 |
"2001:db8::1:0:0:1")); |
51 |
assertTrue(IPv6Utils.canonize("2001:DB8:0:0:1::1").equals( |
52 |
"2001:db8::1:0:0:1")); |
53 |
|
54 |
// Strip leading zeros (2.1) |
55 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:0001") |
56 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1")); |
57 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:001") |
58 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1")); |
59 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:01") |
60 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1")); |
61 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1") |
62 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1")); |
63 |
|
64 |
// Zero compression (2.2) |
65 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd::1") |
66 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:0:1")); |
67 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:0:1") |
68 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:0:1")); |
69 |
|
70 |
assertTrue(IPv6Utils.canonize("2001:db8:0:0:0::1") |
71 |
.equals("2001:db8::1")); |
72 |
assertTrue(IPv6Utils.canonize("2001:db8:0:0::1").equals("2001:db8::1")); |
73 |
assertTrue(IPv6Utils.canonize("2001:db8:0::1").equals("2001:db8::1")); |
74 |
assertTrue(IPv6Utils.canonize("2001:db8::1").equals("2001:db8::1")); |
75 |
|
76 |
assertTrue(IPv6Utils.canonize("2001:db8::aaaa:0:0:1").equals( |
77 |
"2001:db8::aaaa:0:0:1")); |
78 |
assertTrue(IPv6Utils.canonize("2001:db8:0:0:aaaa::1").equals( |
79 |
"2001:db8::aaaa:0:0:1")); |
80 |
|
81 |
// Uppercase or lowercase (2.3) |
82 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa") |
83 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa")); |
84 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AAAA") |
85 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa")); |
86 |
assertTrue(IPv6Utils.canonize("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AaAa") |
87 |
.equals("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa")); |
88 |
|
89 |
// Some more zero compression for localhost addresses |
90 |
assertTrue(IPv6Utils.canonize("0:0:0:0:0:0:0:1").equals("::1")); |
91 |
assertTrue(IPv6Utils.canonize("0000:0:0:0:0:0:0:0001").equals("::1")); |
92 |
assertTrue(IPv6Utils.canonize("00:00:0:0:00:00:0:01").equals("::1")); |
93 |
assertTrue(IPv6Utils.canonize("::0001").equals("::1")); |
94 |
assertTrue(IPv6Utils.canonize("::1").equals("::1")); |
95 |
|
96 |
// Leading zeros (4.1) |
97 |
assertTrue(IPv6Utils.canonize("2001:0db8::0001").equals("2001:db8::1")); |
98 |
|
99 |
// Shorten as much as possible (4.2.1) |
100 |
assertTrue(IPv6Utils.canonize("2001:db8:0:0:0:0:2:1").equals( |
101 |
"2001:db8::2:1")); |
102 |
|
103 |
// Handling One 16-Bit 0 Field (4.2.2) |
104 |
assertTrue(IPv6Utils.canonize("2001:db8:0:1:1:1:1:1").equals( |
105 |
"2001:db8:0:1:1:1:1:1")); |
106 |
assertTrue(IPv6Utils.canonize("2001:db8::1:1:1:1:1").equals( |
107 |
"2001:db8:0:1:1:1:1:1")); |
108 |
|
109 |
// Choice in Placement of "::" (4.2.3) |
110 |
assertTrue(IPv6Utils.canonize("2001:0:0:1:0:0:0:1").equals( |
111 |
"2001:0:0:1::1")); |
112 |
assertTrue(IPv6Utils.canonize("2001:db8:0:0:1:0:0:1").equals( |
113 |
"2001:db8::1:0:0:1")); |
114 |
|
115 |
// IPv4 inside IPv6 |
116 |
assertTrue(IPv6Utils.canonize("::ffff:192.0.2.1").equals( |
117 |
"::ffff:192.0.2.1")); |
118 |
|
119 |
// Hostname safety |
120 |
assertTrue(IPv6Utils.canonize("www.apache.org").equals( |
121 |
"www.apache.org")); |
122 |
assertTrue(IPv6Utils.canonize("ipv6.google.com").equals( |
123 |
"ipv6.google.com")); |
124 |
|
125 |
} |
126 |
} |