2 * Copyright (c) 2014 Contextream, 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
9 package org.opendaylight.lispflowmapping.implementation.lisp;
11 import static org.junit.Assert.assertEquals;
13 import java.util.ArrayList;
15 import junitx.framework.ArrayAssert;
17 import org.jmock.api.Invocation;
18 import org.junit.Before;
19 import org.junit.Ignore;
20 import org.junit.Test;
21 import org.opendaylight.lispflowmapping.implementation.LispMappingService;
22 import org.opendaylight.lispflowmapping.implementation.MappingService;
23 import org.opendaylight.lispflowmapping.implementation.MappingSystem;
24 import org.opendaylight.lispflowmapping.implementation.mdsal.DataStoreBackEnd;
25 import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
26 import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry;
27 import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
28 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
29 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
30 import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer;
31 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddressBuilder;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddressBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegisterBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.Mapping;
52 public class MapServerTest extends BaseTestCase {
54 private LispMappingService testedMapServer;
56 private MappingService mapService;
57 private DataStoreBackEnd dsbe;
58 private MappingSystem mapSystem;
60 private MapRegisterBuilder mapRegisterBuilder;
63 private ValueSaverAction<MappingEntry<?>[]> mappingEntriesSaver;
64 private MapRegister mapRegisterWithAuthentication;
65 private String eidIpv4String = "10.31.0.5/32";
66 private String eidIpv6String = "1:1:1:1:1:1:1:0/128";
70 public void before() throws Exception {
72 dao = context.mock(ILispDAO.class);
73 dsbe = context.mock(DataStoreBackEnd.class);
75 // map-caches init and table creation
76 allowing(dao).putTable(with(MappingOrigin.Northbound.toString()));will(returnValue(dao));
77 allowing(dao).putTable(with(MappingOrigin.Southbound.toString()));will(returnValue(dao));
79 mapSystem = new MappingSystem(dao, true, true, true);
81 mapService = new MappingService();
82 mapService.setDaoService(dao);
83 inject(mapService, "dsbe", dsbe);
84 inject(mapService, "mappingSystem", mapSystem);
86 testedMapServer = new LispMappingService();
87 testedMapServer.setMappingService(mapService);
88 testedMapServer.setShouldUseSmr(false);
89 testedMapServer.basicInit();
91 mapRegisterBuilder = new MapRegisterBuilder();
92 mapRegisterBuilder.setKeyId((short) 0);
93 mapRegisterBuilder.setAuthenticationData(new byte[0]);
94 eid = LispAddressUtil.asIpv4PrefixEid(eidIpv4String);
95 rloc = LispAddressUtil.asIpv4Rloc("192.168.136.10");
96 MappingRecordBuilder recordBuilder = new MappingRecordBuilder();
97 recordBuilder.setEid(eid);
98 recordBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
99 recordBuilder.getLocatorRecord().add(new LocatorRecordBuilder().setRloc(rloc).build());
100 recordBuilder.setAction(Action.NoAction).setMapVersion((short) 0).setAuthoritative(false).setRecordTtl(60)
101 .setMaskLength((short) 32);
102 mapRegisterBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
103 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
104 .setMappingRecord(recordBuilder.build()).build());
105 mapRegisterWithAuthentication = MapRegisterSerializer.getInstance().deserialize(
106 hexToByteBuffer("38 00 01 01 FF BB "
107 + "00 00 00 00 00 00 00 01 00 14 2c 61 b9 c9 9a 20 "
108 + "ba d8 f5 40 d3 55 6f 5f 6e 5a b2 0a bf b5 00 00 "
109 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 "
110 + "ff 00 00 05 00 01 c0 a8 88 0a"), null);
112 mappingEntriesSaver = new ValueSaverAction<MappingEntry<?>[]>();
117 public void handleMapRegister__NonSetMBit() throws Exception {
118 mapRegisterBuilder.setWantMapNotify(false);
120 addDefaultPutAndGetExpectations(eid);
121 assertNull(testedMapServer.handleMapRegister(mapRegisterBuilder.build()));
123 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
124 assertEquals(1, entries.length);
125 assertEquals(SubKeys.RECORD, entries[0].getKey());
126 assertEquals(rloc, ((MappingRecord) entries[0].getValue()).getLocatorRecord().get(0).getRloc());
131 public void handleMapRegisterIpv4__ValidNotifyEchoesRegister() throws Exception {
132 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
133 getDefaultMappingRecordBuilder().setEid(new EidBuilder().setAddressType(NoAddressAfi.class).setAddress(
134 (Address) new NoAddressBuilder().setNoAddress(true).build()).build()).build()).build());
135 mapRegisterBuilder.setWantMapNotify(true);
137 addDefaultPutAndGetExpectations(eid);
138 addDefaultPutAndGetExpectations(new EidBuilder().setAddressType(NoAddressAfi.class).setAddress(
139 (Address) new NoAddressBuilder().setNoAddress(true).build()).build());
140 MapRegister mr = mapRegisterBuilder.build();
141 MapNotify mapNotify = testedMapServer.handleMapRegister(mr).getLeft();
142 assertEquals(mr.getMappingRecordItem(), mapNotify.getMappingRecordItem());
143 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
144 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
145 assertEquals(mr.getNonce(), mapNotify.getNonce());
150 public void handleMapRegisterIpv4__CloneNotOwnYouClown() throws Exception {
151 mapRegisterBuilder = getDefaultMapRegisterBuilder();
152 mapRegisterBuilder.setWantMapNotify(true);
153 MappingRecordBuilder eidToLocatorBuilder = getDefaultMappingRecordBuilder();
154 eidToLocatorBuilder.setMaskLength((short) 32);
155 eid = LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32");
156 eidToLocatorBuilder.setEid(eid);
158 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
159 locatorBuilder.setRloc(LispAddressUtil.asIpv4Rloc("0.0.0.2"));
160 locatorBuilder.setPriority((short) 55);
161 eidToLocatorBuilder.getLocatorRecord().add(locatorBuilder.build());
163 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
164 .setMappingRecord(eidToLocatorBuilder.build()).build());
166 addDefaultPutAndGetExpectations(eid);
168 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterBuilder.build()).getLeft();
170 MappingRecord actualEidToLocator = mapNotify.getMappingRecordItem().get(0).getMappingRecord();
171 assertEquals(eid, actualEidToLocator.getEid());
172 assertEquals((byte) 55, actualEidToLocator.getLocatorRecord().get(0).getPriority().byteValue());
178 public void handleMapRegisterIpv4__ValidMask() throws Exception {
180 Eid newEid = LispAddressUtil.asIpv4PrefixEid(eidIpv4String + "/" + mask);
181 mapRegisterBuilder = getDefaultMapRegisterBuilder();
182 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
183 recordBuilder.setEid(newEid).setMaskLength((short) mask);
184 LocatorRecordBuilder locator = getDefaultLocatorBuilder();
185 locator.setRloc(rloc);
186 recordBuilder.getLocatorRecord().add(locator.build());
187 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
188 .setMappingRecord(recordBuilder.build()).build());
189 mapRegisterBuilder.setWantMapNotify(true);
190 MapRegister mr = mapRegisterBuilder.build();
192 addDefaultPutAndGetExpectations(newEid);
194 MapNotify mapNotify = testedMapServer.handleMapRegister(mr).getLeft();
195 assertEquals(newEid, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
196 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
197 assertEquals(mr.getMappingRecordItem(), mapNotify.getMappingRecordItem());
198 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
199 assertEquals(mr.getNonce(), mapNotify.getNonce());
204 public void handleMapRegister__NonMaskable() throws Exception {
206 mapRegisterBuilder = getDefaultMapRegisterBuilder();
207 Eid addr = LispAddressUtil.asMacEid("01:01:01:01:01:01");
208 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
209 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
210 locatorBuilder.setRloc(rloc);
211 recordBuilder.setEid(addr).setMaskLength((short) mask);
212 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
213 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
214 .setMappingRecord(recordBuilder.build()).build());
215 mapRegisterBuilder.setWantMapNotify(true);
217 addDefaultPutAndGetExpectations(addr);
219 MapRegister mapRegister = mapRegisterBuilder.build();
221 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister).getLeft();
222 assertEquals(addr, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
223 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
224 assertEquals(mapRegister.getMappingRecordItem(), mapNotify.getMappingRecordItem());
225 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
226 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
231 public void handleMapRegister__ZeroMask() throws Exception {
233 mapRegisterBuilder = getDefaultMapRegisterBuilder();
234 Eid addr = LispAddressUtil.asMacEid("01:01:01:01:01:01");
235 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
236 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
237 locatorBuilder.setRloc(rloc);
238 recordBuilder.setEid(addr).setMaskLength((short) mask);
239 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
240 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
241 .setMappingRecord(recordBuilder.build()).build());
242 mapRegisterBuilder.setWantMapNotify(true);
244 addDefaultPutAndGetExpectations(addr);
246 MapRegister mapRegister = mapRegisterBuilder.build();
248 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister).getLeft();
249 assertEquals(addr, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
250 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
251 assertEquals(mapRegister.getMappingRecordItem(), mapNotify.getMappingRecordItem());
252 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
253 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
258 public void handleMapRegisterIPv4__ZeroMask() throws Exception {
260 Eid newEid = LispAddressUtil.asIpv4PrefixEid(eidIpv4String + "/" + mask);
261 mapRegisterBuilder = getDefaultMapRegisterBuilder();
262 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
263 recordBuilder.setEid(newEid).setMaskLength((short) mask);
264 LocatorRecordBuilder locator = getDefaultLocatorBuilder();
265 locator.setRloc(rloc);
266 recordBuilder.getLocatorRecord().add(locator.build());
267 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
268 .setMappingRecord(recordBuilder.build()).build());
269 mapRegisterBuilder.setWantMapNotify(true);
270 MapRegister mr = mapRegisterBuilder.build();
272 addDefaultPutAndGetExpectations(newEid);
274 MapNotify mapNotify = testedMapServer.handleMapRegister(mr).getLeft();
275 assertEquals(newEid, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
276 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
277 assertEquals(mr.getMappingRecordItem(), mapNotify.getMappingRecordItem());
278 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
279 assertEquals(mr.getNonce(), mapNotify.getNonce());
284 public void handleMapRegisterIpv4__ValidMask32() throws Exception {
286 mapRegisterBuilder = getDefaultMapRegisterBuilder();
287 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
288 recordBuilder.setEid(eid).setMaskLength((short) mask);
289 LocatorRecordBuilder locator = getDefaultLocatorBuilder();
290 locator.setRloc(rloc);
291 recordBuilder.getLocatorRecord().add(locator.build());
292 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
293 .setMappingRecord(recordBuilder.build()).build());
294 mapRegisterBuilder.setWantMapNotify(true);
295 MapRegister mr = mapRegisterBuilder.build();
297 addDefaultPutAndGetExpectations(eid);
299 MapNotify mapNotify = testedMapServer.handleMapRegister(mr).getLeft();
300 assertEquals(eid, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
301 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
302 assertEquals(mr.getMappingRecordItem(), mapNotify.getMappingRecordItem());
303 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
304 assertEquals(mr.getNonce(), mapNotify.getNonce());
309 public void handleMapRegisterIpv6__ValidMask96() throws Exception {
311 mapRegisterBuilder = getDefaultMapRegisterBuilder();
312 Eid addr = LispAddressUtil.asIpv6PrefixEid(eidIpv6String + "/" + mask);
313 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
314 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
315 locatorBuilder.setRloc(rloc);
316 recordBuilder.setEid(addr).setMaskLength((short) mask);
317 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
318 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
319 .setMappingRecord(recordBuilder.build()).build());
320 mapRegisterBuilder.setWantMapNotify(true);
322 addDefaultPutAndGetExpectations(addr);
324 MapRegister mapRegister = mapRegisterBuilder.build();
326 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister).getLeft();
327 assertEquals(addr, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
328 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
329 assertEquals(mapRegister.getMappingRecordItem(), mapNotify.getMappingRecordItem());
330 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
331 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
336 public void handleMapRegisterIpv6__ZeroMask() throws Exception {
338 mapRegisterBuilder = getDefaultMapRegisterBuilder();
339 Eid addr = LispAddressUtil.asIpv6PrefixEid(eidIpv6String + "/" + mask);
340 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
341 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
342 locatorBuilder.setRloc(rloc);
343 recordBuilder.setEid(addr).setMaskLength((short) mask);
344 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
345 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
346 .setMappingRecord(recordBuilder.build()).build());
347 mapRegisterBuilder.setWantMapNotify(true);
349 addDefaultPutAndGetExpectations(addr);
351 MapRegister mapRegister = mapRegisterBuilder.build();
353 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister).getLeft();
354 assertEquals(addr, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
355 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
356 assertEquals(mapRegister.getMappingRecordItem(), mapNotify.getMappingRecordItem());
357 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
358 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
363 public void handleMapRegisterIpv6__ValidMask48() throws Exception {
365 mapRegisterBuilder = getDefaultMapRegisterBuilder();
366 Eid addr = LispAddressUtil.asIpv6PrefixEid(eidIpv6String +"/" + mask);
367 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
368 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
369 locatorBuilder.setRloc(rloc);
370 recordBuilder.setEid(addr).setMaskLength((short) mask);
371 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
372 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
373 .setMappingRecord(recordBuilder.build()).build());
374 mapRegisterBuilder.setWantMapNotify(true);
376 addDefaultPutAndGetExpectations(addr);
378 MapRegister mapRegister = mapRegisterBuilder.build();
380 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister).getLeft();
381 assertEquals(addr, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
382 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
383 assertEquals(mapRegister.getMappingRecordItem(), mapNotify.getMappingRecordItem());
384 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
385 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
390 public void handleMapRegisterIpv6__ValidMask128() throws Exception {
392 mapRegisterBuilder = getDefaultMapRegisterBuilder();
393 Eid addr = LispAddressUtil.asIpv6PrefixEid(eidIpv6String);
394 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
395 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
396 locatorBuilder.setRloc(rloc);
397 recordBuilder.setEid(addr).setMaskLength((short) mask);
398 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
399 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
400 .setMappingRecord(recordBuilder.build()).build());
401 mapRegisterBuilder.setWantMapNotify(true);
403 addDefaultPutAndGetExpectations(addr);
405 MapRegister mapRegister = mapRegisterBuilder.build();
407 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister).getLeft();
408 assertEquals(addr, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
409 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
410 assertEquals(mapRegister.getMappingRecordItem(), mapNotify.getMappingRecordItem());
411 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
412 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
417 public void handleMapRegisterIPV4AndIpv6__ValidMask96() throws Exception {
419 mapRegisterBuilder = getDefaultMapRegisterBuilder();
420 MappingRecordBuilder recordBuilder0 = getDefaultMappingRecordBuilder();
421 recordBuilder0.setEid(eid).setMaskLength((short) 32);
422 Eid addr = LispAddressUtil.asIpv6PrefixEid(eidIpv6String + "/" + mask);
423 MappingRecordBuilder recordBuilder1 = getDefaultMappingRecordBuilder();
424 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
425 locatorBuilder.setRloc(rloc);
426 locatorBuilder.setRloc(rloc);
427 recordBuilder1.setEid(addr).setMaskLength((short) mask);
428 recordBuilder1.getLocatorRecord().add(locatorBuilder.build());
429 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
430 .setMappingRecord(recordBuilder0.build()).build());
431 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
432 .setMappingRecord(recordBuilder1.build()).build());
433 mapRegisterBuilder.setWantMapNotify(true);
435 addDefaultPutAndGetExpectations(eid);
436 addDefaultPutAndGetExpectations(addr);
438 MapRegister mapRegister = mapRegisterBuilder.build();
440 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister).getLeft();
441 assertEquals(eid, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getEid());
442 assertEquals(addr, mapNotify.getMappingRecordItem().get(1).getMappingRecord().getEid());
443 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
444 assertEquals(mapRegister.getMappingRecordItem(), mapNotify.getMappingRecordItem());
445 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
446 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
451 public void handleMapRegister__MultipleRLOCs() throws Exception {
452 addDefaultPutAndGetExpectations(eid);
454 mapRegisterBuilder = getDefaultMapRegisterBuilder();
456 Rloc rloc1 = LispAddressUtil.asIpv6Rloc("0:0:0:0:0:0:0:7");
457 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
458 recordBuilder.setEid(eid);
459 LocatorRecordBuilder locatorBuilder1 = getDefaultLocatorBuilder();
460 locatorBuilder1.setRloc(rloc0);
461 LocatorRecordBuilder locatorBuilder2 = getDefaultLocatorBuilder();
462 locatorBuilder2.setRloc(rloc1);
463 recordBuilder.getLocatorRecord().add(locatorBuilder1.build());
464 recordBuilder.getLocatorRecord().add(locatorBuilder2.build());
466 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
467 .setMappingRecord(recordBuilder.build()).build());
469 testedMapServer.handleMapRegister(mapRegisterBuilder.build());
471 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
472 assertEquals(1, entries.length);
474 assertEquals(SubKeys.RECORD, entries[0].getKey());
475 assertEquals(rloc0, ((MappingRecord) entries[0].getValue()).getLocatorRecord()
477 assertEquals(rloc1, ((MappingRecord) entries[0].getValue()).getLocatorRecord()
484 public void handleMapRegister__MultipleTypes() throws Exception {
485 addDefaultPutAndGetExpectations(eid);
487 mapRegisterBuilder = getDefaultMapRegisterBuilder();
489 // LispAFIAddress rloc1 =
490 // LispAddressUtil.asIPv6AfiAddress("0:0:0:0:0:0:0:7");
491 String subkey = "bla";
492 Rloc rloc1 = LispAddressUtil.asKeyValueAddress(subkey,
493 SimpleAddressBuilder.getDefaultInstance("0:0:0:0:0:0:0:7"));
494 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
495 recordBuilder.setEid(eid);
496 LocatorRecordBuilder locatorBuilder1 = getDefaultLocatorBuilder();
497 locatorBuilder1.setRloc(rloc0);
498 LocatorRecordBuilder locatorBuilder2 = getDefaultLocatorBuilder();
499 locatorBuilder2.setRloc(rloc1);
500 recordBuilder.getLocatorRecord().add(locatorBuilder1.build());
501 recordBuilder.getLocatorRecord().add(locatorBuilder2.build());
503 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
504 .setMappingRecord(recordBuilder.build()).build());
506 testedMapServer.handleMapRegister(mapRegisterBuilder.build());
508 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
509 assertEquals(1, entries.length);
510 MappingRecord storedMapping = (MappingRecord) entries[0].getValue();
511 assertEquals(2, storedMapping.getLocatorRecord().size());
512 assertEquals(SubKeys.RECORD, entries[0].getKey());
513 assertEquals(rloc0, storedMapping.getLocatorRecord().get(0).getRloc());
514 assertEquals(rloc1, storedMapping.getLocatorRecord().get(1).getRloc());
520 public void handleMapRegister__TestOverwrite() throws Exception {
521 addDefaultPutAndGetExpectations(eid);
523 addEidToLocatorRecord();
525 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
526 assertEquals(1, entries.length);
528 assertEquals(SubKeys.RECORD, entries[0].getKey());
529 assertEquals(rloc, ((MappingRecord) entries[0].getValue()).getLocatorRecord().get(0).getRloc());
533 // public void handleMapRegister__TestDontOverwrite() throws Exception {
534 // int hc = rloc.getAddress().hashCode();
536 // addDefaultPutAndGetExpectations(eid);
537 // testedMapServer.setOverwrite(false);
539 // addEidToLocatorRecord();
541 // MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
542 // assertEquals(1, entries.length);
544 // assertEquals(String.valueOf(hc), entries[0].getKey());
545 // assertEquals(rloc, ((EidToLocatorRecord) entries[0].getValue()).getLocatorRecord()
546 // .get(0).getEid());
549 private void addEidToLocatorRecord() {
550 MappingRecordBuilder recordBuilder = getDefaultMappingRecordBuilder();
551 recordBuilder.setEid(eid);
552 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
553 locatorBuilder.setRloc(rloc);
554 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
556 mapRegisterBuilder = getDefaultMapRegisterBuilder();
557 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
558 .setMappingRecord(recordBuilder.build()).build());
560 testedMapServer.handleMapRegister(mapRegisterBuilder.build());
565 public void handleMapRegister__MultipleEIDs() throws Exception {
566 addDefaultPutAndGetExpectations(eid);
568 Rloc rloc1 = LispAddressUtil.asIpv6Rloc("0:0:0:0:0:0:0:7");
569 mapRegisterBuilder = getDefaultMapRegisterBuilder();
570 MappingRecordBuilder etlrBuilder = getDefaultMappingRecordBuilder();
571 etlrBuilder.getLocatorRecord().add(getDefaultLocatorBuilder().setRloc(rloc1).build());
572 mapRegisterBuilder.setWantMapNotify(true);
573 etlrBuilder.setEid(eid);
575 MappingRecordBuilder etlr2Builder = getDefaultMappingRecordBuilder();
576 Eid address = LispAddressUtil.asIpv4PrefixEid("1.1.1.1");
577 etlr2Builder.setEid(address);
578 etlr2Builder.setMaskLength((short) 32);
580 etlr2Builder.setRecordTtl(recordTtl);
581 etlr2Builder.getLocatorRecord().add(
582 getDefaultLocatorBuilder().setPriority((short) 10)
583 .setRloc(LispAddressUtil.asIpv4Rloc("2.2.2.2")).build());
584 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
585 .setMappingRecord(etlrBuilder.build()).build());
586 mapRegisterBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
587 .setMappingRecord(etlr2Builder.build()).build());
588 addDefaultPutAndGetExpectations(address);
589 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterBuilder.build()).getLeft();
591 assertEquals(rloc1, mapNotify.getMappingRecordItem().get(0).getMappingRecord().getLocatorRecord().get(0)
593 assertEquals(LispAddressUtil.asIpv4Rloc("2.2.2.2"), mapNotify.getMappingRecordItem().get(1).getMappingRecord()
594 .getLocatorRecord().get(0).getRloc());
595 assertEquals(address, mapNotify.getMappingRecordItem().get(1).getMappingRecord().getEid());
596 assertEquals(recordTtl, mapNotify.getMappingRecordItem().get(1).getMappingRecord().getRecordTtl().intValue());
602 public void handleMapRegisterIpv4__CheckWrongPassword() throws Exception {
604 addGetExpectations(LispAddressUtil.asIpv4PrefixEid("153.16.254.1"), 0, 31, "bla");
605 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication).getLeft();
606 assertEquals(null, mapNotify);
611 public void handleMapRegisterIpv4__CheckNoPasswordAndThenPassword() throws Exception {
613 addGetExpectations(LispAddressUtil.asIpv4PrefixEid("153.16.254.1"), 0, 25, "password");
614 addPutExpectations(LispAddressUtil.asIpv4PrefixEid("153.16.254.1"));
615 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication).getLeft();
616 assertEquals(mapRegisterWithAuthentication.getMappingRecordItem(), mapNotify.getMappingRecordItem());
617 assertEquals(mapRegisterWithAuthentication.getKeyId(), mapNotify.getKeyId());
618 assertEquals(mapRegisterWithAuthentication.getNonce(), mapNotify.getNonce());
623 public void handleMapRegisterIpv4__CheckNoPassword() throws Exception {
625 addGetExpectations(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"), 30, 0, "password");
626 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication).getLeft();
627 assertEquals(null, mapNotify);
632 public void handleMapRegisterIpv4__CheckNoreturn() throws Exception {
634 addGetExpectations(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"));
635 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication).getLeft();
636 assertEquals(mapNotify, null);
639 private void addDefaultPutAndGetExpectations(Eid addr) {
640 addPutExpectations(addr);
641 addGetExpectations(addr);
644 private void addGetExpectations(Eid address) {
645 addGetExpectations(address, 0, 0, SubKeys.AUTH_KEY);
648 private void prepareDsbe() {
649 ValueSaverAction<Mapping> dsbeAddMappingSaverAction = new ValueSaverAction<Mapping>() {
651 public Object invoke(Invocation invocation) throws Throwable {
652 mapSystem.addMapping(lastValue.getOrigin(), lastValue.getMappingRecord().getEid(),
653 (Object) lastValue.getMappingRecord());
657 oneOf(dsbe).addMapping(with(dsbeAddMappingSaverAction)); will(dsbeAddMappingSaverAction);
660 private void addPutExpectations(Eid address) {
661 // needed for mapping-service addMapping
663 exactly(2).of(dao).put(weq(address), with(mappingEntriesSaver));
666 private void addGetExpectations(Eid address, int withoutPassword, int withPassword, String password) {
667 if (withoutPassword > 0) {
668 String result = null;
670 allowing(dao).getSpecific(with(address), with(SubKeys.AUTH_KEY));
673 if (withPassword > 0) {
674 String result = null;
676 allowing(dao).getSpecific(with(address), with(SubKeys.AUTH_KEY));
679 for (int i = MaskUtil.getMaskForAddress(address.getAddress()); i >= 0; i--) {
680 Eid addr = MaskUtil.normalize(address, (short) i);
681 allowing(dao).getSpecific(with(addr), with(SubKeys.AUTH_KEY)); ret(null);
682 // check if mapping exists before insertion
683 allowing(dao).get(with(addr));will(returnValue(null));
688 private MapRegisterBuilder getDefaultMapRegisterBuilder() {
689 MapRegisterBuilder mrb = new MapRegisterBuilder();
690 mrb.setKeyId((short) 0);
691 mrb.setNonce((long) 0);
692 mrb.setWantMapNotify(false);
693 mrb.setProxyMapReply(false);
694 mrb.setMappingRecordItem(new ArrayList<MappingRecordItem>());
695 mrb.setAuthenticationData(new byte[0]);
699 private MappingRecordBuilder getDefaultMappingRecordBuilder() {
700 MappingRecordBuilder builder = new MappingRecordBuilder();
701 builder.setAction(Action.NoAction);
702 builder.setAuthoritative(false);
703 builder.setLocatorRecord(new ArrayList<LocatorRecord>());
704 builder.setMapVersion((short) 0);
705 builder.setMaskLength((short) 32);
706 builder.setRecordTtl(60);
710 private LocatorRecordBuilder getDefaultLocatorBuilder() {
711 LocatorRecordBuilder builder = new LocatorRecordBuilder();
712 builder.setLocalLocator(false);
713 builder.setMulticastPriority((short) 0);
714 builder.setMulticastWeight((short) 0);
715 builder.setPriority((short) 0);
716 builder.setRlocProbed(false);
717 builder.setRouted(false);
718 builder.setWeight((short) 0);