blob: 8eb888d2c14709f9b8f20e605ad23f1418307363 [file] [log] [blame]
Jian Licdd276b2016-11-15 15:53:21 +09001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Jian Li5e505c62016-12-05 02:44:24 +090016package org.onosproject.lisp.ctl.impl;
Jian Licdd276b2016-11-15 15:53:21 +090017
18import com.google.common.collect.ImmutableList;
19import org.junit.Before;
20import org.junit.Test;
21import org.onlab.packet.IpAddress;
Jian Li672ebda2017-02-06 20:21:04 +090022import org.onosproject.lisp.msg.protocols.DefaultLispLocator.DefaultLocatorBuilder;
Jian Licdd276b2016-11-15 15:53:21 +090023import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.DefaultMapRecordBuilder;
24import org.onosproject.lisp.msg.protocols.LispEidRecord;
Jian Li672ebda2017-02-06 20:21:04 +090025import org.onosproject.lisp.msg.protocols.LispLocator;
Jian Licdd276b2016-11-15 15:53:21 +090026import org.onosproject.lisp.msg.protocols.LispMapRecord;
27import org.onosproject.lisp.msg.protocols.LispMapRecord.MapRecordBuilder;
28import org.onosproject.lisp.msg.types.LispIpv4Address;
29
30import java.util.List;
31
32import static org.hamcrest.MatcherAssert.assertThat;
33import static org.hamcrest.Matchers.is;
34
35/**
36 * Tests for LISP EID RLOC Map class.
37 */
Jian Li29986d82016-12-01 03:25:12 +090038public class LispMappingDatabaseTest {
Jian Licdd276b2016-11-15 15:53:21 +090039
Jian Li672ebda2017-02-06 20:21:04 +090040 private static final String LOCATOR_IP_1_1 = "123.1.1.1";
41 private static final String LOCATOR_IP_1_2 = "123.1.1.2";
42 private static final String LOCATOR_IP_1_3 = "123.1.1.3";
43
44 private static final String LOCATOR_IP_2_1 = "123.2.1.1";
45 private static final String LOCATOR_IP_2_2 = "123.2.1.2";
46
47 private static final String LOCATOR_IP_3_1 = "123.3.1.1";
48
49 private static final String EID_IP_1 = "10.1.1.1";
50 private static final String EID_IP_2 = "10.1.2.0";
51 private static final String EID_IP_3 = "10.2.0.0";
52
53 private static final String EID_IP_PREFIX_1_32 = "10.2.1.1";
54 private static final String EID_IP_PREFIX_1_24 = "10.2.1.0";
55 private static final String EID_IP_PREFIX_1_16 = "10.2.0.0";
56
57 private static final String EID_IP_PREFIX_2_32 = "10.1.2.1";
58 private static final String EID_IP_PREFIX_2_24 = "10.1.2.0";
59
Jian Li882e1902017-06-08 04:06:01 +090060 private final LispMappingDatabase expireMapDb = LispExpireMapDatabase.getInstance();
61 private final LispMappingDatabase radixTreeDb = LispRadixTreeDatabase.getInstance();
Jian Licdd276b2016-11-15 15:53:21 +090062
63 @Before
64 public void setup() {
65
66 byte cidr1 = (byte) 32;
Jian Li672ebda2017-02-06 20:21:04 +090067 LispIpv4Address eid1 = new LispIpv4Address(IpAddress.valueOf(EID_IP_1));
Jian Licdd276b2016-11-15 15:53:21 +090068 LispEidRecord eidRecord1 = new LispEidRecord(cidr1, eid1);
69
Jian Li672ebda2017-02-06 20:21:04 +090070 LispIpv4Address locator11 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_1_1));
71 LispIpv4Address locator12 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_1_2));
72 LispIpv4Address locator13 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_1_3));
Jian Licdd276b2016-11-15 15:53:21 +090073
Jian Li672ebda2017-02-06 20:21:04 +090074 LispLocator locatorRecord11 = new DefaultLocatorBuilder()
75 .withLocatorAfi(locator11).build();
76 LispLocator locatorRecord12 = new DefaultLocatorBuilder()
77 .withLocatorAfi(locator12).build();
78 LispLocator locatorRecord13 = new DefaultLocatorBuilder()
79 .withLocatorAfi(locator13).build();
80 List<LispLocator> locatorRecords1 =
Jian Licdd276b2016-11-15 15:53:21 +090081 ImmutableList.of(locatorRecord11, locatorRecord12, locatorRecord13);
82
83 byte cidr2 = (byte) 24;
Jian Li672ebda2017-02-06 20:21:04 +090084 LispIpv4Address eid2 = new LispIpv4Address(IpAddress.valueOf(EID_IP_2));
Jian Licdd276b2016-11-15 15:53:21 +090085 LispEidRecord eidRecord2 = new LispEidRecord(cidr2, eid2);
86
Jian Li672ebda2017-02-06 20:21:04 +090087 LispIpv4Address locator21 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_2_1));
88 LispIpv4Address locator22 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_2_2));
Jian Licdd276b2016-11-15 15:53:21 +090089
Jian Li672ebda2017-02-06 20:21:04 +090090 LispLocator locatorRecord21 = new DefaultLocatorBuilder()
91 .withLocatorAfi(locator21).build();
92 LispLocator locatorRecord22 = new DefaultLocatorBuilder()
93 .withLocatorAfi(locator22).build();
Jian Licdd276b2016-11-15 15:53:21 +090094
Jian Li672ebda2017-02-06 20:21:04 +090095 List<LispLocator> locatorRecords2 =
96 ImmutableList.of(locatorRecord21, locatorRecord22);
Jian Licdd276b2016-11-15 15:53:21 +090097
98 byte cidr3 = (byte) 16;
Jian Li672ebda2017-02-06 20:21:04 +090099 LispIpv4Address eid3 = new LispIpv4Address(IpAddress.valueOf(EID_IP_3));
Jian Licdd276b2016-11-15 15:53:21 +0900100 LispEidRecord eidRecord3 = new LispEidRecord(cidr3, eid3);
101
Jian Li672ebda2017-02-06 20:21:04 +0900102 LispIpv4Address locator31 = new LispIpv4Address(IpAddress.valueOf(LOCATOR_IP_3_1));
Jian Licdd276b2016-11-15 15:53:21 +0900103
Jian Li672ebda2017-02-06 20:21:04 +0900104 LispLocator locatorRecord31 = new DefaultLocatorBuilder()
105 .withLocatorAfi(locator31).build();
Jian Licdd276b2016-11-15 15:53:21 +0900106
Jian Li672ebda2017-02-06 20:21:04 +0900107 List<LispLocator> locatorRecords3 = ImmutableList.of(locatorRecord31);
Jian Licdd276b2016-11-15 15:53:21 +0900108
109 MapRecordBuilder builder1 = new DefaultMapRecordBuilder();
110 builder1.withMaskLength(cidr1);
111 builder1.withEidPrefixAfi(eid1);
112 builder1.withLocators(locatorRecords1);
Jian Li29986d82016-12-01 03:25:12 +0900113 builder1.withRecordTtl(60);
Jian Licdd276b2016-11-15 15:53:21 +0900114 LispMapRecord mapRecord1 = builder1.build();
115
116 MapRecordBuilder builder2 = new DefaultMapRecordBuilder();
117 builder2.withMaskLength(cidr2);
118 builder2.withEidPrefixAfi(eid2);
119 builder2.withLocators(locatorRecords2);
Jian Li29986d82016-12-01 03:25:12 +0900120 builder2.withRecordTtl(60);
Jian Licdd276b2016-11-15 15:53:21 +0900121 LispMapRecord mapRecord2 = builder2.build();
122
123 MapRecordBuilder builder3 = new DefaultMapRecordBuilder();
124 builder3.withMaskLength(cidr3);
125 builder3.withEidPrefixAfi(eid3);
126 builder3.withLocators(locatorRecords3);
Jian Li29986d82016-12-01 03:25:12 +0900127 builder3.withRecordTtl(60);
Jian Licdd276b2016-11-15 15:53:21 +0900128 LispMapRecord mapRecord3 = builder3.build();
129
Jian Li882e1902017-06-08 04:06:01 +0900130 expireMapDb.putMapRecord(eidRecord1, mapRecord1, true);
131 expireMapDb.putMapRecord(eidRecord2, mapRecord2, true);
132 expireMapDb.putMapRecord(eidRecord3, mapRecord3, true);
133
134 radixTreeDb.putMapRecord(eidRecord1, mapRecord1, true);
135 radixTreeDb.putMapRecord(eidRecord2, mapRecord2, true);
136 radixTreeDb.putMapRecord(eidRecord3, mapRecord3, true);
Jian Licdd276b2016-11-15 15:53:21 +0900137 }
138
139 @Test
140 public void test32MaskRange() {
141 byte cidr32 = (byte) 32;
Jian Li672ebda2017-02-06 20:21:04 +0900142 LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf(EID_IP_1));
Jian Licdd276b2016-11-15 15:53:21 +0900143 LispEidRecord record = new LispEidRecord(cidr32, eid);
Jian Li882e1902017-06-08 04:06:01 +0900144 LispMapRecord mapRecord1 = expireMapDb.getMapRecordByEidRecord(record, true);
145 LispMapRecord mapRecord2 = radixTreeDb.getMapRecordByEidRecord(record, true);
Jian Licdd276b2016-11-15 15:53:21 +0900146
147 assertThat("Failed to fetch the RLOCs with /32 EID record",
Jian Li882e1902017-06-08 04:06:01 +0900148 mapRecord1.getLocatorCount(), is(3));
149
150 assertThat("Failed to fetch the RLOCs with /32 EID record",
151 mapRecord2.getLocatorCount(), is(3));
Jian Licdd276b2016-11-15 15:53:21 +0900152 }
153
154 @Test
155 public void test24MaskRange() {
156 byte cidr32 = (byte) 32;
Jian Li672ebda2017-02-06 20:21:04 +0900157 LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_2_32));
Jian Licdd276b2016-11-15 15:53:21 +0900158 LispEidRecord record32 = new LispEidRecord(cidr32, eid);
Jian Li882e1902017-06-08 04:06:01 +0900159 LispMapRecord mapRecordExpireMap32 = expireMapDb.getMapRecordByEidRecord(record32, true);
160 LispMapRecord mapRecordRadixTree32 = radixTreeDb.getMapRecordByEidRecord(record32, true);
Jian Licdd276b2016-11-15 15:53:21 +0900161
162 byte cidr24 = (byte) 24;
Jian Li672ebda2017-02-06 20:21:04 +0900163 LispIpv4Address eid24 = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_2_24));
Jian Licdd276b2016-11-15 15:53:21 +0900164 LispEidRecord record24 = new LispEidRecord(cidr24, eid24);
Jian Li882e1902017-06-08 04:06:01 +0900165 LispMapRecord mapRecordExpireMap24 = expireMapDb.getMapRecordByEidRecord(record24, true);
166 LispMapRecord mapRecordRadixTree24 = radixTreeDb.getMapRecordByEidRecord(record32, true);
Jian Licdd276b2016-11-15 15:53:21 +0900167
168 assertThat("Failed to fetch the RLOCs with /32 EID record",
Jian Li882e1902017-06-08 04:06:01 +0900169 mapRecordExpireMap32.getLocatorCount(), is(2));
Jian Licdd276b2016-11-15 15:53:21 +0900170 assertThat("Failed to fetch the RLOCs with /24 EID record",
Jian Li882e1902017-06-08 04:06:01 +0900171 mapRecordExpireMap24.getLocatorCount(), is(2));
172
173 assertThat("Failed to fetch the RLOCs with /32 EID record",
174 mapRecordRadixTree32.getLocatorCount(), is(2));
175 assertThat("Failed to fetch the RLOCs with /24 EID record",
176 mapRecordRadixTree24.getLocatorCount(), is(2));
Jian Licdd276b2016-11-15 15:53:21 +0900177 }
178
179 @Test
180 public void test16MaskRange() {
181 byte cidr32 = (byte) 32;
Jian Li672ebda2017-02-06 20:21:04 +0900182 LispIpv4Address eid = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_1_32));
Jian Licdd276b2016-11-15 15:53:21 +0900183 LispEidRecord record32 = new LispEidRecord(cidr32, eid);
Jian Li882e1902017-06-08 04:06:01 +0900184 LispMapRecord mapRecordExpireMap32 = expireMapDb.getMapRecordByEidRecord(record32, true);
185 LispMapRecord mapRecordRadixTree32 = radixTreeDb.getMapRecordByEidRecord(record32, true);
Jian Licdd276b2016-11-15 15:53:21 +0900186
187 byte cidr24 = (byte) 24;
Jian Li672ebda2017-02-06 20:21:04 +0900188 LispIpv4Address eid24 = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_1_24));
Jian Licdd276b2016-11-15 15:53:21 +0900189 LispEidRecord record24 = new LispEidRecord(cidr24, eid24);
Jian Li882e1902017-06-08 04:06:01 +0900190 LispMapRecord mapRecordExpireMap24 = expireMapDb.getMapRecordByEidRecord(record24, true);
191 LispMapRecord mapRecordRadixTree24 = radixTreeDb.getMapRecordByEidRecord(record32, true);
Jian Licdd276b2016-11-15 15:53:21 +0900192
193 byte cidr16 = (byte) 16;
Jian Li672ebda2017-02-06 20:21:04 +0900194 LispIpv4Address eid16 = new LispIpv4Address(IpAddress.valueOf(EID_IP_PREFIX_1_16));
Jian Licdd276b2016-11-15 15:53:21 +0900195 LispEidRecord record16 = new LispEidRecord(cidr16, eid16);
Jian Li882e1902017-06-08 04:06:01 +0900196 LispMapRecord mapRecordExpireMap16 = expireMapDb.getMapRecordByEidRecord(record16, true);
197 LispMapRecord mapRecordRadixTree16 = radixTreeDb.getMapRecordByEidRecord(record16, true);
Jian Licdd276b2016-11-15 15:53:21 +0900198
199 assertThat("Failed to fetch the RLOCs with /32 EID record",
Jian Li882e1902017-06-08 04:06:01 +0900200 mapRecordExpireMap32.getLocatorCount(), is(1));
Jian Licdd276b2016-11-15 15:53:21 +0900201 assertThat("Failed to fetch the RLOCs with /24 EID record",
Jian Li882e1902017-06-08 04:06:01 +0900202 mapRecordExpireMap24.getLocatorCount(), is(1));
Jian Licdd276b2016-11-15 15:53:21 +0900203 assertThat("Failed to fetch the RLOCs with /16 EID record",
Jian Li882e1902017-06-08 04:06:01 +0900204 mapRecordExpireMap16.getLocatorCount(), is(1));
205
206 assertThat("Failed to fetch the RLOCs with /32 EID record",
207 mapRecordRadixTree32.getLocatorCount(), is(1));
208 assertThat("Failed to fetch the RLOCs with /24 EID record",
209 mapRecordRadixTree24.getLocatorCount(), is(1));
210 assertThat("Failed to fetch the RLOCs with /16 EID record",
211 mapRecordRadixTree16.getLocatorCount(), is(1));
Jian Licdd276b2016-11-15 15:53:21 +0900212 }
213}