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.serializer;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
15 import java.nio.ByteBuffer;
16 import java.util.ArrayList;
18 import junitx.framework.ArrayAssert;
20 import org.junit.Test;
21 import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer;
22 import org.opendaylight.lispflowmapping.lisp.serializer.MapRegisterSerializer.Length;
23 import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException;
24 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
25 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
26 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegisterBuilder;
38 public class MapRegisterSerializationTest extends BaseTestCase {
41 public void serialize__Fields() throws Exception {
42 MapRegisterBuilder mrBuilder = new MapRegisterBuilder();
43 mrBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
44 MappingRecordBuilder recordBuilder = new MappingRecordBuilder();
45 recordBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
46 recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32"));
48 mrBuilder.getMappingRecordItem().add(
49 new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build());
50 recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32"));
51 mrBuilder.getMappingRecordItem().add(
52 new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build());
54 mrBuilder.setNonce(6161616161L);
55 mrBuilder.setKeyId((short) 0x0001);
56 mrBuilder.setWantMapNotify(true);
57 mrBuilder.setProxyMapReply(true);
58 mrBuilder.setXtrSiteIdPresent(true);
59 byte[] authenticationData = new byte[] { (byte) 0x16, (byte) 0x98, (byte) 0x96, (byte) 0xeb, (byte) 0x88,
60 (byte) 0x2d, (byte) 0x4d, (byte) 0x22, (byte) 0xe5, (byte) 0x8f, (byte) 0xe6, (byte) 0x89, (byte) 0x64,
61 (byte) 0xb9, (byte) 0x17, (byte) 0xa4, (byte) 0xba, (byte) 0x4e, (byte) 0x8c, (byte) 0x41 };
62 mrBuilder.setAuthenticationData(authenticationData);
63 XtrId xtrId = new XtrId(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
64 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
65 (byte) 0x00, (byte) 0x00, (byte) 0x01 });
66 mrBuilder.setXtrId(xtrId);
67 SiteId siteId = new SiteId(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
68 (byte) 0x00, (byte) 0x00, (byte) 0x01 });
69 mrBuilder.setSiteId(siteId);
71 ByteBuffer bb = MapRegisterSerializer.getInstance().serialize(mrBuilder.build());
72 assertHexEquals((byte) 0x3a, bb.get()); // Type + MSByte of reserved
73 assertEquals(1, bb.getShort()); // Rest of reserved + want map notify
74 assertEquals(2, bb.get()); // Record Count
75 assertEquals(6161616161L, bb.getLong()); // Nonce
76 assertHexEquals((short) 0x0001, bb.getShort()); // Key ID
77 assertEquals(authenticationData.length, bb.getShort());
79 byte[] actualAuthenticationData = new byte[20];
80 bb.get(actualAuthenticationData);
81 ArrayAssert.assertEquals(authenticationData, actualAuthenticationData);
83 bb.position(bb.position() + 12); // EID in first record
84 assertEquals(0x1, bb.getInt());
86 bb.position(bb.position() + 12); // EID in second record
87 assertEquals(73, bb.getInt());
89 byte[] actualXtrId = new byte[Length.XTRID_SIZE];
91 ArrayAssert.assertEquals(xtrId.getValue(), actualXtrId);
93 byte[] actualSiteId = new byte[Length.SITEID_SIZE];
95 ArrayAssert.assertEquals(siteId.getValue(), actualSiteId);
97 assertEquals(bb.position(), bb.capacity());
101 public void serialize__deserialize() throws Exception {
102 MapRegisterBuilder mrBuilder = new MapRegisterBuilder();
103 mrBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
104 MappingRecordBuilder recordBuilder = new MappingRecordBuilder();
105 recordBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
106 recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32"));
108 mrBuilder.getMappingRecordItem().add(
109 new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build());
110 recordBuilder.setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32"));
111 mrBuilder.getMappingRecordItem().add(
112 new MappingRecordItemBuilder().setMappingRecord(recordBuilder.build()).build());
114 recordBuilder.setAction(Action.NoAction);
115 recordBuilder.setMapVersion((short) 0);
116 recordBuilder.setRecordTtl(0);
117 mrBuilder.setNonce(6161616161L);
118 mrBuilder.setKeyId((short) 0x0001);
119 mrBuilder.setWantMapNotify(true);
120 mrBuilder.setProxyMapReply(true);
121 byte[] authenticationData = new byte[] { (byte) 0x16, (byte) 0x98, (byte) 0x96, (byte) 0xeb, (byte) 0x88,
122 (byte) 0x2d, (byte) 0x4d, (byte) 0x22, (byte) 0xe5, (byte) 0x8f, (byte) 0xe6, (byte) 0x89, (byte) 0x64,
123 (byte) 0xb9, (byte) 0x17, (byte) 0xa4, (byte) 0xba, (byte) 0x4e, (byte) 0x8c, (byte) 0x41 };
124 mrBuilder.setAuthenticationData(authenticationData);
126 MapRegister mapRegister = mrBuilder.build();
127 ArrayAssert.assertEquals(
128 MapRegisterSerializer.getInstance().serialize(mapRegister).array(),
129 MapRegisterSerializer.getInstance()
130 .serialize(MapRegisterSerializer.getInstance().deserialize(MapRegisterSerializer.getInstance()
131 .serialize(mapRegister), null)).array());
135 public void serialize__NoAuthenticationData() throws Exception {
136 MapRegisterBuilder mrBuilder = new MapRegisterBuilder();
137 mrBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
138 mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
139 new MappingRecordBuilder().setRecordTtl(55)
140 .setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")).build()).build());
141 // mrBuilder.addEidToLocator(new EidToLocatorRecord().setPrefix(new
142 // LispIpv4Address(1)).setRecordTtl(55));
144 ByteBuffer bb = MapRegisterSerializer.getInstance().serialize(mrBuilder.build());
145 bb.position(bb.position() + 14); // jump to AuthenticationDataLength
146 assertEquals(0, bb.getShort());
147 assertEquals(55, bb.getInt());
149 mrBuilder.setAuthenticationData(null);
151 bb = MapRegisterSerializer.getInstance().serialize(mrBuilder.build());
152 bb.position(bb.position() + 14); // jump to AuthenticationDataLength
153 assertEquals(0, bb.getShort());
154 assertEquals(55, bb.getInt());
156 mrBuilder.setAuthenticationData(new byte[0]);
158 bb = MapRegisterSerializer.getInstance().serialize(mrBuilder.build());
159 bb.position(bb.position() + 14); // jump to AuthenticationDataLength
160 assertEquals(0, bb.getShort());
161 assertEquals(55, bb.getInt());
165 public void serialize__NoPrefixInEidToLocator() throws Exception {
166 MapRegisterBuilder mrBuilder = new MapRegisterBuilder();
167 mrBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
168 mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
169 new MappingRecordBuilder().build()).build());
170 mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
171 new MappingRecordBuilder().setEid(null).build()).build());
172 mrBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
173 new MappingRecordBuilder().setEid(LispAddressUtil.getNoAddressEid()).build()).build());
175 ByteBuffer bb = MapRegisterSerializer.getInstance().serialize(mrBuilder.build());
176 bb.position(bb.position() + 16); // jump to first record prefix AFI
177 assertEquals(0, bb.getShort());
179 bb.position(bb.position() + 10); // jump to second record prefix AFI
180 assertEquals(0, bb.getShort());
182 bb.position(bb.position() + 10); // jump to third record prefix AFI
183 assertEquals(0, bb.getShort());
187 public void deserialize__AllFields() throws Exception {
188 // LISP(Type = 3 Map-Register, P=1, M=1
190 // Nonce: (something)
192 // AuthDataLength: 00 Data:
193 // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
195 // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
196 // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
198 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB "
200 + "00 00 00 00 00 00 00 00 00 00 00 00 " //
201 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
202 + "ff 00 00 05 00 01 c0 a8 88 0a"), null);
204 assertTrue(mr.isProxyMapReply());
205 assertTrue(mr.isWantMapNotify());
207 assertEquals(1, mr.getMappingRecordItem().size());
208 assertEquals(0xFFBB000000000000L, mr.getNonce().longValue());
209 assertEquals(0x0000, mr.getKeyId().shortValue());
210 byte[] expectedAuthenticationData = {};
211 ArrayAssert.assertEquals(expectedAuthenticationData, mr.getAuthenticationData());
215 public void deserialize__serialize() throws Exception {
216 ByteBuffer bb = hexToByteBuffer("32 00 01 01 63 99 "
217 + "83 64 23 06 a8 be 00 01 00 14 b8 c2 a2 e1 dc 4a "
218 + "08 0c f6 01 b0 9d 70 5a d4 88 95 f8 73 dd 00 00 "
219 + "05 a0 01 20 10 00 00 00 40 03 00 00 02 20 00 0a "
220 + "00 00 00 01 00 01 c3 a8 c8 01 0a 32 ff 00 00 04 "
221 + "00 01 ac 10 01 02 15 1a 39 80 e3 35 e6 c4 49 a6 "
222 + "90 87 20 65 9a b7 00 00 00 00 00 00 00 00 ");
223 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(bb, null);
225 assertTrue(mr.isXtrSiteIdPresent());
227 ArrayAssert.assertEquals(bb.array(), MapRegisterSerializer.getInstance().serialize(mr).array());
231 public void deserialize__MultipleRecords() throws Exception {
232 // LISP(Type = 3 Map-Register, P=1, M=1
234 // EID prefixes: 153.16.254.1 -- 152.16.254.1 -- 151.16.254.1 --
236 // Local RLOCs: 192.168.136.10 -- 192.168.136.11 -- 192.168.136.12 --
239 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 "
241 + "04 " // Record count
242 + "FF BB 00 00 00 00 00 00 00 01 00 14 87 c1 33 cd " //
243 + "d1 1e bc 80 fd 3e 71 11 81 17 40 74 26 25 44 bd " //
244 + "00 00 00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " // Record
246 + "ff 00 00 05 00 01 c0 a8 88 0a " // contd
247 + "00 00 00 0a 01 20 10 00 00 00 00 01 98 10 fe 01 01 64 " // Record
249 + "ff 00 00 05 00 01 c0 a8 88 0b " // contd
250 + "00 00 00 0a 01 20 10 00 00 00 00 01 97 10 fe 01 01 64 " // Record
252 + "ff 00 00 05 00 01 c0 a8 88 0c " // contd
253 + "00 00 00 0a 01 20 10 00 00 00 00 01 96 10 fe 01 01 64 " // Record
255 + "ff 00 00 05 00 01 c0 a8 88 0d " // contd
258 assertEquals(4, mr.getMappingRecordItem().size());
259 assertEquals(LispAddressUtil.asIpv4PrefixBinaryEid("153.16.254.1/32"), mr.getMappingRecordItem().get(0)
260 .getMappingRecord().getEid());
261 assertEquals(LispAddressUtil.asIpv4PrefixBinaryEid("151.16.254.1/32"), mr.getMappingRecordItem().get(2)
262 .getMappingRecord().getEid());
263 assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.11"), mr.getMappingRecordItem().get(1)
264 .getMappingRecord().getLocatorRecord().get(0).getRloc());
265 assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.13"), mr.getMappingRecordItem().get(3)
266 .getMappingRecord().getLocatorRecord().get(0).getRloc());
270 public void deserialize__Locators() throws Exception {
271 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 "
273 + "FF BB 00 00 00 00 00 00 00 01 00 14 f1 b8 ab f0 " //
274 + "66 bb 2e ef 12 70 74 46 6f 6b 8e ca bf 1e 68 40 " //
276 + "03 " // Locator Count
277 + "20 10 00 00 00 00 01 99 10 fe 01 "
279 + "01 64 1f 00 " // priorities + weights
281 + "00 01 c0 a8 88 0a " // Locator
283 + "67 00 30 34 " // priorities + weights
285 + "00 01 cc aa AA 11 " // Locator
287 + "60 11 34 A4 " // priorities + weights
289 + "00 01 c0 a8 88 0a " // Locator
292 assertEquals(1, mr.getMappingRecordItem().size());
293 MappingRecordItem eidToLocator = mr.getMappingRecordItem().get(0);
294 assertEquals(3, eidToLocator.getMappingRecord().getLocatorRecord().size());
295 LocatorRecord loc0 = eidToLocator.getMappingRecord().getLocatorRecord().get(0);
296 LocatorRecord loc1 = eidToLocator.getMappingRecord().getLocatorRecord().get(1);
297 LocatorRecord loc2 = eidToLocator.getMappingRecord().getLocatorRecord().get(2);
298 assertEquals((byte) 0x01, loc0.getPriority().byteValue());
299 assertEquals((byte) 0x67, loc1.getPriority().byteValue());
300 assertEquals((byte) 0x60, loc2.getPriority().byteValue());
302 assertEquals((byte) 0x64, loc0.getWeight().byteValue());
303 assertEquals((byte) 0x00, loc1.getWeight().byteValue());
304 assertEquals((byte) 0x11, loc2.getWeight().byteValue());
306 assertEquals((byte) 0x1F, loc0.getMulticastPriority().byteValue());
307 assertEquals((byte) 0x30, loc1.getMulticastPriority().byteValue());
308 assertEquals((byte) 0x34, loc2.getMulticastPriority().byteValue());
310 assertEquals((byte) 0x00, loc0.getMulticastWeight().byteValue());
311 assertEquals((byte) 0x34, loc1.getMulticastWeight().byteValue());
312 assertEquals((byte) 0xA4, loc2.getMulticastWeight().byteValue());
314 assertTrue(loc0.isLocalLocator());
315 assertFalse(loc1.isLocalLocator());
316 assertFalse(loc2.isLocalLocator());
318 assertFalse(loc0.isRlocProbed());
319 assertTrue(loc1.isRlocProbed());
320 assertTrue(loc2.isRlocProbed());
322 assertTrue(loc0.isRouted());
323 assertFalse(loc1.isRouted());
324 assertTrue(loc2.isRouted());
326 assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.10"), loc0.getRloc());
327 assertEquals(LispAddressUtil.asIpv4Rloc("204.170.170.17"), loc1.getRloc());
331 public void deserialize__SomeEidToLocatorFiels() throws Exception {
332 // LISP(Type = 3 Map-Register, P=1, M=1
334 // EID prefixes: 153.16.254.1 -- 152.16.254.1 -- 151.16.254.1 --
336 // Local RLOCs: 192.168.136.10 -- 192.168.136.11 -- 192.168.136.12 --
339 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 "
341 + "04 " // Record count
342 + "FF BB 00 00 00 00 00 00 00 01 00 14 b9 cd 7b 89 " //
343 + "65 c2 56 03 be dd 81 20 47 e5 c3 4f 56 02 e1 59 " //
344 + "00 00 00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " // Record
346 + "ff 00 00 05 00 01 c0 a8 88 0a " // contd
347 + "00 00 00 0b 01 17 50 00 01 11 00 01 98 10 fe 01 01 64 " // Record
349 + "ff 00 00 05 00 01 c0 a8 88 0b " // contd
350 + "00 00 00 0c 01 20 00 00 02 22 00 01 97 10 fe 01 01 64 " // Record
352 + "ff 00 00 05 00 01 c0 a8 88 0c " // contd
353 + "00 00 00 0d 01 20 20 00 03 33 00 01 96 10 fe 01 01 64 " // Record
355 + "ff 00 00 05 00 01 c0 a8 88 0d " // contd
358 assertEquals(4, mr.getMappingRecordItem().size());
360 final MappingRecord record0 = mr.getMappingRecordItem().get(0).getMappingRecord();
361 final MappingRecord record1 = mr.getMappingRecordItem().get(1).getMappingRecord();
362 final MappingRecord record2 = mr.getMappingRecordItem().get(2).getMappingRecord();
363 final MappingRecord record3 = mr.getMappingRecordItem().get(3).getMappingRecord();
365 assertEquals(10, record0.getRecordTtl().intValue());
366 assertEquals(13, record3.getRecordTtl().intValue());
368 assertEquals(32, MaskUtil.getMaskForAddress(record0.getEid().getAddress()));
369 assertEquals(23, MaskUtil.getMaskForAddress(record1.getEid().getAddress()));
371 assertEquals(Action.NoAction, record0.getAction());
372 assertEquals(Action.SendMapRequest, record1.getAction());
373 assertEquals(Action.NoAction, record2.getAction());
374 assertEquals(Action.NativelyForward, record3.getAction());
376 assertTrue(record0.isAuthoritative());
377 assertTrue(record1.isAuthoritative());
378 assertFalse(record2.isAuthoritative());
379 assertFalse(record3.isAuthoritative());
381 assertEquals(0x000, record0.getMapVersion().shortValue());
382 assertEquals(0x111, record1.getMapVersion().shortValue());
383 assertEquals(0x222, record2.getMapVersion().shortValue());
384 assertEquals(0x333, record3.getMapVersion().shortValue());
388 public void deserialize__IllegalAction() throws Exception {
389 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB "
391 + "00 00 00 00 00 00 00 01 00 14 ec 47 1e 53 25 91 " //
392 + "2f 68 10 75 13 dd 2c e8 6e 3c ac 94 ed e4 00 00 " //
393 + "00 0a 01 20 F0 00 00 00 00 01 99 10 fe 01 01 64 " //
394 + "ff 00 00 05 00 01 c0 a8 88 0a"), null);
396 assertEquals(1, mr.getMappingRecordItem().size());
397 assertEquals(Action.NoAction, mr.getMappingRecordItem().get(0).getMappingRecord().getAction());
400 @Test(expected = LispSerializationException.class)
401 public void deserialize_WrongAuthenticationLength() throws Exception {
402 // LISP(Type = 3 Map-Register, P=1, M=1
404 // Nonce: (something)
406 // AuthDataLength: 20 Data:
407 // e8:f5:0b:c5:c5:f2:b0:21:27:a8:a5:68:89:ec
408 // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
410 // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
411 // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
413 MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB "
415 + "00 00 00 00 00 00 00 00 00 14 e8 f5 0b c5 c5 f2 " //
416 + "b0 21 27 a8 21 a5 68 89 ec 00 00 " //
417 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
418 + "ff 00 00 05 00 01 c0 a8 88 0a"), null);
422 public void deserialize__SHA1() throws Exception {
423 // LISP(Type = 3 Map-Register, P=1, M=1
425 // Nonce: (something)
427 // AuthDataLength: 20 Data:
428 // b2:dd:1a:25:c0:60:b1:46:e8:dc:6d:a6:ae:2e:92:92:a6:ca:b7:9d
429 // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
431 // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
432 // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
434 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB "
436 + "00 00 00 00 00 00 00 01 00 14 2c 61 b9 c9 9a 20 " //
437 + "ba d8 f5 40 d3 55 6f 5f 6e 5a b2 0a bf b5 00 00 " //
438 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
439 + "ff 00 00 05 00 01 c0 a8 88 0a"), null);
441 assertTrue(mr.isProxyMapReply());
442 assertTrue(mr.isWantMapNotify());
444 assertEquals(1, mr.getMappingRecordItem().size());
445 assertEquals(0xFFBB000000000000L, mr.getNonce().longValue());
446 assertEquals(0x0001, mr.getKeyId().shortValue());
447 byte[] expectedAuthenticationData = { (byte) 0x2c, (byte) 0x61, (byte) 0xb9, (byte) 0xc9, (byte) 0x9a,
448 (byte) 0x20, (byte) 0xba, (byte) 0xd8, (byte) 0xf5, (byte) 0x40, (byte) 0xd3, (byte) 0x55, (byte) 0x6f,
449 (byte) 0x5f, (byte) 0x6e, (byte) 0x5a, (byte) 0xb2, (byte) 0x0a, (byte) 0xbf, (byte) 0xb5 };
450 ArrayAssert.assertEquals(expectedAuthenticationData, mr.getAuthenticationData());
454 public void deserialize__SHA256() throws Exception {
455 // LISP(Type = 3 Map-Register, P=1, M=1
457 // Nonce: (something)
459 // AuthDataLength: 32 Data:
460 // 70 30 d4 c6 10 44 0d 83 be 4d bf fd a9 8c 57 6d 68 a5 bf 32 11 c9 7b
461 // 58 c4 b9 9f 06 11 23 b9 38
462 // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
464 // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
465 // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
467 MapRegister mr = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB "
469 + "00 00 00 00 00 00 00 02 00 20 70 30 d4 c6 10 44 0d 83 be 4d bf fd a9 8c 57 6d 68 a5 bf 32 "
471 + "11 c9 7b 58 c4 b9 9f 06 11 23 b9 38 00 00 " //
472 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
473 + "ff 00 00 05 00 01 c0 a8 88 0a"), null);
475 assertTrue(mr.isProxyMapReply());
476 assertTrue(mr.isWantMapNotify());
478 assertEquals(1, mr.getMappingRecordItem().size());
479 assertEquals(0xFFBB000000000000L, mr.getNonce().longValue());
480 assertEquals(0x0002, mr.getKeyId().shortValue());
481 byte[] expectedAuthenticationData = { (byte) 0x70, (byte) 0x30, (byte) 0xd4, (byte) 0xc6, (byte) 0x10,
482 (byte) 0x44, (byte) 0x0d, (byte) 0x83, (byte) 0xbe, (byte) 0x4d, (byte) 0xbf, (byte) 0xfd, (byte) 0xa9,
483 (byte) 0x8c, (byte) 0x57, (byte) 0x6d, (byte) 0x68, (byte) 0xa5, (byte) 0xbf, (byte) 0x32, (byte) 0x11,
484 (byte) 0xc9, (byte) 0x7b, (byte) 0x58, (byte) 0xc4, (byte) 0xb9, (byte) 0x9f, (byte) 0x06, (byte) 0x11,
485 (byte) 0x23, (byte) 0xb9, (byte) 0x38 };
486 ArrayAssert.assertEquals(expectedAuthenticationData, mr.getAuthenticationData());