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().getVendorInformationTlvRegistry();
101 public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException {
102 try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
105 final SyncOptimizationsOpenObjectParser parser = new SyncOptimizationsOpenObjectParser(this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
106 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
108 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder();
109 builder.setProcessingRule(false);
110 builder.setIgnore(false);
111 builder.setVersion(new ProtocolVersion((short) 1));
112 builder.setKeepalive((short) 30);
113 builder.setDeadTimer((short) 120);
114 builder.setSessionId((short) 1);
116 final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).addAugmentation(Stateful1.class, new Stateful1Builder().build()).build();
118 final Tlvs1Builder statBuilder = new Tlvs1Builder();
119 statBuilder.setStateful(tlv1);
121 final Tlvs3Builder syncOptBuilder = new Tlvs3Builder();
122 syncOptBuilder.setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(new BigInteger(DB_VERSION)).build());
123 syncOptBuilder.setSpeakerEntityId(new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(SPEAKER_ID).build());
125 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.open.TlvsBuilder()
126 .addAugmentation(Tlvs1.class, statBuilder.build())
127 .addAugmentation(Tlvs3.class, syncOptBuilder.build())
130 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
131 final ByteBuf buf = Unpooled.buffer();
132 parser.serializeObject(builder.build(), buf);
133 assertArrayEquals(result.array(), ByteArray.getAllBytes(buf));
138 public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException {
139 try (StatefulActivator a = new StatefulActivator();
140 SyncOptimizationsActivator a2 = new SyncOptimizationsActivator()) {
144 final SyncOptimizationsLspObjectParser parser = new SyncOptimizationsLspObjectParser(this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
145 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin"));
147 final LspBuilder builder = new LspBuilder();
148 builder.setProcessingRule(true);
149 builder.setIgnore(true);
150 builder.setAdministrative(true);
151 builder.setDelegate(false);
152 builder.setRemove(true);
153 builder.setSync(false);
154 builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
155 builder.setOperational(OperationalStatus.GoingDown);
156 builder.setPlspId(new PlspId(0x12345L));
158 final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
159 final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
160 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.SymbolicPathName("Med".getBytes())).build();
161 final LspDbVersion lspDbVersion = new LspDbVersionBuilder().setLspDbVersionValue(new BigInteger(DB_VERSION)).build();
162 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
163 tlv1).setSymbolicPathName(tlv2)
164 .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev181109.Tlvs1Builder().setLspDbVersion(lspDbVersion).build())
167 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4)));
168 final ByteBuf buf = Unpooled.buffer();
169 parser.serializeObject(builder.build(), buf);
170 assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
175 public void testStateful07LspObjectWithTlv() throws IOException, PCEPDeserializerException {
176 final Stateful07LspObjectParser parser = new Stateful07LspObjectParser(this.tlvRegistry, this.viTlvRegistry);
177 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspObject2WithTLV.bin"));
179 final LspBuilder builder = new LspBuilder();
180 builder.setProcessingRule(true);
181 builder.setIgnore(true);
182 builder.setAdministrative(true);
183 builder.setDelegate(false);
184 builder.setRemove(true);
185 builder.setSync(false);
186 builder.setOperational(OperationalStatus.GoingDown);
187 builder.setPlspId(new PlspId(0x12345L));
189 final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
190 final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
191 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.SymbolicPathName("Med".getBytes())).build();
192 final Ipv4Builder afi = new Ipv4Builder();
193 afi.setIpv4TunnelSenderAddress(Ipv4Util.noZoneAddressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 })));
194 afi.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(Ipv4Util.noZoneAddressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56,
196 afi.setIpv4TunnelEndpointAddress(Ipv4Util.noZoneAddressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 })));
197 final LspIdentifiers tlv3 = new LspIdentifiersBuilder().setAddressFamily(new Ipv4CaseBuilder().setIpv4(afi.build()).build()).setLspId(
198 new LspId(65535L)).setTunnelId(new TunnelId(4660)).build();
199 final RsvpErrorBuilder rsvpBuilder = new RsvpErrorBuilder();
200 rsvpBuilder.setNode(new IpAddressNoZone(Ipv4Util.noZoneAddressForByteBuf(Unpooled.wrappedBuffer(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78 }))));
201 rsvpBuilder.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.ErrorSpec.Flags(false, true));
202 rsvpBuilder.setCode((short) 146);
203 rsvpBuilder.setValue(5634);
204 final RsvpErrorSpec tlv4 = new RsvpErrorSpecBuilder().setErrorType(new RsvpCaseBuilder().setRsvpError(rsvpBuilder.build()).build()).build();
205 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
206 tlv1).setSymbolicPathName(tlv2).setLspIdentifiers(tlv3).setRsvpErrorSpec(tlv4).build());
207 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4)));
208 final ByteBuf buf = Unpooled.buffer();
209 parser.serializeObject(builder.build(), buf);
210 assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
214 public void testLspaObject() throws IOException, PCEPDeserializerException {
215 final Stateful07LspaObjectParser parser = new Stateful07LspaObjectParser(this.tlvRegistry, this.viTlvRegistry);
216 final LspaBuilder builder = new LspaBuilder();
217 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin"));
219 final SymbolicPathName tlv = new SymbolicPathNameBuilder().setPathName(
220 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.SymbolicPathName(new byte[] {
221 (byte) 0x4d, (byte) 0x65, (byte) 0x64, (byte) 0x20, (byte) 0x74, (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x20,
222 (byte) 0x6f, (byte) 0x66, (byte) 0x20, (byte) 0x73, (byte) 0x79, (byte) 0x6d, (byte) 0x62, (byte) 0x6f, (byte) 0x6c,
223 (byte) 0x69, (byte) 0x63, (byte) 0x20, (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65 })).build();
225 builder.setIgnore(false);
226 builder.setProcessingRule(false);
227 builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
228 builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
229 builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
230 builder.setHoldPriority((short) 0x02);
231 builder.setSetupPriority((short) 0x03);
232 builder.setLocalProtectionDesired(true);
233 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.lspa.TlvsBuilder().addAugmentation(
234 Tlvs2.class, new Tlvs2Builder().setSymbolicPathName(tlv).build()).build());
236 // Tlvs container does not contain toString
237 final Object o = parser.parseObject(new ObjectHeaderImpl(true, true), result.slice(4, result.readableBytes() - 4));
238 assertEquals(tlv, ((Lspa) o).getTlvs().augmentation(Tlvs2.class).getSymbolicPathName());
239 // assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), ByteArray.cutBytes(result,
241 final ByteBuf buf = Unpooled.buffer();
242 parser.serializeObject(builder.build(), buf);
243 assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
247 public void testSrpObject() throws PCEPDeserializerException {
248 final CInitiated00SrpObjectParser parser = new CInitiated00SrpObjectParser(this.tlvRegistry, this.viTlvRegistry);
249 final ByteBuf result = Unpooled.wrappedBuffer(new byte[] { (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0c, 0, 0, 0,
250 (byte) 0x01, 0, 0, 0, (byte) 0x01 });
252 final SrpBuilder builder = new SrpBuilder();
253 builder.setProcessingRule(false);
254 builder.setIgnore(false);
255 builder.setOperationId(new SrpIdNumber(1L));
256 builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build());
257 builder.setTlvs(new TlvsBuilder().build());
259 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
260 final ByteBuf buf = Unpooled.buffer();
261 parser.serializeObject(builder.build(), buf);
262 assertArrayEquals(result.array(),ByteArray.getAllBytes(buf));
266 public void testSRPObjectWithPSTTlv() throws PCEPDeserializerException {
267 final byte[] srpObjectWithPstTlvBytes = { 0x21, 0x10, 0x00, 0x14, 0x0, 0x0, 0x0, 0x01, 0x0, 0x0,
270 0x0, 0x1C, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0 };
271 final CInitiated00SrpObjectParser parser = new CInitiated00SrpObjectParser(this.tlvRegistry, this.viTlvRegistry);
272 final SrpBuilder builder = new SrpBuilder();
273 builder.setProcessingRule(false);
274 builder.setIgnore(false);
275 builder.setOperationId(new SrpIdNumber(1L));
276 builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build());
277 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.srp.TlvsBuilder().setPathSetupType(new PathSetupTypeBuilder().setPst((short) 0).build()).build());
279 final ByteBuf result = Unpooled.wrappedBuffer(srpObjectWithPstTlvBytes);
280 assertEquals(builder.build(),
281 parser.parseObject(new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4)));
282 final ByteBuf buf = Unpooled.buffer();
283 parser.serializeObject(builder.build(), buf);
284 assertArrayEquals(srpObjectWithPstTlvBytes, ByteArray.getAllBytes(buf));