import io.netty.buffer.Unpooled;
import java.io.IOException;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.protocol.pcep.parser.object.PCEPReportedRouteObjectParser;
import org.opendaylight.protocol.pcep.parser.object.PCEPRequestParameterObjectParser;
import org.opendaylight.protocol.pcep.parser.object.PCEPSvecObjectParser;
+import org.opendaylight.protocol.pcep.parser.object.bnc.BNCUtil;
+import org.opendaylight.protocol.pcep.parser.object.bnc.BranchNodeListObjectParser;
+import org.opendaylight.protocol.pcep.parser.object.bnc.NonBranchNodeListObjectParser;
import org.opendaylight.protocol.pcep.parser.object.end.points.PCEPEndPointsIpv4ObjectParser;
import org.opendaylight.protocol.pcep.parser.object.end.points.PCEPEndPointsIpv6ObjectParser;
import org.opendaylight.protocol.pcep.parser.object.end.points.PCEPEndPointsObjectSerializer;
import org.opendaylight.protocol.pcep.parser.object.end.points.PCEPP2MPEndPointsIpv4ObjectParser;
import org.opendaylight.protocol.pcep.parser.object.end.points.PCEPP2MPEndPointsIpv6ObjectParser;
+import org.opendaylight.protocol.pcep.parser.object.unreach.PCEPIpv4UnreachDestinationParser;
+import org.opendaylight.protocol.pcep.parser.object.unreach.PCEPIpv6UnreachDestinationParser;
+import org.opendaylight.protocol.pcep.parser.object.unreach.PCEPUnreachDestinationSerializer;
import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.PCEPErrors;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ProtocolVersion;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.RequestId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object.BandwidthBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.branch.node.object.BranchNodeListBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.classtype.object.ClassTypeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.object.CCloseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.Ipv4CaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.Monitoring;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.Monitoring.Flags;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.MonitoringBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.non.branch.node.object.NonBranchNodeListBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.notification.object.CNotificationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of.object.OfBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.req.missing.tlv.ReqMissingBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.RpBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.svec.object.SvecBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.unreach.destination.object.UnreachDestinationObjBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.unreach.destination.object.unreach.destination.obj.destination.Ipv4DestinationCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.unreach.destination.object.unreach.destination.obj.destination.Ipv4DestinationCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.unreach.destination.object.unreach.destination.obj.destination.Ipv6DestinationCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.unreach.destination.object.unreach.destination.obj.destination.Ipv6DestinationCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.objects.VendorInformationObject;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.objects.VendorInformationObjectBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.tlvs.VendorInformationTlv;
builder.setDeadTimer((short) 120);
builder.setSessionId((short) 1);
- builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder().build());
+ builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open
+ .object.open.TlvsBuilder().build());
- assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
final ByteBuf buf = Unpooled.buffer();
parser.serializeObject(builder.build(), buf);
assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
builder.setProcessingRule(false);
builder.setIgnore(false);
builder.setReason((short) 5);
- builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.object.c.close.TlvsBuilder().build());
+ builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close
+ .object.c.close.TlvsBuilder().build());
- assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
final ByteBuf buf = Unpooled.buffer();
parser.serializeObject(builder.build(), buf);
assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
builder.setLinkDiverse(false);
builder.setNodeDiverse(false);
builder.setSrlgDiverse(false);
+ builder.setPartialPathDiverse(false);
+ builder.setLinkDirectionDiverse(false);
builder.setRequestsIds(Lists.newArrayList(new RequestId(0xFFL)));
- assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
ByteBuf buf = Unpooled.buffer();
parser.serializeObject(builder.build(), buf);
assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
builder.setRequestsIds(requestIDs);
- assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false),
+ result.slice(4, result.readableBytes() - 4)));
buf = Unpooled.buffer();
parser.serializeObject(builder.build(), buf);
assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
0x7f, 0x00, 0x00, 0x01
};
final PCEPPceIdIPv4ObjectParser parser = new PCEPPceIdIPv4ObjectParser();
- final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceId pceId = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object
+ .PceId pceId = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
new Ipv4AddressNoZone("127.0.0.1"))).build();
final ByteBuf result = Unpooled.wrappedBuffer(pccIdReqBytes);
- assertEquals(pceId, parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(pceId, parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
final ByteBuf buf = Unpooled.buffer(pccIdReqBytes.length);
parser.serializeObject(pceId, buf);
0x00, 0x00, 0x00, 0x01
};
final PCEPPceIdIPv6ObjectParser parser = new PCEPPceIdIPv6ObjectParser();
- final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceId pccIdReq = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
+ final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object
+ .PceId pccIdReq = new PceIdBuilder().setIpAddress(new IpAddressNoZone(
new Ipv6AddressNoZone("::1"))).build();
final ByteBuf result = Unpooled.wrappedBuffer(pccIdReqBytes);
- assertEquals(pccIdReq, parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(pccIdReq, parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
final ByteBuf buf = Unpooled.buffer(pccIdReqBytes.length);
parser.serializeObject(pccIdReq, buf);
final PCEPOverloadObjectParser parser = new PCEPOverloadObjectParser();
final Overload overload = new OverloadBuilder().setDuration(120).build();
final ByteBuf result = Unpooled.wrappedBuffer(overloadBytes);
- assertEquals(overload, parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(overload, parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
final ByteBuf buf = Unpooled.buffer(overloadBytes.length);
parser.serializeObject(overload, buf);
/* pst-tlv */
0x0, 0x1C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0 };
- final PCEPRequestParameterObjectParser parser = new PCEPRequestParameterObjectParser(this.tlvRegistry, this.viTlvRegistry);
+ final PCEPRequestParameterObjectParser parser
+ = new PCEPRequestParameterObjectParser(this.tlvRegistry, this.viTlvRegistry);
final RpBuilder builder = new RpBuilder();
builder.setProcessingRule(false);
builder.setIgnore(false);
builder.setEroCompression(false);
builder.setPriority((short) 5);
builder.setRequestId(new RequestId(0xdeadbeefL));
- builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.rp.TlvsBuilder().setPathSetupType(
- new PathSetupTypeBuilder().setPst((short) 0).build()).build());
+ builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp
+ .object.rp.TlvsBuilder().setPathSetupType(new PathSetupTypeBuilder().setPst((short) 0).build()).build());
final ByteBuf result = Unpooled.wrappedBuffer(rpObjectWithPstTlvBytes);
- assertEquals(builder.build(),
- parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
final ByteBuf buf = Unpooled.buffer();
parser.serializeObject(builder.build(), buf);
assertArrayEquals(rpObjectWithPstTlvBytes, ByteArray.getAllBytes(buf));
}
+
+ @Test
+ public void testBranchNodeListObject() throws Exception {
+ final byte[] expected = {
+ 0x1f, 0x10, 0x0, 0xc,
+ (byte) 0x81, 0x8,
+ (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, 0x20, 0x0,
+ };
+
+ final BranchNodeListObjectParser parser
+ = new BranchNodeListObjectParser(this.ctx.getEROSubobjectHandlerRegistry());
+ final ByteBuf result = Unpooled.wrappedBuffer(expected);
+
+ final BranchNodeListBuilder builder = new BranchNodeListBuilder();
+ builder.setProcessingRule(false);
+ builder.setIgnore(false);
+ final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
+ .route.object.ero.Subobject> subs = Lists.newArrayList();
+ subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
+ .route.object.ero.SubobjectBuilder()
+ .setLoose(true)
+ .setSubobjectType(new IpPrefixCaseBuilder()
+ .setIpPrefix(new IpPrefixBuilder().setIpPrefix(
+ new IpPrefix(new Ipv4Prefix("255.255.255.255/32"))).build()).build()).build());
+ builder.setSubobject(BNCUtil.toBncSubobject(subs));
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
+ final ByteBuf buf = Unpooled.buffer();
+ parser.serializeObject(builder.build(), buf);
+ assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
+
+ try {
+ parser.parseObject(new ObjectHeaderImpl(true, true), null);
+ fail();
+ } catch (final IllegalArgumentException e) {
+ assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testNonBranchNodeListObject() throws Exception {
+ final byte[] expected = {
+ 0x1f, 0x20, 0x0, 0xc,
+ (byte) 0x81, 0x8,
+ (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, 0x20, 0x0,
+ };
+
+ final NonBranchNodeListObjectParser parser
+ = new NonBranchNodeListObjectParser(this.ctx.getEROSubobjectHandlerRegistry());
+ final ByteBuf result = Unpooled.wrappedBuffer(expected);
+
+ final NonBranchNodeListBuilder builder = new NonBranchNodeListBuilder();
+ builder.setProcessingRule(false);
+ builder.setIgnore(false);
+ final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
+ .route.object.ero.Subobject> subs = Lists.newArrayList();
+ subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
+ .route.object.ero.SubobjectBuilder()
+ .setLoose(true)
+ .setSubobjectType(new IpPrefixCaseBuilder()
+ .setIpPrefix(new IpPrefixBuilder().setIpPrefix(
+ new IpPrefix(new Ipv4Prefix("255.255.255.255/32"))).build()).build()).build());
+ builder.setSubobject(BNCUtil.toBncSubobject(subs));
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
+ final ByteBuf buf = Unpooled.buffer();
+ parser.serializeObject(builder.build(), buf);
+ assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
+
+ try {
+ parser.parseObject(new ObjectHeaderImpl(true, true), null);
+ fail();
+ } catch (final IllegalArgumentException e) {
+ assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testPCEPIpv4UnreachDestinationObject() throws Exception {
+ final byte[] expected = {
+ 0x1c, 0x10, 0x0, 0x8,
+ (byte) 0x7F, (byte) 0x0, (byte) 0x0, (byte) 0x1
+ };
+
+ final PCEPIpv4UnreachDestinationParser parser = new PCEPIpv4UnreachDestinationParser();
+ final PCEPUnreachDestinationSerializer serializer = new PCEPUnreachDestinationSerializer();
+ final ByteBuf result = Unpooled.wrappedBuffer(expected);
+
+ final UnreachDestinationObjBuilder builder = new UnreachDestinationObjBuilder();
+ builder.setProcessingRule(false);
+ builder.setIgnore(false);
+ final Ipv4DestinationCase dest = new Ipv4DestinationCaseBuilder()
+ .setDestinationIpv4Address(Collections.singletonList(new Ipv4AddressNoZone("127.0.0.1")))
+ .build();
+ builder.setDestination(dest);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
+ final ByteBuf buf = Unpooled.buffer();
+ serializer.serializeObject(builder.build(), buf);
+ assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
+
+ try {
+ parser.parseObject(new ObjectHeaderImpl(true, true), null);
+ fail();
+ } catch (final IllegalArgumentException e) {
+ assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testPCEPIpv6UnreachDestinationObject() throws Exception {
+ final byte[] expected = {
+ 0x1c, 0x20, 0x0, 0x14,
+ (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0,
+ (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0,
+ (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x0,
+ (byte) 0x0, (byte) 0x0, (byte) 0x0, (byte) 0x1
+ };
+
+ final PCEPIpv6UnreachDestinationParser parser = new PCEPIpv6UnreachDestinationParser();
+ final PCEPUnreachDestinationSerializer serializer = new PCEPUnreachDestinationSerializer();
+ final ByteBuf result = Unpooled.wrappedBuffer(expected);
+
+ final UnreachDestinationObjBuilder builder = new UnreachDestinationObjBuilder();
+ builder.setProcessingRule(false);
+ builder.setIgnore(false);
+ final Ipv6DestinationCase dest = new Ipv6DestinationCaseBuilder()
+ .setDestinationIpv6Address(Collections.singletonList(new Ipv6AddressNoZone("::1")))
+ .build();
+ builder.setDestination(dest);
+
+ assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
+ result.slice(4, result.readableBytes() - 4)));
+ final ByteBuf buf = Unpooled.buffer();
+ serializer.serializeObject(builder.build(), buf);
+ assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
+
+ try {
+ parser.parseObject(new ObjectHeaderImpl(true, true), null);
+ fail();
+ } catch (final IllegalArgumentException e) {
+ assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage());
+ }
+ }
}