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