Checkstyle: enforce 120 character limit
[lispflowmapping.git] / mappingservice / lisp-proto / src / test / java / org / opendaylight / lispflowmapping / serializer / MapNotifySerializationTest.java
1 /*
2  * Copyright (c) 2014 Contextream, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.lispflowmapping.serializer;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14
15 import java.nio.ByteBuffer;
16 import java.util.ArrayList;
17
18 import junitx.framework.ArrayAssert;
19
20 import org.junit.Test;
21 import org.opendaylight.lispflowmapping.lisp.serializer.MapNotifySerializer;
22 import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException;
23 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
24 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
33
34 public class MapNotifySerializationTest extends BaseTestCase {
35
36     @Test
37     public void serialize__Fields() throws Exception {
38         MapNotifyBuilder mnBuilder = new MapNotifyBuilder();
39         mnBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
40         mnBuilder.getMappingRecordItem().add(
41                 new MappingRecordItemBuilder().setMappingRecord(
42                         new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")).build())
43                         .build());
44         mnBuilder.getMappingRecordItem().add(
45                 new MappingRecordItemBuilder().setMappingRecord(
46                         new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32")).build())
47                         .build());
48
49         mnBuilder.setNonce(6161616161L);
50         mnBuilder.setKeyId((short) 0x0001);
51         byte[] authenticationData = new byte[] { (byte) 0x16, (byte) 0x98, (byte) 0x96, (byte) 0xeb, (byte) 0x88,
52                 (byte) 0x2d, (byte) 0x4d, (byte) 0x22, (byte) 0xe5, (byte) 0x8f, (byte) 0xe6, (byte) 0x89, (byte) 0x64,
53                 (byte) 0xb9, (byte) 0x17, (byte) 0xa4, (byte) 0xba, (byte) 0x4e, (byte) 0x8c, (byte) 0x41 };
54         mnBuilder.setAuthenticationData(authenticationData);
55
56         ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mnBuilder.build());
57         assertHexEquals((byte) 0x40, bb.get()); // Type + MSByte of reserved
58         assertEquals(0, bb.getShort()); // Rest of reserved
59         assertEquals(2, bb.get()); // Record Count
60         assertEquals(6161616161L, bb.getLong()); // Nonce
61         assertHexEquals((short) 0x0001, bb.getShort()); // Key ID
62         assertEquals(authenticationData.length, bb.getShort());
63
64         byte[] actualAuthenticationData = new byte[20];
65         bb.get(actualAuthenticationData);
66         ArrayAssert.assertEquals(authenticationData, actualAuthenticationData);
67
68         bb.position(bb.position() + 12); /* EID in first record */
69         assertEquals(0x1, bb.getInt());
70
71         bb.position(bb.position() + 12); /* EID in second record */
72         assertEquals(73, bb.getInt());
73
74         assertEquals(bb.position(), bb.capacity());
75     }
76
77     @Test
78     public void serialize__deserialize() throws Exception {
79         MapNotifyBuilder mnBuilder = new MapNotifyBuilder();
80         mnBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
81         mnBuilder.getMappingRecordItem().add(
82                 new MappingRecordItemBuilder().setMappingRecord(
83                         new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32")).build())
84                         .build());
85         mnBuilder.getMappingRecordItem().add(
86                 new MappingRecordItemBuilder().setMappingRecord(
87                         new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.73/32")).build())
88                         .build());
89
90         mnBuilder.setNonce(6161616161L);
91         mnBuilder.setKeyId((short) 0x0001);
92         byte[] authenticationData = new byte[] { (byte) 0x16, (byte) 0x98, (byte) 0x96, (byte) 0xeb, (byte) 0x88,
93                 (byte) 0x2d, (byte) 0x4d, (byte) 0x22, (byte) 0xe5, (byte) 0x8f, (byte) 0xe6, (byte) 0x89, (byte) 0x64,
94                 (byte) 0xb9, (byte) 0x17, (byte) 0xa4, (byte) 0xba, (byte) 0x4e, (byte) 0x8c, (byte) 0x41 };
95         mnBuilder.setAuthenticationData(authenticationData);
96
97         MapNotify mn = mnBuilder.build();
98         ArrayAssert.assertEquals(MapNotifySerializer.getInstance().serialize(mn).array(),
99                 MapNotifySerializer.getInstance().serialize(MapNotifySerializer.getInstance()
100                         .deserialize(MapNotifySerializer.getInstance().serialize(mn))).array());
101
102     }
103
104     @Test
105     public void deserialize__AllFields() throws Exception {
106         // LISP(Type = 4 Map-Notify, I=1
107         // Record Counter: 1
108         // Nonce: (something)
109         // Key ID: 0x0000
110         // AuthDataLength: 00 Data:
111         // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
112         // No-Action
113         // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
114         // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
115         // xTR-ID 1
116         // Site-ID 1
117         MapNotify mn = MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("48 00 00 01 FF BB "
118                 + "00 00 00 00 00 00 00 00 00 00 00 00 "
119                 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 "
120                 + "ff 00 00 05 00 01 c0 a8 88 0a "
121                 + "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 " // xTR-ID
122                 + "00 00 00 00 00 00 00 01 " // Site-ID
123                 ));
124
125
126         assertTrue(mn.isXtrSiteIdPresent());
127
128         assertEquals(1, mn.getMappingRecordItem().size());
129         assertEquals(0xFFBB000000000000L, mn.getNonce().longValue());
130         assertEquals(0x0000, mn.getKeyId().shortValue());
131         byte[] expectedAuthenticationData = {};
132         ArrayAssert.assertEquals(expectedAuthenticationData, mn.getAuthenticationData());
133     }
134
135     @Test
136     public void serialize__NoAuthenticationData() throws Exception {
137         MapNotifyBuilder mnBuilder = new MapNotifyBuilder();
138         mnBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
139         mnBuilder.getMappingRecordItem().add(
140                 new MappingRecordItemBuilder().setMappingRecord(
141                         new MappingRecordBuilder().setEid(LispAddressUtil.asIpv4PrefixEid("0.0.0.1/32"))
142                         .setRecordTtl(55).build()).build());
143
144         ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mnBuilder.build());
145         bb.position(bb.position() + 14); // jump to AuthenticationDataLength
146         assertEquals(0, bb.getShort());
147         assertEquals(55, bb.getInt());
148
149         mnBuilder.setAuthenticationData(null);
150
151         bb = MapNotifySerializer.getInstance().serialize(mnBuilder.build());
152         bb.position(bb.position() + 14); // jump to AuthenticationDataLength
153         assertEquals(0, bb.getShort());
154         assertEquals(55, bb.getInt());
155
156         mnBuilder.setAuthenticationData(new byte[0]);
157
158         bb = MapNotifySerializer.getInstance().serialize(mnBuilder.build());
159         bb.position(bb.position() + 14); // jump to AuthenticationDataLength
160         assertEquals(0, bb.getShort());
161         assertEquals(55, bb.getInt());
162     }
163
164     @Test
165     public void serialize__NoPrefixInEidToLocator() throws Exception {
166         MapNotifyBuilder mnBuilder = new MapNotifyBuilder();
167         mnBuilder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
168         mnBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
169                 new MappingRecordBuilder().build()).build());
170         mnBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord
171                 (new MappingRecordBuilder().setEid(null).build()).build());
172         mnBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
173                 new MappingRecordBuilder().setEid(LispAddressUtil.getNoAddressEid()).build()).build());
174
175         ByteBuffer bb = MapNotifySerializer.getInstance().serialize(mnBuilder.build());
176         bb.position(bb.position() + 16); // jump to first record prefix AFI
177         assertEquals(0, bb.getShort());
178
179         bb.position(bb.position() + 10); // jump to second record prefix AFI
180         assertEquals(0, bb.getShort());
181
182         bb.position(bb.position() + 10); // jump to third record prefix AFI
183         assertEquals(0, bb.getShort());
184     }
185
186     @Test
187     public void deserialize__MultipleRecords() throws Exception {
188         // LISP(Type = 4 Map-Notify, I=1
189         // Record Counter: 4
190         // EID prefixes: 153.16.254.1 -- 152.16.254.1 -- 151.16.254.1 --
191         // 150.16.254.1
192         // Local RLOCs: 192.168.136.10 -- 192.168.136.11 -- 192.168.136.12 --
193         // 192.168.136.13
194         //
195         MapNotify mn = MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("40 00 00 "
196                 + "04 " // Record count
197                 + "FF BB 00 00 00 00 00 00 00 01 00 14 87 c1 33 cd "
198                 + "d1 1e bc 80 fd 3e 71 11 81 17 40 74 26 25 44 bd "
199                 + "00 00 00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " // Record
200                 // 1
201                 + "ff 00 00 05 00 01 c0 a8 88 0a " // contd
202                 + "00 00 00 0a 01 20 10 00 00 00 00 01 98 10 fe 01 01 64 " // Record
203                 // 2
204                 + "ff 00 00 05 00 01 c0 a8 88 0b " // contd
205                 + "00 00 00 0a 01 20 10 00 00 00 00 01 97 10 fe 01 01 64 " // Record
206                 // 3
207                 + "ff 00 00 05 00 01 c0 a8 88 0c " // contd
208                 + "00 00 00 0a 01 20 10 00 00 00 00 01 96 10 fe 01 01 64 " // Record
209                 // 4
210                 + "ff 00 00 05 00 01 c0 a8 88 0d " // contd
211         ));
212
213         assertEquals(4, mn.getMappingRecordItem().size());
214         assertEquals(LispAddressUtil.asIpv4PrefixEid("153.16.254.1/32"), mn.getMappingRecordItem().get(0)
215                 .getMappingRecord().getEid());
216         assertEquals(LispAddressUtil.asIpv4PrefixEid("151.16.254.1/32"), mn.getMappingRecordItem().get(2)
217                 .getMappingRecord().getEid());
218         assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.11"), mn.getMappingRecordItem().get(1)
219                 .getMappingRecord().getLocatorRecord().get(0).getRloc());
220         assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.13"), mn.getMappingRecordItem().get(3)
221                 .getMappingRecord().getLocatorRecord().get(0).getRloc());
222     }
223
224     @Test
225     public void deserialize__Locators() throws Exception {
226         MapNotify mn = MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("40 00 01 01 "
227                 + "FF BB 00 00 00 00 00 00 00 01 00 14 f1 b8 ab f0 "
228                 + "66 bb 2e ef 12 70 74 46 6f 6b 8e ca bf 1e 68 40 "
229                 + "00 00 00 0a "
230                 + "03 " // Locator Count
231                 + "20 10 00 00 00 00 01 99 10 fe 01 "
232                 // Locator 1
233                 + "01 64 1f 00 " // priorities + weights
234                 + "00 05 " // Flags
235                 + "00 01 c0 a8 88 0a " // Locator
236                 // Locator 2
237                 + "67 00 30 34 " // priorities + weights
238                 + "00 02 " // Flags
239                 + "00 01 cc aa AA 11 " // Locator
240                 // Locator 3
241                 + "60 11 34 A4 " // priorities + weights
242                 + "00 03 " // Flags
243                 + "00 01 c0 a8 88 0a " // Locator
244         ));
245
246         assertEquals(1, mn.getMappingRecordItem().size());
247         MappingRecordItem eidToLocator = mn.getMappingRecordItem().get(0);
248         assertEquals(3, eidToLocator.getMappingRecord().getLocatorRecord().size());
249         LocatorRecord loc0 = eidToLocator.getMappingRecord().getLocatorRecord().get(0);
250         LocatorRecord loc1 = eidToLocator.getMappingRecord().getLocatorRecord().get(1);
251         LocatorRecord loc2 = eidToLocator.getMappingRecord().getLocatorRecord().get(2);
252         assertEquals((byte) 0x01, loc0.getPriority().byteValue());
253         assertEquals((byte) 0x67, loc1.getPriority().byteValue());
254         assertEquals((byte) 0x60, loc2.getPriority().byteValue());
255
256         assertEquals((byte) 0x64, loc0.getWeight().byteValue());
257         assertEquals((byte) 0x00, loc1.getWeight().byteValue());
258         assertEquals((byte) 0x11, loc2.getWeight().byteValue());
259
260         assertEquals((byte) 0x1F, loc0.getMulticastPriority().byteValue());
261         assertEquals((byte) 0x30, loc1.getMulticastPriority().byteValue());
262         assertEquals((byte) 0x34, loc2.getMulticastPriority().byteValue());
263
264         assertEquals((byte) 0x00, loc0.getMulticastWeight().byteValue());
265         assertEquals((byte) 0x34, loc1.getMulticastWeight().byteValue());
266         assertEquals((byte) 0xA4, loc2.getMulticastWeight().byteValue());
267
268         assertTrue(loc0.isLocalLocator());
269         assertFalse(loc1.isLocalLocator());
270         assertFalse(loc2.isLocalLocator());
271
272         assertFalse(loc0.isRlocProbed());
273         assertTrue(loc1.isRlocProbed());
274         assertTrue(loc2.isRlocProbed());
275
276         assertTrue(loc0.isRouted());
277         assertFalse(loc1.isRouted());
278         assertTrue(loc2.isRouted());
279
280         assertEquals(LispAddressUtil.asIpv4Rloc("192.168.136.10"), loc0.getRloc());
281         assertEquals(LispAddressUtil.asIpv4Rloc("204.170.170.17"), loc1.getRloc());
282     }
283
284     @Test
285     public void deserialize__SomeEidToLocatorFiels() throws Exception {
286         // LISP(Type = 4 Map-Notify, I=0
287         // Record Counter: 4
288         // EID prefixes: 153.16.254.1 -- 152.16.254.1 -- 151.16.254.1 --
289         // 150.16.254.1
290         // Local RLOCs: 192.168.136.10 -- 192.168.136.11 -- 192.168.136.12 --
291         // 192.168.136.13
292         //
293         MapNotify mn = MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("40 00 00 "
294         //
295                 + "04 " // Record count
296                 + "FF BB 00 00 00 00 00 00 00 01 00 14 b9 cd 7b 89 " //
297                 + "65 c2 56 03 be dd 81 20 47 e5 c3 4f 56 02 e1 59 " //
298                 + "00 00 00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " // Record
299                 // 0
300                 + "ff 00 00 05 00 01 c0 a8 88 0a " // contd
301                 + "00 00 00 0b 01 17 50 00 01 11 00 01 98 10 fe 01 01 64 " // Record
302                 // 1
303                 + "ff 00 00 05 00 01 c0 a8 88 0b " // contd
304                 + "00 00 00 0c 01 20 00 00 02 22 00 01 97 10 fe 01 01 64 " // Record
305                 // 2
306                 + "ff 00 00 05 00 01 c0 a8 88 0c " // contd
307                 + "00 00 00 0d 01 20 20 00 03 33 00 01 96 10 fe 01 01 64 " // Record
308                 // 3
309                 + "ff 00 00 05 00 01 c0 a8 88 0d " // contd
310         ));
311
312         assertEquals(4, mn.getMappingRecordItem().size());
313
314         MappingRecord record0 = mn.getMappingRecordItem().get(0).getMappingRecord();
315         MappingRecord record1 = mn.getMappingRecordItem().get(1).getMappingRecord();
316         MappingRecord record2 = mn.getMappingRecordItem().get(2).getMappingRecord();
317         MappingRecord record3 = mn.getMappingRecordItem().get(3).getMappingRecord();
318
319         assertEquals(10, record0.getRecordTtl().intValue());
320         assertEquals(13, record3.getRecordTtl().intValue());
321
322         assertEquals(32, record0.getMaskLength().intValue());
323         assertEquals(23, record1.getMaskLength().intValue());
324
325         assertEquals(Action.NoAction, record0.getAction());
326         assertEquals(Action.SendMapRequest, record1.getAction());
327         assertEquals(Action.NoAction, record2.getAction());
328         assertEquals(Action.NativelyForward, record3.getAction());
329
330         assertTrue(record0.isAuthoritative());
331         assertTrue(record1.isAuthoritative());
332         assertFalse(record2.isAuthoritative());
333         assertFalse(record3.isAuthoritative());
334
335         assertEquals(0x000, record0.getMapVersion().shortValue());
336         assertEquals(0x111, record1.getMapVersion().shortValue());
337         assertEquals(0x222, record2.getMapVersion().shortValue());
338         assertEquals(0x333, record3.getMapVersion().shortValue());
339     }
340
341     @Test
342     public void deserialize__IllegalAction() throws Exception {
343         MapNotify mn = MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("40 00 01 01 FF BB "
344                 + "00 00 00 00 00 00 00 01 00 14 ec 47 1e 53 25 91 "
345                 + "2f 68 10 75 13 dd 2c e8 6e 3c ac 94 ed e4 00 00 "
346                 + "00 0a 01 20 F0 00 00 00 00 01 99 10 fe 01 01 64 "
347                 + "ff 00 00 05 00 01 c0 a8 88 0a"));
348
349         assertEquals(1, mn.getMappingRecordItem().size());
350         assertEquals(Action.NoAction, mn.getMappingRecordItem().get(0).getMappingRecord().getAction());
351     }
352
353     @Test(expected = LispSerializationException.class)
354     public void deserialize_WrongAuthenticationLength() throws Exception {
355         // LISP(Type = 4 Map-Notify, I=0
356         // Record Counter: 1
357         // Nonce: (something)
358         // Key ID: 0x0000
359         // AuthDataLength: 20 Data:
360         // e8:f5:0b:c5:c5:f2:b0:21:27:a8:a5:68:89:ec
361         // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
362         // No-Action
363         // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
364         // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
365         //
366         MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("48 00 00 01 FF BB "
367                 + "00 00 00 00 00 00 00 00 00 14 e8 f5 0b c5 c5 f2 "
368                 + "b0 21 27 a8 21 a5 68 89 ec 00 00 "
369                 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 "
370                 + "ff 00 00 05 00 01 c0 a8 88 0a"));
371     }
372
373     @Test
374     public void deserialize__SHA1() throws Exception {
375         // LISP(Type = 4 Map-Notify, I=0
376         // Record Counter: 1
377         // Nonce: (something)
378         // Key ID: 0x0001
379         // AuthDataLength: 20 Data:
380         // b2:dd:1a:25:c0:60:b1:46:e8:dc:6d:a6:ae:2e:92:92:a6:ca:b7:9d
381         // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
382         // No-Action
383         // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
384         // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
385         //
386         MapNotify mn = MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("40 00 00 01 FF BB "
387                 + "00 00 00 00 00 00 00 01 00 14 2c 61 b9 c9 9a 20 "
388                 + "ba d8 f5 40 d3 55 6f 5f 6e 5a b2 0a bf b5 00 00 "
389                 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 "
390                 + "ff 00 00 05 00 01 c0 a8 88 0a"));
391
392         assertFalse(mn.isXtrSiteIdPresent());
393
394         assertEquals(1, mn.getMappingRecordItem().size());
395         assertEquals(0xFFBB000000000000L, mn.getNonce().longValue());
396         assertEquals(0x0001, mn.getKeyId().shortValue());
397         byte[] expectedAuthenticationData = { (byte) 0x2c, (byte) 0x61, (byte) 0xb9, (byte) 0xc9, (byte) 0x9a,
398                 (byte) 0x20, (byte) 0xba, (byte) 0xd8, (byte) 0xf5, (byte) 0x40, (byte) 0xd3, (byte) 0x55, (byte) 0x6f,
399                 (byte) 0x5f, (byte) 0x6e, (byte) 0x5a, (byte) 0xb2, (byte) 0x0a, (byte) 0xbf, (byte) 0xb5 };
400         ArrayAssert.assertEquals(expectedAuthenticationData, mn.getAuthenticationData());
401     }
402
403     @Test
404     public void deserialize__SHA256() throws Exception {
405         // LISP(Type = 4 Map-Notify, I=0
406         // Record Counter: 1
407         // Nonce: (something)
408         // Key ID: 0x0002
409         // AuthDataLength: 32 Data:
410         // 70 30 d4 c6 10 44 0d 83 be 4d bf fd a9 8c 57 6d 68 a5 bf 32 11 c9 7b
411         // 58 c4 b9 9f 06 11 23 b9 38
412         // EID prefix: 153.16.254.1/32 (EID=0x9910FE01), TTL: 10, Authoritative,
413         // No-Action
414         // Local RLOC: 192.168.136.10 (RLOC=0xC0A8880A), Reachable,
415         // Priority/Weight: 1/100, Multicast Priority/Weight: 255/0
416         //
417         MapNotify mn = MapNotifySerializer.getInstance().deserialize(hexToByteBuffer("40 00 00 01 FF BB "
418                 + "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 "
419                 + "11 c9 7b 58 c4 b9 9f 06 11 23 b9 38 00 00 "
420                 + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 "
421                 + "ff 00 00 05 00 01 c0 a8 88 0a"));
422
423         assertFalse(mn.isXtrSiteIdPresent());
424
425         assertEquals(1, mn.getMappingRecordItem().size());
426         assertEquals(0xFFBB000000000000L, mn.getNonce().longValue());
427         assertEquals(0x0002, mn.getKeyId().shortValue());
428         byte[] expectedAuthenticationData = { (byte) 0x70, (byte) 0x30, (byte) 0xd4, (byte) 0xc6, (byte) 0x10,
429                 (byte) 0x44, (byte) 0x0d, (byte) 0x83, (byte) 0xbe, (byte) 0x4d, (byte) 0xbf, (byte) 0xfd, (byte) 0xa9,
430                 (byte) 0x8c, (byte) 0x57, (byte) 0x6d, (byte) 0x68, (byte) 0xa5, (byte) 0xbf, (byte) 0x32, (byte) 0x11,
431                 (byte) 0xc9, (byte) 0x7b, (byte) 0x58, (byte) 0xc4, (byte) 0xb9, (byte) 0x9f, (byte) 0x06, (byte) 0x11,
432                 (byte) 0x23, (byte) 0xb9, (byte) 0x38 };
433         ArrayAssert.assertEquals(expectedAuthenticationData, mn.getAuthenticationData());
434     }
435 }