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.assertFalse;
12 import static org.junit.Assert.assertNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.opendaylight.yangtools.yang.common.UintConversions.fromJava;
16 import java.util.ArrayList;
17 import java.util.Date;
18 import java.util.Iterator;
19 import org.junit.Test;
20 import org.opendaylight.lispflowmapping.config.ConfigIni;
21 import org.opendaylight.lispflowmapping.lisp.type.MappingData;
22 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
34 public class MappingMergeUtilTest {
36 private static final String IPV4_STRING_1 = "1.2.3.0";
37 private static final String IPV4_STRING_2 = "1.2.4.0";
38 private static final String IPV4_STRING_3 = "1.2.5.0";
39 private static final String IPV4_STRING_4 = "1.2.6.0";
40 private static final String IPV6_STRING = "1111:2222:3333:4444:5555:6666:7777:8888";
41 private static final String IPV4_RLOC_STRING_1 = "101.101.101.101";
42 private static final String IPV4_RLOC_STRING_2 = "102.102.102.102";
43 private static final String IPV4_STRING_PREFIX_24 = "/24";
44 private static final String IPV4_STRING_PREFIX_16 = "/16";
45 private static final String IPV6_STRING_PREFIX = "/96";
46 private static final Eid IPV4_PREFIX_EID_1 = LispAddressUtil.asIpv4PrefixEid(IPV4_STRING_1 + IPV4_STRING_PREFIX_24);
47 private static final Eid IPV4_PREFIX_EID_2 = LispAddressUtil.asIpv4PrefixEid(IPV4_STRING_2 + IPV4_STRING_PREFIX_16);
48 private static final Eid IPV6_PREFIX_EID = LispAddressUtil.asIpv6PrefixEid(IPV6_STRING + IPV6_STRING_PREFIX);
49 private static final Eid IPV4_EID_1 = LispAddressUtil.asIpv4Eid(IPV4_STRING_1);
50 private static final Eid IPV4_EID_2 = LispAddressUtil.asIpv4Eid(IPV4_STRING_2);
51 private static final Eid SOURCE_DEST_KEY_EID_1 = LispAddressUtil
52 .asSrcDstEid(IPV4_STRING_3, IPV4_STRING_4, 24, 16, 1);
53 private static final Rloc IPV4_RLOC_1 = LispAddressUtil.asIpv4Rloc(IPV4_RLOC_STRING_1);
54 private static final Rloc IPV4_RLOC_2 = LispAddressUtil.asIpv4Rloc(IPV4_RLOC_STRING_2);
55 private static final IpAddressBinary IPV4_SOURCE_RLOC_1 = new IpAddressBinary(
56 new Ipv4AddressBinary(new byte[] {1, 1, 1, 1}));
58 private static final XtrId XTR_ID_1 = new XtrId(new byte[] {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1});
60 private static final SiteId SITE_ID_1 = new SiteId(new byte[]{1, 1, 1, 1, 1, 1, 1, 1});
62 private static final long REGISTRATION_VALIDITY = ConfigIni.getInstance().getRegistrationValiditySb();
65 * Tests {@link MappingMergeUtil#mappingIsExpired} method.
68 public void mappingIsExpiredTest() {
69 long timestamp = new Date().getTime();
70 MappingData mappingData = getDefaultMappingData();
71 mappingData.setTimestamp(new Date(timestamp - (REGISTRATION_VALIDITY + 1L)));
72 assertTrue(MappingMergeUtil.mappingIsExpired(mappingData));
73 mappingData.setTimestamp(new Date(timestamp));
74 assertFalse(MappingMergeUtil.mappingIsExpired(mappingData));
75 mappingData.setTimestamp(null);
76 assertFalse(MappingMergeUtil.mappingIsExpired(mappingData));
80 * Tests {@link MappingMergeUtil#mappingIsExpired} method, throws NPE.
82 @Test(expected = NullPointerException.class)
83 public void mappingIsExpiredTest_throwsNPE() {
84 MappingMergeUtil.mappingIsExpired(null);
88 * Tests {@link MappingMergeUtil#timestampIsExpired} method, throws NPE.
90 @Test(expected = NullPointerException.class)
91 public void timestampIsExpiredTest_withDate_throwsNPE() {
93 MappingMergeUtil.timestampIsExpired(date);
97 * Tests {@link MappingMergeUtil#timestampIsExpired} method, throws NPE.
100 public void timestampIsExpiredTest_withDate() {
101 long timestamp = new Date().getTime();
102 assertTrue(MappingMergeUtil.timestampIsExpired(new Date(timestamp - (REGISTRATION_VALIDITY + 1L))));
103 assertFalse(MappingMergeUtil.timestampIsExpired(new Date(timestamp)));
107 * Tests {@link MappingMergeUtil#computeNbSbIntersection} method, Nb mask greater than SB mask.
110 public void computeNbSbIntersectionTest_withMaskableIpv4PrefixEIDs_() {
111 MappingRecord nbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build();
112 MappingRecord sbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_2).build();
113 MappingData nbMappingData = getDefaultMappingData(nbMappingRecord);
114 MappingData sbMappingData = getDefaultMappingData(sbMappingRecord);
117 MappingData result = MappingMergeUtil.computeNbSbIntersection(nbMappingData, sbMappingData);
119 assertEquals(IPV4_PREFIX_EID_1, result.getRecord().getEid());
123 * Tests {@link MappingMergeUtil#computeNbSbIntersection} method, Nb mask less than SB mask.
126 public void computeNbSbIntersectionTest_withMaskableIpv4PrefixEIDs() {
127 MappingRecord nbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_2).build();
128 MappingRecord sbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build();
129 MappingData nbMappingData = getDefaultMappingData(nbMappingRecord);
130 MappingData sbMappingData = getDefaultMappingData(sbMappingRecord);
133 MappingData result = MappingMergeUtil.computeNbSbIntersection(nbMappingData, sbMappingData);
135 assertEquals(IPV4_PREFIX_EID_1, result.getRecord().getEid());
139 * Tests {@link MappingMergeUtil#computeNbSbIntersection} method with SourceDestKey Eid address type, Ipv4Prefix
140 * SB Eid, Nb mask less than SB mask.
143 public void computeNbSbIntersectionTest_withMaskableSourceDestKeyEIDs_Ipv4SB() {
144 MappingRecord nbMappingRecord = getDefaultMappingRecordBuilder().setEid(SOURCE_DEST_KEY_EID_1).build();
145 MappingRecord sbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build();
146 MappingData nbMappingData = getDefaultMappingData(nbMappingRecord);
147 MappingData sbMappingData = getDefaultMappingData(sbMappingRecord);
150 final MappingData result = MappingMergeUtil.computeNbSbIntersection(nbMappingData, sbMappingData);
151 final Eid eid = LispAddressUtil.asSrcDstEid(IPV4_STRING_3 ,IPV4_STRING_1 ,24 , 24, 1);
153 assertEquals(eid, result.getRecord().getEid());
157 * Tests {@link MappingMergeUtil#computeNbSbIntersection} method with SourceDestKey Eid address type, Ipv6Prefix
158 * SB Eid, Nb mask less than SB mask.
161 public void computeNbSbIntersectionTest_withMaskableSourceDestKeyEIDs_Ipv6SB() {
162 MappingRecord nbMappingRecord = getDefaultMappingRecordBuilder().setEid(SOURCE_DEST_KEY_EID_1).build();
163 MappingRecord sbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV6_PREFIX_EID).build();
164 MappingData nbMappingData = getDefaultMappingData(nbMappingRecord);
165 MappingData sbMappingData = getDefaultMappingData(sbMappingRecord);
168 final MappingData result = MappingMergeUtil.computeNbSbIntersection(nbMappingData, sbMappingData);
169 final Eid eid = LispAddressUtil.asSrcDstEid(IPV4_STRING_3 ,IPV6_STRING ,24 , 96, 1);
171 assertEquals(eid, result.getRecord().getEid());
175 * Tests {@link MappingMergeUtil#getCommonLocatorRecords} method with empty list of locator records.
178 public void getCommonLocatorRecords_withEmptyLocatorRecords() {
179 MappingRecord nbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_EID_2).build();
180 MappingRecord sbMappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_EID_1).build();
181 MappingData nbMappingData = getDefaultMappingData(nbMappingRecord);
182 MappingData sbMappingData = getDefaultMappingData(sbMappingRecord);
185 MappingData result = MappingMergeUtil.computeNbSbIntersection(nbMappingData, sbMappingData);
186 assertEquals(0, result.getRecord().getLocatorRecord().size());
190 * Tests {@link MappingMergeUtil#getCommonLocatorRecords} method with list of locator records == null.
193 public void getCommonLocatorRecords_withNullLocatorRecords() {
194 MappingRecord nbMappingRecord = getDefaultMappingRecordBuilder().setLocatorRecord(null).build();
195 MappingRecord sbMappingRecord = getDefaultMappingRecordBuilder().setLocatorRecord(null).build();
196 MappingData nbMappingData = getDefaultMappingData(nbMappingRecord);
197 MappingData sbMappingData = getDefaultMappingData(sbMappingRecord);
200 MappingData result = MappingMergeUtil.computeNbSbIntersection(nbMappingData, sbMappingData);
201 assertNull(result.getRecord().getLocatorRecord());
205 * Tests {@link MappingMergeUtil#getCommonLocatorRecords} method, verifies that NB common locator's priority is set
206 * to correct value (based on SB locator's priority).
209 public void getCommonLocatorRecords_priorityCheck() {
210 LocatorRecordBuilder nbLocatorRecordBuilder1 = new LocatorRecordBuilder()
211 .setRloc(IPV4_RLOC_1)
212 .setPriority(fromJava((short) 1))
213 .setLocatorId("NB-locator-id");
214 LocatorRecordBuilder sbLocatorRecordBuilder1 = new LocatorRecordBuilder()
215 .setRloc(IPV4_RLOC_1)
216 .setPriority(fromJava((short) 255))
217 .setLocatorId("SB-locator-id");
219 LocatorRecordBuilder nbLocatorRecordBuilder2 = new LocatorRecordBuilder()
220 .setRloc(IPV4_RLOC_2)
221 .setPriority(fromJava((short) 1))
222 .setLocatorId("NB-locator-id");
223 LocatorRecordBuilder sbLocatorRecordBuilder2 = new LocatorRecordBuilder()
224 .setRloc(IPV4_RLOC_2)
225 .setPriority(fromJava((short) 254))
226 .setLocatorId("SB-locator-id");
228 final MappingRecordBuilder nbMappingRecordBuilder = getDefaultMappingRecordBuilder();
229 nbMappingRecordBuilder.getLocatorRecord().add(nbLocatorRecordBuilder1.build());
230 nbMappingRecordBuilder.getLocatorRecord().add(nbLocatorRecordBuilder2.build());
232 final MappingRecordBuilder sbMappingRecordBuilder = getDefaultMappingRecordBuilder();
233 sbMappingRecordBuilder.getLocatorRecord().add(sbLocatorRecordBuilder1.build());
234 sbMappingRecordBuilder.getLocatorRecord().add(sbLocatorRecordBuilder2.build());
236 MappingData nbMappingData = getDefaultMappingData(nbMappingRecordBuilder.build());
237 MappingData sbMappingData = getDefaultMappingData(sbMappingRecordBuilder.build());
240 final MappingData result = MappingMergeUtil.computeNbSbIntersection(nbMappingData, sbMappingData);
241 final Iterator<LocatorRecord> iterator = result.getRecord().getLocatorRecord().iterator();
242 final LocatorRecord resultLocator_1 = iterator.next();
243 final LocatorRecord resultLocator_2 = iterator.next();
245 assertEquals(2, result.getRecord().getLocatorRecord().size());
247 assertEquals("NB-locator-id", resultLocator_1.getLocatorId());
248 // priority changed to 255
249 assertEquals(255, (short) resultLocator_1.getPriority().toJava());
251 assertEquals("NB-locator-id", resultLocator_2.getLocatorId());
252 // priority remains original
253 assertEquals(1, (short) resultLocator_2.getPriority().toJava());
256 private static MappingData getDefaultMappingData() {
257 return getDefaultMappingData(null);
260 private static MappingData getDefaultMappingData(MappingRecord mappingRecord) {
261 if (mappingRecord == null) {
262 mappingRecord = getDefaultMappingRecordBuilder().build();
264 return new MappingData(mappingRecord, System.currentTimeMillis());
267 private static MappingRecordBuilder getDefaultMappingRecordBuilder() {
268 return new MappingRecordBuilder()
269 .setEid(IPV4_PREFIX_EID_1)
270 .setLocatorRecord(new ArrayList<>())
272 .setAction(MappingRecord.Action.NativelyForward)
273 .setAuthoritative(true)
274 .setMapVersion((short) 1)
275 .setSiteId(SITE_ID_1)
276 .setSourceRloc(IPV4_SOURCE_RLOC_1)
277 .setTimestamp(new Date().getTime())