2 * Copyright (c) 2013 Cisco Systems, 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
8 package org.opendaylight.protocol.pcep.api;
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;
15 import java.io.UnsupportedEncodingException;
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.List;
20 import org.junit.Test;
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;
49 public class TlvsTest {
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 })));
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));
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 })));
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));
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);
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));
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 }));
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));
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 });
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));
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);
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));
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,
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]");
198 final String str = "þščťžéíá";
200 //test utf-8 validity
201 assertEquals("NodeIdentifierTlv [value=" + str + "]", new NodeIdentifierTlv(str.getBytes("UTF-8")).toString());
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());
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);
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));
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);
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));
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);
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));
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);
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));
274 public void OFListTlvTest() {
275 final List<PCEPOFCodes> ofcodes = new ArrayList<PCEPOFCodes>();
277 final OFListTlv m = new OFListTlv(ofcodes);
278 final OFListTlv m2 = new OFListTlv(ofcodes);
279 final OFListTlv m3 = new OFListTlv(null);
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));
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);
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));
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());