Move pcep base parser Activator to its own bundle
[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 import io.netty.buffer.ByteBuf;
13 import io.netty.buffer.Unpooled;
14 import java.io.IOException;
15 import java.math.BigInteger;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00SrpObjectParser;
19 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07LspObjectParser;
20 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07LspaObjectParser;
21 import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
22 import org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator;
23 import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
24 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
25 import org.opendaylight.protocol.pcep.spi.TlvRegistry;
26 import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
27 import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
28 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
29 import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator;
30 import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsLspObjectParser;
31 import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsOpenObjectParser;
32 import org.opendaylight.protocol.util.ByteArray;
33 import org.opendaylight.protocol.util.Ipv4Util;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1Builder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3Builder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.speaker.entity.id.tlv.SpeakerEntityIdBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs2;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs2Builder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.error.code.tlv.LspErrorCode;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.error.code.tlv.LspErrorCodeBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiers;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiersBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.rsvp.error.spec.tlv.RsvpErrorSpec;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.rsvp.error.spec.tlv.RsvpErrorSpecBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.rsvp.error.spec.tlv.rsvp.error.spec.error.type.RsvpCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.rsvp.error.spec.tlv.rsvp.error.spec.error.type.rsvp._case.RsvpErrorBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.symbolic.path.name.tlv.SymbolicPathName;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.symbolic.path.name.tlv.SymbolicPathNameBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.setup.type.tlv.PathSetupTypeBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId;
78
79 public class PCEPObjectParserTest {
80
81     private SimplePCEPExtensionProviderContext ctx;
82     private BaseParserExtensionActivator act;
83
84     private TlvRegistry tlvRegistry;
85     private VendorInformationTlvRegistry viTlvRegistry;
86
87     private static final byte[] DB_VERSION = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
88     private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
89
90     @Before
91     public void setUp() throws Exception {
92         this.ctx = new SimplePCEPExtensionProviderContext();
93         this.act = new BaseParserExtensionActivator();
94         this.act.start(this.ctx);
95         this.tlvRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getTlvHandlerRegistry();
96         this.viTlvRegistry = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getVendorInformationTlvRegistry();
97     }
98
99     @Test
100     public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException {
101         try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
102             a.start(this.ctx);
103
104             final SyncOptimizationsOpenObjectParser parser = new SyncOptimizationsOpenObjectParser(this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
105             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
106
107             final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder();
108             builder.setProcessingRule(false);
109             builder.setIgnore(false);
110             builder.setVersion(new ProtocolVersion((short) 1));
111             builder.setKeepalive((short) 30);
112             builder.setDeadTimer((short) 120);
113             builder.setSessionId((short) 1);
114
115             final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).addAugmentation(Stateful1.class, new Stateful1Builder().build()).build();
116
117             final Tlvs1Builder statBuilder = new Tlvs1Builder();
118             statBuilder.setStateful(tlv1);
119
120             final Tlvs3Builder syncOptBuilder = new Tlvs3Builder();
121             syncOptBuilder.setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(new BigInteger(DB_VERSION)).build());
122             syncOptBuilder.setSpeakerEntityId(new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(SPEAKER_ID).build());
123
124             builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder()
125                 .addAugmentation(Tlvs1.class, statBuilder.build())
126                 .addAugmentation(Tlvs3.class, syncOptBuilder.build())
127                 .build());
128
129             assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
130             final ByteBuf buf = Unpooled.buffer();
131             parser.serializeObject(builder.build(), buf);
132             assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
133         }
134     }
135
136     @Test
137     public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException {
138         try (StatefulActivator a = new StatefulActivator();
139             SyncOptimizationsActivator a2 = new SyncOptimizationsActivator()) {
140             a.start(this.ctx);
141             a2.start(this.ctx);
142
143             final SyncOptimizationsLspObjectParser parser = new SyncOptimizationsLspObjectParser(this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
144             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin"));
145
146             final LspBuilder builder = new LspBuilder();
147             builder.setProcessingRule(true);
148             builder.setIgnore(true);
149             builder.setAdministrative(true);
150             builder.setDelegate(false);
151             builder.setRemove(true);
152             builder.setSync(false);
153             builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
154             builder.setOperational(OperationalStatus.GoingDown);
155             builder.setPlspId(new PlspId(0x12345L));
156
157             final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
158             final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
159                     new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName("Med".getBytes())).build();
160             final LspDbVersion lspDbVersion = new LspDbVersionBuilder().setLspDbVersionValue(new BigInteger(DB_VERSION)).build();
161             builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
162                     tlv1).setSymbolicPathName(tlv2)
163                     .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs1Builder().setLspDbVersion(lspDbVersion).build())
164                     .build());
165
166             assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4)));
167             final ByteBuf buf = Unpooled.buffer();
168             parser.serializeObject(builder.build(), buf);
169             assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
170         }
171     }
172
173     @Test
174     public void testStateful07LspObjectWithTlv() throws IOException, PCEPDeserializerException {
175         final Stateful07LspObjectParser parser = new Stateful07LspObjectParser(this.tlvRegistry, this.viTlvRegistry);
176         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspObject2WithTLV.bin"));
177
178         final LspBuilder builder = new LspBuilder();
179         builder.setProcessingRule(true);
180         builder.setIgnore(true);
181         builder.setAdministrative(true);
182         builder.setDelegate(false);
183         builder.setRemove(true);
184         builder.setSync(false);
185         builder.setOperational(OperationalStatus.GoingDown);
186         builder.setPlspId(new PlspId(0x12345L));
187
188         final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
189         final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
190                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName("Med".getBytes())).build();
191         final Ipv4Builder afi = new Ipv4Builder();
192         afi.setIpv4TunnelSenderAddress(Ipv4Util.addressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 })));
193         afi.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(Ipv4Util.addressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56,
194             (byte) 0x78 }))));
195         afi.setIpv4TunnelEndpointAddress(Ipv4Util.addressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 })));
196         final LspIdentifiers tlv3 = new LspIdentifiersBuilder().setAddressFamily(new Ipv4CaseBuilder().setIpv4(afi.build()).build()).setLspId(
197             new LspId(65535L)).setTunnelId(new TunnelId(4660)).build();
198         final RsvpErrorBuilder rsvpBuilder = new RsvpErrorBuilder();
199         rsvpBuilder.setNode(new IpAddress(Ipv4Util.addressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 }))));
200         rsvpBuilder.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.ErrorSpec.Flags(false, true));
201         rsvpBuilder.setCode((short) 146);
202         rsvpBuilder.setValue(5634);
203         final RsvpErrorSpec tlv4 = new RsvpErrorSpecBuilder().setErrorType(new RsvpCaseBuilder().setRsvpError(rsvpBuilder.build()).build()).build();
204         builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
205                 tlv1).setSymbolicPathName(tlv2).setLspIdentifiers(tlv3).setRsvpErrorSpec(tlv4).build());
206         assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4)));
207         final ByteBuf buf = Unpooled.buffer();
208         parser.serializeObject(builder.build(), buf);
209         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
210     }
211
212     @Test
213     public void testLspaObject() throws IOException, PCEPDeserializerException {
214         final Stateful07LspaObjectParser parser = new Stateful07LspaObjectParser(this.tlvRegistry, this.viTlvRegistry);
215         final LspaBuilder builder = new LspaBuilder();
216         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin"));
217
218         final SymbolicPathName tlv = new SymbolicPathNameBuilder().setPathName(
219                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName(new byte[] {
220                     (byte) 0x4d, (byte) 0x65, (byte) 0x64, (byte) 0x20, (byte) 0x74, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x20,
221                     (byte) 0x6f, (byte) 0x66, (byte) 0x20, (byte) 0x73, (byte) 0x79, (byte) 0x6d, (byte) 0x62, (byte) 0x6f, (byte) 0x6c,
222                     (byte) 0x69, (byte) 0x63, (byte) 0x20, (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65 })).build();
223
224         builder.setIgnore(false);
225         builder.setProcessingRule(false);
226         builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
227         builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
228         builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
229         builder.setHoldPriority((short) 0x02);
230         builder.setSetupPriority((short) 0x03);
231         builder.setLocalProtectionDesired(true);
232         builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.lspa.TlvsBuilder().addAugmentation(
233                 Tlvs2.class, new Tlvs2Builder().setSymbolicPathName(tlv).build()).build());
234
235         // Tlvs container does not contain toString
236         final Object o = parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4));
237         assertEquals(tlv, ((Lspa) o).getTlvs().getAugmentation(Tlvs2.class).getSymbolicPathName());
238         // assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), ByteArray.cutBytes(result,
239         // 4)));
240         final ByteBuf buf = Unpooled.buffer();
241         parser.serializeObject(builder.build(), buf);
242         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
243     }
244
245     @Test
246     public void testSrpObject() throws IOException, PCEPDeserializerException {
247         final CInitiated00SrpObjectParser parser = new CInitiated00SrpObjectParser(this.tlvRegistry, this.viTlvRegistry);
248         final ByteBuf result = Unpooled.wrappedBuffer(new byte[] { (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0c, 0, 0, 0,
249             (byte) 0x01, 0, 0, 0, (byte) 0x01 });
250
251         final SrpBuilder builder = new SrpBuilder();
252         builder.setProcessingRule(false);
253         builder.setIgnore(false);
254         builder.setOperationId(new SrpIdNumber(1L));
255         builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build());
256         builder.setTlvs(new TlvsBuilder().build());
257
258         assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
259         final ByteBuf buf = Unpooled.buffer();
260         parser.serializeObject(builder.build(), buf);
261         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
262     }
263
264     @Test
265     public void testSRPObjectWithPSTTlv() throws PCEPDeserializerException {
266         final byte[] srpObjectWithPstTlvBytes = { 0x21, 0x10, 0x00, 0x14, 0x0, 0x0, 0x0, 0x01, 0x0, 0x0,
267             0x0, 0x01,
268             /* pst-tlv */
269             0x0, 0x1C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0 };
270         final CInitiated00SrpObjectParser parser = new CInitiated00SrpObjectParser(this.tlvRegistry, this.viTlvRegistry);
271         final SrpBuilder builder = new SrpBuilder();
272         builder.setProcessingRule(false);
273         builder.setIgnore(false);
274         builder.setOperationId(new SrpIdNumber(1L));
275         builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build());
276         builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder().setPathSetupType(new PathSetupTypeBuilder().setPst((short) 0).build()).build());
277
278         final ByteBuf result = Unpooled.wrappedBuffer(srpObjectWithPstTlvBytes);
279         assertEquals(builder.build(),
280                 parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
281         final ByteBuf buf = Unpooled.buffer();
282         parser.serializeObject(builder.build(), buf);
283         assertArrayEquals(srpObjectWithPstTlvBytes, ByteArray.getAllBytes(buf));
284     }
285 }