BUG-64 : reformat TlvRegistry, to skip using getType method.
[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.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;
50
51 public class PCEPObjectParserTest {
52
53         private TlvRegistry tlvRegistry;
54
55         @Before
56         public void setUp() throws Exception {
57                 this.tlvRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getTlvHandlerRegistry();
58         }
59
60         @Test
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");
64
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);
72
73                 final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
74
75                 final Tlvs1Builder statBuilder = new Tlvs1Builder();
76                 statBuilder.setStateful(tlv1);
77
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());
80
81                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), ByteArray.cutBytes(result, 4)));
82                 assertArrayEquals(result, parser.serializeObject(builder.build()));
83         }
84
85         @Test
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");
89
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));
100
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()));
108         }
109
110         @Test
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");
115
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();
121
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());
132
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,
137                 // 4)));
138                 assertArrayEquals(result, parser.serializeObject(builder.build()));
139         }
140
141         @Test
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 };
145
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());
151
152                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), ByteArray.cutBytes(result, 4)));
153                 assertArrayEquals(result, parser.serializeObject(builder.build()));
154         }
155 }