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