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