Move integration tests to mdsal-it-parent
[lispflowmapping.git] / mappingservice / yangmodel / src / test / java / org / opendaylight / lispflowmapping / serializer / MapReplySerializationTest.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
13 import java.nio.ByteBuffer;
14 import java.util.ArrayList;
15
16 import junitx.framework.ArrayAssert;
17
18 import org.junit.Ignore;
19 import org.junit.Test;
20 import org.opendaylight.lispflowmapping.lisp.serializer.MapReplySerializer;
21 import org.opendaylight.lispflowmapping.lisp.util.LispAFIConvertor;
22 import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.EidToLocatorRecord.Action;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapReply;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecord;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecordBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.locatorrecords.LocatorRecord;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.locatorrecords.LocatorRecordBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapreplymessage.MapReplyBuilder;
30
31 public class MapReplySerializationTest extends BaseTestCase {
32
33     @Test
34     @Ignore
35     public void todo() throws Exception {
36         fail("support no eid to locator???");
37         fail("Validation of values in setters (map-version)");
38         fail("Non NPE for no locator in LocatorRecord.serialize");
39     }
40
41     @Test
42     public void serialize__SomeFlags() throws Exception {
43         MapReplyBuilder mr = new MapReplyBuilder();
44         mr.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
45         mr.getEidToLocatorRecord().add(
46                 new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1")))
47                         .build());
48         mr.setProbe(true);
49         mr.setEchoNonceEnabled(false);
50
51         ByteBuffer packet = MapReplySerializer.getInstance().serialize(mr.build());
52         byte firstByte = packet.get(0);
53         assertHexEquals((byte) 0x28, firstByte);
54
55         mr.setProbe(false);
56         mr.setEchoNonceEnabled(true);
57
58         packet = MapReplySerializer.getInstance().serialize(mr.build());
59         firstByte = packet.get(0);
60         assertHexEquals((byte) 0x24, firstByte);
61     }
62
63     @Test
64     public void deserialize__SomeFlags() throws Exception {
65
66         MapReply mr = MapReplySerializer.getInstance().deserialize(hexToByteBuffer("2A 00 00 00 00 00 "
67         //
68                 + "00 00 00 00 00 00"));
69         assertEquals(true, mr.isProbe());
70         assertEquals(false, mr.isEchoNonceEnabled());
71         assertEquals(true, mr.isSecurityEnabled());
72     }
73
74     @Test
75     public void deserialize__All() throws Exception {
76         MapReply mr = MapReplySerializer.getInstance().deserialize(hexToByteBuffer("20 00 00 02 00 00 "
77         //
78                 + "00 00 00 00 00 02 00 00 " //
79                 + "00 02 02 20 00 00 00 00 " //
80                 + "00 01 01 02 03 04 01 02 " //
81                 + "03 04 00 06 00 01 0a 0a " //
82                 + "0a 0a 04 03 02 01 00 01 " //
83                 + "00 02 00 01 00 02 00 03 " //
84                 + "00 04 00 05 00 06 00 07 00 08 00 00 00 00 00 10 30 00 00 02 00 01 04 03 02 01"));
85         assertEquals(2, mr.getNonce().longValue());
86         assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("1.2.3.4"))), mr.getEidToLocatorRecord().get(0)
87                 .getLispAddressContainer());
88         assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("4.3.2.1"))), mr.getEidToLocatorRecord().get(1)
89                 .getLispAddressContainer());
90         assertEquals(false, mr.getEidToLocatorRecord().get(0).isAuthoritative());
91         assertEquals(true, mr.getEidToLocatorRecord().get(1).isAuthoritative());
92         assertEquals(Action.NoAction, mr.getEidToLocatorRecord().get(0).getAction());
93         assertEquals(Action.NativelyForward, mr.getEidToLocatorRecord().get(1).getAction());
94         assertEquals(0, mr.getEidToLocatorRecord().get(0).getMapVersion().shortValue());
95         assertEquals(2, mr.getEidToLocatorRecord().get(1).getMapVersion().shortValue());
96         assertEquals(32, mr.getEidToLocatorRecord().get(0).getMaskLength().shortValue());
97         assertEquals(16, mr.getEidToLocatorRecord().get(1).getMaskLength().shortValue());
98         assertEquals(2, mr.getEidToLocatorRecord().get(0).getRecordTtl().byteValue());
99         assertEquals(0, mr.getEidToLocatorRecord().get(1).getRecordTtl().byteValue());
100         assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPv6AfiAddress(("1:2:3:4:5:6:7:8"))), mr.getEidToLocatorRecord().get(0)
101                 .getLocatorRecord().get(1).getLispAddressContainer());
102         assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("10.10.10.10"))), mr.getEidToLocatorRecord().get(0)
103                 .getLocatorRecord().get(0).getLispAddressContainer());
104         assertEquals(1, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getPriority().byteValue());
105         assertEquals(2, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getWeight().byteValue());
106         assertEquals(3, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getMulticastPriority().byteValue());
107         assertEquals(4, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).getMulticastWeight().byteValue());
108         assertEquals(4, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getPriority().byteValue());
109         assertEquals(3, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getWeight().byteValue());
110         assertEquals(2, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getMulticastPriority().byteValue());
111         assertEquals(1, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).getMulticastWeight().byteValue());
112         assertEquals(true, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).isLocalLocator());
113         assertEquals(true, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).isRlocProbed());
114         assertEquals(false, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(0).isRouted());
115         assertEquals(false, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).isLocalLocator());
116         assertEquals(false, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).isRlocProbed());
117         assertEquals(true, mr.getEidToLocatorRecord().get(0).getLocatorRecord().get(1).isRouted());
118     }
119
120     @Test
121     public void serialize__MultipleRecordsWithoutRLOCs() throws Exception {
122         MapReplyBuilder mrBuilder = new MapReplyBuilder();
123         mrBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
124         mrBuilder.getEidToLocatorRecord().add(
125                 new EidToLocatorRecordBuilder().setLispAddressContainer(
126                         LispAFIConvertor.toContainer(LispAFIConvertor.asIPv6AfiAddress(("0:0:0:0:0:0:0:8")))).build());
127         mrBuilder.getEidToLocatorRecord().add(
128                 new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("8.2.4.5")))
129                         .build());
130
131         ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build());
132         assertEquals(2, packet.get(3));
133
134         packet.position(24); /* EID in first record */
135         byte[] expected = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08 };
136         byte[] actual = new byte[16];
137         packet.get(actual);
138         ArrayAssert.assertEquals(expected, actual);
139
140         packet.position(packet.position() + 12); /* EID in second record */
141         assertEquals(0x08020405, packet.getInt());
142     }
143
144     @Test
145     public void deserialize__MultipleRecordsWithoutRLOCs() throws Exception {
146         MapReply mr = MapReplySerializer.getInstance().deserialize(hexToByteBuffer("20 00 00 02 00 00 "
147         //
148                 + "00 00 00 00 00 00 00 00 00 01 00 20 00 00 00 00 00 01 01 02 03 04 00 00 00 00 00 10 30 00 00 02 00 01 04 03 02 01"));
149         assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("1.2.3.4"))), mr.getEidToLocatorRecord().get(0)
150                 .getLispAddressContainer());
151         assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("4.3.2.1"))), mr.getEidToLocatorRecord().get(1)
152                 .getLispAddressContainer());
153         assertEquals(false, mr.getEidToLocatorRecord().get(0).isAuthoritative());
154         assertEquals(true, mr.getEidToLocatorRecord().get(1).isAuthoritative());
155         assertEquals(Action.NoAction, mr.getEidToLocatorRecord().get(0).getAction());
156         assertEquals(Action.NativelyForward, mr.getEidToLocatorRecord().get(1).getAction());
157         assertEquals(0, mr.getEidToLocatorRecord().get(0).getMapVersion().shortValue());
158         assertEquals(2, mr.getEidToLocatorRecord().get(1).getMapVersion().shortValue());
159         assertEquals(32, mr.getEidToLocatorRecord().get(0).getMaskLength().shortValue());
160         assertEquals(16, mr.getEidToLocatorRecord().get(1).getMaskLength().shortValue());
161         assertEquals(1, mr.getEidToLocatorRecord().get(0).getRecordTtl().byteValue());
162         assertEquals(0, mr.getEidToLocatorRecord().get(1).getRecordTtl().byteValue());
163     }
164
165     @Test
166     public void serialize__EidRecordDefaultAction() throws Exception {
167         MapReplyBuilder mrBuilder = new MapReplyBuilder();
168         mrBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
169         mrBuilder.getEidToLocatorRecord().add(
170                 new EidToLocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("0.0.0.1"))))
171                         .build());
172
173         ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build());
174
175         packet.position(18);
176         assertHexEquals((byte) 0x00, packet.get()); // MapReplyAction.NoAction
177     }
178
179     @Test
180     public void serialize__EidRecordNullActionShouldTranslateToDefault() throws Exception {
181         MapReplyBuilder mrBuilder = new MapReplyBuilder();
182         mrBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
183         mrBuilder.getEidToLocatorRecord().add(
184                 new EidToLocatorRecordBuilder().setAction(null)
185                         .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress(("0.0.0.1")))).build());
186
187         ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build());
188
189         packet.position(18);
190         assertHexEquals((byte) 0x00, packet.get()); // MapReplyAction.NoAction
191     }
192
193     @Test
194     public void serialize__EidRecordFields() throws Exception {
195         MapReplyBuilder mrBuilder = new MapReplyBuilder();
196         mrBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
197
198         EidToLocatorRecordBuilder eidToLocator1 = new EidToLocatorRecordBuilder();
199         eidToLocator1.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1")));
200         eidToLocator1.setRecordTtl(7);
201         eidToLocator1.setAction(Action.SendMapRequest);
202         eidToLocator1.setAuthoritative(true);
203         eidToLocator1.setMapVersion((short) 3072);
204         mrBuilder.getEidToLocatorRecord().add(eidToLocator1.build());
205
206         EidToLocatorRecordBuilder eidToLocator2 = new EidToLocatorRecordBuilder();
207         eidToLocator2.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.7")));
208         eidToLocator2.setRecordTtl(1000000);
209         eidToLocator2.setAction(Action.Drop);
210         eidToLocator2.setAuthoritative(false);
211         eidToLocator2.setMapVersion((short) 29);
212         mrBuilder.getEidToLocatorRecord().add(eidToLocator2.build());
213
214         ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build());
215
216         packet.position(12); /* First record */
217         assertEquals(7, packet.getInt());
218         packet.position(packet.position() + 2); /*
219                                                  * skip Locator Count & Mask-len
220                                                  */
221         assertHexEquals((byte) 0x50, packet.get());
222         packet.position(packet.position() + 1); /* skip Reserved byte */
223         assertEquals((short) 3072, packet.getShort());
224
225         packet.position(packet.position() + 6); /* Second record */
226         assertEquals(1000000, packet.getInt());
227         packet.position(packet.position() + 2); /*
228                                                  * skip Locator Count & Mask-len
229                                                  */
230         assertHexEquals((byte) 0x60, packet.get());
231         packet.position(packet.position() + 1); /* skip Reserved byte */
232         assertEquals((short) 29, packet.getShort());
233     }
234
235     @Test
236     public void serialize__LocatorRecordFields() throws Exception {
237         MapReplyBuilder mrBuilder = new MapReplyBuilder();
238         mrBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
239
240         EidToLocatorRecordBuilder eidToLocatorBuilder = new EidToLocatorRecordBuilder();
241         eidToLocatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1")));
242         eidToLocatorBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
243
244         LocatorRecordBuilder locatorBuilder1 = new LocatorRecordBuilder();
245         locatorBuilder1.setPriority((short) 0xF3);
246         locatorBuilder1.setWeight((short) 0xF6);
247         locatorBuilder1.setMulticastPriority((short) 0xA3);
248         locatorBuilder1.setMulticastWeight((short) 0x06);
249         locatorBuilder1.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.1")));
250         locatorBuilder1.setLocalLocator(true);
251         locatorBuilder1.setRlocProbed(true);
252         locatorBuilder1.setRouted(true);
253         eidToLocatorBuilder.getLocatorRecord().add(locatorBuilder1.build());
254
255         LocatorRecordBuilder locatorBuilder2 = new LocatorRecordBuilder();
256         locatorBuilder2.setPriority((short) 0x03);
257         locatorBuilder2.setWeight((short) 0x06);
258         locatorBuilder2.setMulticastPriority((short) 0x03);
259         locatorBuilder2.setMulticastWeight((short) 0xF1);
260         locatorBuilder2.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.2")));
261         locatorBuilder2.setLocalLocator(false);
262         locatorBuilder2.setRlocProbed(false);
263         locatorBuilder2.setRouted(false);
264         eidToLocatorBuilder.getLocatorRecord().add(locatorBuilder2.build());
265
266         mrBuilder.getEidToLocatorRecord().add(eidToLocatorBuilder.build());
267
268         ByteBuffer packet = MapReplySerializer.getInstance().serialize(mrBuilder.build());
269
270         packet.position(12 + 16); /* First locator record */
271         assertHexEquals((byte) 0xF3, packet.get());
272         assertHexEquals((byte) 0xF6, packet.get());
273         assertHexEquals((byte) 0xA3, packet.get());
274         assertHexEquals((byte) 0x06, packet.get());
275         packet.position(packet.position() + 1);
276         assertHexEquals((byte) 0x07, packet.get());
277
278         packet.position(packet.position() + 6); /* Second locator record */
279         assertHexEquals((byte) 0x03, packet.get());
280         assertHexEquals((byte) 0x06, packet.get());
281         assertHexEquals((byte) 0x03, packet.get());
282         assertHexEquals((byte) 0xF1, packet.get());
283         packet.position(packet.position() + 1);
284         assertHexEquals((byte) 0x00, packet.get());
285     }
286 }