Revert "BUG-47 : unfinished PCEP migration to generated DTOs."
[bgpcep.git] / pcep / api / src / test / java / org / opendaylight / protocol / pcep / api / TlvsTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, 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.protocol.pcep.api;
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.io.UnsupportedEncodingException;
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.List;
19
20 import org.junit.Test;
21
22 import org.opendaylight.protocol.concepts.IPv4Address;
23 import org.opendaylight.protocol.concepts.IPv6Address;
24 import org.opendaylight.protocol.pcep.PCEPOFCodes;
25 import org.opendaylight.protocol.pcep.concepts.IPv4ExtendedTunnelIdentifier;
26 import org.opendaylight.protocol.pcep.concepts.IPv6ExtendedTunnelIdentifier;
27 import org.opendaylight.protocol.pcep.concepts.LSPIdentifier;
28 import org.opendaylight.protocol.pcep.concepts.LSPSymbolicName;
29 import org.opendaylight.protocol.pcep.concepts.TunnelIdentifier;
30 import org.opendaylight.protocol.pcep.message.PCEPOpenMessage;
31 import org.opendaylight.protocol.pcep.object.PCEPOpenObject;
32 import org.opendaylight.protocol.pcep.tlv.IPv4LSPIdentifiersTlv;
33 import org.opendaylight.protocol.pcep.tlv.IPv6LSPIdentifiersTlv;
34 import org.opendaylight.protocol.pcep.tlv.LSPCleanupTlv;
35 import org.opendaylight.protocol.pcep.tlv.LSPStateDBVersionTlv;
36 import org.opendaylight.protocol.pcep.tlv.LSPSymbolicNameTlv;
37 import org.opendaylight.protocol.pcep.tlv.LSPUpdateErrorTlv;
38 import org.opendaylight.protocol.pcep.tlv.NoPathVectorTlv;
39 import org.opendaylight.protocol.pcep.tlv.NodeIdentifierTlv;
40 import org.opendaylight.protocol.pcep.tlv.OFListTlv;
41 import org.opendaylight.protocol.pcep.tlv.OverloadedDurationTlv;
42 import org.opendaylight.protocol.pcep.tlv.PCEStatefulCapabilityTlv;
43 import org.opendaylight.protocol.pcep.tlv.RSVPErrorSpecTlv;
44 import org.opendaylight.protocol.pcep.tlv.ReqMissingTlv;
45
46 /**
47  *
48  */
49 public class TlvsTest {
50         @Test
51         public void IPv4LSPIdentifiersTlvTest() {
52                 final IPv4LSPIdentifiersTlv m = new IPv4LSPIdentifiersTlv(new IPv4Address(
53                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), new LSPIdentifier(new byte[] { (byte) 127, (byte) 0 }), new TunnelIdentifier(
54                                 new byte[] { (byte) 127, (byte) 0 }), new IPv4ExtendedTunnelIdentifier(new IPv4Address(
55                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 })));
56                 final IPv4LSPIdentifiersTlv m2 = new IPv4LSPIdentifiersTlv(new IPv4Address(
57                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), new LSPIdentifier(new byte[] { (byte) 127, (byte) 0 }), new TunnelIdentifier(
58                                 new byte[] { (byte) 127, (byte) 0 }), new IPv4ExtendedTunnelIdentifier(new IPv4Address(
59                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 })));
60                 final IPv4LSPIdentifiersTlv m3 = new IPv4LSPIdentifiersTlv(new IPv4Address(
61                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), new LSPIdentifier(new byte[] { (byte) 127, (byte) 0 }), new TunnelIdentifier(
62                                 new byte[] { (byte) 127, (byte) 0 }), new IPv4ExtendedTunnelIdentifier(new IPv4Address(
63                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 3 })));
64
65                 assertEquals(m, m2);
66                 assertEquals(m.toString(), m2.toString());
67                 assertEquals(m.hashCode(), m2.hashCode());
68                 assertEquals(m.getExtendedTunnelID(), m2.getExtendedTunnelID());
69                 assertEquals(m.getLspID(), m2.getLspID());
70                 assertEquals(m.getSenderAddress(), m2.getSenderAddress());
71                 assertEquals(m.getTunnelID(), m2.getTunnelID());
72                 assertFalse(m.equals(null));
73                 assertFalse(m.equals(m3));
74                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
75                 assertTrue(m.equals(m));
76         }
77
78         @Test
79         public void IPv6LSPIdentifiersTlvTest() {
80                 final IPv6LSPIdentifiersTlv m = new IPv6LSPIdentifiersTlv(new IPv6Address(
81                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2,
82                                                 (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), new LSPIdentifier(new byte[] { (byte) 127, (byte) 0 }), new TunnelIdentifier(new byte[] {
83                                 (byte) 127, (byte) 0 }), new IPv6ExtendedTunnelIdentifier(new IPv6Address(
84                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2,
85                                                 (byte) 127, (byte) 0, (byte) 0, (byte) 2 })));
86                 final IPv6LSPIdentifiersTlv m2 = new IPv6LSPIdentifiersTlv(new IPv6Address(
87                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2,
88                                                 (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), new LSPIdentifier(new byte[] { (byte) 127, (byte) 0 }), new TunnelIdentifier(new byte[] {
89                                 (byte) 127, (byte) 0 }), new IPv6ExtendedTunnelIdentifier(new IPv6Address(
90                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2,
91                                                 (byte) 127, (byte) 0, (byte) 0, (byte) 2 })));
92                 final IPv6LSPIdentifiersTlv m3 = new IPv6LSPIdentifiersTlv(new IPv6Address(
93                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2,
94                                                 (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), new LSPIdentifier(new byte[] { (byte) 127, (byte) 0 }), new TunnelIdentifier(new byte[] {
95                                 (byte) 127, (byte) 0 }), new IPv6ExtendedTunnelIdentifier(new IPv6Address(
96                                 new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2, (byte) 127, (byte) 0, (byte) 0, (byte) 2,
97                                                 (byte) 127, (byte) 0, (byte) 0, (byte) 3 })));
98
99                 assertEquals(m, m2);
100                 assertEquals(m.toString(), m2.toString());
101                 assertEquals(m.hashCode(), m2.hashCode());
102                 assertEquals(m.getExtendedTunnelID(), m2.getExtendedTunnelID());
103                 assertEquals(m.getLspID(), m2.getLspID());
104                 assertEquals(m.getSenderAddress(), m2.getSenderAddress());
105                 assertEquals(m.getTunnelID(), m2.getTunnelID());
106                 assertFalse(m.equals(null));
107                 assertFalse(m.equals(m3));
108                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
109                 assertTrue(m.equals(m));
110         }
111
112         @Test
113         public void LSPStateDBVersionTlvTest() {
114                 final LSPStateDBVersionTlv m = new LSPStateDBVersionTlv(25);
115                 final LSPStateDBVersionTlv m2 = new LSPStateDBVersionTlv(25);
116                 final LSPStateDBVersionTlv m3 = new LSPStateDBVersionTlv(26);
117
118                 assertEquals(m, m2);
119                 assertEquals(m.toString(), m2.toString());
120                 assertEquals(m.hashCode(), m2.hashCode());
121                 assertEquals(m.getDbVersion(), m2.getDbVersion());
122                 assertFalse(m.equals(null));
123                 assertFalse(m.equals(m3));
124                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
125                 assertTrue(m.equals(m));
126         }
127
128         @Test
129         public void LSPSymbolicNameTlvTest() {
130                 final LSPSymbolicNameTlv m = new LSPSymbolicNameTlv(new LSPSymbolicName(new byte[] { (byte) 2 }));
131                 final LSPSymbolicNameTlv m2 = new LSPSymbolicNameTlv(new LSPSymbolicName(new byte[] { (byte) 2 }));
132                 final LSPSymbolicNameTlv m3 = new LSPSymbolicNameTlv(new LSPSymbolicName(new byte[] { (byte) 3 }));
133
134                 assertEquals(m, m2);
135                 assertEquals(m.toString(), m2.toString());
136                 assertEquals(m.hashCode(), m2.hashCode());
137                 assertEquals(m.getSymbolicName(), m2.getSymbolicName());
138                 assertFalse(m.equals(null));
139                 assertFalse(m.equals(m3));
140                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
141                 assertTrue(m.equals(m));
142         }
143
144         @Test
145         public void LSPUpdateErrorTlvTest() {
146                 final LSPUpdateErrorTlv m = new LSPUpdateErrorTlv(new byte[] { (byte) 2, (byte) 2, (byte) 2, (byte) 2 });
147                 final LSPUpdateErrorTlv m2 = new LSPUpdateErrorTlv(new byte[] { (byte) 2, (byte) 2, (byte) 2, (byte) 2 });
148                 final LSPUpdateErrorTlv m3 = new LSPUpdateErrorTlv(new byte[] { (byte) 2, (byte) 2, (byte) 2, (byte) 3 });
149
150                 assertEquals(m, m2);
151                 assertEquals(m.toString(), m2.toString());
152                 assertEquals(m.hashCode(), m2.hashCode());
153                 assertArrayEquals(m.getErrorCode(), m2.getErrorCode());
154                 assertFalse(m.equals(null));
155                 assertFalse(m.equals(m3));
156                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
157                 assertTrue(m.equals(m));
158         }
159
160         @Test
161         public void NoPathVectorTlvTest() {
162                 final NoPathVectorTlv m = new NoPathVectorTlv(false, true, false, false, false, false);
163                 final NoPathVectorTlv m2 = new NoPathVectorTlv(false, true, false, false, false, false);
164                 final NoPathVectorTlv m3 = new NoPathVectorTlv(false, true, true, false, false, false);
165
166                 assertEquals(m, m2);
167                 assertEquals(m.toString(), m2.toString());
168                 assertEquals(m.hashCode(), m2.hashCode());
169                 assertFalse(m.isPceUnavailable());
170                 assertTrue(m.isUnknownDest());
171                 assertFalse(m.isUnknownSrc());
172                 assertFalse(m.isNoGCOSolution());
173                 assertFalse(m.isNoGCOMigrationPath());
174                 assertFalse(m.equals(null));
175                 assertFalse(m.equals(m3));
176                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
177                 assertTrue(m.equals(m));
178         }
179
180         @Test
181         public void NodeIdentifierTlvTest() throws UnsupportedEncodingException {
182                 final NodeIdentifierTlv m = new NodeIdentifierTlv(new byte[] { (byte) 2 });
183                 final NodeIdentifierTlv m2 = new NodeIdentifierTlv(new byte[] { (byte) 2 });
184                 final NodeIdentifierTlv m3 = new NodeIdentifierTlv(new byte[] { (byte) 79, (byte) 102, (byte) 45, (byte) 57, (byte) 107, (byte) 45, (byte) 48,
185                                 (byte) 50 });
186
187                 assertEquals(m, m2);
188                 assertEquals(m.toString(), m2.toString());
189                 assertEquals(m.hashCode(), m2.hashCode());
190                 assertArrayEquals(m.getValue(), m2.getValue());
191                 assertFalse(m.equals(null));
192                 assertFalse(m.equals(m3));
193                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
194                 assertTrue(m.equals(m));
195                 assertEquals(m3.toString(), "NodeIdentifierTlv [value=Of-9k-02]");
196
197                 //non-ascii string
198                 final String str = "þščťžéíá";
199
200                 //test utf-8 validity
201                 assertEquals("NodeIdentifierTlv [value=" + str + "]", new NodeIdentifierTlv(str.getBytes("UTF-8")).toString());
202
203                 //test enother encoding, should be represented as raw binary
204                 assertEquals("NodeIdentifierTlv [value=" + Arrays.toString(str.getBytes("ISO8859_1")) + "]",
205                                 new NodeIdentifierTlv(str.getBytes("ISO8859_1")).toString());
206         }
207
208         @Test
209         public void OverloadedDurationTlvTest() {
210                 final OverloadedDurationTlv m = new OverloadedDurationTlv(2);
211                 final OverloadedDurationTlv m2 = new OverloadedDurationTlv(2);
212                 final OverloadedDurationTlv m3 = new OverloadedDurationTlv(3);
213
214                 assertEquals(m, m2);
215                 assertEquals(m.toString(), m2.toString());
216                 assertEquals(m.hashCode(), m2.hashCode());
217                 assertEquals(m.getValue(), m2.getValue());
218                 assertFalse(m.equals(null));
219                 assertFalse(m.equals(m3));
220                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
221                 assertTrue(m.equals(m));
222         }
223
224         @Test
225         public void PCEStatefulCapabilityTlvTest() {
226                 final PCEStatefulCapabilityTlv m = new PCEStatefulCapabilityTlv(false, true, false);
227                 final PCEStatefulCapabilityTlv m2 = new PCEStatefulCapabilityTlv(false, true, false);
228                 final PCEStatefulCapabilityTlv m3 = new PCEStatefulCapabilityTlv(true, true, true);
229
230                 assertEquals(m, m2);
231                 assertEquals(m.toString(), m2.toString());
232                 assertEquals(m.hashCode(), m2.hashCode());
233                 assertFalse(m.equals(null));
234                 assertFalse(m.equals(m3));
235                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
236                 assertTrue(m.equals(m));
237         }
238
239         @Test
240         public void RSVPErrorSpecTlvTest() {
241                 final RSVPErrorSpecTlv<IPv4Address> m = new RSVPErrorSpecTlv<IPv4Address>(new IPv4Address(new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), true, true, 2, 2);
242                 final RSVPErrorSpecTlv<IPv4Address> m2 = new RSVPErrorSpecTlv<IPv4Address>(new IPv4Address(new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), true, true, 2, 2);
243                 final RSVPErrorSpecTlv<IPv4Address> m3 = new RSVPErrorSpecTlv<IPv4Address>(new IPv4Address(new byte[] { (byte) 127, (byte) 0, (byte) 0, (byte) 2 }), false, true, 2, 2);
244
245                 assertEquals(m, m2);
246                 assertEquals(m.toString(), m2.toString());
247                 assertEquals(m.hashCode(), m2.hashCode());
248                 assertEquals(m.getErrorCode(), m2.getErrorCode());
249                 assertEquals(m.getErrorNodeAddress(), m2.getErrorNodeAddress());
250                 assertEquals(m.getErrorValue(), m2.getErrorValue());
251                 assertFalse(m.equals(null));
252                 assertFalse(m.equals(m3));
253                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
254                 assertTrue(m.equals(m));
255         }
256
257         @Test
258         public void ReqMissingTlvTest() {
259                 final ReqMissingTlv m = new ReqMissingTlv(2);
260                 final ReqMissingTlv m2 = new ReqMissingTlv(2);
261                 final ReqMissingTlv m3 = new ReqMissingTlv(3);
262
263                 assertEquals(m, m2);
264                 assertEquals(m.toString(), m2.toString());
265                 assertEquals(m.hashCode(), m2.hashCode());
266                 assertEquals(m.getRequestID(), m2.getRequestID());
267                 assertFalse(m.equals(null));
268                 assertFalse(m.equals(m3));
269                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
270                 assertTrue(m.equals(m));
271         }
272
273         @Test
274         public void OFListTlvTest() {
275                 final List<PCEPOFCodes> ofcodes = new ArrayList<PCEPOFCodes>();
276
277                 final OFListTlv m = new OFListTlv(ofcodes);
278                 final OFListTlv m2 = new OFListTlv(ofcodes);
279                 final OFListTlv m3 = new OFListTlv(null);
280
281                 assertEquals(m, m2);
282                 assertEquals(m.toString(), m2.toString());
283                 assertEquals(m.hashCode(), m2.hashCode());
284                 assertEquals(m.getOfCodes(), m2.getOfCodes());
285                 assertFalse(m.equals(null));
286                 assertFalse(m.equals(m3));
287                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
288                 assertTrue(m.equals(m));
289         }
290
291         @Test
292         public void LSPCleanupTlvTest() {
293                 final LSPCleanupTlv m = new LSPCleanupTlv(Integer.MAX_VALUE);
294                 final LSPCleanupTlv m2 = new LSPCleanupTlv(Integer.MAX_VALUE);
295                 final LSPCleanupTlv m3 = new LSPCleanupTlv(0);
296
297                 assertEquals(m, m2);
298                 assertEquals(m.toString(), m2.toString());
299                 assertEquals(m.hashCode(), m2.hashCode());
300                 assertEquals(m.getTimeout(), m2.getTimeout());
301                 assertFalse(m.equals(null));
302                 assertFalse(m.equals(m3));
303                 assertFalse(m.equals(new PCEPOpenMessage(new PCEPOpenObject(10, 10, 1))));
304                 assertTrue(m.equals(m));
305
306                 try {
307                         new LSPCleanupTlv(Integer.MIN_VALUE);
308                 } catch (final IllegalArgumentException e) {
309                         assertEquals("Timeout (" + Integer.MIN_VALUE + ") cannot be negative or bigger than 2^31 -1.", e.getMessage());
310                 }
311         }
312 }