/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.protocol.pcep.spi; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Keepalive; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.KeepaliveBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.Subobject; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.SubobjectBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.list.tlv.OfList; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.list.tlv.OfListBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.EnterpriseSpecificInformation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.objects.VendorInformationObject; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.tlvs.VendorInformationTlv; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.LabelType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.label.type.Type1LabelCase; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.label.subobject.label.type.Type1LabelCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.IpPrefixCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.LabelCase; public class RegistryTest { @Mock XROSubobjectParser xroParser; @Mock XROSubobjectSerializer xroSerializer; @Mock RROSubobjectParser rroParser; @Mock RROSubobjectSerializer rroSerializer; @Mock EROSubobjectParser eroParser; @Mock EROSubobjectSerializer eroSerializer; @Mock TlvParser tlvParser; @Mock TlvSerializer tlvSerializer; @Mock ObjectParser objectParser; @Mock ObjectSerializer objectSerializer; @Mock MessageParser msgParser; @Mock MessageSerializer msgSerializer; @Mock LabelParser labelParser; @Mock LabelSerializer labelSerializer; @Mock VendorInformationObject esi; @Mock EnterpriseSpecificInformation es; @Mock VendorInformationTlv viTlv; public final List regs = new ArrayList<>(); AbstractPCEPExtensionProviderActivator activator = new AbstractPCEPExtensionProviderActivator() { @Override protected List startImpl(final PCEPExtensionProviderContext context) { return RegistryTest.this.regs; } }; PCEPExtensionProviderContext ctx = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance(); @Before public void setUp() throws PCEPDeserializerException { MockitoAnnotations.initMocks(this); Mockito.doReturn(null).when(this.xroParser).parseSubobject(Mockito.any(ByteBuf.class), Mockito.anyBoolean()); Mockito.doNothing().when(this.xroSerializer).serializeSubobject(Mockito.any(Subobject.class), Mockito.any(ByteBuf.class)); Mockito.doReturn(null).when(this.rroParser).parseSubobject(Mockito.any(ByteBuf.class)); 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)); Mockito.doReturn(null).when(this.eroParser).parseSubobject(Mockito.any(ByteBuf.class), Mockito.anyBoolean()); 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)); Mockito.doReturn(this.viTlv).when(this.tlvParser).parseTlv(Mockito.any(ByteBuf.class)); Mockito.doNothing().when(this.tlvSerializer).serializeTlv(Mockito.any(Tlv.class), Mockito.any(ByteBuf.class)); Mockito.doReturn(new OpenBuilder().build()).when(this.objectParser).parseObject(Mockito.any(ObjectHeader.class), Mockito.any(ByteBuf.class)); Mockito.doNothing().when(this.objectSerializer).serializeObject(Mockito.any(Object.class), Mockito.any(ByteBuf.class)); Mockito.doReturn(null).when(this.msgParser).parseMessage(Mockito.any(ByteBuf.class), Mockito.any(List.class)); Mockito.doNothing().when(this.msgSerializer).serializeMessage(Mockito.any(Message.class), Mockito.any(ByteBuf.class)); Mockito.doReturn(null).when(this.labelParser).parseLabel(Mockito.any(ByteBuf.class)); Mockito.doNothing().when(this.labelSerializer).serializeLabel(Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.any(LabelType.class), Mockito.any(ByteBuf.class)); Mockito.doReturn(this.es).when(this.esi).getEnterpriseSpecificInformation(); Mockito.doReturn(EnterpriseSpecificInformation.class).when(this.es).getImplementedInterface(); Mockito.doReturn(this.es).when(this.viTlv).getEnterpriseSpecificInformation(); Mockito.doReturn(EnterpriseSpecificInformation.class).when(this.es).getImplementedInterface(); } @Test public void testRegistry() throws PCEPDeserializerException { this.regs.add(this.ctx.registerXROSubobjectParser(2, this.xroParser)); this.regs.add(this.ctx.registerXROSubobjectSerializer(AsNumberCase.class, this.xroSerializer)); this.regs.add(this.ctx.registerRROSubobjectParser(3, this.rroParser)); this.regs.add(this.ctx.registerRROSubobjectSerializer(LabelCase.class, this.rroSerializer)); this.regs.add(this.ctx.registerEROSubobjectParser(4, this.eroParser)); this.regs.add(this.ctx.registerEROSubobjectSerializer(IpPrefixCase.class, this.eroSerializer)); this.regs.add(this.ctx.registerTlvParser(1, this.tlvParser)); this.regs.add(this.ctx.registerTlvSerializer(OfList.class, this.tlvSerializer)); this.regs.add(this.ctx.registerObjectParser(5, 1, this.objectParser)); this.regs.add(this.ctx.registerObjectSerializer(Rp.class, this.objectSerializer)); this.regs.add(this.ctx.registerMessageParser(6, this.msgParser)); this.regs.add(this.ctx.registerMessageSerializer(Keepalive.class, this.msgSerializer)); this.regs.add(this.ctx.registerLabelParser(7, this.labelParser)); this.regs.add(this.ctx.registerLabelSerializer(Type1LabelCase.class, this.labelSerializer)); this.regs.add(this.ctx.registerVendorInformationObjectParser(new EnterpriseNumber(10L), this.objectParser)); this.regs.add(this.ctx.registerVendorInformationObjectSerializer(EnterpriseSpecificInformation.class, this.objectSerializer)); this.regs.add(this.ctx.registerVendorInformationTlvParser(new EnterpriseNumber(12L), this.tlvParser)); this.regs.add(this.ctx.registerVendorInformationTlvSerializer(EnterpriseSpecificInformation.class, this.tlvSerializer)); final ByteBuf buffer = Unpooled.buffer(); this.ctx.getXROSubobjectHandlerRegistry().parseSubobject(2, buffer, false); this.ctx.getXROSubobjectHandlerRegistry().serializeSubobject(new SubobjectBuilder().setSubobjectType(new AsNumberCaseBuilder().build()).build(), buffer); this.ctx.getEROSubobjectHandlerRegistry().parseSubobject(3, buffer, true); 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); this.ctx.getRROSubobjectHandlerRegistry().parseSubobject(4, buffer); 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); this.ctx.getLabelHandlerRegistry().parseLabel(1, buffer); this.ctx.getLabelHandlerRegistry().serializeLabel(true, false, new Type1LabelCaseBuilder().build(), buffer); this.ctx.getTlvHandlerRegistry().parseTlv(2, buffer); this.ctx.getTlvHandlerRegistry().serializeTlv(new OfListBuilder().build(), buffer); this.ctx.getObjectHandlerRegistry().parseObject(4, 1, new ObjectHeaderImpl(true, false), buffer); this.ctx.getObjectHandlerRegistry().serializeObject(new OpenBuilder().build(), buffer); this.ctx.getMessageHandlerRegistry().parseMessage(6, buffer, Collections. emptyList()); this.ctx.getMessageHandlerRegistry().serializeMessage(new KeepaliveBuilder().build(), buffer); this.ctx.getVendorInformationObjectRegistry().parseVendorInformationObject(new EnterpriseNumber(10L), new ObjectHeaderImpl(true, false), buffer); this.ctx.getVendorInformationObjectRegistry().serializeVendorInformationObject(this.esi, buffer); this.ctx.getVendorInformationTlvRegistry().parseVendorInformationTlv(new EnterpriseNumber(12L), buffer); this.ctx.getVendorInformationTlvRegistry().serializeVendorInformationTlv(this.viTlv, buffer); this.activator.start(this.ctx); this.activator.close(); } }