cb3bd7646a1ddc8c058b9f570bef2c31447396e2
[lispflowmapping.git] / mappingservice / implementation / src / test / java / org / opendaylight / lispflowmapping / implementation / util / MappingMergeUtilTest.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.assertFalse;
12 import static org.junit.Assert.assertNull;
13 import static org.junit.Assert.assertTrue;
14
15 import java.util.ArrayList;
16 import java.util.Date;
17 import java.util.Iterator;
18
19 import org.junit.Test;
20 import org.opendaylight.lispflowmapping.implementation.config.ConfigIni;
21 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container
31         .MappingRecordBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
33
34 public class MappingMergeUtilTest {
35
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}));
57
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});
59
60     private static final SiteId SITE_ID_1 = new SiteId(new byte[]{1, 1, 1, 1, 1, 1, 1, 1});
61
62     private static final long REGISTRATION_VALIDITY = ConfigIni.getInstance().getRegistrationValiditySb();
63
64     /**
65      * Tests {@link MappingMergeUtil#mappingIsExpired} method.
66      */
67     @Test
68     public void mappingIsExpiredTest() {
69         long timestamp = new Date().getTime();
70         MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder();
71         assertTrue(MappingMergeUtil.mappingIsExpired(mappingRecordBuilder
72                 .setTimestamp(timestamp - (REGISTRATION_VALIDITY + 1L)).build()));
73         assertFalse(MappingMergeUtil.mappingIsExpired(mappingRecordBuilder.setTimestamp(timestamp).build()));
74         assertFalse(MappingMergeUtil.mappingIsExpired(mappingRecordBuilder.setTimestamp(null).build()));
75     }
76
77     /**
78      * Tests {@link MappingMergeUtil#mappingIsExpired} method, throws NPE.
79      */
80     @Test(expected = NullPointerException.class)
81     public void mappingIsExpiredTest_throwsNPE() {
82         MappingMergeUtil.mappingIsExpired(null);
83     }
84
85     /**
86      * Tests {@link MappingMergeUtil#timestampIsExpired} method, throws NPE.
87      */
88     @Test(expected = NullPointerException.class)
89     public void timestampIsExpiredTest_withDate_throwsNPE() {
90         Date date = null;
91         MappingMergeUtil.timestampIsExpired(date);
92     }
93
94     /**
95      * Tests {@link MappingMergeUtil#timestampIsExpired} method, throws NPE.
96      */
97     @Test
98     public void timestampIsExpiredTest_withDate() {
99         long timestamp = new Date().getTime();
100         assertTrue(MappingMergeUtil.timestampIsExpired(new Date(timestamp - (REGISTRATION_VALIDITY + 1L))));
101         assertFalse(MappingMergeUtil.timestampIsExpired(new Date(timestamp)));
102     }
103
104     /**
105      * Tests {@link MappingMergeUtil#computeNbSbIntersection} method, Nb mask greater than SB mask.
106      */
107     @Test
108     public void computeNbSbIntersectionTest_withMaskableIpv4PrefixEIDs_() {
109         MappingRecord NBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build();
110         MappingRecord SBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_2).build();
111
112         // result
113         MappingRecord result = (MappingRecord) MappingMergeUtil
114                 .computeNbSbIntersection(NBmappingRecord, SBmappingRecord);
115
116         assertEquals(IPV4_PREFIX_EID_1, result.getEid());
117     }
118
119     /**
120      * Tests {@link MappingMergeUtil#computeNbSbIntersection} method, Nb mask less than SB mask.
121      */
122     @Test
123     public void computeNbSbIntersectionTest_withMaskableIpv4PrefixEIDs() {
124         MappingRecord NBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_2).build();
125         MappingRecord SBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build();
126
127         // result
128         MappingRecord result = (MappingRecord) MappingMergeUtil
129                 .computeNbSbIntersection(NBmappingRecord, SBmappingRecord);
130
131         assertEquals(IPV4_PREFIX_EID_1, result.getEid());
132     }
133
134     /**
135      * Tests {@link MappingMergeUtil#computeNbSbIntersection} method with SourceDestKey Eid address type, Ipv4Prefix
136      * SB Eid, Nb mask less than SB mask.
137      */
138     @Test
139     public void computeNbSbIntersectionTest_withMaskableSourceDestKeyEIDs_Ipv4SB() {
140         MappingRecord NBmappingRecord = getDefaultMappingRecordBuilder().setEid(SOURCE_DEST_KEY_EID_1).build();
141         MappingRecord SBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build();
142
143         // result
144         final MappingRecord result = (MappingRecord) MappingMergeUtil
145                 .computeNbSbIntersection(NBmappingRecord, SBmappingRecord);
146         final Eid eid = LispAddressUtil.asSrcDstEid(IPV4_STRING_3 ,IPV4_STRING_1 ,24 , 24, 1);
147
148         assertEquals(eid, result.getEid());
149     }
150
151     /**
152      * Tests {@link MappingMergeUtil#computeNbSbIntersection} method with SourceDestKey Eid address type, Ipv6Prefix
153      * SB Eid, Nb mask less than SB mask.
154      */
155     @Test
156     public void computeNbSbIntersectionTest_withMaskableSourceDestKeyEIDs_Ipv6SB() {
157         MappingRecord NBmappingRecord = getDefaultMappingRecordBuilder().setEid(SOURCE_DEST_KEY_EID_1).build();
158         MappingRecord SBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV6_PREFIX_EID).build();
159
160         // result
161         final MappingRecord result = (MappingRecord) MappingMergeUtil
162                 .computeNbSbIntersection(NBmappingRecord, SBmappingRecord);
163         final Eid eid = LispAddressUtil.asSrcDstEid(IPV4_STRING_3 ,IPV6_STRING ,24 , 96, 1);
164
165         assertEquals(eid, result.getEid());
166     }
167
168     /**
169      * Tests {@link MappingMergeUtil#getCommonLocatorRecords} method with empty list of locator records.
170      */
171     @Test
172     public void getCommonLocatorRecords_withEmptyLocatorRecords() {
173         MappingRecord NBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_EID_2).build();
174         MappingRecord SBmappingRecord = getDefaultMappingRecordBuilder().setEid(IPV4_EID_1).build();
175
176         // result
177         MappingRecord result = (MappingRecord) MappingMergeUtil
178                 .computeNbSbIntersection(NBmappingRecord, SBmappingRecord);
179         assertEquals(0, result.getLocatorRecord().size());
180     }
181
182     /**
183      * Tests {@link MappingMergeUtil#getCommonLocatorRecords} method with list of locator records == null.
184      */
185     @Test
186     public void getCommonLocatorRecords_withNullLocatorRecords() {
187         MappingRecord NBmappingRecord = getDefaultMappingRecordBuilder().setLocatorRecord(null).build();
188         MappingRecord SBmappingRecord = getDefaultMappingRecordBuilder().setLocatorRecord(null).build();
189
190         // result
191         MappingRecord result = (MappingRecord) MappingMergeUtil
192                 .computeNbSbIntersection(NBmappingRecord, SBmappingRecord);
193         assertNull(result.getLocatorRecord());
194     }
195
196     /**
197      * Tests {@link MappingMergeUtil#getCommonLocatorRecords} method, verifies that NB common locator's priority is set
198      * to correct value (based on SB locator's priority).
199      */
200     @Test
201     public void getCommonLocatorRecords_priorityCheck() {
202         LocatorRecordBuilder NBlocatorRecordBuilder_1 = new LocatorRecordBuilder()
203                 .setRloc(IPV4_RLOC_1)
204                 .setPriority((short) 1)
205                 .setLocatorId("NB-locator-id");
206         LocatorRecordBuilder SBlocatorRecordBuilder_1 = new LocatorRecordBuilder()
207                 .setRloc(IPV4_RLOC_1)
208                 .setPriority((short) 255)
209                 .setLocatorId("SB-locator-id");
210
211         LocatorRecordBuilder NBlocatorRecordBuilder_2 = new LocatorRecordBuilder()
212                 .setRloc(IPV4_RLOC_2)
213                 .setPriority((short) 1)
214                 .setLocatorId("NB-locator-id");
215         LocatorRecordBuilder SBlocatorRecordBuilder_2 = new LocatorRecordBuilder()
216                 .setRloc(IPV4_RLOC_2)
217                 .setPriority((short) 254)
218                 .setLocatorId("SB-locator-id");
219
220         final MappingRecordBuilder NBmappingRecordBuilder = getDefaultMappingRecordBuilder();
221         NBmappingRecordBuilder.getLocatorRecord().add(NBlocatorRecordBuilder_1.build());
222         NBmappingRecordBuilder.getLocatorRecord().add(NBlocatorRecordBuilder_2.build());
223
224         final MappingRecordBuilder SBmappingRecordBuilder = getDefaultMappingRecordBuilder();
225         SBmappingRecordBuilder.getLocatorRecord().add(SBlocatorRecordBuilder_1.build());
226         SBmappingRecordBuilder.getLocatorRecord().add(SBlocatorRecordBuilder_2.build());
227
228         // result
229         final MappingRecord result = (MappingRecord) MappingMergeUtil
230                 .computeNbSbIntersection(NBmappingRecordBuilder.build(), SBmappingRecordBuilder.build());
231         final Iterator<LocatorRecord> iterator = result.getLocatorRecord().iterator();
232         final LocatorRecord resultLocator_1 = iterator.next();
233         final LocatorRecord resultLocator_2 = iterator.next();
234
235         assertEquals(2, result.getLocatorRecord().size());
236
237         assertEquals("NB-locator-id", resultLocator_1.getLocatorId());
238         assertEquals(255, (short) resultLocator_1.getPriority()); // priority changed to 255
239
240         assertEquals("NB-locator-id", resultLocator_2.getLocatorId());
241         assertEquals(1, (short) resultLocator_2.getPriority());   // priority remains original
242     }
243
244     private static MappingRecordBuilder getDefaultMappingRecordBuilder() {
245         return new MappingRecordBuilder()
246                 .setEid(IPV4_PREFIX_EID_1)
247                 .setLocatorRecord(new ArrayList<>())
248                 .setRecordTtl(2)
249                 .setAction(MappingRecord.Action.NativelyForward)
250                 .setAuthoritative(true)
251                 .setMapVersion((short) 1)
252                 .setSiteId(SITE_ID_1)
253                 .setSourceRloc(IPV4_SOURCE_RLOC_1)
254                 .setTimestamp(new Date().getTime())
255                 .setXtrId(XTR_ID_1);
256     }
257 }