X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Frib-impl-config%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Fbgp%2Frib%2Fimpl%2FRIBImplModuleTest.java;h=8d64837e0a54f03eea4e9b2f48d99e9970a4da94;hb=a397aa4828919cc643647c96f5c916ee211f597f;hp=f67bcf4effea44d1f26a6f64711538433a994757;hpb=0b2fc156167aacc24ad857cacca40bb6f14e2513;p=bgpcep.git diff --git a/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java b/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java index f67bcf4eff..8d64837e0a 100644 --- a/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java +++ b/bgp/rib-impl-config/src/test/java/org/opendaylight/controller/config/yang/bgp/rib/impl/RIBImplModuleTest.java @@ -7,207 +7,80 @@ */ package org.opendaylight.controller.config.yang.bgp.rib.impl; -import java.io.Closeable; -import java.math.BigDecimal; -import java.util.Dictionary; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; -import javax.management.InstanceAlreadyExistsException; -import javax.management.InstanceNotFoundException; -import javax.management.ObjectName; - -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; -import org.mockito.Matchers; -import org.mockito.Mockito; +import org.opendaylight.controller.config.api.ValidationException; import org.opendaylight.controller.config.api.jmx.CommitStatus; -import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; -import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; -import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory; -import org.opendaylight.controller.config.yang.bgp.reconnectstrategy.TimedReconnectStrategyModuleTest; -import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleFactory; -import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleMXBean; -import org.opendaylight.controller.config.yang.md.sal.binding.impl.DataBrokerImplModuleFactory; -import org.opendaylight.controller.config.yang.md.sal.binding.impl.DataBrokerImplModuleMXBean; -import org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModuleFactory; -import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomBrokerImplModuleFactory; -import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomBrokerImplModuleMXBean; -import org.opendaylight.controller.config.yang.md.sal.dom.impl.HashMapDataStoreModuleFactory; -import org.opendaylight.controller.config.yang.md.sal.dom.impl.HashMapDataStoreModuleMXBean; -import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory; -import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory; -import org.opendaylight.controller.config.yang.reconnectstrategy.TimedReconnectStrategyModuleFactory; -import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; -import org.opendaylight.controller.sal.core.api.data.DataProviderService; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId; -import org.opendaylight.yangtools.concepts.Registration; -import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleListener; -import org.osgi.framework.Filter; -import org.osgi.framework.ServiceListener; -import org.osgi.framework.ServiceReference; - -import com.google.common.collect.Lists; - -public class RIBImplModuleTest extends AbstractConfigTest { - - private final String instanceName = "bgp-rib-impl"; - - private RIBImplModuleFactory factory; - private DataBrokerImplModuleFactory dataBrokerFactory; - private TimedReconnectStrategyModuleFactory reconnectFactory; - private BGPImplModuleFactory bgpFactory; - private BGPSessionProposalImplModuleFactory sessionFacotry; - private BGPDispatcherImplModuleFactory dispactherFactory; - private NettyThreadgroupModuleFactory threadgropFactory; - private GlobalEventExecutorModuleFactory executorFactory; - private SimpleBGPExtensionProviderContextModuleFactory extensionFactory; - private RIBExtensionsImplModuleFactory ribExtensionsFactory; - private DomBrokerImplModuleFactory domBrokerFactory; - private RuntimeMappingModuleFactory runtimeMappingFactory; - private HashMapDataStoreModuleFactory dataStroreFactory; - - @SuppressWarnings("unchecked") - @Before - public void setUp() throws Exception { - this.factory = new RIBImplModuleFactory(); - this.dataBrokerFactory = new DataBrokerImplModuleFactory(); - this.bgpFactory = new BGPImplModuleFactory(); - this.executorFactory = new GlobalEventExecutorModuleFactory(); - this.dispactherFactory = new BGPDispatcherImplModuleFactory(); - this.sessionFacotry = new BGPSessionProposalImplModuleFactory(); - this.threadgropFactory = new NettyThreadgroupModuleFactory(); - this.reconnectFactory = new TimedReconnectStrategyModuleFactory(); - this.extensionFactory = new SimpleBGPExtensionProviderContextModuleFactory(); - this.ribExtensionsFactory = new RIBExtensionsImplModuleFactory(); - this.domBrokerFactory = new DomBrokerImplModuleFactory(); - this.runtimeMappingFactory = new RuntimeMappingModuleFactory(); - this.dataStroreFactory = new HashMapDataStoreModuleFactory(); - super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, this.factory, - this.dispactherFactory, this.sessionFacotry, this.threadgropFactory, this.bgpFactory, - this.reconnectFactory, this.dataBrokerFactory, this.executorFactory, this.extensionFactory, - this.ribExtensionsFactory, this.domBrokerFactory, this.runtimeMappingFactory, - this.dataStroreFactory)); - Mockito.doReturn(mockedServiceRegistration).when(mockedContext).registerService( - Matchers.any(String.class), Mockito.any(Closeable.class), - Mockito.any(Dictionary.class)); - Mockito.doReturn(mockedServiceRegistration).when(mockedContext).registerService( - Matchers.any(Class.class), Mockito.any(Closeable.class), - Mockito.any(Dictionary.class)); - Filter mockedFilter = Mockito.mock(Filter.class); - Mockito.doReturn(mockedFilter).when(mockedContext).createFilter(Mockito.anyString()); - - Mockito.doNothing().when(mockedContext).addServiceListener(Mockito.any(ServiceListener.class), Mockito.anyString()); - - Mockito.doNothing().when(mockedContext).addBundleListener(Mockito.any(BundleListener.class)); - - Mockito.doReturn(new Bundle[]{}).when(mockedContext).getBundles(); - - Mockito.doReturn(new ServiceReference[]{}).when(mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString()); - - ServiceReference mockedserviceReference = Mockito.mock(ServiceReference.class); - Mockito.doReturn(new String()).when(mockedserviceReference).toString(); - Mockito.doReturn(mockedserviceReference).when(mockedContext).getServiceReference(Matchers.any(Class.class)); - - DataProviderService mockedService = Mockito.mock(DataProviderService.class); - Registration> registration = Mockito.mock(Registration.class); - Mockito.doReturn(registration).when(mockedService).registerCommitHandler(Matchers.any(InstanceIdentifier.class), - Matchers.any(DataCommitHandler.class)); - Mockito.doReturn(mockedService).when(mockedContext).getService(Matchers.any(ServiceReference.class)); - } - - // FIXME: make data broker operational, otherwise the test freezes - @Ignore - @Test - public void testCreateBean() throws Exception { - ConfigTransactionJMXClient transaction = configRegistryClient - .createTransaction(); - createInstance(transaction, this.factory.getImplementationName(), instanceName, this.dataBrokerFactory.getImplementationName(), - this.reconnectFactory.getImplementationName(), this.executorFactory.getImplementationName(), this.bgpFactory.getImplementationName(), - this.sessionFacotry.getImplementationName(), this.dispactherFactory.getImplementationName(), this.threadgropFactory.getImplementationName(), - this.extensionFactory.getImplementationName(), this.ribExtensionsFactory.getImplementationName(), this.domBrokerFactory.getImplementationName(), - this.dataStroreFactory.getImplementationName()); - transaction.validateConfig(); - CommitStatus status = transaction.commit(); - Thread.sleep(2000); - assertBeanCount(1, factory.getImplementationName()); - assertStatus(status, 16, 0, 0); - } - - @After - public void closeAllModules() throws Exception { - super.destroyAllConfigBeans(); - } - - public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName, - final String instanceName, final String bindingDataModuleName, final String reconnectModueName, final String executorModuleName, final String bgpModuleName, - final String sessionModuleName, final String dispatcherModuleName, final String threadgroupModuleName, final String extensionModuleName, - final String ribExtensionsModuleName, final String domBrokerModuleName, final String dataStroreModuleName) - throws Exception { - ObjectName nameCreated = transaction.createModule( - moduleName, instanceName); - RIBImplModuleMXBean mxBean = transaction.newMBeanProxy( - nameCreated, RIBImplModuleMXBean.class); - ObjectName reconnectObjectName = TimedReconnectStrategyModuleTest.createInstance(transaction, reconnectModueName, "session-reconnect-strategy", 100, 1000L, new BigDecimal(1.0), 5000L, 2000L, null, executorModuleName, - "global-event-executor1"); - mxBean.setSessionReconnectStrategy(reconnectObjectName); - mxBean.setDataProvider(createDataBrokerInstance(transaction, bindingDataModuleName, "data-broker-impl", domBrokerModuleName, dataStroreModuleName)); - ObjectName reconnectStrategyON = TimedReconnectStrategyModuleTest.createInstance(transaction, reconnectModueName, "tcp-reconnect-strategy", 100, 1000L, new BigDecimal(1.0), 5000L, 2000L, null, executorModuleName, - "global-event-executor2"); - mxBean.setTcpReconnectStrategy(reconnectStrategyON); - mxBean.setBgp(Lists.newArrayList(BGPImplModuleTest.createInstance(transaction, bgpModuleName, "bgp-impl1", "localhost", 1, sessionModuleName, dispatcherModuleName, threadgroupModuleName, ribExtensionsModuleName, extensionModuleName))); - mxBean.setExtensions(createRibExtensionsInstance(transaction, ribExtensionsModuleName, "rib-extensions-privider1")); - mxBean.setRibId(new RibId("test")); - return nameCreated; - } - - public static ObjectName createDataBrokerInstance(final ConfigTransactionJMXClient transaction, final String moduleName, - final String instanceName, final String domBrokerModuleName, final String dataStroreModuleName) throws - InstanceAlreadyExistsException, InstanceNotFoundException { - ObjectName nameCreated = transaction.createModule( - moduleName, instanceName); - DataBrokerImplModuleMXBean mxBean = transaction.newMBeanProxy( - nameCreated, DataBrokerImplModuleMXBean.class); - mxBean.setDomBroker(createDomBrokerInstance(transaction, domBrokerModuleName, "dom-broker1", dataStroreModuleName)); - mxBean.setMappingService(lookupMappingServiceInstance(transaction)); - return nameCreated; - } - - public static ObjectName createDomBrokerInstance(final ConfigTransactionJMXClient transaction, final String moduleName, - final String instanceName, final String dataStroreModuleName) throws InstanceAlreadyExistsException { - ObjectName nameCreated = transaction.createModule( - moduleName, instanceName); - DomBrokerImplModuleMXBean mxBean = transaction.newMBeanProxy( - nameCreated, DomBrokerImplModuleMXBean.class); - mxBean.setDataStore(createDataStoreInstance(transaction, dataStroreModuleName, "has-map-data-strore-instance")); - return nameCreated; - } - - public static ObjectName createDataStoreInstance(final ConfigTransactionJMXClient transaction, final String moduleName, - final String instanceName) throws InstanceAlreadyExistsException { - ObjectName nameCreated = transaction.createModule( - moduleName, instanceName); - transaction.newMBeanProxy( - nameCreated, HashMapDataStoreModuleMXBean.class); - return nameCreated; - } - - public static ObjectName lookupMappingServiceInstance(final ConfigTransactionJMXClient transaction) - throws InstanceAlreadyExistsException, InstanceNotFoundException { - ObjectName nameCreated = transaction.lookupConfigBean("runtime-generated-mapping", "runtime-mapping-singleton"); - return nameCreated; - } - public static ObjectName createRibExtensionsInstance(final ConfigTransactionJMXClient transaction, final String moduleName, - final String instanceName) throws InstanceAlreadyExistsException { - ObjectName nameCreated = transaction.createModule( - moduleName, instanceName); - transaction.newMBeanProxy( - nameCreated, RIBExtensionsImplModuleMXBean.class); - return nameCreated; - } +public class RIBImplModuleTest extends AbstractRIBImplModuleTest { + private static final String INSTANCE_NAME = "rib-impl"; + private static final String FACTORY_NAME = RIBImplModuleFactory.NAME; + + private static final String RIB_ID = "test"; + private static final String BGP_ID = "192.168.1.1"; + + @Test + public void testValidationExceptionRibIdNotSet() throws Exception { + try { + createRIBImplModuleInstance(null, 500L, new Ipv4Address(BGP_ID)); + fail(); + } catch (ValidationException e) { + assertTrue(e.getMessage().contains("RibId is not set.")); + } + } + + @Test + public void testValidationExceptionLocalAsNotSet() throws Exception { + try { + createRIBImplModuleInstance(new RibId(RIB_ID), null, new Ipv4Address(BGP_ID)); + fail(); + } catch (ValidationException e) { + assertTrue(e.getMessage().contains("LocalAs is not set.")); + } + } + + @Test + public void testValidationExceptionBgpIdNotSet() throws Exception { + try { + createRIBImplModuleInstance(new RibId(RIB_ID), 500L, null); + fail(); + } catch (ValidationException e) { + assertTrue(e.getMessage().contains("BgpId is not set.")); + } + } + + @Test + public void testCreateBean() throws Exception { + CommitStatus status = createInstance(); + assertBeanCount(1, FACTORY_NAME); + assertStatus(status, 14, 0, 0); + } + + @Test + public void testReusingOldInstance() throws Exception { + createInstance(); + ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction(); + assertBeanCount(1, FACTORY_NAME); + CommitStatus status = transaction.commit(); + assertBeanCount(1, FACTORY_NAME); + assertStatus(status, 0, 0, 14); + } + + @Test + public void testReconfigure() throws Exception { + createInstance(); + final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction(); + assertBeanCount(1, FACTORY_NAME); + final RIBImplModuleMXBean mxBean = transaction.newMBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), + RIBImplModuleMXBean.class); + mxBean.setLocalAs(100L); + final CommitStatus status = transaction.commit(); + assertBeanCount(1, FACTORY_NAME); + assertStatus(status, 0, 1, 13); + } }