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