Enforce pcep-spi checkstyle
[bgpcep.git] / pcep / spi / src / test / java / org / opendaylight / protocol / pcep / spi / RegistryTest.java
1 /*
2  * Copyright (c) 2014 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.spi;
9
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.ArgumentMatchers.anyBoolean;
12 import static org.mockito.Mockito.doNothing;
13 import static org.mockito.Mockito.doReturn;
14
15 import io.netty.buffer.ByteBuf;
16 import io.netty.buffer.Unpooled;
17 import java.util.ArrayList;
18 import java.util.Collections;
19 import java.util.List;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.Mock;
24 import org.mockito.junit.MockitoJUnitRunner;
25 import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator;
26 import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.Keepalive;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.KeepaliveBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Object;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ObjectHeader;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Tlv;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.exclude.route.object.xro.Subobject;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.exclude.route.object.xro.SubobjectBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of.list.tlv.OfList;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of.list.tlv.OfListBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.OpenBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.Rp;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.EnterpriseSpecificInformation;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.objects.VendorInformationObject;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.tlvs.VendorInformationTlv;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.LabelType;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.label.type.Type1LabelCase;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.label.type.Type1LabelCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.IpPrefixCaseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.LabelCase;
51
52 @RunWith(MockitoJUnitRunner.StrictStubs.class)
53 public class RegistryTest {
54
55     @Mock
56     XROSubobjectParser xroParser;
57     @Mock
58     XROSubobjectSerializer xroSerializer;
59
60     @Mock
61     RROSubobjectParser rroParser;
62     @Mock
63     RROSubobjectSerializer rroSerializer;
64
65     @Mock
66     EROSubobjectParser eroParser;
67     @Mock
68     EROSubobjectSerializer eroSerializer;
69
70     @Mock
71     TlvParser tlvParser;
72     @Mock
73     TlvSerializer tlvSerializer;
74
75     @Mock
76     ObjectParser objectParser;
77
78     @Mock
79     ObjectSerializer objectSerializer;
80
81     @Mock
82     MessageParser msgParser;
83     @Mock
84     MessageSerializer msgSerializer;
85
86     @Mock
87     LabelParser labelParser;
88     @Mock
89     LabelSerializer labelSerializer;
90
91     @Mock
92     VendorInformationObject esi;
93
94     @Mock
95     EnterpriseSpecificInformation es;
96
97     @Mock
98     VendorInformationTlv viTlv;
99
100     public final List<AutoCloseable> regs = new ArrayList<>();
101
102     final AbstractPCEPExtensionProviderActivator activator = new AbstractPCEPExtensionProviderActivator() {
103
104         @Override
105         protected List<AutoCloseable> startImpl(final PCEPExtensionProviderContext context) {
106             return RegistryTest.this.regs;
107         }
108     };
109
110     final PCEPExtensionProviderContext ctx = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance();
111
112     @Before
113     public void setUp() throws PCEPDeserializerException {
114         doReturn(null).when(this.xroParser).parseSubobject(any(ByteBuf.class), anyBoolean());
115         doNothing().when(this.xroSerializer).serializeSubobject(any(Subobject.class), any(ByteBuf.class));
116
117         doReturn(this.viTlv).when(this.tlvParser).parseTlv(any(ByteBuf.class));
118         doNothing().when(this.tlvSerializer).serializeTlv(any(Tlv.class), any(ByteBuf.class));
119
120         doReturn(5).when(this.objectParser).getObjectClass();
121         doReturn(1).when(this.objectParser).getObjectType();
122         doReturn(new OpenBuilder().build()).when(this.objectParser).parseObject(any(ObjectHeader.class),
123             any(ByteBuf.class));
124         doNothing().when(this.objectSerializer).serializeObject(any(Object.class), any(ByteBuf.class));
125
126         doReturn(null).when(this.msgParser).parseMessage(any(ByteBuf.class), any(List.class));
127         doNothing().when(this.msgSerializer).serializeMessage(any(Message.class), any(ByteBuf.class));
128
129         doNothing().when(this.labelSerializer).serializeLabel(anyBoolean(), anyBoolean(), any(LabelType.class),
130             any(ByteBuf.class));
131
132         doReturn(this.es).when(this.esi).getEnterpriseSpecificInformation();
133
134         doReturn(this.es).when(this.viTlv).getEnterpriseSpecificInformation();
135
136         doReturn(EnterpriseSpecificInformation.class).when(this.es).getImplementedInterface();
137     }
138
139     @Test
140     public void testRegistry() throws PCEPDeserializerException {
141         this.regs.add(this.ctx.registerXROSubobjectParser(2, this.xroParser));
142         this.regs.add(this.ctx.registerXROSubobjectSerializer(AsNumberCase.class, this.xroSerializer));
143
144         this.regs.add(this.ctx.registerRROSubobjectParser(3, this.rroParser));
145         this.regs.add(this.ctx.registerRROSubobjectSerializer(LabelCase.class, this.rroSerializer));
146
147         this.regs.add(this.ctx.registerEROSubobjectParser(4, this.eroParser));
148         this.regs.add(this.ctx.registerEROSubobjectSerializer(IpPrefixCase.class, this.eroSerializer));
149
150         this.regs.add(this.ctx.registerTlvParser(1, this.tlvParser));
151         this.regs.add(this.ctx.registerTlvSerializer(OfList.class, this.tlvSerializer));
152
153         this.regs.add(this.ctx.registerObjectParser(this.objectParser));
154         this.regs.add(this.ctx.registerObjectSerializer(Rp.class, this.objectSerializer));
155
156         this.regs.add(this.ctx.registerMessageParser(6, this.msgParser));
157         this.regs.add(this.ctx.registerMessageSerializer(Keepalive.class, this.msgSerializer));
158
159         this.regs.add(this.ctx.registerLabelParser(7, this.labelParser));
160         this.regs.add(this.ctx.registerLabelSerializer(Type1LabelCase.class, this.labelSerializer));
161
162         this.regs.add(this.ctx.registerVendorInformationObjectParser(new EnterpriseNumber(10L), this.objectParser));
163         this.regs.add(this.ctx.registerVendorInformationObjectSerializer(EnterpriseSpecificInformation.class,
164             this.objectSerializer));
165
166         this.regs.add(this.ctx.registerVendorInformationTlvParser(new EnterpriseNumber(12L), this.tlvParser));
167         this.regs.add(this.ctx.registerVendorInformationTlvSerializer(EnterpriseSpecificInformation.class,
168             this.tlvSerializer));
169
170         final ByteBuf buffer = Unpooled.buffer();
171         this.ctx.getXROSubobjectHandlerRegistry().parseSubobject(2, buffer, false);
172         this.ctx.getXROSubobjectHandlerRegistry().serializeSubobject(new SubobjectBuilder()
173             .setSubobjectType(new AsNumberCaseBuilder().build()).build(), buffer);
174
175         this.ctx.getEROSubobjectHandlerRegistry().parseSubobject(3, buffer, true);
176         this.ctx.getEROSubobjectHandlerRegistry().serializeSubobject(new org.opendaylight.yang.gen.v1.urn.opendaylight
177             .params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.ero.SubobjectBuilder()
178             .setSubobjectType(new AsNumberCaseBuilder().build()).build(), buffer);
179
180         this.ctx.getRROSubobjectHandlerRegistry().parseSubobject(4, buffer);
181         this.ctx.getRROSubobjectHandlerRegistry().serializeSubobject(new org.opendaylight.yang.gen.v1.urn.opendaylight
182             .params.xml.ns.yang.pcep.types.rev181109.reported.route.object.rro.SubobjectBuilder()
183             .setSubobjectType(new IpPrefixCaseBuilder().build()).build(), buffer);
184
185         this.ctx.getLabelHandlerRegistry().parseLabel(1, buffer);
186         this.ctx.getLabelHandlerRegistry().serializeLabel(true, false, new Type1LabelCaseBuilder().build(), buffer);
187
188         this.ctx.getTlvHandlerRegistry().parseTlv(2, buffer);
189         this.ctx.getTlvHandlerRegistry().serializeTlv(new OfListBuilder().build(), buffer);
190
191         this.ctx.getObjectHandlerRegistry().parseObject(4, 1, new ObjectHeaderImpl(true, false), buffer);
192         this.ctx.getObjectHandlerRegistry().serializeObject(new OpenBuilder().build(), buffer);
193
194         this.ctx.getMessageHandlerRegistry().parseMessage(6, buffer, Collections.emptyList());
195         this.ctx.getMessageHandlerRegistry().serializeMessage(new KeepaliveBuilder().build(), buffer);
196
197         this.ctx.getVendorInformationObjectRegistry().parseVendorInformationObject(new EnterpriseNumber(10L),
198             new ObjectHeaderImpl(true, false), buffer);
199         this.ctx.getVendorInformationObjectRegistry().serializeVendorInformationObject(this.esi, buffer);
200
201         this.ctx.getVendorInformationTlvRegistry().parseVendorInformationTlv(new EnterpriseNumber(12L), buffer);
202         this.ctx.getVendorInformationTlvRegistry().serializeVendorInformationTlv(this.viTlv, buffer);
203
204         this.activator.start(this.ctx);
205         this.activator.close();
206     }
207 }