Added response data to operational datastore, refactored data validation
[packetcable.git] / packetcable-policy-server / src / test / java / org / opendaylight / controller / packetcable / provider / SubnetTest.java
1 package org.opendaylight.controller.packetcable.provider;
2
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;
11
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;
18
19 public class SubnetTest {
20
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;
25
26     private InetAddress addressV4 = null;
27     private InetAddress addressV6 = null;
28
29     private InetAddress v4MaskClassA;
30     private InetAddress v4MaskClassB;
31     private InetAddress v4MaskClassC;
32
33     @Before
34     public final void setup()
35     {
36         addressV4 = InetAddresses.forString("192.168.0.1");
37         addressV6 = InetAddresses.forString("2001:db8::1");
38
39         v4MaskClassA = InetAddresses.forString("255.0.0.0");
40         v4MaskClassB = InetAddresses.forString("255.255.0.0");
41         v4MaskClassC = InetAddresses.forString("255.255.255.0");
42     }
43
44     @After
45     public final void tearDown()
46     {
47         addressV4 = null;
48         addressV6 = null;
49
50         v4MaskClassA = null;
51         v4MaskClassB = null;
52         v4MaskClassC = null;
53     }
54
55     @Test
56     public final void testCtorCidr()
57     {
58         assertThat(new Subnet(addressV4, 24), is(notNullValue()));
59         assertThat(new Subnet(addressV6, 24), is(notNullValue()));
60     }
61
62     @Test
63     public final void testCtorAddressAndMask()
64     {
65         assertThat(new Subnet(addressV4, InetAddresses.forString("255.255.255.0")), is(notNullValue()));
66         assertThat(new Subnet(addressV4, null), is(notNullValue()));
67     }
68
69     @Test(expected = IllegalArgumentException.class)
70     public final void testSubnetCtorCidrBadMaskv4_1()
71     {
72         new Subnet(addressV4, -1);
73     }
74
75     @Test(expected = IllegalArgumentException.class)
76     public final void testSubnetCtorCidrBadMaskv4_2()
77     {
78         new Subnet(addressV4, 33);
79     }
80
81     @Test(expected = IllegalArgumentException.class)
82     public final void testSubnetCtorCidrBadMaskv6_1()
83     {
84         new Subnet(addressV6, -1);
85     }
86
87     @Test(expected = IllegalArgumentException.class)
88     public final void testSubnetCtorCidrBadMaskv6_2()
89     {
90         new Subnet(addressV6, 129);
91     }
92
93     @Test
94     public final void testGetPrefixLen()
95     {
96         Subnet subnet = new Subnet(addressV4, CLASS_C);
97         assertThat(subnet, is(notNullValue()) );
98         assertThat(subnet.getPrefixLen(), is(CLASS_C) );
99
100         subnet = new Subnet(addressV4, CLASS_B);
101         assertThat(subnet, is(notNullValue()) );
102         assertThat(subnet.getPrefixLen(), is(CLASS_B) );
103
104         subnet = new Subnet(addressV4, CLASS_A);
105         assertThat(subnet, is(notNullValue()) );
106         assertThat(subnet.getPrefixLen(), is(CLASS_A) );
107
108         subnet = new Subnet(addressV4, v4MaskClassC);
109         assertThat(subnet, is(notNullValue()) );
110         assertThat(subnet.getPrefixLen(), is(CLASS_C) );
111
112         subnet = new Subnet(addressV4, v4MaskClassB);
113         assertThat(subnet, is(notNullValue()) );
114         assertThat(subnet.getPrefixLen(), is(CLASS_B) );
115
116         subnet = new Subnet(addressV4, v4MaskClassA);
117         assertThat(subnet, is(notNullValue()) );
118         assertThat(subnet.getPrefixLen(), is(CLASS_A) );
119
120     }
121
122     @Test
123     public final void testSubnetCtorCidrAllValidMasks()
124     {
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) );
129         }
130
131         for (int iMask = 0; iMask < 129; ++iMask) {
132             final Subnet subnet = new Subnet(addressV6, iMask);
133             assertThat(subnet.getPrefixLen(),  is(iMask) );
134         }
135     }
136
137
138     @Test
139     public final void testEquals()
140     {
141         final Subnet s41 = new Subnet(addressV4, 24);
142         final Subnet s42 = new Subnet(addressV4, 24);
143         final Subnet s43 = new Subnet(addressV4, 16);
144
145         final Subnet s61 = new Subnet(addressV6, 24);
146         final Subnet s62 = new Subnet(addressV6, 56);
147         final Subnet s63 = new Subnet(addressV6, 56);
148
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");
157
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");
166
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");
175
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");
184
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");
193
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");
202     }
203
204     @Test
205     public final void testHashcode()
206     {
207         final Subnet s41 = new Subnet(addressV4, 24);
208         final Subnet s42 = new Subnet(addressV4, 24);
209         final Subnet s43 = new Subnet(addressV4, 16);
210
211         final Subnet s61 = new Subnet(addressV6, 24);
212         final Subnet s62 = new Subnet(addressV6, 56);
213         final Subnet s63 = new Subnet(addressV6, 56);
214
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()))));
221
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()))));
228
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()))));
235
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()))));
242
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())));
249
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())));
256     }
257
258     @Test
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"))));
267
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"))));
274
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"))));
282
283     }
284
285     @Test
286     public final void testIsInNet()
287     {
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));
296
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));
306
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));
316
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));
326
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));
335
336     }
337 }