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
9 package org.opendaylight.protocol.pcep.segment.routing;
11 import static org.junit.Assert.assertArrayEquals;
12 import static org.junit.Assert.assertEquals;
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.Unpooled;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
19 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
20 import org.opendaylight.protocol.util.ByteArray;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.SidType;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.add.lsp.input.arguments.rro.subobject.subobject.type.SrRroTypeBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.sr.subobject.nai.IpAdjacencyBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.sr.subobject.nai.IpNodeIdBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.sr.subobject.nai.UnnumberedAdjacencyBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectBuilder;
31 public class SrRroSubobjectParserTest {
33 private static final byte[] srRroSubobjectWithIpv4NodeID = {
34 0x06,0x0c,(byte) 0x10,0x00,
35 0x00,0x01,(byte) 0xe2,0x40,
39 private static final byte[] srRroSubobjectWithIpv6NodeID = {
40 0x06,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[] srRroSubobjectWithIpv4Adjacency = {
49 0x06,0x10,(byte) 0x30,0x00,
50 0x00,0x01,(byte) 0xe2,0x40,
55 private static final byte[] srRroSubobjectWithIpv6Adjacency = {
56 0x06,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[] srRroSubobjectWithUnnumbered = {
69 0x06,0x18,(byte) 0x50,0x00,
70 0x00,0x01,(byte) 0xe2,0x40,
77 private static final byte[] srRroSubobjectWithoutNAI = {
78 0x06,0x08, (byte) 0x10,0xb,
79 0x1e,0x24,(byte) (byte)-32, 0x00,
82 private static final byte[] srRroSubobjectWithoutSID = {
83 0x06,0x08,(byte) 0x10,0x04,
87 private SimplePCEPExtensionProviderContext ctx;
88 private SegmentRoutingActivator act;
92 this.ctx = new SimplePCEPExtensionProviderContext();
93 this.act = new SegmentRoutingActivator();
94 this.act.start(this.ctx);
98 public void testSrRroSubobjectIpv4NodeIdNAI() throws PCEPDeserializerException {
99 final SrRroSubobjectParser parser = new SrRroSubobjectParser();
100 final SrRroTypeBuilder builder = new SrRroTypeBuilder();
101 builder.setSidType(SidType.Ipv4NodeId);
102 builder.setSid(123456L);
103 builder.setCFlag(false);
104 builder.setMFlag(false);
105 builder.setNai(new IpNodeIdBuilder().setIpAddress(new IpAddress(new Ipv4Address("74.125.43.99"))).build());
106 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build());
108 assertEquals(subobjBuilder.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(srRroSubobjectWithIpv4NodeID, 2))));
109 final ByteBuf buffer = Unpooled.buffer();
110 parser.serializeSubobject(subobjBuilder.build(), buffer);
111 assertArrayEquals(srRroSubobjectWithIpv4NodeID, ByteArray.getAllBytes(buffer));
115 public void testSrRroSubobjectIpv6NodeIdNAI() throws PCEPDeserializerException {
116 final SrRroSubobjectParser parser = new SrRroSubobjectParser();
117 final SrRroTypeBuilder builder = new SrRroTypeBuilder();
118 builder.setSidType(SidType.Ipv6NodeId);
119 builder.setCFlag(false);
120 builder.setMFlag(false);
121 builder.setSid(123456L);
122 builder.setNai(new IpNodeIdBuilder().setIpAddress(new IpAddress(new Ipv6Address("fe80:cd00::211e:729c"))).build());
123 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build());
125 assertEquals(subobjBuilder.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(srRroSubobjectWithIpv6NodeID, 2))));
126 final ByteBuf buffer = Unpooled.buffer();
127 parser.serializeSubobject(subobjBuilder.build(), buffer);
128 assertArrayEquals(srRroSubobjectWithIpv6NodeID, ByteArray.getAllBytes(buffer));
132 public void testSrRroSubobjectIpv4AdjacencyNAI() throws PCEPDeserializerException {
133 final SrRroSubobjectParser parser = new SrRroSubobjectParser();
134 final SrRroTypeBuilder builder = new SrRroTypeBuilder();
135 builder.setSidType(SidType.Ipv4Adjacency);
136 builder.setSid(123456L);
137 builder.setCFlag(false);
138 builder.setMFlag(false);
139 builder.setNai(new IpAdjacencyBuilder().setLocalIpAddress(new IpAddress(new Ipv4Address("74.125.43.99")))
140 .setRemoteIpAddress(new IpAddress(new Ipv4Address("74.125.43.100"))).build());
141 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build());
143 assertEquals(subobjBuilder.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(srRroSubobjectWithIpv4Adjacency, 2))));
144 final ByteBuf buffer = Unpooled.buffer();
145 parser.serializeSubobject(subobjBuilder.build(), buffer);
146 assertArrayEquals(srRroSubobjectWithIpv4Adjacency, ByteArray.getAllBytes(buffer));
150 public void testSrRroSubobjectIpv6AdjacencyNAI() throws PCEPDeserializerException {
151 final SrRroSubobjectParser parser = new SrRroSubobjectParser();
152 final SrRroTypeBuilder builder = new SrRroTypeBuilder();
153 builder.setSidType(SidType.Ipv6Adjacency);
154 builder.setSid(123456L);
155 builder.setCFlag(false);
156 builder.setMFlag(false);
157 builder.setNai(new IpAdjacencyBuilder().setLocalIpAddress(new IpAddress(new Ipv6Address("fe80:cd00::211e:729c")))
158 .setRemoteIpAddress(new IpAddress(new Ipv6Address("fe80:cd00::211e:729d"))).build());
159 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build());
161 assertEquals(subobjBuilder.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(srRroSubobjectWithIpv6Adjacency, 2))));
162 final ByteBuf buffer = Unpooled.buffer();
163 parser.serializeSubobject(subobjBuilder.build(), buffer);
164 assertArrayEquals(srRroSubobjectWithIpv6Adjacency, ByteArray.getAllBytes(buffer));
168 public void testSrRroSubobjectUnnumberedNAI() throws PCEPDeserializerException {
169 final SrRroSubobjectParser parser = new SrRroSubobjectParser();
170 final SrRroTypeBuilder builder = new SrRroTypeBuilder();
171 builder.setSidType(SidType.Unnumbered);
172 builder.setSid(123456L);
173 builder.setCFlag(false);
174 builder.setMFlag(false);
175 builder.setNai(new UnnumberedAdjacencyBuilder().setLocalNodeId(1L).setLocalInterfaceId(2L).setRemoteNodeId(3L).setRemoteInterfaceId(4L).build());
176 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build());
178 assertEquals(subobjBuilder.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(srRroSubobjectWithUnnumbered, 2))));
179 final ByteBuf buffer = Unpooled.buffer();
180 parser.serializeSubobject(subobjBuilder.build(), buffer);
181 assertArrayEquals(srRroSubobjectWithUnnumbered, ByteArray.getAllBytes(buffer));
185 public void testSrRroSubobjectWithoutNAI() throws PCEPDeserializerException {
186 final SrRroSubobjectParser parser = new SrRroSubobjectParser();
187 final SrRroTypeBuilder builder = new SrRroTypeBuilder();
188 builder.setSidType(SidType.Ipv4NodeId);
189 builder.setSid(123470L);
190 builder.setCFlag(true);
191 builder.setMFlag(true);
192 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build());
194 assertEquals(subobjBuilder.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(srRroSubobjectWithoutNAI, 2))));
195 final ByteBuf buffer = Unpooled.buffer();
196 parser.serializeSubobject(subobjBuilder.build(), buffer);
197 assertArrayEquals(srRroSubobjectWithoutNAI, ByteArray.getAllBytes(buffer));
201 public void testSrRroSubobjectWithoutBody() throws PCEPDeserializerException {
202 final SrRroSubobjectParser parser = new SrRroSubobjectParser();
203 final SrRroTypeBuilder builder = new SrRroTypeBuilder();
204 builder.setSidType(SidType.Ipv4NodeId);
205 builder.setCFlag(false);
206 builder.setMFlag(false);
207 builder.setNai(new IpNodeIdBuilder().setIpAddress(new IpAddress(new Ipv4Address("74.125.43.99"))).build());
208 final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(builder.build());
210 assertEquals(subobjBuilder.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(srRroSubobjectWithoutSID, 2))));
211 final ByteBuf buffer = Unpooled.buffer();
212 parser.serializeSubobject(subobjBuilder.build(), buffer);
213 assertArrayEquals(srRroSubobjectWithoutSID, ByteArray.getAllBytes(buffer));