2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.lispflowmapping.implementation.util;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
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;
54 public class LispNotificationHelperTest {
56 private static final String IPV4_STRING = "1.2.3.0";
57 private static final String IPV6_STRING = "1111:2222:3333:4444:5555:6666:7777:8888";
59 private static final Ipv4Address ADDRESS_IPV4 = new Ipv4Address(IPV4_STRING);
60 private static final Ipv6Address ADDRESS_IPV6 = new Ipv6Address(IPV6_STRING);
61 private static final Ipv4AddressBinary ADDRESS_IPV4_BINARY = new Ipv4AddressBinary(InetAddresses
62 .forString(IPV4_STRING).getAddress());
63 private static final Ipv6AddressBinary ADDRESS_IPV6_BINARY = new Ipv6AddressBinary(InetAddresses
64 .forString(IPV6_STRING).getAddress());
66 private static final int PORT = 9999;
67 private static final DistinguishedNameType DISTINGUISHED_NAME_TYPE =
68 new DistinguishedNameType(IPV4_STRING + ":" + PORT);
70 private static final Eid EID_IPV4 = LispAddressUtil.asIpv4Eid(IPV4_STRING);
71 private static final Eid EID_IPV6 = LispAddressUtil.asIpv6Eid(IPV6_STRING);
73 private static final Rloc RLOC_IPV4 = LispAddressUtil.toRloc(ADDRESS_IPV4);
74 private static final Rloc RLOC_IPV6 = LispAddressUtil.toRloc(ADDRESS_IPV6);
75 private static final Rloc RLOC_IPV4_BINARY = LispAddressUtil.toRloc(ADDRESS_IPV4_BINARY);
76 private static final Rloc RLOC_IPV6_BINARY = LispAddressUtil.toRloc(ADDRESS_IPV6_BINARY);
77 private static final Rloc RLOC_KEYVALUE_ADDRESS = new RlocBuilder().setAddress(getDefaultKeyValueAddress()).build();
78 private static final Rloc RLOC_DISTINGUISHED_NAME_ADDRESS = new RlocBuilder()
79 .setAddress(new DistinguishedNameBuilder().setDistinguishedName(DISTINGUISHED_NAME_TYPE).build()).build();
80 private static final Rloc RLOC_APPLICATION_DATA_IPV4 = new RlocBuilder()
81 .setAddress(getDefaultApplicationDataForIpv4()).build();
82 private static final Rloc RLOC_APPLICATION_DATA_IPV6 = new RlocBuilder()
83 .setAddress(getDefaultApplicationDataForIpv6()).build();
84 private static final Rloc RLOC_APPLICATION_DATA_IPV6_PREFIX = new RlocBuilder()
85 .setAddress(getDefaultApplicationDataForIpv4Prefix()).build();
86 private static final Rloc RLOC_IPV4_PREFIX = new RlocBuilder()
87 .setAddress(new Ipv4PrefixBuilder().setIpv4Prefix(new Ipv4Prefix(IPV4_STRING + "/20")).build()).build();
89 private static final SiteId SITE_ID = new SiteId(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
93 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv4 type address.
96 public void getTransportAddressFromRlocTest_withIpv4Address() {
97 final TransportAddress result = new TransportAddressBuilder()
98 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
99 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
101 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV4));
105 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv6 type address.
108 public void getTransportAddressFromRlocTest_withIpv6Address() {
109 final TransportAddress result = new TransportAddressBuilder()
110 .setIpAddress(new IpAddressBinary(ADDRESS_IPV6_BINARY))
111 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
113 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV6));
117 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv4AddressBinary type address.
120 public void getTransportAddressFromRlocTest_withIpv4AddressBinary() {
121 final TransportAddress result = new TransportAddressBuilder()
122 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
123 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
125 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV4_BINARY));
129 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv6AddressBinary type address.
132 public void getTransportAddressFromRlocTest_withIpv6AddressBinary() {
133 final TransportAddress result = new TransportAddressBuilder()
134 .setIpAddress(new IpAddressBinary(ADDRESS_IPV6_BINARY))
135 .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
137 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV6_BINARY));
141 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with KeyValueAddress type address.
144 public void getTransportAddressFromRlocTest_withKeyValueAddress() {
145 final TransportAddress result = new TransportAddressBuilder()
146 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
147 .setPort(new PortNumber(PORT)).build();
149 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_KEYVALUE_ADDRESS));
153 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with DistinguishedName type address.
156 public void getTransportAddressFromRlocTest_withDistinguishedNameAddress() {
157 final TransportAddress result = new TransportAddressBuilder()
158 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
159 .setPort(new PortNumber(PORT)).build();
161 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_DISTINGUISHED_NAME_ADDRESS));
165 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with ApplicationData type Ipv4 address.
168 public void getTransportAddressFromRlocTest_withApplicationDataIpv4Address() {
169 final TransportAddress result = new TransportAddressBuilder()
170 .setIpAddress(new IpAddressBinary(ADDRESS_IPV4_BINARY))
171 .setPort(new PortNumber(PORT)).build();
173 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_APPLICATION_DATA_IPV4));
177 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with ApplicationData type Ipv6 address.
180 public void getTransportAddressFromRlocTest_withApplicationDataIpv6Address() {
181 final TransportAddress result = new TransportAddressBuilder()
182 .setIpAddress(new IpAddressBinary(ADDRESS_IPV6_BINARY))
183 .setPort(new PortNumber(PORT)).build();
185 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_APPLICATION_DATA_IPV6));
189 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with ApplicationData type address.
191 @Test(expected = NullPointerException.class)
192 public void getTransportAddressFromRlocTest_withApplicationDataIpv4PrefixAddress() {
193 final TransportAddress result = new TransportAddressBuilder().build();
195 assertEquals(result, LispNotificationHelper.getTransportAddressFromRloc(RLOC_APPLICATION_DATA_IPV6_PREFIX));
199 * Tests {@link LispNotificationHelper#getTransportAddressFromRloc} method with Ipv4Prefix type address.
200 * Null address expected.
203 public void getTransportAddressFromRlocTest_withIpv4PrefixAddress() {
204 assertNull(LispNotificationHelper.getTransportAddressFromRloc(RLOC_IPV4_PREFIX).getIpAddress());
208 * Tests {@link LispNotificationHelper#getAddressByName} method with correct address.
211 public void getAddressByNameTest() throws UnknownHostException {
212 final InetAddress result = InetAddress.getByName(IPV4_STRING);
213 assertEquals(result, LispNotificationHelper.getAddressByName(IPV4_STRING));
217 * Tests {@link LispNotificationHelper#getAddressByName} method with invalid address.
220 public void getAddressByNameTest_withInvalidAddress() {
221 assertNull(LispNotificationHelper.getAddressByName("[" + IPV4_STRING));
225 * Tests {@link LispNotificationHelper#getMapping} method with invalid address.
228 public void getMappingTest() {
229 final MappingBuilder mappingBuilder_1 = new MappingBuilder()
230 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV4).build())
231 .setEidUri(new EidUri("ipv4:" + IPV4_STRING))
232 .setOrigin(MappingOrigin.Southbound)
233 .setSiteId(Lists.newArrayList(SITE_ID));
235 final MappingBuilder mappingBuilder_2 = new MappingBuilder()
236 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV6).build())
237 .setEidUri(new EidUri("ipv6:" + IPV6_STRING))
238 .setOrigin(MappingOrigin.Southbound)
239 .setSiteId(Lists.newArrayList(SITE_ID));
241 assertEquals(Lists.newArrayList(mappingBuilder_1.build(), mappingBuilder_2.build()),
242 LispNotificationHelper.getMapping(getDefaultAddMapping(true)));
246 * Tests {@link LispNotificationHelper#getMapping} method with invalid address, isXtrSiteIdPresent == false.
249 public void getMappingTest_SiteIdNotPresent() {
250 final MappingBuilder mappingBuilder_1 = new MappingBuilder()
251 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV4).build())
252 .setEidUri(new EidUri("ipv4:" + IPV4_STRING))
253 .setOrigin(MappingOrigin.Southbound);
255 final MappingBuilder mappingBuilder_2 = new MappingBuilder()
256 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV6).build())
257 .setEidUri(new EidUri("ipv6:" + IPV6_STRING))
258 .setOrigin(MappingOrigin.Southbound);
260 assertEquals(Lists.newArrayList(mappingBuilder_1.build(), mappingBuilder_2.build()),
261 LispNotificationHelper.getMapping(getDefaultAddMapping(false)));
264 private static KeyValueAddress getDefaultKeyValueAddress() {
265 return new KeyValueAddressBuilder()
266 .setKeyValueAddress(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
267 .rev151105.lisp.address.address.key.value.address.KeyValueAddressBuilder()
268 .setKey(new SimpleAddress(new DistinguishedNameType("key")))
269 .setValue(new SimpleAddress(DISTINGUISHED_NAME_TYPE)).build())
273 private static ApplicationData getDefaultApplicationDataForIpv4() {
274 return new ApplicationDataBuilder()
275 .setApplicationData(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
276 .rev151105.lisp.address.address.application.data.ApplicationDataBuilder()
277 .setAddress(new SimpleAddress(new IpAddress(ADDRESS_IPV4)))
278 .setLocalPortLow(new PortNumber(PORT)).build())
282 private static ApplicationData getDefaultApplicationDataForIpv6() {
283 return new ApplicationDataBuilder()
284 .setApplicationData(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
285 .rev151105.lisp.address.address.application.data.ApplicationDataBuilder()
286 .setAddress(new SimpleAddress(new IpAddress(ADDRESS_IPV6)))
287 .setLocalPortLow(new PortNumber(PORT)).build())
291 private static ApplicationData getDefaultApplicationDataForIpv4Prefix() {
292 return new ApplicationDataBuilder()
293 .setApplicationData(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types
294 .rev151105.lisp.address.address.application.data.ApplicationDataBuilder()
295 .setAddress(new SimpleAddress(new IpPrefix(new Ipv4Prefix(IPV4_STRING + "/20"))))
296 .setLocalPortLow(new PortNumber(PORT)).build())
300 private static AddMapping getDefaultAddMapping(boolean isXtrSiteIdPresent) {
301 final MappingRecordItem mappingRecordItem_1 = new MappingRecordItemBuilder()
302 .withKey(new MappingRecordItemKey(IPV4_STRING))
303 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV4).build()).build();
304 final MappingRecordItem mappingRecordItem_2 = new MappingRecordItemBuilder()
305 .withKey(new MappingRecordItemKey(IPV6_STRING))
306 .setMappingRecord(new MappingRecordBuilder().setEid(EID_IPV6).build()).build();
308 final MapRegisterBuilder mapRegisterBuilder = new MapRegisterBuilder()
309 .setMappingRecordItem(Lists.newArrayList(mappingRecordItem_1, mappingRecordItem_2))
310 .setXtrSiteIdPresent(isXtrSiteIdPresent)
313 return new AddMappingBuilder().setMapRegister(mapRegisterBuilder.build()).build();