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