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