7d7ece240749c60e4e18aeabae7cffc1b14e44c3
[lispflowmapping.git] / mappingservice / lisp-proto / src / test / java / org / opendaylight / lispflowmapping / lisp / util / LispAddressUtilTest.java
1 /**
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.lispflowmapping.lisp.util;
9
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14 import static org.junit.Assert.assertTrue;
15
16 import java.net.Inet4Address;
17 import java.net.Inet6Address;
18 import java.net.InetAddress;
19 import java.net.UnknownHostException;
20 import org.junit.Test;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AsNumberAfi;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePath;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
53
54 public class LispAddressUtilTest {
55
56
57     private static final char[] DUMMY_CHARACTER_ARRAY_TEST = new char[]{'a', 'b', 'c', 'd'};
58     private static final Long NUMBER_TEST = 5L;
59
60     private static final String MAC_ADDRESS_VALUE_TEST = "aa:bb:cc:dd:ee:ff";
61     private static final MacAddress MAC_ADDRESS_TEST = new MacAddress("aa:bb:cc:dd:ee:ff");
62
63     private static final byte[] IPV4_ADDRESS_BYTES_TEST = new byte[]{(byte) 192, (byte) 168, 1, 1};
64
65     private static final short MASK_OK_TEST = 30;
66     private static final short MASK_OK_DEFAULT_IPV4_TEST = 32;
67     private static final short MASK_OK_DEFAULT_IPV6_TEST = 128;
68
69     private static final String IPV4_ADDRESS_VALUE_TEST = "192.168.1.1";
70     private static final String IPV4_ADDRESS_PREFIX_VALUE_TEST = IPV4_ADDRESS_VALUE_TEST + "/" + MASK_OK_TEST;
71     private static final Ipv4Address IPV4_ADDRESS_TEST = new Ipv4Address(IPV4_ADDRESS_VALUE_TEST);
72     private static final IpAddress IP_ADDRESS_OBJECT_GENERAL_TEST = new IpAddress(IPV4_ADDRESS_TEST);
73     private static final Ipv4Prefix IPV4_ADDRESS_PREFIX_TEST = new Ipv4Prefix(IPV4_ADDRESS_PREFIX_VALUE_TEST);
74     private static final IpPrefix IP_ADDRESS_PREFIX = new IpPrefix(IPV4_ADDRESS_PREFIX_TEST);
75
76     private static final byte[] IPV6_ADDRESS_BYTES_TEST = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
77             15, 16};
78     private static final String IPV6_ADDRESS_VALUE_TEST = "102:304:506:708:90a:b0c:d0e:f10";
79     private static final String IPV6_ADDRESS_PREFIX_VALUE_TEST = IPV6_ADDRESS_VALUE_TEST + "/" + MASK_OK_TEST;
80     private static final Ipv6Prefix IPV6_ADDRESS_PREFIX_TEST = new Ipv6Prefix(IPV6_ADDRESS_PREFIX_VALUE_TEST);
81     private static final Ipv6Address IPV6_ADDRESS_TEST = new Ipv6Address(IPV6_ADDRESS_VALUE_TEST);
82
83     private static final Short DUMMY_SERVICE_INDEX = 45;
84     private static final Long DUMMY_SERVICE_PATH_ID_TYPE = 46L;
85     private static final String DISTINGUISHED_NAME_TYPE_VALUE_TEST = "dummy distinguished name type";
86     private static final String DISTINGUISHED_NAME_TYPE_VALUE_WITH_MAC_TEST = MAC_ADDRESS_VALUE_TEST;
87     private static final DistinguishedNameType DISTINGUISHED_NAME_TYPE_TEST = new DistinguishedNameType
88             (DISTINGUISHED_NAME_TYPE_VALUE_TEST);
89
90     private static final Long AS_NUMBER_TEST = 100L;
91     private static final Long INSTANCE_ID_TYPE_VALUE_TEST = 121L;
92     private static final Short INSTANCE_ID_TYPE_VALUE_SHORT_TEST = 122;
93     private static final InstanceIdType INSTANCE_ID_TYPE_TEST = new InstanceIdType(INSTANCE_ID_TYPE_VALUE_TEST);
94     private static final String INCORRECT_IP_ADDRESS_TEST = "incorrect ip address";
95
96     private static final SimpleAddress SIMPLE_ADDRESS_A_TEST = new SimpleAddress(IP_ADDRESS_OBJECT_GENERAL_TEST);
97     private static final SimpleAddress SIMPLE_ADDRESS_B_TEST = new SimpleAddress(MAC_ADDRESS_TEST);
98
99     /**
100      * Tests {@link LispAddressUtil#addressTypeFromSimpleAddress} and {@link
101      * LispAddressUtil#addressFromSimpleAddress} methods
102      * with ipAddress
103      */
104     @Test
105     public void addressFromSimpleAddressTest_asAnyIpAddress() {
106         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromSimpleAddress
107                 (SIMPLE_ADDRESS_A_TEST);
108         assertEquals(Ipv4Afi.class, addressClass);
109
110         final Address address = LispAddressUtil.addressFromSimpleAddress(SIMPLE_ADDRESS_A_TEST);
111         assertTrue(address instanceof Ipv4);
112     }
113
114     /**
115      * Tests {@link LispAddressUtil#addressTypeFromSimpleAddress} and {@link
116      * LispAddressUtil#addressFromSimpleAddress} methods
117      * with ipPrefix
118      */
119     @Test
120     public void addressFromSimpleAddressTest_asIpPrefix() {
121         final SimpleAddress simpleAddress = new SimpleAddress(new IpPrefix(new Ipv4Prefix(IPV4_ADDRESS_PREFIX_VALUE_TEST)));
122         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromSimpleAddress
123                 (simpleAddress);
124         assertEquals(Ipv4PrefixAfi.class, addressClass);
125
126         final Address address = LispAddressUtil.addressFromSimpleAddress(simpleAddress);
127         assertTrue(address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
128                 .types.rev151105.lisp.address.address.Ipv4Prefix);
129     }
130
131     /**
132      * Tests {@link LispAddressUtil#addressTypeFromSimpleAddress} and {@link
133      * LispAddressUtil#addressFromSimpleAddress} methods
134      * with mac address
135      */
136     @Test
137     public void addressFromSimpleAddressTest_asMacAddress() {
138         final SimpleAddress simpleAddress = new SimpleAddress(new MacAddress(MAC_ADDRESS_VALUE_TEST));
139         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromSimpleAddress
140                 (simpleAddress);
141         assertEquals(MacAfi.class, addressClass);
142
143         final Address address = LispAddressUtil.addressFromSimpleAddress(simpleAddress);
144         assertTrue(address instanceof Mac);
145     }
146
147     /**
148      * Tests {@link LispAddressUtil#addressTypeFromSimpleAddress} and {@link
149      * LispAddressUtil#addressFromSimpleAddress} methods
150      * with general address
151      */
152     @Test
153     public void addressFromSimpleAddressTest_asAddress() {
154         final SimpleAddress simpleAddress = new SimpleAddress(DUMMY_CHARACTER_ARRAY_TEST);
155         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromSimpleAddress
156                 (simpleAddress);
157         assertEquals(DistinguishedNameAfi.class, addressClass);
158
159         final Address address = LispAddressUtil.addressFromSimpleAddress(simpleAddress);
160         assertTrue(address instanceof DistinguishedName);
161     }
162
163     /**
164      * Tests {@link LispAddressUtil#addressTypeFromSimpleAddress} and {@link
165      * LispAddressUtil#addressFromSimpleAddress} methods
166      * with address as number
167      */
168     @Test
169     public void addressFromSimpleAddressTest_asNumber() {
170         final SimpleAddress simpleAddress = new SimpleAddress(new AsNumber(NUMBER_TEST));
171         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromSimpleAddress
172                 (simpleAddress);
173         assertEquals(AsNumberAfi.class, addressClass);
174
175         final Address address = LispAddressUtil.addressFromSimpleAddress(simpleAddress);
176         assertTrue(address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
177                 .types.rev151105.lisp.address.address.AsNumber);
178     }
179
180     /**
181      * Tests {@link LispAddressUtil#addressFromInet(InetAddress)} and {@link LispAddressUtil#addressTypeFromInet
182      * (InetAddress)}
183      * methods with ipv4 address
184      *
185      * @throws UnknownHostException
186      */
187     @Test
188     public void addressFromInet_ipv4() throws UnknownHostException {
189         final InetAddress ipv4InetAddress = Inet4Address.getByAddress(IPV4_ADDRESS_BYTES_TEST);
190         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromInet(ipv4InetAddress);
191         assertEquals(Ipv4Afi.class, addressClass);
192
193         final Address address = LispAddressUtil.addressFromInet(ipv4InetAddress);
194         assertTrue(address instanceof Ipv4);
195         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) address).getIpv4().getValue());
196     }
197
198     /**
199      * Tests {@link LispAddressUtil#addressFromInet(InetAddress)} and {@link LispAddressUtil#addressTypeFromInet
200      * (InetAddress)}
201      * methods with ipv6 address
202      *
203      * @throws UnknownHostException
204      */
205     @Test
206     public void addressFromInet_ipv6() throws UnknownHostException {
207         final InetAddress ipv6InetAddress = Inet6Address.getByAddress(IPV6_ADDRESS_BYTES_TEST);
208         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromInet(ipv6InetAddress);
209         assertEquals(Ipv6Afi.class, addressClass);
210
211         final Address address = LispAddressUtil.addressFromInet(ipv6InetAddress);
212         assertTrue(address instanceof Ipv6);
213         assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6) address).getIpv6().getValue());
214     }
215
216     /**
217      * Tests {@link LispAddressUtil#addressFromIpAddress(IpAddress)} and {@link
218      * LispAddressUtil#addressTypeFromIpAddress(IpAddress)}
219      * methods with ipv4 address
220      */
221     @Test
222     public void addressFromIpAddress_ipv4() {
223         final IpAddress ipv4Address = new IpAddress(IPV4_ADDRESS_TEST);
224         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromIpAddress(ipv4Address);
225         assertEquals(Ipv4Afi.class, addressClass);
226
227         final Address address = LispAddressUtil.addressFromIpAddress(ipv4Address);
228         assertTrue(address instanceof Ipv4);
229         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) address).getIpv4().getValue());
230     }
231
232     /**
233      * Tests {@link LispAddressUtil#addressFromIpAddress(IpAddress)} and {@link
234      * LispAddressUtil#addressTypeFromIpAddress(IpAddress)}
235      * methods with ipv6 address
236      */
237     @Test
238     public void addressFromIpAddress_ipv6() {
239         final IpAddress ipv6Address = new IpAddress(new Ipv6Address(IPV6_ADDRESS_VALUE_TEST));
240         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromIpAddress(ipv6Address);
241         assertEquals(Ipv6Afi.class, addressClass);
242
243         final Address address = LispAddressUtil.addressFromIpAddress(ipv6Address);
244         assertTrue(address instanceof Ipv6);
245         assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6) address).getIpv6().getValue());
246     }
247
248     /**
249      * Tests {@link LispAddressUtil#addressFromIpAddress(IpAddress)} and {@link
250      * LispAddressUtil#addressTypeFromIpAddress(IpAddress)}
251      * methods with null value instead off address.
252      */
253     @Test
254     public void addressFromIpAddress_null() {
255         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromIpAddress(null);
256         assertNull(addressClass);
257
258         final Address address = LispAddressUtil.addressFromIpAddress(null);
259         assertNull(address);
260     }
261
262     /**
263      * Tests {@link LispAddressUtil#addressFromIpPrefix(IpPrefix)} and {@link
264      * LispAddressUtil#addressTypeFromIpPrefix(IpPrefix)}
265      * methods with ipv4 address
266      */
267     @Test
268     public void addressFromIpPrefix_ipv4() {
269         IpPrefix ipv4Prefix = new IpPrefix(new Ipv4Prefix(IPV4_ADDRESS_PREFIX_VALUE_TEST));
270         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromIpPrefix(ipv4Prefix);
271         assertEquals(Ipv4PrefixAfi.class, addressClass);
272
273         final Address address = LispAddressUtil.addressFromIpPrefix(ipv4Prefix);
274         assertTrue(address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.
275                 types.rev151105.lisp.address.address.Ipv4Prefix);
276         assertEquals(IPV4_ADDRESS_PREFIX_VALUE_TEST, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.
277                 address.types.rev151105.lisp.address.address.Ipv4Prefix) address).getIpv4Prefix().getValue());
278     }
279
280     /**
281      * Tests {@link LispAddressUtil#addressFromIpPrefix(IpPrefix)} and {@link
282      * LispAddressUtil#addressTypeFromIpPrefix(IpPrefix)}
283      * methods with ipv6 address
284      */
285     @Test
286     public void addressFromIpPrefix_ipv6() {
287         IpPrefix ipv6Address = new IpPrefix(new Ipv6Prefix(IPV6_ADDRESS_PREFIX_VALUE_TEST));
288         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromIpPrefix(ipv6Address);
289         assertEquals(Ipv6PrefixAfi.class, addressClass);
290
291         final Address address = LispAddressUtil.addressFromIpPrefix(ipv6Address);
292         assertTrue(address instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
293                 .types.rev151105.lisp.address.address.Ipv6Prefix);
294         assertEquals(IPV6_ADDRESS_PREFIX_VALUE_TEST,
295                 ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp
296                         .address.address.Ipv6Prefix) address).getIpv6Prefix().getValue());
297     }
298
299     /**
300      * Tests {@link LispAddressUtil#addressFromIpPrefix(IpPrefix)} and {@link LispAddressUtil#addressTypeFromIpPrefix
301      * (IpPrefix)}
302      * methods with null value instead off address.
303      */
304     @Test
305     public void addressFromIpPrefix_null() {
306         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromIpPrefix(null);
307         assertNull(addressClass);
308
309         final Address address = LispAddressUtil.addressFromIpPrefix(null);
310         assertNull(address);
311     }
312
313     /**
314      * Tests {@link LispAddressUtil#addressFromMacAddress(MacAddress)} methods with mac address.
315      */
316     @Test
317     public void addressFromMacAddress_mac() {
318         final Address address = LispAddressUtil.addressFromMacAddress(new MacAddress(MAC_ADDRESS_VALUE_TEST));
319         assertTrue(address instanceof Mac);
320         assertEquals(MAC_ADDRESS_VALUE_TEST, ((Mac) address).getMac().getValue());
321     }
322
323     /**
324      * Tests {@link LispAddressUtil#addressFromMacAddress(MacAddress)} methods with null instead of address.
325      */
326     @Test
327     public void addressFromMacAddress_null() {
328         final Address address = LispAddressUtil.addressFromMacAddress(null);
329         assertNull(address);
330     }
331
332
333     /**
334      * Test {@link LispAddressUtil#addressFromServicePath(ServicePath)} method with concrete servicePath
335      */
336     @Test
337     public void addressFromServicePathTest_withServicePath() {
338         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
339                 .address.service.path.ServicePathBuilder servicePathBuilder = new org.opendaylight.yang.gen.v1.urn.ietf
340                 .params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
341                 .address.service.path.ServicePathBuilder();
342         servicePathBuilder.setServiceIndex(DUMMY_SERVICE_INDEX);
343         servicePathBuilder.setServicePathId(new ServicePathIdType(DUMMY_SERVICE_PATH_ID_TYPE));
344
345         ServicePath expectedAddress = servicePathBuilder.build();
346         final Address testedAddress = LispAddressUtil.addressFromServicePath(expectedAddress);
347         assertTrue(testedAddress instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
348                 .types.rev151105.lisp.address.address.ServicePath);
349         assertEquals(expectedAddress, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
350                 .types.rev151105.lisp.address.address.ServicePath) testedAddress).getServicePath());
351     }
352
353     /**
354      * Test {@link LispAddressUtil#addressFromServicePath(ServicePath)} method with null value
355      */
356     @Test
357     public void addressFromServicePathTest_withNull() {
358         final Address testedAddress = LispAddressUtil.addressFromServicePath(null);
359         assertNull(testedAddress);
360     }
361
362     /**
363      * Test {@link LispAddressUtil#addressFromDistinguishedName(DistinguishedNameType)} method with distinguished name }
364      */
365     @Test
366     public void addressFromDistinguishedNameTest_withDistinguishedName() {
367         final DistinguishedNameType distinguishedNameType = new DistinguishedNameType(DISTINGUISHED_NAME_TYPE_VALUE_TEST);
368         final Address testedAddress = LispAddressUtil.addressFromDistinguishedName(distinguishedNameType);
369
370         assertTrue(testedAddress instanceof DistinguishedName);
371         assertEquals(distinguishedNameType, ((DistinguishedName) testedAddress).getDistinguishedName());
372     }
373
374     /**
375      * Test {@link LispAddressUtil#addressFromDistinguishedName(DistinguishedNameType)} method with null value }
376      */
377     @Test
378     public void addressFromDistinguishedNameTest_withNull() {
379         final Address testedAddress = LispAddressUtil.addressFromDistinguishedName(null);
380         assertNull(testedAddress);
381     }
382
383     /**
384      * Test {@link LispAddressUtil#addressFromAsNumber(AsNumber)} method with as number value }
385      */
386     @Test
387     public void addressFromAsNumberTest_withAdNumber() {
388         final AsNumber expectedAddress = new AsNumber(AS_NUMBER_TEST);
389         final Address testedAddress = LispAddressUtil.addressFromAsNumber(expectedAddress);
390         assertTrue(testedAddress instanceof org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp
391                 .address.types.rev151105.lisp.address.address.AsNumber);
392         assertEquals(expectedAddress, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp
393                 .address.types.rev151105.lisp.address.address.AsNumber) testedAddress).getAsNumber());
394     }
395
396     /**
397      * Test {@link LispAddressUtil#addressFromAsNumber(AsNumber)} method with null instead of value }
398      */
399     @Test
400     public void addressFromAsNumberTest_withNull() {
401         final Address testedAddress = LispAddressUtil.addressFromAsNumber(null);
402         assertNull(testedAddress);
403     }
404
405
406     /**
407      * Tests:
408      * - {@link LispAddressUtil#toRloc(InetAddress)}
409      * - {@link LispAddressUtil#toRloc(Ipv4Address)}
410      * - {@link LispAddressUtil#toRloc(Ipv6Address)}
411      * - {@link LispAddressUtil#toRloc(SimpleAddress)}
412      * methods.
413      */
414     @Test
415     public void toRloc() throws UnknownHostException {
416         InetAddress ipv4AddressInet = Inet4Address.getByAddress(IPV4_ADDRESS_BYTES_TEST);
417         final Rloc rlocFromInetAddress = LispAddressUtil.toRloc(ipv4AddressInet);
418         assertEquals(Ipv4Afi.class, rlocFromInetAddress.getAddressType());
419         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4)rlocFromInetAddress.getAddress()).getIpv4().getValue());
420
421         final Rloc rlocFromIpv4Address = LispAddressUtil.toRloc(IPV4_ADDRESS_TEST);
422         assertEquals(Ipv4Afi.class, rlocFromIpv4Address.getAddressType());
423         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) rlocFromIpv4Address.getAddress()).getIpv4().getValue());
424
425
426         final Rloc rlocFromIpv6Address = LispAddressUtil.toRloc(IPV6_ADDRESS_TEST);
427         assertEquals(Ipv6Afi.class, rlocFromIpv6Address.getAddressType());
428         assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6) rlocFromIpv6Address.getAddress()).getIpv6().getValue());
429
430         final Rloc rlocFromSimpleAddress = LispAddressUtil.toRloc(SIMPLE_ADDRESS_A_TEST);
431         assertEquals(Ipv4Afi.class, rlocFromSimpleAddress.getAddressType());
432         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) rlocFromSimpleAddress.getAddress()).getIpv4().getValue());
433     }
434
435     /**
436      * Test {@link LispAddressUtil#asIpv4Rloc(String)} method with ipv4 or ipv6.
437      * Test {@link LispAddressUtil#asIpv6Rloc(String)} method with ipv4 or ipv6.
438      */
439     @Test
440     public void asIpvRloc() {
441         final Rloc rlocFromIpV4 = LispAddressUtil.asIpv4Rloc(IPV4_ADDRESS_VALUE_TEST);
442         assertEquals(Ipv4Afi.class, rlocFromIpV4.getAddressType());
443         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) rlocFromIpV4.getAddress()).getIpv4().getValue());
444
445         final Rloc rlocFromIpV6 = LispAddressUtil.asIpv6Rloc(IPV6_ADDRESS_VALUE_TEST);
446         assertEquals(Ipv6Afi.class, rlocFromIpV6.getAddressType());
447         assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6) rlocFromIpV6.getAddress()).getIpv6().getValue());
448     }
449
450     /**
451      * Test
452      * - {@link LispAddressUtil#toEid(Ipv6Address, InstanceIdType)}
453      * - {@link LispAddressUtil#asIpv6PrefixEid(String)}
454      * - {@link LispAddressUtil#asIpv6PrefixEid(Eid, Inet6Address, short)}
455      * - {@link LispAddressUtil#asIpv6PrefixEid(Ipv6Address, InstanceIdType)}
456      * methods.
457      */
458     @Test
459     public void toEid_ipv6Prefix() throws UnknownHostException {
460         Eid eidFromIpv6Prefix = LispAddressUtil.toEid(IPV6_ADDRESS_PREFIX_TEST, INSTANCE_ID_TYPE_TEST);
461         verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, true, MASK_OK_TEST, Ipv6PrefixAfi.class);
462
463         eidFromIpv6Prefix = LispAddressUtil.asIpv6PrefixEid(IPV6_ADDRESS_PREFIX_VALUE_TEST);
464         verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, false, MASK_OK_TEST, Ipv6PrefixAfi.class);
465
466         eidFromIpv6Prefix = LispAddressUtil.asIpv6PrefixEid(IPV6_ADDRESS_TEST, INSTANCE_ID_TYPE_TEST);
467         verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, true, MASK_OK_DEFAULT_IPV6_TEST, Ipv6PrefixAfi.class);
468     }
469
470     /**
471      * Test
472      * - {@link LispAddressUtil#toEid(MacAddress, InstanceIdType)}
473      * - {@link LispAddressUtil#asMacEid(String)}
474      * - {@link LispAddressUtil#asMacEid(String, long)}
475      * methods.
476      */
477     @Test
478     public void toEid_mac() {
479         Eid eidFromMac = LispAddressUtil.toEid(MAC_ADDRESS_TEST, INSTANCE_ID_TYPE_TEST);
480         verifyToEidWithMacAddress(eidFromMac, true);
481
482         eidFromMac = LispAddressUtil.asMacEid(MAC_ADDRESS_VALUE_TEST);
483         verifyToEidWithMacAddress(eidFromMac, false);
484
485         eidFromMac = LispAddressUtil.asMacEid(MAC_ADDRESS_VALUE_TEST, INSTANCE_ID_TYPE_VALUE_TEST);
486         verifyToEidWithMacAddress(eidFromMac, true);
487     }
488
489     /**
490      * Test
491      * - {@link LispAddressUtil#toEid(Ipv6Address, InstanceIdType)}
492      * - {@link LispAddressUtil#asIpv6Eid(String)}
493      * - {@link LispAddressUtil#asIpv6Eid(String, long)}
494      * methods.
495      */
496     @Test
497     public void toEid_ipv6() {
498         Eid eidFromIpv6 = LispAddressUtil.toEid(IPV6_ADDRESS_TEST, INSTANCE_ID_TYPE_TEST);
499         verifyToEidWithIpv6(eidFromIpv6, true);
500
501         eidFromIpv6 = LispAddressUtil.asIpv6Eid(IPV6_ADDRESS_VALUE_TEST);
502         verifyToEidWithIpv6(eidFromIpv6, false);
503
504         eidFromIpv6 = LispAddressUtil.asIpv6Eid(IPV6_ADDRESS_VALUE_TEST, INSTANCE_ID_TYPE_VALUE_TEST);
505         verifyToEidWithIpv6(eidFromIpv6, true);
506     }
507
508     /**
509      * Test
510      * - {@link LispAddressUtil#toEid(Ipv4Prefix, InstanceIdType)}
511      * - {@link LispAddressUtil#asIpv4PrefixEid(String)}
512      * - {@link LispAddressUtil#asIpv4PrefixEid(Eid, Inet4Address, short)}
513      * - {@link LispAddressUtil#asIpv4PrefixEid(Ipv4Address, InstanceIdType)}  }
514      * methods.
515      */
516     @Test
517     public void toEid_ipv4Prefix() throws UnknownHostException {
518         Eid eidFromIpv4Prefix = LispAddressUtil.toEid(IPV4_ADDRESS_PREFIX_TEST, INSTANCE_ID_TYPE_TEST);
519         verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, true, MASK_OK_TEST, Ipv4PrefixAfi.class);
520
521         eidFromIpv4Prefix  = LispAddressUtil.asIpv4PrefixEid(IPV4_ADDRESS_PREFIX_VALUE_TEST);
522         verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, false, MASK_OK_TEST, Ipv4PrefixAfi.class);
523
524         eidFromIpv4Prefix  = LispAddressUtil.asIpv4PrefixEid(IPV4_ADDRESS_TEST, INSTANCE_ID_TYPE_TEST);
525         verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, false, (short)32, Ipv4PrefixAfi.class);
526     }
527
528     public Eid provideDummyMacEid() {
529         final EidBuilder eidBuilder = new EidBuilder();
530         eidBuilder.setAddressType(MacAfi.class);
531         eidBuilder.setVirtualNetworkId(INSTANCE_ID_TYPE_TEST);
532         return eidBuilder.build();
533     }
534
535     /**
536      * Test
537      * - {@link LispAddressUtil#toEid(Ipv4Address, InstanceIdType)}
538      * - {@link LispAddressUtil#asIpv4Eid(String)}
539      * - {@link LispAddressUtil#asIpv4Eid(String, long)}
540      * methods.
541      */
542     @Test
543     public void toEid_ipv4() {
544         Eid eidFromIpv4 = LispAddressUtil.toEid(IPV4_ADDRESS_TEST, INSTANCE_ID_TYPE_TEST);
545         verifyToEidWithIpv4(eidFromIpv4, true);
546
547         eidFromIpv4 = LispAddressUtil.asIpv4Eid(IPV4_ADDRESS_VALUE_TEST);
548         verifyToEidWithIpv4(eidFromIpv4, false);
549
550         eidFromIpv4 = LispAddressUtil.asIpv4Eid(IPV4_ADDRESS_VALUE_TEST, INSTANCE_ID_TYPE_VALUE_TEST);
551         verifyToEidWithIpv4(eidFromIpv4, true);
552     }
553
554     /**
555      * Test
556      * - {@link LispAddressUtil#toEid(IpPrefix, InstanceIdType)}
557      * method.
558      */
559     @Test
560     public void toEid_ipPrefix() {
561         final Eid eidFromIpPrefix = LispAddressUtil.toEid(IP_ADDRESS_PREFIX, INSTANCE_ID_TYPE_TEST);
562         verifyToEidWithIpv4Prefix(eidFromIpPrefix, true, MASK_OK_TEST, Ipv4PrefixAfi.class);
563     }
564
565     /**
566      * Test
567      * - {@link LispAddressUtil#toEid(DistinguishedNameType, InstanceIdType)}
568      * - {@link LispAddressUtil#asDistinguishedNameEid(String)}
569      * - {@link LispAddressUtil#asDistinguishedNameEid(String, long)}
570      * methods with various input.
571      */
572     @Test
573     public void toEid_distinguishedName() {
574         Eid eidFromDistinguishedName = LispAddressUtil.toEid(DISTINGUISHED_NAME_TYPE_TEST, INSTANCE_ID_TYPE_TEST);
575         verifyToEidWithDistinguishedName(eidFromDistinguishedName, true);
576
577         eidFromDistinguishedName = LispAddressUtil.asDistinguishedNameEid(DISTINGUISHED_NAME_TYPE_VALUE_TEST);
578         verifyToEidWithDistinguishedName(eidFromDistinguishedName, false);
579
580         eidFromDistinguishedName = LispAddressUtil.asDistinguishedNameEid
581                 (DISTINGUISHED_NAME_TYPE_VALUE_WITH_MAC_TEST, INSTANCE_ID_TYPE_VALUE_TEST);
582         verifyToEidWithMacAddress(eidFromDistinguishedName, true);
583     }
584
585     private void verifyToEidWithIpv6Prefix(final Eid eidFromIpv6Prefix, final boolean isVniChecked, short
586             expectedMask, final Class<? extends org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp
587             .address.types.rev151105.LispAddressFamily> addressType) {
588         assertEquals(addressType, eidFromIpv6Prefix.getAddressType());
589         if (isVniChecked) {
590             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromIpv6Prefix.getVirtualNetworkId());
591         }
592         assertEquals(IPV6_ADDRESS_VALUE_TEST + "/" + expectedMask, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml
593                 .ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) eidFromIpv6Prefix
594                 .getAddress()).getIpv6Prefix().getValue());
595     }
596
597     private void verifyToEidWithIpv4(final Eid eidFromIpv4, final boolean isVniChecked) {
598         assertEquals(Ipv4Afi.class, eidFromIpv4.getAddressType());
599         if (isVniChecked) {
600             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromIpv4.getVirtualNetworkId());
601         }
602         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) eidFromIpv4.getAddress()).getIpv4().getValue());
603     }
604
605     private void verifyToEidWithIpv6(final Eid eidFromIpv6, final boolean isVniChecked) {
606         assertEquals(Ipv6Afi.class, eidFromIpv6.getAddressType());
607         if (isVniChecked) {
608             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromIpv6.getVirtualNetworkId());
609         }
610         assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6)eidFromIpv6.getAddress()).getIpv6().getValue());
611     }
612
613     private void verifyToEidWithIpv4Prefix(final Eid eidFromIpv4Prefix, final boolean isVniChecked, short
614             expectedMask, Class<? extends org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
615             .types.rev151105.LispAddressFamily>  addressType) {
616         assertEquals(addressType, eidFromIpv4Prefix.getAddressType());
617         if (isVniChecked) {
618             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromIpv4Prefix.getVirtualNetworkId());
619         }
620         assertEquals(IPV4_ADDRESS_VALUE_TEST +"/"+expectedMask, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns
621                 .yang.ietf
622                 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix)eidFromIpv4Prefix.getAddress())
623                 .getIpv4Prefix().getValue());
624     }
625
626     private void verifyToEidWithDistinguishedName(final Eid eidFromDistinguishedName, final boolean isVniChecked) {
627         assertEquals(DistinguishedNameAfi.class, eidFromDistinguishedName.getAddressType());
628         if (isVniChecked) {
629             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromDistinguishedName.getVirtualNetworkId());
630         }
631         assertEquals(DISTINGUISHED_NAME_TYPE_TEST, ((DistinguishedName)eidFromDistinguishedName.getAddress())
632                 .getDistinguishedName());
633     }
634
635     private void verifyToEidWithMacAddress(final Eid eidFromMac, final boolean isVniChecked) {
636         assertEquals(MacAfi.class, eidFromMac.getAddressType());
637         if (isVniChecked) {
638             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromMac.getVirtualNetworkId());
639         }
640         assertEquals(MAC_ADDRESS_VALUE_TEST, ((Mac)eidFromMac.getAddress()).getMac().getValue());
641     }
642
643     /**
644      * Tests {@link LispAddressUtil#asIpPrefix(String, int)} with ipv4 address and correct mask
645      */
646     @Test
647     public void asIpPrefix_ipv4() {
648         final IpPrefix ipPrefix = LispAddressUtil.asIpPrefix(IPV4_ADDRESS_VALUE_TEST, MASK_OK_TEST);
649         assertNotNull(ipPrefix);
650         final Ipv4Prefix ipv4Prefix = ipPrefix.getIpv4Prefix();
651         assertNotNull(ipv4Prefix);
652         assertEquals(IPV4_ADDRESS_PREFIX_TEST, ipv4Prefix);
653     }
654
655     /**
656      * Tests {@link LispAddressUtil#asIpPrefix(String, int)} with ipv6 address and correct mask
657      */
658     @Test
659     public void asIpPrefix_ipv6() {
660         final IpPrefix ipPrefix = LispAddressUtil.asIpPrefix(IPV6_ADDRESS_VALUE_TEST, MASK_OK_TEST);
661         assertNotNull(ipPrefix);
662         final Ipv6Prefix ipv6Prefix = ipPrefix.getIpv6Prefix();
663         assertNotNull(ipv6Prefix);
664         assertEquals(IPV6_ADDRESS_PREFIX_TEST, ipv6Prefix);
665     }
666
667     /**
668      * Tests {@link LispAddressUtil#asIpPrefix(String, int)} with incorrect ip address and correct mask
669      */
670     @Test
671     public void asIpPrefix_other() {
672         final IpPrefix ipPrefix = LispAddressUtil.asIpPrefix(INCORRECT_IP_ADDRESS_TEST, MASK_OK_TEST);
673         assertNull(ipPrefix);
674     }
675
676     /**
677      * Tests {@link LispAddressUtil#ipVersionFromString(String)} with ipv4
678      */
679     @Test
680     public void ipVersionFromString_ipv4() {
681         final int addressType = LispAddressUtil.ipVersionFromString(IPV4_ADDRESS_VALUE_TEST);
682         assertEquals(4, addressType);
683     }
684
685     /**
686      * Tests {@link LispAddressUtil#ipVersionFromString(String)} with ipv6
687      */
688     @Test
689     public void ipVersionFromString_ipv6() {
690         final int addressType = LispAddressUtil.ipVersionFromString(IPV6_ADDRESS_VALUE_TEST);
691         assertEquals(6, addressType);
692     }
693
694     /**
695      * Tests {@link LispAddressUtil#ipVersionFromString(String)} with incorrect ip address format
696      */
697     @Test
698     public void ipVersionFromString_other() {
699         final int addressType = LispAddressUtil.ipVersionFromString(INCORRECT_IP_ADDRESS_TEST);
700         assertEquals(0, addressType);
701
702     }
703
704     /**
705      * Tests {@link LispAddressUtil#asKeyValueAddressEid(SimpleAddress, SimpleAddress)} method.
706      */
707     @Test
708     public void asKeyValueAddressEid() {
709         final Eid eid = LispAddressUtil.asKeyValueAddressEid(SIMPLE_ADDRESS_A_TEST, SIMPLE_ADDRESS_B_TEST);
710         verifyKeyValueAddress(eid);
711     }
712
713     /**
714      * Tests {@link LispAddressUtil#asKeyValueAddressRloc(SimpleAddress, SimpleAddress)} method.
715      */
716     @Test
717     public void asKeyValueAddressRloc() {
718         final Rloc rloc = LispAddressUtil.asKeyValueAddressRloc(SIMPLE_ADDRESS_A_TEST, SIMPLE_ADDRESS_B_TEST);
719         verifyKeyValueAddress(rloc);
720     }
721
722     private void verifyKeyValueAddress(final LispAddress lispAddress) {
723         assertEquals(KeyValueAddressLcaf.class, lispAddress.getAddressType());
724         assertNull(lispAddress.getVirtualNetworkId());
725         final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
726                 .address.key.value.address.KeyValueAddress keyValueAddress = ((KeyValueAddress) lispAddress.getAddress()).
727                 getKeyValueAddress();
728         assertNotNull(keyValueAddress);
729         assertEquals(SIMPLE_ADDRESS_A_TEST, keyValueAddress.getKey());
730         assertEquals(SIMPLE_ADDRESS_B_TEST, keyValueAddress.getValue());
731     }
732 }
733