Merge "BUG-1116: Finish up egress path API changes"
[bgpcep.git] / pcep / ietf-stateful07 / src / test / java / org / opendaylight / protocol / pcep / ietf / PCEPObjectParserTest.java
1 /*
2  * Copyright (c) 2013 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
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.Unpooled;
15 import java.io.IOException;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00LspObjectParser;
19 import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00SrpObjectParser;
20 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07LspaObjectParser;
21 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07OpenObjectParser;
22 import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
23 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
24 import org.opendaylight.protocol.pcep.spi.TlvRegistry;
25 import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
26 import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
27 import org.opendaylight.protocol.util.ByteArray;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs2;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs2Builder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.error.code.tlv.LspErrorCode;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.error.code.tlv.LspErrorCodeBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.symbolic.path.name.tlv.SymbolicPathName;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.symbolic.path.name.tlv.SymbolicPathNameBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
53
54 public class PCEPObjectParserTest {
55
56     private TlvRegistry tlvRegistry;
57
58     private VendorInformationTlvRegistry viTlvRegistry;
59
60     @Before
61     public void setUp() throws Exception {
62         this.tlvRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getTlvHandlerRegistry();
63         this.viTlvRegistry = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getVendorInformationTlvRegistry();
64     }
65
66     @Test
67     public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException {
68         final Stateful07OpenObjectParser parser = new Stateful07OpenObjectParser(this.tlvRegistry, this.viTlvRegistry);
69         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
70
71         final OpenBuilder builder = new OpenBuilder();
72         builder.setProcessingRule(false);
73         builder.setIgnore(false);
74         builder.setVersion(new ProtocolVersion((short) 1));
75         builder.setKeepalive((short) 30);
76         builder.setDeadTimer((short) 120);
77         builder.setSessionId((short) 1);
78
79         final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
80
81         final Tlvs1Builder statBuilder = new Tlvs1Builder();
82         statBuilder.setStateful(tlv1);
83
84         builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
85                 Tlvs1.class, statBuilder.build()).build());
86
87         assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
88         ByteBuf buf = Unpooled.buffer();
89         parser.serializeObject(builder.build(), buf);
90         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
91     }
92
93     @Test
94     public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException {
95         final CInitiated00LspObjectParser parser = new CInitiated00LspObjectParser(this.tlvRegistry, this.viTlvRegistry);
96         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin"));
97
98         final LspBuilder builder = new LspBuilder();
99         builder.setProcessingRule(true);
100         builder.setIgnore(true);
101         builder.setAdministrative(true);
102         builder.setDelegate(false);
103         builder.setRemove(true);
104         builder.setSync(false);
105         builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
106         builder.setOperational(OperationalStatus.GoingDown);
107         builder.setPlspId(new PlspId(0x12345L));
108
109         final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
110         final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
111                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName("Med".getBytes())).build();
112         builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
113                 tlv1).setSymbolicPathName(tlv2).build());
114         assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4)));
115         ByteBuf buf = Unpooled.buffer();
116         parser.serializeObject(builder.build(), buf);
117         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
118     }
119
120     @Test
121     public void testLspaObject() throws IOException, PCEPDeserializerException {
122         final Stateful07LspaObjectParser parser = new Stateful07LspaObjectParser(this.tlvRegistry, this.viTlvRegistry);
123         final LspaBuilder builder = new LspaBuilder();
124         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin"));
125
126         final SymbolicPathName tlv = new SymbolicPathNameBuilder().setPathName(
127                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName(new byte[] {
128                     (byte) 0x4d, (byte) 0x65, (byte) 0x64, (byte) 0x20, (byte) 0x74, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x20,
129                     (byte) 0x6f, (byte) 0x66, (byte) 0x20, (byte) 0x73, (byte) 0x79, (byte) 0x6d, (byte) 0x62, (byte) 0x6f, (byte) 0x6c,
130                     (byte) 0x69, (byte) 0x63, (byte) 0x20, (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65 })).build();
131
132         builder.setIgnore(false);
133         builder.setProcessingRule(false);
134         builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
135         builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
136         builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
137         builder.setHoldPriority((short) 0x02);
138         builder.setSetupPriority((short) 0x03);
139         builder.setLocalProtectionDesired(true);
140         builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.lspa.TlvsBuilder().addAugmentation(
141                 Tlvs2.class, new Tlvs2Builder().setSymbolicPathName(tlv).build()).build());
142
143         // Tlvs container does not contain toString
144         final Object o = parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4));
145         assertEquals(tlv, ((Lspa) o).getTlvs().getAugmentation(Tlvs2.class).getSymbolicPathName());
146         // assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), ByteArray.cutBytes(result,
147         // 4)));
148         ByteBuf buf = Unpooled.buffer();
149         parser.serializeObject(builder.build(), buf);
150         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
151     }
152
153     @Test
154     public void testSrpObject() throws IOException, PCEPDeserializerException {
155         final CInitiated00SrpObjectParser parser = new CInitiated00SrpObjectParser(this.tlvRegistry, this.viTlvRegistry);
156         final ByteBuf result = Unpooled.wrappedBuffer(new byte[] { (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0c, 0, 0, 0,
157             (byte) 0x01, 0, 0, 0, (byte) 0x01 });
158
159         final SrpBuilder builder = new SrpBuilder();
160         builder.setProcessingRule(false);
161         builder.setIgnore(false);
162         builder.setOperationId(new SrpIdNumber(1L));
163         builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build());
164         builder.setTlvs(new TlvsBuilder().build());
165
166         assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
167         ByteBuf buf = Unpooled.buffer();
168         parser.serializeObject(builder.build(), buf);
169         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
170     }
171 }