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