2 * Copyright (c) 2014 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.segment.routing;
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.Unpooled;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
18 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
19 import org.opendaylight.protocol.util.ByteArray;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.SidType;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.add.lsp.input.arguments.ero.subobject.subobject.type.SrEroTypeBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.sr.subobject.nai.IpAdjacencyBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.sr.subobject.nai.IpNodeIdBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev181109.sr.subobject.nai.UnnumberedAdjacencyBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.ero.SubobjectBuilder;
29 import org.opendaylight.yangtools.yang.common.Uint32;
31 public class SrEroSubobjectParserTest {
33 private static final byte[] SR_ERO_SUBOBJECT_WITH_IPV4_NODEID = {
34 0x05,0x0c,(byte) 0x10,0x00,
35 0x00,0x01,(byte) 0xe2,0x40,
39 private static final byte[] SR_ERO_SUBOBJECT_WITH_IPV6_NODEID = {
40 0x05,0x18,(byte) 0x20,0x00,
41 0x00,0x01,(byte) 0xe2,0x40,
42 (byte) 0xFE,(byte) 0x80,(byte) 0xCD,0x00,
45 0x21,0x1E,0x72,(byte) 0x9C,
48 private static final byte[] SR_ERO_SUBOBJECT_WITH_IPV4_ADJ = {
49 0x05,0x10,(byte) 0x30,0x00,
50 0x00,0x01,(byte) 0xe2,0x40,
55 private static final byte[] SR_ERO_SUBOBJECT_WITH_IPV6_ADJ = {
56 0x05,0x28,(byte) 0x40,0x00,
57 0x00,0x01,(byte) 0xe2,0x40,
58 (byte) 0xFE,(byte) 0x80,(byte) 0xCD,0x00,
61 0x21,0x1E,0x72,(byte) 0x9C,
62 (byte) 0xFE,(byte) 0x80,(byte) 0xCD,0x00,
65 0x21,0x1E,0x72,(byte) 0x9D,
68 private static final byte[] SR_ERO_SUBOBJECT_WITH_UNNUMBERED = {
69 0x05,0x18,(byte) 0x50,0x00,
70 0x00,0x01,(byte) 0xe2,0x40,
77 private static final byte[] SR_ERO_SUBOBJECT_WITHOUT_NAI = {
78 0x05,0x08,(byte) 0x10,0x08,
79 0x00,0x01,(byte) 0xe2,0x40
82 private static final byte[] SR_ERO_SUBOBJECT_WITHOUT_SID = {
83 0x05,0x08,(byte) 0x10,0x04,
87 private static final byte[] SR_ERO_SUBOBJECT_WITH_IPV4_NODEID_MFLAG = {
88 0x05,0x0c,(byte) 0x10,0x01,
89 0x07,0x5B,(byte) 0xCD,0x15,
92 private static final byte[] SR_ERO_SUBOBJECT_WITH_IPV4_NODEID_MFLAG_AFTER = {
93 0x05,0x0c,(byte) 0x10,0x01,
94 0x07,0x5B,(byte) 0xC0,0x00,
98 private SimplePCEPExtensionProviderContext ctx;
99 private SegmentRoutingActivator act;
100 private SrEroSubobjectParser parser;
103 public void setUp() {
104 this.ctx = new SimplePCEPExtensionProviderContext();
105 this.act = new SegmentRoutingActivator();
106 this.act.start(this.ctx);
107 final boolean isIanaAssignedType = false;
108 this.parser = new SrEroSubobjectParser(isIanaAssignedType);
112 public void testSrEroSubobjectIpv4NodeIdNAI() throws PCEPDeserializerException {
113 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
114 .setSidType(SidType.Ipv4NodeId)
115 .setSid(Uint32.valueOf(123456))
118 .setNai(new IpNodeIdBuilder().setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("74.125.43.99")))
120 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
122 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
123 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITH_IPV4_NODEID, 2)), false));
124 final ByteBuf buffer = Unpooled.buffer();
125 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
126 assertArrayEquals(SR_ERO_SUBOBJECT_WITH_IPV4_NODEID, ByteArray.getAllBytes(buffer));
130 public void testSrEroSubobjectIpv6NodeIdNAI() throws PCEPDeserializerException {
131 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
132 .setSidType(SidType.Ipv6NodeId)
133 .setSid(Uint32.valueOf(123456))
136 .setNai(new IpNodeIdBuilder().setIpAddress(new IpAddressNoZone(
137 new Ipv6AddressNoZone("fe80:cd00::211e:729c"))).build());
138 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
140 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
141 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITH_IPV6_NODEID, 2)), false));
142 final ByteBuf buffer = Unpooled.buffer();
143 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
144 assertArrayEquals(SR_ERO_SUBOBJECT_WITH_IPV6_NODEID, ByteArray.getAllBytes(buffer));
148 public void testSrEroSubobjectIpv4AdjacencyNAI() throws PCEPDeserializerException {
149 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
150 .setSidType(SidType.Ipv4Adjacency)
151 .setSid(Uint32.valueOf(123456))
154 .setNai(new IpAdjacencyBuilder().setLocalIpAddress(new IpAddressNoZone(
155 new Ipv4AddressNoZone("74.125.43.99")))
156 .setRemoteIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("74.125.43.100"))).build());
157 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
159 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
160 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITH_IPV4_ADJ, 2)), false));
161 final ByteBuf buffer = Unpooled.buffer();
162 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
163 assertArrayEquals(SR_ERO_SUBOBJECT_WITH_IPV4_ADJ, ByteArray.getAllBytes(buffer));
167 public void testSrEroSubobjectIpv6AdjacencyNAI() throws PCEPDeserializerException {
168 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
169 .setSidType(SidType.Ipv6Adjacency)
170 .setSid(Uint32.valueOf(123456))
173 .setNai(new IpAdjacencyBuilder()
174 .setLocalIpAddress(new IpAddressNoZone(new Ipv6AddressNoZone("fe80:cd00::211e:729c")))
175 .setRemoteIpAddress(new IpAddressNoZone(new Ipv6AddressNoZone("fe80:cd00::211e:729d")))
177 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
179 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
180 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITH_IPV6_ADJ, 2)), false));
181 final ByteBuf buffer = Unpooled.buffer();
182 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
183 assertArrayEquals(SR_ERO_SUBOBJECT_WITH_IPV6_ADJ, ByteArray.getAllBytes(buffer));
187 public void testSrEroSubobjectUnnumberedNAI() throws PCEPDeserializerException {
188 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
189 .setSidType(SidType.Unnumbered)
190 .setSid(Uint32.valueOf(123456))
193 .setNai(new UnnumberedAdjacencyBuilder()
194 .setLocalNodeId(Uint32.ONE).setLocalInterfaceId(Uint32.valueOf(2))
195 .setRemoteNodeId(Uint32.valueOf(3)).setRemoteInterfaceId(Uint32.valueOf(4))
197 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
199 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
200 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITH_UNNUMBERED, 2)), false));
201 final ByteBuf buffer = Unpooled.buffer();
202 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
203 assertArrayEquals(SR_ERO_SUBOBJECT_WITH_UNNUMBERED, ByteArray.getAllBytes(buffer));
207 public void testSrEroSubobjectWithoutNAI() throws PCEPDeserializerException {
208 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
209 .setSidType(SidType.Ipv4NodeId)
210 .setSid(Uint32.valueOf(123456))
213 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
215 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
216 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITHOUT_NAI, 2)), false));
217 final ByteBuf buffer = Unpooled.buffer();
218 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
219 assertArrayEquals(SR_ERO_SUBOBJECT_WITHOUT_NAI, ByteArray.getAllBytes(buffer));
223 public void testSrEroSubobjectWithoutBody() throws PCEPDeserializerException {
224 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
225 .setSidType(SidType.Ipv4NodeId)
228 .setNai(new IpNodeIdBuilder().setIpAddress(new IpAddressNoZone(
229 new Ipv4AddressNoZone("74.125.43.99"))).build());
230 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
232 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
233 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITHOUT_SID, 2)), false));
234 final ByteBuf buffer = Unpooled.buffer();
235 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
236 assertArrayEquals(SR_ERO_SUBOBJECT_WITHOUT_SID, ByteArray.getAllBytes(buffer));
240 public void testSrEroSubobjectIpv4NodeIdNAIMFlag() throws PCEPDeserializerException {
241 final SrEroTypeBuilder builder = new SrEroTypeBuilder()
244 .setSidType(SidType.Ipv4NodeId)
245 .setSid(Uint32.valueOf(30140))
246 .setNai(new IpNodeIdBuilder().setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("74.125.43.99")))
248 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build()).setLoose(false);
250 assertEquals(subobjBuilder.build(), this.parser.parseSubobject(Unpooled.wrappedBuffer(
251 ByteArray.cutBytes(SR_ERO_SUBOBJECT_WITH_IPV4_NODEID_MFLAG, 2)), false));
252 final ByteBuf buffer = Unpooled.buffer();
253 this.parser.serializeSubobject(subobjBuilder.build(), buffer);
254 assertArrayEquals(SR_ERO_SUBOBJECT_WITH_IPV4_NODEID_MFLAG_AFTER, ByteArray.getAllBytes(buffer));