f549cb97346ef1d7fc239f423487251838a85eac
[lispflowmapping.git] / mappingservice / implementation / src / test / java / org / opendaylight / lispflowmapping / implementation / util / LispNotificationHelperTest.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.implementation.util;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
12
13 import com.google.common.collect.Lists;
14 import com.google.common.net.InetAddresses;
15 import java.net.InetAddress;
16 import java.net.UnknownHostException;
17 import org.junit.Test;
18 import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
19 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
29         .address.ApplicationData;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
31         .address.ApplicationDataBuilder;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
33         .address.DistinguishedNameBuilder;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
35         .address.Ipv4PrefixBuilder;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
37         .address.KeyValueAddress;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
39         .address.KeyValueAddressBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv6AddressBinary;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.AddMapping;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.AddMappingBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container
48         .MappingRecordBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list
51         .MappingRecordItemBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification
53         .MapRegisterBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddress;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddressBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.EidUri;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.MappingBuilder;
61
62 public class LispNotificationHelperTest {
63
64     private static final String IPV4_STRING = "1.2.3.0";
65     private static final String IPV6_STRING = "1111:2222:3333:4444:5555:6666:7777:8888";
66
67     private static final Ipv4Address ADDRESS_IPV4 = new Ipv4Address(IPV4_STRING);
68     private static final Ipv6Address ADDRESS_IPV6 = new Ipv6Address(IPV6_STRING);
69     private static final Ipv4AddressBinary ADDRESS_IPV4_BINARY = new Ipv4AddressBinary(InetAddresses.
70             forString(IPV4_STRING).getAddress());
71     private static final Ipv6AddressBinary ADDRESS_IPV6_BINARY = new Ipv6AddressBinary(InetAddresses.
72             forString(IPV6_STRING).getAddress());
73
74     private static final int PORT = 9999;
75     private static final DistinguishedNameType DISTINGUISHED_NAME_TYPE =
76             new DistinguishedNameType(IPV4_STRING + ":" + PORT);
77
78     private static final Eid EID_IPV4 = LispAddressUtil.asIpv4Eid(IPV4_STRING);
79     private static final Eid EID_IPV6 = LispAddressUtil.asIpv6Eid(IPV6_STRING);
80
81     private static final Rloc RLOC_IPV4 = LispAddressUtil.toRloc(ADDRESS_IPV4);
82     private static final Rloc RLOC_IPV6 = LispAddressUtil.toRloc(ADDRESS_IPV6);
83     private static final Rloc RLOC_IPV4_BINARY = LispAddressUtil.toRloc(ADDRESS_IPV4_BINARY);
84     private static final Rloc RLOC_IPV6_BINARY = LispAddressUtil.toRloc(ADDRESS_IPV6_BINARY);
85     private static final Rloc RLOC_KEYVALUE_ADDRESS = new RlocBuilder().setAddress(getDefaultKeyValueAddress()).build();
86     private static final Rloc RLOC_DISTINGUISHED_NAME_ADDRESS = new RlocBuilder()
87             .setAddress(new DistinguishedNameBuilder().setDistinguishedName(DISTINGUISHED_NAME_TYPE).build()).build();
88     private static final Rloc RLOC_APPLICATION_DATA_IPV4 = new RlocBuilder()
89             .setAddress(getDefaultApplicationDataForIpv4()).build();
90     private static final Rloc RLOC_APPLICATION_DATA_IPV6 = new RlocBuilder()
91             .setAddress(getDefaultApplicationDataForIpv6()).build();
92     private static final Rloc RLOC_APPLICATION_DATA_IPV6_PREFIX = new RlocBuilder()
93             .setAddress(getDefaultApplicationDataForIpv4Prefix()).build();
94     private static final Rloc RLOC_IPV4_PREFIX = new RlocBuilder()
95             .setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(new Ipv4Prefix(IPV4_STRING + "/20")).build()).build();
96
97     private static final SiteId SITE_ID = new SiteId(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
98
99
100     /**
101      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv4 type address.
102      */
103     @Test
104     public void getTransportAddressFromRlocTest_withIpv4Address() {
105         final TransportAddress result = new TransportAddressBuilder()
106                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
107                 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
108
109         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV4));
110     }
111
112     /**
113      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv6 type address.
114      */
115     @Test
116     public void getTransportAddressFromRlocTest_withIpv6Address() {
117         final TransportAddress result = new TransportAddressBuilder()
118                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV6_BINARY))
119                 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
120
121         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV6));
122     }
123
124     /**
125      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv4AddressBinary type address.
126      */
127     @Test
128     public void getTransportAddressFromRlocTest_withIpv4AddressBinary() {
129         final TransportAddress result = new TransportAddressBuilder()
130                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
131                 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
132
133         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV4_BINARY));
134     }
135
136     /**
137      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv6AddressBinary type address.
138      */
139     @Test
140     public void getTransportAddressFromRlocTest_withIpv6AddressBinary() {
141         final TransportAddress result = new TransportAddressBuilder()
142                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV6_BINARY))
143                 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
144
145         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV6_BINARY));
146     }
147
148     /**
149      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with KeyValueAddress type address.
150      */
151     @Test
152     public void getTransportAddressFromRlocTest_withKeyValueAddress() {
153         final TransportAddress result = new TransportAddressBuilder()
154                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
155                 .setPort(new PortNumber(PORT)).build();
156
157         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_KEYVALUE_ADDRESS));
158     }
159
160     /**
161      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with DistinguishedName type address.
162      */
163     @Test
164     public void getTransportAddressFromRlocTest_withDistinguishedNameAddress() {
165         final TransportAddress result = new TransportAddressBuilder()
166                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
167                 .setPort(new PortNumber(PORT)).build();
168
169         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_DISTINGUISHED_NAME_ADDRESS));
170     }
171
172     /**
173      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with ApplicationData type Ipv4 address.
174      */
175     @Test
176     public void getTransportAddressFromRlocTest_withApplicationDataIpv4Address() {
177         final TransportAddress result = new TransportAddressBuilder()
178                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
179                 .setPort(new PortNumber(PORT)).build();
180
181         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_APPLICATION_DATA_IPV4));
182     }
183
184     /**
185      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with ApplicationData type Ipv6 address.
186      */
187     @Test
188     public void getTransportAddressFromRlocTest_withApplicationDataIpv6Address() {
189         final TransportAddress result = new TransportAddressBuilder()
190                 .setIpAddress(new IpAddressBinary(ADDRESS_IPV6_BINARY))
191                 .setPort(new PortNumber(PORT)).build();
192
193         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_APPLICATION_DATA_IPV6));
194     }
195
196     /**
197      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with ApplicationData type address.
198      */
199     @Test(expected = NullPointerException.class)
200     public void getTransportAddressFromRlocTest_withApplicationDataIpv4PrefixAddress() {
201         final TransportAddress result = new TransportAddressBuilder().build();
202
203         assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_APPLICATION_DATA_IPV6_PREFIX));
204     }
205
206     /**
207      * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv4Prefix type address.
208      * Null address expected.
209      */
210     @Test
211     public void getTransportAddressFromRlocTest_withIpv4PrefixAddress() {
212         assertNull(LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV4_PREFIX).getIpAddress());
213     }
214
215     /**
216      * Tests {@link LispNotificationHelper#getAddressByName} method with correct address.
217      */
218     @Test
219     public void getAddressByNameTest() throws UnknownHostException {
220         final InetAddress result = InetAddress.getByName(IPV4_STRING);
221         assertEquals(result, LispNotificationHelper.getAddressByName(IPV4_STRING));
222     }
223
224     /**
225      * Tests {@link LispNotificationHelper#getAddressByName} method with invalid address.
226      */
227     @Test
228     public void getAddressByNameTest_withInvalidAddress() {
229         assertNull(LispNotificationHelper.getAddressByName("[" + IPV4_STRING));
230     }
231
232     /**
233      * Tests {@link LispNotificationHelper#getMapping} method with invalid address.
234      */
235     @Test
236     public void getMappingTest() {
237         final MappingBuilder mappingBuilder_1 = new MappingBuilder()
238                 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV4).build())
239                 .setEidUri(new EidUri("ipv4:" + IPV4_STRING))
240                 .setOrigin(MappingOrigin.Southbound)
241                 .setSiteId(Lists.newArrayList(SITE_ID));
242
243         final MappingBuilder mappingBuilder_2 = new MappingBuilder()
244                 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV6).build())
245                 .setEidUri(new EidUri("ipv6:" + IPV6_STRING))
246                 .setOrigin(MappingOrigin.Southbound)
247                 .setSiteId(Lists.newArrayList(SITE_ID));
248
249         assertEquals(Lists.newArrayList(mappingBuilder_1.build(), mappingBuilder_2.build()),
250                 LispNotificationHelper.getMapping(getDefaultAddMapping(true)));
251     }
252
253     /**
254      * Tests {@link LispNotificationHelper#getMapping} method with invalid address, isXtrSiteIdPresent == false.
255      */
256     @Test
257     public void getMappingTest_SiteIdNotPresent() {
258         final MappingBuilder mappingBuilder_1 = new MappingBuilder()
259                 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV4).build())
260                 .setEidUri(new EidUri("ipv4:" + IPV4_STRING))
261                 .setOrigin(MappingOrigin.Southbound);
262
263         final MappingBuilder mappingBuilder_2 = new MappingBuilder()
264                 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV6).build())
265                 .setEidUri(new EidUri("ipv6:" + IPV6_STRING))
266                 .setOrigin(MappingOrigin.Southbound);
267
268         assertEquals(Lists.newArrayList(mappingBuilder_1.build(), mappingBuilder_2.build()),
269                 LispNotificationHelper.getMapping(getDefaultAddMapping(false)));
270     }
271
272     private static KeyValueAddress getDefaultKeyValueAddress() {
273         return new KeyValueAddressBuilder()
274                 .setKeyValueAddress(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
275                         .rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder()
276                         .setKey(new SimpleAddress(new DistinguishedNameType("key")))
277                         .setValue(new SimpleAddress(DISTINGUISHED_NAME_TYPE)).build())
278                 .build();
279     }
280
281     private static ApplicationData getDefaultApplicationDataForIpv4() {
282         return new ApplicationDataBuilder()
283                 .setApplicationData(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
284                         .rev151105.lisp.address.address.application.data.ApplicationDataBuilder()
285                         .setAddress(new SimpleAddress(new IpAddress(ADDRESS_IPV4)))
286                         .setLocalPortLow(new PortNumber(PORT)).build())
287                 .build();
288     }
289
290     private static ApplicationData getDefaultApplicationDataForIpv6() {
291         return new ApplicationDataBuilder()
292                 .setApplicationData(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
293                         .rev151105.lisp.address.address.application.data.ApplicationDataBuilder()
294                         .setAddress(new SimpleAddress(new IpAddress(ADDRESS_IPV6)))
295                         .setLocalPortLow(new PortNumber(PORT)).build())
296                 .build();
297     }
298
299     private static ApplicationData getDefaultApplicationDataForIpv4Prefix() {
300         return new ApplicationDataBuilder()
301                 .setApplicationData(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
302                         .rev151105.lisp.address.address.application.data.ApplicationDataBuilder()
303                         .setAddress(new SimpleAddress(new IpPrefix(new Ipv4Prefix(IPV4_STRING + "/20"))))
304                         .setLocalPortLow(new PortNumber(PORT)).build())
305                 .build();
306     }
307
308     private static AddMapping getDefaultAddMapping(boolean isXtrSiteIdPresent) {
309         final MappingRecordItem mappingRecordItem_1 = new MappingRecordItemBuilder()
310                 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV4).build()).build();
311         final MappingRecordItem mappingRecordItem_2 = new MappingRecordItemBuilder()
312                 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV6).build()).build();
313
314         final MapRegisterBuilder mapRegisterBuilder = new MapRegisterBuilder()
315                 .setMappingRecordItem(Lists.newArrayList(mappingRecordItem_1, mappingRecordItem_2))
316                 .setXtrSiteIdPresent(isXtrSiteIdPresent)
317                 .setSiteId(SITE_ID);
318
319         return new AddMappingBuilder().setMapRegister(mapRegisterBuilder.build()).build();
320     }
321 }