1 package org.opendaylight.controller.packetcable.provider;
3 import static org.hamcrest.CoreMatchers.equalTo;
4 import static org.hamcrest.CoreMatchers.is;
5 import static org.hamcrest.CoreMatchers.not;
6 import static org.hamcrest.CoreMatchers.notNullValue;
7 import static org.junit.Assert.assertFalse;
8 import static org.junit.Assert.assertNotEquals;
9 import static org.junit.Assert.assertThat;
10 import static org.junit.Assert.assertTrue;
12 import com.google.common.net.InetAddresses;
13 import java.net.InetAddress;
14 import java.net.UnknownHostException;
15 import org.junit.After;
16 import org.junit.Before;
17 import org.junit.Test;
19 public class SubnetTest {
21 // Various address class level prefix lengths
22 private static final int CLASS_A = 8;
23 private static final int CLASS_B = 16;
24 private static final int CLASS_C = 24;
26 private InetAddress addressV4 = null;
27 private InetAddress addressV6 = null;
29 private InetAddress v4MaskClassA;
30 private InetAddress v4MaskClassB;
31 private InetAddress v4MaskClassC;
34 public final void setup()
36 addressV4 = InetAddresses.forString("192.168.0.1");
37 addressV6 = InetAddresses.forString("2001:db8::1");
39 v4MaskClassA = InetAddresses.forString("255.0.0.0");
40 v4MaskClassB = InetAddresses.forString("255.255.0.0");
41 v4MaskClassC = InetAddresses.forString("255.255.255.0");
45 public final void tearDown()
56 public final void testCtorCidr()
58 assertThat(new Subnet(addressV4, 24), is(notNullValue()));
59 assertThat(new Subnet(addressV6, 24), is(notNullValue()));
63 public final void testCtorAddressAndMask()
65 assertThat(new Subnet(addressV4, InetAddresses.forString("255.255.255.0")), is(notNullValue()));
66 assertThat(new Subnet(addressV4, null), is(notNullValue()));
69 @Test(expected = IllegalArgumentException.class)
70 public final void testSubnetCtorCidrBadMaskv4_1()
72 new Subnet(addressV4, -1);
75 @Test(expected = IllegalArgumentException.class)
76 public final void testSubnetCtorCidrBadMaskv4_2()
78 new Subnet(addressV4, 33);
81 @Test(expected = IllegalArgumentException.class)
82 public final void testSubnetCtorCidrBadMaskv6_1()
84 new Subnet(addressV6, -1);
87 @Test(expected = IllegalArgumentException.class)
88 public final void testSubnetCtorCidrBadMaskv6_2()
90 new Subnet(addressV6, 129);
94 public final void testGetPrefixLen()
96 Subnet subnet = new Subnet(addressV4, CLASS_C);
97 assertThat(subnet, is(notNullValue()) );
98 assertThat(subnet.getPrefixLen(), is(CLASS_C) );
100 subnet = new Subnet(addressV4, CLASS_B);
101 assertThat(subnet, is(notNullValue()) );
102 assertThat(subnet.getPrefixLen(), is(CLASS_B) );
104 subnet = new Subnet(addressV4, CLASS_A);
105 assertThat(subnet, is(notNullValue()) );
106 assertThat(subnet.getPrefixLen(), is(CLASS_A) );
108 subnet = new Subnet(addressV4, v4MaskClassC);
109 assertThat(subnet, is(notNullValue()) );
110 assertThat(subnet.getPrefixLen(), is(CLASS_C) );
112 subnet = new Subnet(addressV4, v4MaskClassB);
113 assertThat(subnet, is(notNullValue()) );
114 assertThat(subnet.getPrefixLen(), is(CLASS_B) );
116 subnet = new Subnet(addressV4, v4MaskClassA);
117 assertThat(subnet, is(notNullValue()) );
118 assertThat(subnet.getPrefixLen(), is(CLASS_A) );
123 public final void testSubnetCtorCidrAllValidMasks()
125 // validating no exceptions are thrown for valid masks
126 for (int iMask = 0; iMask < 33; ++iMask) {
127 final Subnet subnet = new Subnet(addressV4, iMask);
128 assertThat(subnet.getPrefixLen(), is(iMask) );
131 for (int iMask = 0; iMask < 129; ++iMask) {
132 final Subnet subnet = new Subnet(addressV6, iMask);
133 assertThat(subnet.getPrefixLen(), is(iMask) );
139 public final void testEquals()
141 final Subnet s41 = new Subnet(addressV4, 24);
142 final Subnet s42 = new Subnet(addressV4, 24);
143 final Subnet s43 = new Subnet(addressV4, 16);
145 final Subnet s61 = new Subnet(addressV6, 24);
146 final Subnet s62 = new Subnet(addressV6, 56);
147 final Subnet s63 = new Subnet(addressV6, 56);
149 assertThat(s41, is(equalTo(s41)));
150 assertThat(s41, is(equalTo(s42)));
151 assertThat(s41, is(not(equalTo(s43))));
152 assertThat(s41, is(not(equalTo(s61))));
153 assertThat(s41, is(not(equalTo(s62))));
154 assertThat(s41, is(not(equalTo(s63))));
155 assertThat(s41, is(not(equalTo(null))));
156 assertNotEquals(s41, "random string");
158 assertThat(s42, is(equalTo(s41)));
159 assertThat(s42, is(equalTo(s42)));
160 assertThat(s42, is(not(equalTo(s43))));
161 assertThat(s42, is(not(equalTo(s61))));
162 assertThat(s42, is(not(equalTo(s62))));
163 assertThat(s42, is(not(equalTo(s63))));
164 assertThat(s42, is(not(equalTo(null))));
165 assertNotEquals(s42, "random string");
167 assertThat(s43, is(not(equalTo(s41))));
168 assertThat(s43, is(not(equalTo(s42))));
169 assertThat(s43, is(equalTo(s43)));
170 assertThat(s43, is(not(equalTo(s61))));
171 assertThat(s43, is(not(equalTo(s62))));
172 assertThat(s43, is(not(equalTo(s63))));
173 assertThat(s43, is(not(equalTo(null))));
174 assertNotEquals(s43, "random string");
176 assertThat(s61, is(not(equalTo(s41))));
177 assertThat(s61, is(not(equalTo(s42))));
178 assertThat(s61, is(not(equalTo(s43))));
179 assertThat(s61, is(equalTo(s61)));
180 assertThat(s61, is(not(equalTo(s62))));
181 assertThat(s61, is(not(equalTo(s63))));
182 assertThat(s61, is(not(equalTo(null))));
183 assertNotEquals(s61, "random string");
185 assertThat(s62, is(not(equalTo(s41))));
186 assertThat(s62, is(not(equalTo(s42))));
187 assertThat(s62, is(not(equalTo(s43))));
188 assertThat(s62, is(not(equalTo(s61))));
189 assertThat(s62, is(equalTo(s62)));
190 assertThat(s62, is(equalTo(s63)));
191 assertThat(s62, is(not(equalTo(null))));
192 assertNotEquals(s62, "random string");
194 assertThat(s63, is(not(equalTo(s41))));
195 assertThat(s63, is(not(equalTo(s42))));
196 assertThat(s63, is(not(equalTo(s43))));
197 assertThat(s63, is(not(equalTo(s61))));
198 assertThat(s63, is(equalTo(s62)));
199 assertThat(s63, is(equalTo(s63)));
200 assertThat(s63, is(not(equalTo(null))));
201 assertNotEquals(s63, "random string");
205 public final void testHashcode()
207 final Subnet s41 = new Subnet(addressV4, 24);
208 final Subnet s42 = new Subnet(addressV4, 24);
209 final Subnet s43 = new Subnet(addressV4, 16);
211 final Subnet s61 = new Subnet(addressV6, 24);
212 final Subnet s62 = new Subnet(addressV6, 56);
213 final Subnet s63 = new Subnet(addressV6, 56);
215 assertThat(s41.hashCode(), is(equalTo(s41.hashCode())));
216 assertThat(s41.hashCode(), is(equalTo(s42.hashCode())));
217 assertThat(s41.hashCode(), is(not(equalTo(s43.hashCode()))));
218 assertThat(s41.hashCode(), is(not(equalTo(s61.hashCode()))));
219 assertThat(s41.hashCode(), is(not(equalTo(s62.hashCode()))));
220 assertThat(s41.hashCode(), is(not(equalTo(s63.hashCode()))));
222 assertThat(s42.hashCode(), is(equalTo(s41.hashCode())));
223 assertThat(s42.hashCode(), is(equalTo(s42.hashCode())));
224 assertThat(s42.hashCode(), is(not(equalTo(s43.hashCode()))));
225 assertThat(s42.hashCode(), is(not(equalTo(s61.hashCode()))));
226 assertThat(s42.hashCode(), is(not(equalTo(s62.hashCode()))));
227 assertThat(s42.hashCode(), is(not(equalTo(s63.hashCode()))));
229 assertThat(s43.hashCode(), is(not(equalTo(s41.hashCode()))));
230 assertThat(s43.hashCode(), is(not(equalTo(s42.hashCode()))));
231 assertThat(s43.hashCode(), is(equalTo(s43.hashCode())));
232 assertThat(s43.hashCode(), is(not(equalTo(s61.hashCode()))));
233 assertThat(s43.hashCode(), is(not(equalTo(s62.hashCode()))));
234 assertThat(s43.hashCode(), is(not(equalTo(s63.hashCode()))));
236 assertThat(s61.hashCode(), is(not(equalTo(s41.hashCode()))));
237 assertThat(s61.hashCode(), is(not(equalTo(s42.hashCode()))));
238 assertThat(s61.hashCode(), is(not(equalTo(s43.hashCode()))));
239 assertThat(s61.hashCode(), is(equalTo(s61.hashCode())));
240 assertThat(s61.hashCode(), is(not(equalTo(s62.hashCode()))));
241 assertThat(s61.hashCode(), is(not(equalTo(s63.hashCode()))));
243 assertThat(s62.hashCode(), is(not(equalTo(s41.hashCode()))));
244 assertThat(s62.hashCode(), is(not(equalTo(s42.hashCode()))));
245 assertThat(s62.hashCode(), is(not(equalTo(s43.hashCode()))));
246 assertThat(s62.hashCode(), is(not(equalTo(s61.hashCode()))));
247 assertThat(s62.hashCode(), is(equalTo(s62.hashCode())));
248 assertThat(s62.hashCode(), is(equalTo(s63.hashCode())));
250 assertThat(s63.hashCode(), is(not(equalTo(s41.hashCode()))));
251 assertThat(s63.hashCode(), is(not(equalTo(s42.hashCode()))));
252 assertThat(s63.hashCode(), is(not(equalTo(s43.hashCode()))));
253 assertThat(s63.hashCode(), is(not(equalTo(s61.hashCode()))));
254 assertThat(s63.hashCode(), is(equalTo(s62.hashCode())));
255 assertThat(s63.hashCode(), is(equalTo(s63.hashCode())));
259 public final void testCreateInstance() throws UnknownHostException {
260 Subnet subnet = Subnet.createInstance("192.168.0.0/255.255.255.0");
261 assertThat(subnet, is(notNullValue(Subnet.class)));
262 assertThat(subnet.toString(), is("192.168.0.0/255.255.255.0"));
263 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.0/255.255.255.0"))));
264 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.0/24"))));
265 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.10/255.255.255.0"))));
266 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.10/24"))));
268 subnet = Subnet.createInstance("192.168.0.1");
269 assertThat(subnet, is(notNullValue(Subnet.class)));
270 assertThat(subnet.toString(), is("192.168.0.1/255.255.255.255"));
271 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.1"))));
272 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.1/32"))));
273 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.1/255.255.255.255"))));
275 subnet = Subnet.createInstance("192.168.0.0/8");
276 assertThat(subnet, is(notNullValue(Subnet.class)));
277 assertThat(subnet.toString(), is("192.0.0.0/255.0.0.0"));
278 assertThat(subnet, is(equalTo(Subnet.createInstance("192.168.0.0/8"))));
279 assertThat(subnet, is(equalTo(Subnet.createInstance("192.175.0.10/8"))));
280 assertThat(subnet, is(equalTo(Subnet.createInstance("192.10.0.0/255.0.0.0"))));
281 assertThat(subnet, is(equalTo(Subnet.createInstance("192.1.0.100/255.0.0.0"))));
286 public final void testIsInNet()
288 Subnet subnet = new Subnet(addressV4, CLASS_C);
289 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
290 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
291 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
292 assertFalse(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
293 assertFalse(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
294 assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
295 assertFalse(subnet.isInNet(addressV6));
297 subnet = new Subnet(addressV4, CLASS_B);
298 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
299 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
300 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
301 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
302 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.255")));
303 assertFalse(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
304 assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
305 assertFalse(subnet.isInNet(addressV6));
307 subnet = new Subnet(addressV4, CLASS_A);
308 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
309 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
310 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
311 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
312 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.1.255")));
313 assertTrue(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
314 assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
315 assertFalse(subnet.isInNet(addressV6));
317 subnet = new Subnet(addressV4, 32);
318 assertTrue(subnet.isInNet(InetAddresses.forString("192.168.0.1")));
319 assertFalse(subnet.isInNet(InetAddresses.forString("192.168.0.100")));
320 assertFalse(subnet.isInNet(InetAddresses.forString("192.168.0.255")));
321 assertFalse(subnet.isInNet(InetAddresses.forString("192.168.1.1")));
322 assertFalse(subnet.isInNet(InetAddresses.forString("192.168.1.255")));
323 assertFalse(subnet.isInNet(InetAddresses.forString("192.167.0.255")));
324 assertFalse(subnet.isInNet(InetAddresses.forString("191.168.0.1")));
325 assertFalse(subnet.isInNet(addressV6));
327 subnet = new Subnet(addressV6, 64);
328 assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8::1")));
329 assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8::100")));
330 assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8::ffff")));
331 assertFalse(subnet.isInNet(InetAddresses.forString("2001:db7::1")));
332 assertFalse(subnet.isInNet(InetAddresses.forString("2000:db8::")));
333 assertTrue(subnet.isInNet(InetAddresses.forString("2001:db8:0:0:1::1")));
334 assertFalse(subnet.isInNet(addressV4));