Merge "Change the type of some leafs to uint32"
[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 java.io.IOException;
14
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.opendaylight.protocol.pcep.ietf.initiated00.PCEPLspObjectParser;
18 import org.opendaylight.protocol.pcep.ietf.initiated00.PCEPSrpObjectParser;
19 import org.opendaylight.protocol.pcep.ietf.stateful07.PCEPLspaObjectParser;
20 import org.opendaylight.protocol.pcep.ietf.stateful07.PCEPOpenObjectParser;
21 import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
22 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
23 import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
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.Tlvs2;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs2Builder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.error.code.tlv.LspErrorCode;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.error.code.tlv.LspErrorCodeBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.symbolic.path.name.tlv.SymbolicPathName;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.symbolic.path.name.tlv.SymbolicPathNameBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
47
48 public class PCEPObjectParserTest {
49
50         private TlvHandlerRegistry tlvRegistry;
51
52         @Before
53         public void setUp() throws Exception {
54                 this.tlvRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getTlvHandlerRegistry();
55         }
56
57         @Test
58         public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException {
59                 final PCEPOpenObjectParser parser = new PCEPOpenObjectParser(this.tlvRegistry);
60                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin");
61
62                 final OpenBuilder builder = new OpenBuilder();
63                 builder.setProcessingRule(false);
64                 builder.setIgnore(false);
65                 builder.setVersion(new ProtocolVersion((short) 1));
66                 builder.setKeepalive((short) 30);
67                 builder.setDeadTimer((short) 120);
68                 builder.setSessionId((short) 1);
69
70                 final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
71
72                 final Tlvs2Builder statBuilder = new Tlvs2Builder();
73                 statBuilder.setStateful(tlv1);
74
75                 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
76                                 Tlvs2.class, statBuilder.build()).build());
77
78                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), ByteArray.cutBytes(result, 4)));
79                 assertArrayEquals(result, parser.serializeObject(builder.build()));
80         }
81
82         @Test
83         public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException {
84                 final PCEPLspObjectParser parser = new PCEPLspObjectParser(this.tlvRegistry);
85                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin");
86
87                 final LspBuilder builder = new LspBuilder();
88                 builder.setProcessingRule(true);
89                 builder.setIgnore(true);
90                 builder.setAdministrative(true);
91                 builder.setDelegate(false);
92                 builder.setRemove(true);
93                 builder.setSync(false);
94                 builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
95                 builder.setOperational(OperationalStatus.GoingDown);
96                 builder.setPlspId(new PlspId(0x12345L));
97
98                 final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
99                 final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
100                                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName("Med".getBytes())).build();
101                 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
102                                 tlv1).setSymbolicPathName(tlv2).build());
103                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), ByteArray.cutBytes(result, 4)));
104                 assertArrayEquals(result, parser.serializeObject(builder.build()));
105         }
106
107         @Test
108         public void testLspaObject() throws IOException, PCEPDeserializerException {
109                 final PCEPLspaObjectParser parser = new PCEPLspaObjectParser(this.tlvRegistry);
110                 final LspaBuilder builder = new LspaBuilder();
111                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin");
112
113                 builder.setIgnore(true);
114                 builder.setProcessingRule(true);
115                 builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
116                 builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
117                 builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
118                 builder.setHoldPriority((short) 0x02);
119                 builder.setSetupPriority((short) 0x03);
120                 builder.setLocalProtectionDesired(true);
121
122                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), ByteArray.cutBytes(result, 4)));
123                 assertArrayEquals(result, parser.serializeObject(builder.build()));
124         }
125
126         @Test
127         public void testSrpObject() throws IOException, PCEPDeserializerException {
128                 final PCEPSrpObjectParser parser = new PCEPSrpObjectParser(this.tlvRegistry);
129                 final byte[] result = new byte[] { (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0c, 0, 0, 0, (byte) 0x01, 0, 0, 0, (byte) 0x01 };
130
131                 final SrpBuilder builder = new SrpBuilder();
132                 builder.setProcessingRule(false);
133                 builder.setIgnore(false);
134                 builder.setOperationId(new SrpIdNumber(1L));
135                 builder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(true).build());
136
137                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), ByteArray.cutBytes(result, 4)));
138                 assertArrayEquals(result, parser.serializeObject(builder.build()));
139         }
140 }