Further migration of test code from legacy setters
[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.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.IpAddressNoZone;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Stateful1;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Stateful1Builder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs3;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs3Builder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.lsp.db.version.tlv.LspDbVersion;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.lsp.db.version.tlv.LspDbVersionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.speaker.entity.id.tlv.SpeakerEntityIdBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Lsp1;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Lsp1Builder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Srp1;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Srp1Builder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.OperationalStatus;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PlspId;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.SrpIdNumber;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs1;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs1Builder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs2;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs2Builder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.error.code.tlv.LspErrorCode;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.error.code.tlv.LspErrorCodeBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.LspIdentifiers;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.LspIdentifiersBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.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.rev181109.lsp.object.LspBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.rsvp.error.spec.tlv.RsvpErrorSpec;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.rsvp.error.spec.tlv.RsvpErrorSpecBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.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.rev181109.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.rev181109.srp.object.SrpBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.srp.TlvsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.stateful.capability.tlv.Stateful;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.stateful.capability.tlv.StatefulBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.symbolic.path.name.tlv.SymbolicPathName;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.symbolic.path.name.tlv.SymbolicPathNameBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ProtocolVersion;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.Lspa;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.LspaBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.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 import org.opendaylight.yangtools.yang.common.Uint16;
79 import org.opendaylight.yangtools.yang.common.Uint32;
80 import org.opendaylight.yangtools.yang.common.Uint64;
81 import org.opendaylight.yangtools.yang.common.Uint8;
82
83 public class PCEPObjectParserTest {
84
85     private SimplePCEPExtensionProviderContext ctx;
86     private BaseParserExtensionActivator act;
87
88     private TlvRegistry tlvRegistry;
89     private VendorInformationTlvRegistry viTlvRegistry;
90
91     private static final Uint64 DB_VERSION = Uint64.valueOf("0102030405060708", 16);
92     private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
93
94     @Before
95     public void setUp() {
96         this.ctx = new SimplePCEPExtensionProviderContext();
97         this.act = new BaseParserExtensionActivator();
98         this.act.start(this.ctx);
99         this.tlvRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getTlvHandlerRegistry();
100         this.viTlvRegistry = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance()
101                 .getVendorInformationTlvRegistry();
102     }
103
104     @Test
105     public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException {
106         try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
107             a.start(this.ctx);
108
109             final SyncOptimizationsOpenObjectParser parser = new SyncOptimizationsOpenObjectParser(
110                 this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
111             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes(
112                 "src/test/resources/PCEPOpenObject1.bin"));
113
114             final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object
115                 .OpenBuilder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
116                     .rev181109.open.object.OpenBuilder()
117                     .setProcessingRule(false)
118                     .setIgnore(false)
119                     .setVersion(new ProtocolVersion(Uint8.ONE))
120                     .setKeepalive(Uint8.valueOf(30))
121                     .setDeadTimer(Uint8.valueOf(120))
122                     .setSessionId(Uint8.ONE);
123
124             final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE)
125                     .addAugmentation(Stateful1.class, new Stateful1Builder().build()).build();
126
127             final Tlvs1Builder statBuilder = new Tlvs1Builder();
128             statBuilder.setStateful(tlv1);
129
130             final Tlvs3Builder syncOptBuilder = new Tlvs3Builder()
131                     .setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(DB_VERSION).build())
132                     .setSpeakerEntityId(new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(SPEAKER_ID).build());
133
134             builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
135                 .open.object.open.TlvsBuilder()
136                 .addAugmentation(Tlvs1.class, statBuilder.build())
137                 .addAugmentation(Tlvs3.class, syncOptBuilder.build())
138                 .build());
139
140             assertEquals(builder.build(), parser.parseObject(
141                 new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
142             final ByteBuf buf = Unpooled.buffer();
143             parser.serializeObject(builder.build(), buf);
144             assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
145         }
146     }
147
148     @Test
149     public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException {
150         try (StatefulActivator a = new StatefulActivator();
151             SyncOptimizationsActivator a2 = new SyncOptimizationsActivator()) {
152             a.start(this.ctx);
153             a2.start(this.ctx);
154
155             final SyncOptimizationsLspObjectParser parser = new SyncOptimizationsLspObjectParser(
156                 this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
157             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes(
158                 "src/test/resources/PCEPLspObject1WithTLV.bin"));
159
160             final LspBuilder builder = new LspBuilder()
161                     .setProcessingRule(true)
162                     .setIgnore(true)
163                     .setAdministrative(true)
164                     .setDelegate(false)
165                     .setRemove(true)
166                     .setSync(false)
167                     .addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build())
168                     .setOperational(OperationalStatus.GoingDown)
169                     .setPlspId(new PlspId(Uint32.valueOf(0x12345)));
170
171             final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(Uint32.valueOf(627610883)).build();
172             final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
173                     new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109
174                         .SymbolicPathName("Med".getBytes())).build();
175             final LspDbVersion lspDbVersion = new LspDbVersionBuilder().setLspDbVersionValue(DB_VERSION).build();
176             builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
177                 .rev181109.lsp.object.lsp.TlvsBuilder().setLspErrorCode(tlv1).setSymbolicPathName(tlv2)
178                     .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep
179                         .sync.optimizations.rev181109.Tlvs1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight
180                             .params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs1Builder()
181                             .setLspDbVersion(lspDbVersion).build())
182                     .build());
183
184             assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true),
185                 result.slice(4, result.readableBytes() - 4)));
186             final ByteBuf buf = Unpooled.buffer();
187             parser.serializeObject(builder.build(), buf);
188             assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
189         }
190     }
191
192     @Test
193     public void testStateful07LspObjectWithTlv() throws IOException, PCEPDeserializerException {
194         final Stateful07LspObjectParser parser = new Stateful07LspObjectParser(this.tlvRegistry, this.viTlvRegistry);
195         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes(
196             "src/test/resources/PCEPLspObject2WithTLV.bin"));
197
198         final LspBuilder builder = new LspBuilder()
199                 .setProcessingRule(true)
200                 .setIgnore(true)
201                 .setAdministrative(true)
202                 .setDelegate(false)
203                 .setRemove(true)
204                 .setSync(false)
205                 .setOperational(OperationalStatus.GoingDown)
206                 .setPlspId(new PlspId(Uint32.valueOf(0x12345)));
207
208         final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(Uint32.valueOf(627610883)).build();
209         final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
210                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109
211                     .SymbolicPathName("Med".getBytes())).build();
212         final LspIdentifiers tlv3 = new LspIdentifiersBuilder()
213                 .setAddressFamily(new Ipv4CaseBuilder()
214                     .setIpv4(new Ipv4Builder()
215                         .setIpv4TunnelSenderAddress(Ipv4Util.noZoneAddressForByteBuf(Unpooled.wrappedBuffer(
216                             new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 })))
217                         .setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(Ipv4Util.noZoneAddressForByteBuf(
218                             Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 }))))
219                         .setIpv4TunnelEndpointAddress(Ipv4Util.noZoneAddressForByteBuf(Unpooled.wrappedBuffer(
220                             new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 })))
221                         .build())
222                     .build())
223                 .setLspId(new LspId(Uint32.valueOf(65535))).setTunnelId(new TunnelId(Uint16.valueOf(4660)))
224                 .build();
225         final RsvpErrorSpec tlv4 = new RsvpErrorSpecBuilder()
226                 .setErrorType(new RsvpCaseBuilder()
227                     .setRsvpError(new RsvpErrorBuilder()
228                         .setNode(new IpAddressNoZone(Ipv4Util.noZoneAddressForByteBuf(Unpooled.wrappedBuffer(
229                             new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 }))))
230                         .setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820
231                             .ErrorSpec.Flags(false, true))
232                         .setCode(Uint8.valueOf(146))
233                         .setValue(Uint16.valueOf(5634))
234                         .build())
235                     .build())
236                 .build();
237         builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
238             .rev181109.lsp.object.lsp.TlvsBuilder().setLspErrorCode(tlv1).setSymbolicPathName(tlv2)
239             .setLspIdentifiers(tlv3).setRsvpErrorSpec(tlv4).build());
240         assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true),
241             result.slice(4, result.readableBytes() - 4)));
242         final ByteBuf buf = Unpooled.buffer();
243         parser.serializeObject(builder.build(), buf);
244         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
245     }
246
247     @Test
248     public void testLspaObject() throws IOException, PCEPDeserializerException {
249         final Stateful07LspaObjectParser parser = new Stateful07LspaObjectParser(this.tlvRegistry, this.viTlvRegistry);
250         final LspaBuilder builder = new LspaBuilder();
251         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes(
252             "src/test/resources/PCEPLspaObject3RandVals.bin"));
253
254         final SymbolicPathName tlv = new SymbolicPathNameBuilder().setPathName(
255                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109
256                     .SymbolicPathName(new byte[] {
257                         (byte) 0x4d, (byte) 0x65, (byte) 0x64, (byte) 0x20, (byte) 0x74, (byte) 0x65, (byte) 0x73,
258                         (byte) 0x74, (byte) 0x20, (byte) 0x6f, (byte) 0x66, (byte) 0x20, (byte) 0x73, (byte) 0x79,
259                         (byte) 0x6d, (byte) 0x62, (byte) 0x6f, (byte) 0x6c, (byte) 0x69, (byte) 0x63, (byte) 0x20,
260                         (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65 })).build();
261
262         builder.setIgnore(false)
263             .setProcessingRule(false)
264             .setExcludeAny(new AttributeFilter(Uint32.valueOf(0x20A1FEE3L)))
265             .setIncludeAny(new AttributeFilter(Uint32.valueOf(0x1A025CC7L)))
266             .setIncludeAll(new AttributeFilter(Uint32.valueOf(0x2BB66532L)))
267             .setHoldPriority(Uint8.valueOf(0x02))
268             .setSetupPriority(Uint8.valueOf(0x03))
269             .setLocalProtectionDesired(true)
270             .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa
271                 .object.lspa.TlvsBuilder().addAugmentation(Tlvs2.class,
272                     new Tlvs2Builder().setSymbolicPathName(tlv).build()).build());
273
274         // Tlvs container does not contain toString
275         final Object o = parser.parseObject(new ObjectHeaderImpl(true, true),
276             result.slice(4, result.readableBytes() - 4));
277         assertEquals(tlv, ((Lspa) o).getTlvs().augmentation(Tlvs2.class).getSymbolicPathName());
278         // assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), ByteArray.cutBytes(result,
279         // 4)));
280         final ByteBuf buf = Unpooled.buffer();
281         parser.serializeObject(builder.build(), buf);
282         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
283     }
284
285     @Test
286     public void testSrpObject() throws PCEPDeserializerException {
287         final CInitiated00SrpObjectParser parser = new CInitiated00SrpObjectParser(this.tlvRegistry,
288             this.viTlvRegistry);
289         final ByteBuf result = Unpooled.wrappedBuffer(new byte[] {
290             (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0c, 0, 0, 0, (byte) 0x01, 0, 0, 0, (byte) 0x01
291         });
292
293         final SrpBuilder builder = new SrpBuilder()
294                 .setProcessingRule(false)
295                 .setIgnore(false)
296                 .setOperationId(new SrpIdNumber(Uint32.ONE))
297                 .addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build())
298                 .setTlvs(new TlvsBuilder().build());
299
300         assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false),
301             result.slice(4, result.readableBytes() - 4)));
302         final ByteBuf buf = Unpooled.buffer();
303         parser.serializeObject(builder.build(), buf);
304         assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
305     }
306
307     @Test
308     public void testSRPObjectWithPSTTlv() throws PCEPDeserializerException {
309         final byte[] srpObjectWithPstTlvBytes = { 0x21, 0x10, 0x00, 0x14, 0x0, 0x0, 0x0, 0x01, 0x0, 0x0,
310             0x0, 0x01,
311             /* pst-tlv */
312             0x0, 0x1C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0 };
313         final CInitiated00SrpObjectParser parser = new CInitiated00SrpObjectParser(this.tlvRegistry,
314             this.viTlvRegistry);
315         final SrpBuilder builder = new SrpBuilder()
316                 .setProcessingRule(false)
317                 .setIgnore(false)
318                 .setOperationId(new SrpIdNumber(Uint32.ONE))
319                 .addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build())
320                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
321                     .rev181109.srp.object.srp.TlvsBuilder()
322                     .setPathSetupType(new PathSetupTypeBuilder().setPst(Uint8.ZERO).build()).build());
323
324         final ByteBuf result = Unpooled.wrappedBuffer(srpObjectWithPstTlvBytes);
325         assertEquals(builder.build(),
326                 parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
327         final ByteBuf buf = Unpooled.buffer();
328         parser.serializeObject(builder.build(), buf);
329         assertArrayEquals(srpObjectWithPstTlvBytes, ByteArray.getAllBytes(buf));
330     }
331 }