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.ietf;
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import io.netty.buffer.ByteBuf;
13 import io.netty.buffer.Unpooled;
15 import java.io.IOException;
16 import java.util.Collections;
17 import java.util.List;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.protocol.pcep.crabbe.initiated00.InitiatedActivator;
22 import org.opendaylight.protocol.pcep.crabbe.initiated00.PcinitiateMessageParser;
23 import org.opendaylight.protocol.pcep.impl.Activator;
24 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
25 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
26 import org.opendaylight.protocol.util.ByteArray;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.PcinitiateBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.pcinitiate.message.PcinitiateMessageBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.pcinitiate.message.pcinitiate.message.Requests;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.pcinitiate.message.pcinitiate.message.RequestsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4CaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObj;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObjBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.Iro;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.MetricBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
51 import com.google.common.collect.Lists;
53 public class PCEPMessageTest {
56 private Metrics metrics;
59 private EndpointsObj endpoints;
60 private AsNumberCase eroASSubobject;
61 private Activator act;
63 private SimplePCEPExtensionProviderContext ctx;
66 public void setUp() throws Exception {
67 this.ctx = new SimplePCEPExtensionProviderContext();
68 this.act = new Activator();
69 this.act.start(this.ctx);
71 final LspaBuilder lspaBuilder = new LspaBuilder();
72 lspaBuilder.setProcessingRule(false);
73 lspaBuilder.setIgnore(false);
74 lspaBuilder.setLocalProtectionDesired(false);
75 lspaBuilder.setHoldPriority((short) 0);
76 lspaBuilder.setSetupPriority((short) 0);
77 lspaBuilder.setExcludeAny(new AttributeFilter(0L));
78 lspaBuilder.setIncludeAll(new AttributeFilter(0L));
79 lspaBuilder.setIncludeAny(new AttributeFilter(0L));
80 lspaBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.lspa.TlvsBuilder().build());
81 this.lspa = lspaBuilder.build();
83 final MetricBuilder mBuilder = new MetricBuilder();
84 mBuilder.setIgnore(false);
85 mBuilder.setProcessingRule(false);
86 mBuilder.setComputed(false);
87 mBuilder.setBound(false);
88 mBuilder.setMetricType((short) 1);
89 mBuilder.setValue(new Float32(new byte[4]));
90 this.metrics = new MetricsBuilder().setMetric(mBuilder.build()).build();
92 this.eroASSubobject = new AsNumberCaseBuilder().setAsNumber(
93 new AsNumberBuilder().setAsNumber(
94 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber(0xFFFFL)).build()).build();
96 final EroBuilder eroBuilder = new EroBuilder();
97 eroBuilder.setIgnore(false);
98 eroBuilder.setProcessingRule(false);
99 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject> eroSubs = Lists.newArrayList();
100 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder().setSubobjectType(
101 this.eroASSubobject).setLoose(true).build());
102 eroBuilder.setSubobject(eroSubs);
103 this.ero = eroBuilder.build();
105 final Ipv4Builder afi = new Ipv4Builder();
106 afi.setSourceIpv4Address(new Ipv4Address("162.245.17.14"));
107 afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
109 final EndpointsObjBuilder epBuilder = new EndpointsObjBuilder();
110 epBuilder.setIgnore(false);
111 epBuilder.setProcessingRule(true);
112 epBuilder.setAddressFamily(new Ipv4CaseBuilder().setIpv4(afi.build()).build());
113 this.endpoints = epBuilder.build();
117 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
118 try (InitiatedActivator a = new InitiatedActivator()) {
120 final byte[] result = ByteArray.fileToBytes("src/test/resources/Pcinit.bin");
122 final PcinitiateMessageParser parser = new PcinitiateMessageParser(this.ctx.getObjectHandlerRegistry());
124 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
125 final RequestsBuilder rBuilder = new RequestsBuilder();
127 final List<Requests> reqs = Lists.newArrayList();
128 rBuilder.setEndpointsObj(this.endpoints);
129 rBuilder.setLspa(this.lspa);
130 rBuilder.setEro(this.ero);
131 rBuilder.setMetrics(Lists.newArrayList(this.metrics));
132 reqs.add(rBuilder.build());
133 builder.setRequests(reqs);
135 assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(),
136 parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
137 final ByteBuf buf = Unpooled.buffer(result.length);
138 parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
139 assertArrayEquals(result, buf.array());