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.Test;
20 import org.opendaylight.lispflowmapping.implementation.LispMappingService;
21 import org.opendaylight.lispflowmapping.implementation.MappingService;
22 import org.opendaylight.lispflowmapping.implementation.MappingSystem;
23 import org.opendaylight.lispflowmapping.implementation.mdsal.DataStoreBackEnd;
24 import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
25 import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry;
26 import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
27 import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor;
28 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
29 import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer;
30 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord.Action;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.LispAFIAddress;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecord;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.LispAddressContainer;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.lispaddress.lispaddresscontainer.address.no.NoAddressBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegisterBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.Mapping;
45 public class MapServerTest extends BaseTestCase {
47 private LispMappingService testedMapServer;
49 private MappingService mapService;
50 private DataStoreBackEnd dsbe;
51 private MappingSystem mapSystem;
53 private MapRegisterBuilder mapRegisterBuilder;
54 private LispAddressContainer eid;
55 private LispAddressContainer rloc;
56 private ValueSaverAction<MappingEntry<?>[]> mappingEntriesSaver;
57 private MapRegister mapRegisterWithAuthentication;
58 private String eidIpv4String = "10.31.0.5";
59 private String eidIpv6String = "1:1:1:1:1:1:1:0";
63 public void before() throws Exception {
65 dao = context.mock(ILispDAO.class);
66 dsbe = context.mock(DataStoreBackEnd.class);
68 // map-caches init and table creation
69 allowing(dao).putTable(with(MappingOrigin.Northbound.toString()));will(returnValue(dao));
70 allowing(dao).putTable(with(MappingOrigin.Southbound.toString()));will(returnValue(dao));
72 mapSystem = new MappingSystem(dao, true, true, true);
74 mapService = new MappingService();
75 mapService.setDaoService(dao);
76 inject(mapService, "dsbe", dsbe);
77 inject(mapService, "mappingSystem", mapSystem);
79 testedMapServer = new LispMappingService();
80 testedMapServer.setMappingService(mapService);
81 testedMapServer.setShouldUseSmr(false);
82 testedMapServer.basicInit();
84 mapRegisterBuilder = new MapRegisterBuilder();
85 mapRegisterBuilder.setKeyId((short) 0);
86 mapRegisterBuilder.setAuthenticationData(new byte[0]);
87 eid = LispAFIConvertor.asIPv4Address(eidIpv4String);
88 rloc = LispAFIConvertor.asIPv4Address("192.168.136.10");
89 EidToLocatorRecordBuilder recordBuilder = new EidToLocatorRecordBuilder();
90 recordBuilder.setLispAddressContainer(eid).setMaskLength((short) 32);
91 recordBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
92 recordBuilder.getLocatorRecord().add(new LocatorRecordBuilder().setLispAddressContainer(rloc).build());
93 recordBuilder.setAction(Action.NoAction).setMapVersion((short) 0).setAuthoritative(false).setRecordTtl(60).setMaskLength((short) 32);
94 mapRegisterBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
95 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
96 mapRegisterWithAuthentication = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB "
98 + "00 00 00 00 00 00 00 01 00 14 2c 61 b9 c9 9a 20 " //
99 + "ba d8 f5 40 d3 55 6f 5f 6e 5a b2 0a bf b5 00 00 " //
100 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
101 + "ff 00 00 05 00 01 c0 a8 88 0a"));
103 mappingEntriesSaver = new ValueSaverAction<MappingEntry<?>[]>();
107 public void handleMapRegister__NonSetMBit() throws Exception {
108 mapRegisterBuilder.setWantMapNotify(false);
110 addDefaultPutAndGetExpectations(eid);
111 assertNull(testedMapServer.handleMapRegister(mapRegisterBuilder.build()));
113 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
114 assertEquals(1, entries.length);
115 assertEquals(SubKeys.RECORD, entries[0].getKey());
116 assertEquals(rloc, ((EidToLocatorRecord) entries[0].getValue())
117 .getLocatorRecord().get(0).getLispAddressContainer());
121 public void handleMapRegisterIpv4__ValidNotifyEchoesRegister() throws Exception {
122 mapRegisterBuilder.getEidToLocatorRecord().add(
123 getDefaultEidToLocatorBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(new NoAddressBuilder().build())).build());
124 mapRegisterBuilder.setWantMapNotify(true);
126 addDefaultPutAndGetExpectations(eid);
127 addDefaultPutAndGetExpectations(LispAFIConvertor.toContainer(new NoAddressBuilder().build()));
128 MapRegister mr = mapRegisterBuilder.build();
129 MapNotify mapNotify = testedMapServer.handleMapRegister(mr);
130 assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
131 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
132 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
133 assertEquals(mr.getNonce(), mapNotify.getNonce());
137 public void handleMapRegisterIpv4__CloneNotOwnYouClown() throws Exception {
138 mapRegisterBuilder = getDefaultMapRegisterBuilder();
139 mapRegisterBuilder.setWantMapNotify(true);
140 EidToLocatorRecordBuilder eidToLocatorBuilder = getDefaultEidToLocatorBuilder();
141 eidToLocatorBuilder.setMaskLength((short) 32);
142 eid = LispAFIConvertor.asIPv4Address("0.0.0.1");
143 eidToLocatorBuilder.setLispAddressContainer(eid);
145 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
146 locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.2")));
147 locatorBuilder.setPriority((short) 55);
148 eidToLocatorBuilder.getLocatorRecord().add(locatorBuilder.build());
150 mapRegisterBuilder.getEidToLocatorRecord().add(eidToLocatorBuilder.build());
152 addDefaultPutAndGetExpectations(eid);
154 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterBuilder.build());
156 EidToLocatorRecord actualEidToLocator = mapNotify.getEidToLocatorRecord().get(0);
157 assertEquals(eid, actualEidToLocator.getLispAddressContainer());
158 assertEquals((byte) 55, actualEidToLocator.getLocatorRecord().get(0).getPriority().byteValue());
163 public void handleMapRegisterIpv4__ValidMask() throws Exception {
165 LispAddressContainer newEid = LispAFIConvertor.asIPv4Prefix(eidIpv4String, mask);
166 mapRegisterBuilder = getDefaultMapRegisterBuilder();
167 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
168 recordBuilder.setLispAddressContainer(newEid).setMaskLength((short) mask);
169 LocatorRecordBuilder locator = getDefaultLocatorBuilder();
170 locator.setLispAddressContainer(rloc);
171 recordBuilder.getLocatorRecord().add(locator.build());
172 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
173 mapRegisterBuilder.setWantMapNotify(true);
174 MapRegister mr = mapRegisterBuilder.build();
176 addDefaultPutAndGetExpectations(newEid);
178 MapNotify mapNotify = testedMapServer.handleMapRegister(mr);
179 assertEquals(newEid, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
180 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
181 assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
182 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
183 assertEquals(mr.getNonce(), mapNotify.getNonce());
187 public void handleMapRegister__NonMaskable() throws Exception {
189 mapRegisterBuilder = getDefaultMapRegisterBuilder();
190 LispAddressContainer addr = LispAFIConvertor.toContainer(LispAFIConvertor.asMacAfiAddress("01:01:01:01:01:01"));
191 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
192 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
193 locatorBuilder.setLispAddressContainer(rloc);
194 recordBuilder.setLispAddressContainer(addr).setMaskLength((short) mask);
195 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
196 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
197 mapRegisterBuilder.setWantMapNotify(true);
199 addDefaultPutAndGetExpectations(addr);
201 MapRegister mapRegister = mapRegisterBuilder.build();
203 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister);
204 assertEquals(addr, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
205 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
206 assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
207 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
208 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
212 public void handleMapRegister__ZeroMask() throws Exception {
214 mapRegisterBuilder = getDefaultMapRegisterBuilder();
215 LispAddressContainer addr = LispAFIConvertor.toContainer(LispAFIConvertor.asMacAfiAddress("01:01:01:01:01:01"));
216 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
217 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
218 locatorBuilder.setLispAddressContainer(rloc);
219 recordBuilder.setLispAddressContainer(addr).setMaskLength((short) mask);
220 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
221 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
222 mapRegisterBuilder.setWantMapNotify(true);
224 addDefaultPutAndGetExpectations(addr);
226 MapRegister mapRegister = mapRegisterBuilder.build();
228 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister);
229 assertEquals(addr, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
230 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
231 assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
232 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
233 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
237 public void handleMapRegisterIPv4__ZeroMask() throws Exception {
239 LispAddressContainer newEid = LispAFIConvertor.asIPv4Prefix(eidIpv4String, mask);
240 mapRegisterBuilder = getDefaultMapRegisterBuilder();
241 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
242 recordBuilder.setLispAddressContainer(newEid).setMaskLength((short) mask);
243 LocatorRecordBuilder locator = getDefaultLocatorBuilder();
244 locator.setLispAddressContainer(rloc);
245 recordBuilder.getLocatorRecord().add(locator.build());
246 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
247 mapRegisterBuilder.setWantMapNotify(true);
248 MapRegister mr = mapRegisterBuilder.build();
250 addDefaultPutAndGetExpectations(newEid);
252 MapNotify mapNotify = testedMapServer.handleMapRegister(mr);
253 assertEquals(newEid, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
254 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
255 assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
256 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
257 assertEquals(mr.getNonce(), mapNotify.getNonce());
261 public void handleMapRegisterIpv4__ValidMask32() throws Exception {
263 mapRegisterBuilder = getDefaultMapRegisterBuilder();
264 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
265 recordBuilder.setLispAddressContainer(eid).setMaskLength((short) mask);
266 LocatorRecordBuilder locator = getDefaultLocatorBuilder();
267 locator.setLispAddressContainer(rloc);
268 recordBuilder.getLocatorRecord().add(locator.build());
269 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
270 mapRegisterBuilder.setWantMapNotify(true);
271 MapRegister mr = mapRegisterBuilder.build();
273 addDefaultPutAndGetExpectations(eid);
275 MapNotify mapNotify = testedMapServer.handleMapRegister(mr);
276 assertEquals(eid, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
277 ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
278 assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
279 assertEquals(mr.getKeyId(), mapNotify.getKeyId());
280 assertEquals(mr.getNonce(), mapNotify.getNonce());
284 public void handleMapRegisterIpv6__ValidMask96() throws Exception {
286 mapRegisterBuilder = getDefaultMapRegisterBuilder();
287 LispAddressContainer addr = LispAFIConvertor.asIPv6Prefix(eidIpv6String, mask);
288 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
289 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
290 locatorBuilder.setLispAddressContainer(rloc);
291 recordBuilder.setLispAddressContainer(addr).setMaskLength((short) mask);
292 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
293 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
294 mapRegisterBuilder.setWantMapNotify(true);
296 addDefaultPutAndGetExpectations(addr);
298 MapRegister mapRegister = mapRegisterBuilder.build();
300 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister);
301 assertEquals(addr, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
302 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
303 assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
304 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
305 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
309 public void handleMapRegisterIpv6__ZeroMask() throws Exception {
311 mapRegisterBuilder = getDefaultMapRegisterBuilder();
312 LispAddressContainer addr = LispAFIConvertor.asIPv6Prefix(eidIpv6String, mask);
313 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
314 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
315 locatorBuilder.setLispAddressContainer(rloc);
316 recordBuilder.setLispAddressContainer(addr).setMaskLength((short) mask);
317 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
318 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
319 mapRegisterBuilder.setWantMapNotify(true);
321 addDefaultPutAndGetExpectations(addr);
323 MapRegister mapRegister = mapRegisterBuilder.build();
325 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister);
326 assertEquals(addr, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
327 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
328 assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
329 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
330 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
334 public void handleMapRegisterIpv6__ValidMask48() throws Exception {
336 mapRegisterBuilder = getDefaultMapRegisterBuilder();
337 LispAddressContainer addr = LispAFIConvertor.asIPv6Prefix(eidIpv6String, mask);
338 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
339 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
340 locatorBuilder.setLispAddressContainer(rloc);
341 recordBuilder.setLispAddressContainer(addr).setMaskLength((short) mask);
342 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
343 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
344 mapRegisterBuilder.setWantMapNotify(true);
346 addDefaultPutAndGetExpectations(addr);
348 MapRegister mapRegister = mapRegisterBuilder.build();
350 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister);
351 assertEquals(addr, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
352 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
353 assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
354 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
355 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
359 public void handleMapRegisterIpv6__ValidMask128() throws Exception {
361 mapRegisterBuilder = getDefaultMapRegisterBuilder();
362 LispAddressContainer addr = LispAFIConvertor.asIPv6Address(eidIpv6String);
363 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
364 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
365 locatorBuilder.setLispAddressContainer(rloc);
366 recordBuilder.setLispAddressContainer(addr).setMaskLength((short) mask);
367 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
368 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
369 mapRegisterBuilder.setWantMapNotify(true);
371 addDefaultPutAndGetExpectations(addr);
373 MapRegister mapRegister = mapRegisterBuilder.build();
375 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister);
376 assertEquals(addr, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
377 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
378 assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
379 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
380 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
384 public void handleMapRegisterIPV4AndIpv6__ValidMask96() throws Exception {
386 mapRegisterBuilder = getDefaultMapRegisterBuilder();
387 EidToLocatorRecordBuilder recordBuilder0 = getDefaultEidToLocatorBuilder();
388 recordBuilder0.setLispAddressContainer(eid).setMaskLength((short) 32);
389 LispAddressContainer addr = LispAFIConvertor.asIPv6Prefix(eidIpv6String, mask);
390 EidToLocatorRecordBuilder recordBuilder1 = getDefaultEidToLocatorBuilder();
391 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
392 locatorBuilder.setLispAddressContainer(rloc);
393 locatorBuilder.setLispAddressContainer(rloc);
394 recordBuilder1.setLispAddressContainer(addr).setMaskLength((short) mask);
395 recordBuilder1.getLocatorRecord().add(locatorBuilder.build());
396 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder0.build());
397 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder1.build());
398 mapRegisterBuilder.setWantMapNotify(true);
400 addDefaultPutAndGetExpectations(eid);
401 addDefaultPutAndGetExpectations(addr);
403 MapRegister mapRegister = mapRegisterBuilder.build();
405 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister);
406 assertEquals(eid, mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
407 assertEquals(addr, mapNotify.getEidToLocatorRecord().get(1).getLispAddressContainer());
408 ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
409 assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
410 assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
411 assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
415 public void handleMapRegister__MultipleRLOCs() throws Exception {
416 addDefaultPutAndGetExpectations(eid);
418 mapRegisterBuilder = getDefaultMapRegisterBuilder();
419 LispAddressContainer rloc0 = rloc;
420 LispAddressContainer rloc1 = LispAFIConvertor.asIPv6Address("0:0:0:0:0:0:0:7");
421 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
422 recordBuilder.setLispAddressContainer(eid);
423 LocatorRecordBuilder locatorBuilder1 = getDefaultLocatorBuilder();
424 locatorBuilder1.setLispAddressContainer(rloc0);
425 LocatorRecordBuilder locatorBuilder2 = getDefaultLocatorBuilder();
426 locatorBuilder2.setLispAddressContainer(rloc1);
427 recordBuilder.getLocatorRecord().add(locatorBuilder1.build());
428 recordBuilder.getLocatorRecord().add(locatorBuilder2.build());
430 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
432 testedMapServer.handleMapRegister(mapRegisterBuilder.build());
434 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
435 assertEquals(1, entries.length);
437 assertEquals(SubKeys.RECORD, entries[0].getKey());
438 assertEquals(rloc0, ((EidToLocatorRecord) entries[0].getValue()).getLocatorRecord()
439 .get(0).getLispAddressContainer());
440 assertEquals(rloc1, ((EidToLocatorRecord) entries[0].getValue()).getLocatorRecord()
441 .get(1).getLispAddressContainer());
446 public void handleMapRegister__MultipleTypes() throws Exception {
447 addDefaultPutAndGetExpectations(eid);
449 mapRegisterBuilder = getDefaultMapRegisterBuilder();
450 LispAddressContainer rloc0 = rloc;
451 // LispAFIAddress rloc1 =
452 // LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:7");
453 String subkey = "bla";
454 LispAFIAddress rloc1 = LispAFIConvertor
455 .asKeyValue(subkey, LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:7")));
456 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
457 recordBuilder.setLispAddressContainer(eid);
458 LocatorRecordBuilder locatorBuilder1 = getDefaultLocatorBuilder();
459 locatorBuilder1.setLispAddressContainer(rloc0);
460 LocatorRecordBuilder locatorBuilder2 = getDefaultLocatorBuilder();
461 locatorBuilder2.setLispAddressContainer(LispAFIConvertor.toContainer(rloc1));
462 recordBuilder.getLocatorRecord().add(locatorBuilder1.build());
463 recordBuilder.getLocatorRecord().add(locatorBuilder2.build());
465 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
467 testedMapServer.handleMapRegister(mapRegisterBuilder.build());
469 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
470 assertEquals(1, entries.length);
471 EidToLocatorRecord storedMapping = (EidToLocatorRecord) entries[0].getValue();
472 assertEquals(2, storedMapping.getLocatorRecord().size());
473 assertEquals(SubKeys.RECORD, entries[0].getKey());
474 assertEquals(rloc0, storedMapping.getLocatorRecord().get(0).getLispAddressContainer());
475 assertEquals(LispAFIConvertor.toContainer(rloc1), storedMapping.getLocatorRecord().get(1)
476 .getLispAddressContainer());
481 public void handleMapRegister__TestOverwrite() throws Exception {
482 addDefaultPutAndGetExpectations(eid);
484 addEidToLocatorRecord();
486 MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
487 assertEquals(1, entries.length);
489 assertEquals(SubKeys.RECORD, entries[0].getKey());
490 assertEquals(rloc, ((EidToLocatorRecord) entries[0].getValue()).getLocatorRecord()
491 .get(0).getLispAddressContainer());
495 // public void handleMapRegister__TestDontOverwrite() throws Exception {
496 // int hc = rloc.getAddress().hashCode();
498 // addDefaultPutAndGetExpectations(eid);
499 // testedMapServer.setOverwrite(false);
501 // addEidToLocatorRecord();
503 // MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
504 // assertEquals(1, entries.length);
506 // assertEquals(String.valueOf(hc), entries[0].getKey());
507 // assertEquals(rloc, ((EidToLocatorRecord) entries[0].getValue()).getLocatorRecord()
508 // .get(0).getLispAddressContainer());
511 private void addEidToLocatorRecord() {
512 EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
513 recordBuilder.setLispAddressContainer(eid);
514 LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
515 locatorBuilder.setLispAddressContainer(rloc);
516 recordBuilder.getLocatorRecord().add(locatorBuilder.build());
518 mapRegisterBuilder = getDefaultMapRegisterBuilder();
519 mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
521 testedMapServer.handleMapRegister(mapRegisterBuilder.build());
525 public void handleMapRegister__MultipleEIDs() throws Exception {
526 addDefaultPutAndGetExpectations(eid);
528 LispAddressContainer rloc1 = LispAFIConvertor.asIPv6Address("0:0:0:0:0:0:0:7");
529 mapRegisterBuilder = getDefaultMapRegisterBuilder();
530 EidToLocatorRecordBuilder etlrBuilder = getDefaultEidToLocatorBuilder();
531 etlrBuilder.getLocatorRecord().add(getDefaultLocatorBuilder().setLispAddressContainer(rloc1).build());
532 mapRegisterBuilder.setWantMapNotify(true);
533 etlrBuilder.setLispAddressContainer(eid);
535 EidToLocatorRecordBuilder etlr2Builder = getDefaultEidToLocatorBuilder();
536 LispAddressContainer address = LispAFIConvertor.asIPv4Address("1.1.1.1");
537 etlr2Builder.setLispAddressContainer(address);
538 etlr2Builder.setMaskLength((short) 32);
540 etlr2Builder.setRecordTtl(recordTtl);
541 etlr2Builder.getLocatorRecord().add(
542 getDefaultLocatorBuilder().setPriority((short) 10)
543 .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("2.2.2.2"))).build());
544 mapRegisterBuilder.getEidToLocatorRecord().add(etlrBuilder.build());
545 mapRegisterBuilder.getEidToLocatorRecord().add(etlr2Builder.build());
546 addDefaultPutAndGetExpectations(address);
547 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterBuilder.build());
549 assertEquals(rloc1, mapNotify.getEidToLocatorRecord().get(0).getLocatorRecord().get(0)
550 .getLispAddressContainer());
551 assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("2.2.2.2")), mapNotify.getEidToLocatorRecord().get(1)
552 .getLocatorRecord().get(0).getLispAddressContainer());
553 assertEquals(address, mapNotify.getEidToLocatorRecord().get(1).getLispAddressContainer());
554 assertEquals(recordTtl, mapNotify.getEidToLocatorRecord().get(1).getRecordTtl().intValue());
559 public void handleMapRegisterIpv4__CheckWrongPassword() throws Exception {
561 addGetExpectations(LispAFIConvertor.asIPv4Address("153.16.254.1"), 0, 31, "bla");
562 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication);
563 assertEquals(null, mapNotify);
567 public void handleMapRegisterIpv4__CheckNoPasswordAndThenPassword() throws Exception {
569 addGetExpectations(LispAFIConvertor.asIPv4Address("153.16.254.1"), 0, 25, "password");
570 addPutExpectations(LispAFIConvertor.asIPv4Address("153.16.254.1"));
571 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication);
572 assertEquals(mapRegisterWithAuthentication.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
573 assertEquals(mapRegisterWithAuthentication.getKeyId(), mapNotify.getKeyId());
574 assertEquals(mapRegisterWithAuthentication.getNonce(), mapNotify.getNonce());
578 public void handleMapRegisterIpv4__CheckNoPassword() throws Exception {
580 addGetExpectations(LispAFIConvertor.asIPv4Address("153.16.254.1"), 30, 0, "password");
581 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication);
582 assertEquals(null, mapNotify);
586 public void handleMapRegisterIpv4__CheckNoreturn() throws Exception {
588 addGetExpectations(LispAFIConvertor.asIPv4Address("153.16.254.1"));
589 MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication);
590 assertEquals(mapNotify, null);
593 private void addDefaultPutAndGetExpectations(LispAddressContainer addr) {
594 addPutExpectations(addr);
595 addGetExpectations(addr);
598 private void addGetExpectations(LispAddressContainer address) {
599 addGetExpectations(address, 0, 0, SubKeys.AUTH_KEY);
602 private EidToLocatorRecord toEidToLocatorRecord(Mapping record) {
603 return new EidToLocatorRecordBuilder(
604 (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.EidToLocatorRecord) record)
608 private void prepareDsbe() {
609 ValueSaverAction<Mapping> dsbeAddMappingSaverAction = new ValueSaverAction<Mapping>() {
611 public Object invoke(Invocation invocation) throws Throwable {
612 mapSystem.addMapping(lastValue.getOrigin(), lastValue.getLispAddressContainer(), (Object) toEidToLocatorRecord(lastValue));
616 oneOf(dsbe).addMapping(with(dsbeAddMappingSaverAction)); will(dsbeAddMappingSaverAction);
619 private void addPutExpectations(LispAddressContainer address) {
620 // needed for mapping-service addMapping
622 exactly(2).of(dao).put(weq(address), with(mappingEntriesSaver));
625 private void addGetExpectations(LispAddressContainer address, int withoutPassword, int withPassword, String password) {
626 if (withoutPassword > 0) {
627 String result = null;
629 allowing(dao).getSpecific(with(address), with(SubKeys.AUTH_KEY));
632 if (withPassword > 0) {
633 String result = null;
635 allowing(dao).getSpecific(with(address), with(SubKeys.AUTH_KEY));
638 for (int i = MaskUtil.getMaskForAddress(address); i >= 0; i--) {
639 LispAddressContainer addr = MaskUtil.normalize(address, (short) i);
640 allowing(dao).getSpecific(with(addr), with(SubKeys.AUTH_KEY)); ret(null);
641 // check if mapping exists before insertion
642 allowing(dao).get(with(addr));will(returnValue(null));
647 private LispAddressContainer getDefaultKey() {
651 private LispAddressContainer getKey(int mask) {
652 return MaskUtil.normalize(eid, (short)mask);
655 private MapRegisterBuilder getDefaultMapRegisterBuilder() {
656 MapRegisterBuilder mrb = new MapRegisterBuilder();
657 mrb.setKeyId((short) 0);
658 mrb.setNonce((long) 0);
659 mrb.setWantMapNotify(false);
660 mrb.setProxyMapReply(false);
661 mrb.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
662 mrb.setAuthenticationData(new byte[0]);
666 private EidToLocatorRecordBuilder getDefaultEidToLocatorBuilder() {
667 EidToLocatorRecordBuilder builder = new EidToLocatorRecordBuilder();
668 builder.setAction(Action.NoAction);
669 builder.setAuthoritative(false);
670 builder.setLocatorRecord(new ArrayList<LocatorRecord>());
671 builder.setMapVersion((short) 0);
672 builder.setMaskLength((short) 32);
673 builder.setRecordTtl(60);
677 private LocatorRecordBuilder getDefaultLocatorBuilder() {
678 LocatorRecordBuilder builder = new LocatorRecordBuilder();
679 builder.setLocalLocator(false);
680 builder.setMulticastPriority((short) 0);
681 builder.setMulticastWeight((short) 0);
682 builder.setPriority((short) 0);
683 builder.setRlocProbed(false);
684 builder.setRouted(false);
685 builder.setWeight((short) 0);