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