BUG-64 : initial rewrite, MessageRegistry.
[bgpcep.git] / pcep / ietf-stateful02 / src / test / java / org / opendaylight / protocol / pcep / ietf / PCEPMessageTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.pcep.ietf;
9
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;
14
15 import java.io.IOException;
16 import java.util.Collections;
17 import java.util.List;
18
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;
50
51 import com.google.common.collect.Lists;
52
53 public class PCEPMessageTest {
54
55         private Lspa lspa;
56         private Metrics metrics;
57         private Iro iro;
58         private Ero ero;
59         private EndpointsObj endpoints;
60         private AsNumberCase eroASSubobject;
61         private Activator act;
62
63         private SimplePCEPExtensionProviderContext ctx;
64
65         @Before
66         public void setUp() throws Exception {
67                 this.ctx = new SimplePCEPExtensionProviderContext();
68                 this.act = new Activator();
69                 this.act.start(this.ctx);
70
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();
82
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();
91
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();
95
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();
104
105                 final Ipv4Builder afi = new Ipv4Builder();
106                 afi.setSourceIpv4Address(new Ipv4Address("162.245.17.14"));
107                 afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
108
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();
114         }
115
116         @Test
117         public void testPcinitMsg() throws IOException, PCEPDeserializerException {
118                 try (InitiatedActivator a = new InitiatedActivator()) {
119                         a.start(this.ctx);
120                         final byte[] result = ByteArray.fileToBytes("src/test/resources/Pcinit.bin");
121
122                         final PcinitiateMessageParser parser = new PcinitiateMessageParser(this.ctx.getObjectHandlerRegistry());
123
124                         final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
125                         final RequestsBuilder rBuilder = new RequestsBuilder();
126
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);
134
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());
140                 }
141         }
142 }