Removed checkstyle warnings.
[bgpcep.git] / bgp / rib-impl-config / src / test / java / org / opendaylight / controller / config / yang / bgp / rib / impl / RIBImplModuleTest.java
index 17fe31a731acd10c48f2302d62a81552985b3ee0..8d64837e0a54f03eea4e9b2f48d99e9970a4da94 100644 (file)
  */
 package org.opendaylight.controller.config.yang.bgp.rib.impl;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
-import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.Future;
-
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ObjectName;
-
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
+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.spi.ModuleFactory;
 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.config.yang.store.impl.YangParserWrapper;
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler;
-import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
-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.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener;
-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 static final String INSTANCE_NAME = GlobalEventExecutorModuleFactory.SINGLETON_NAME;
-       private static final String TRANSACTION_NAME = "testTransaction";
-
-       private RIBImplModuleFactory factory;
-       private DataBrokerImplModuleFactory dataBrokerFactory;
-       private TimedReconnectStrategyModuleFactory reconnectFactory;
-       private BGPDispatcherImplModuleFactory dispactherFactory;
-       private NettyThreadgroupModuleFactory threadgroupFactory;
-       private GlobalEventExecutorModuleFactory executorFactory;
-       private SimpleBGPExtensionProviderContextModuleFactory extensionFactory;
-       private RIBExtensionsImplModuleFactory ribExtensionsFactory;
-       private DomBrokerImplModuleFactory domBrokerFactory;
-       private RuntimeMappingModuleFactory runtimeMappingFactory;
-       private HashMapDataStoreModuleFactory dataStroreFactory;
-
-       @Mock
-       private DataModificationTransaction mockedTransaction;
-
-       @Mock
-       private DataProviderService mockedDataProvider;
-
-       @Mock
-       private Future<RpcResult<TransactionStatus>> mockedFuture;
-
-       @Mock
-       private RpcResult<TransactionStatus> mockedResult;
-
-       @SuppressWarnings("unchecked")
-       @Before
-       public void setUp() throws Exception {
-               MockitoAnnotations.initMocks(this);
-
-               this.factory = new RIBImplModuleFactory();
-               this.dataBrokerFactory = new DataBrokerImplModuleFactory();
-               this.executorFactory = new GlobalEventExecutorModuleFactory();
-               this.dispactherFactory = new BGPDispatcherImplModuleFactory();
-               this.threadgroupFactory = 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();
-
-               List<ModuleFactory> moduleFactories = getModuleFactories();
-               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, moduleFactories
-                               .toArray(new ModuleFactory[moduleFactories.size()])));
-
-               Filter mockedFilter = mock(Filter.class);
-               Mockito.doReturn(mockedFilter).when(mockedContext).createFilter(Mockito.anyString());
-
-               Mockito.doNothing().when(mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
-
-               Mockito.doNothing().when(mockedContext).addBundleListener(any(BundleListener.class));
-
-               Mockito.doReturn(new Bundle[]{}).when(mockedContext).getBundles();
-
-               Mockito.doReturn(new ServiceReference[]{}).when(mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString());
-
-               ServiceReference<?> emptyServiceReference = mock(ServiceReference.class, "Empty");
-
-               ServiceReference<?> dataProviderServiceReference = mock(ServiceReference.class, "Data Provider");
-
-
-               Mockito.doReturn(mockedFilter).when(mockedContext).createFilter(Mockito.anyString());
-
-               Mockito.doNothing().when(mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
-
-               Mockito.doNothing().when(mockedContext).addBundleListener(any(BundleListener.class));
-
-               Mockito.doReturn(new Bundle[]{}).when(mockedContext).getBundles();
 
-               Mockito.doReturn(new ServiceReference[]{}).when(mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString());
+public class RIBImplModuleTest extends AbstractRIBImplModuleTest {
+    private static final String INSTANCE_NAME = "rib-impl";
+    private static final String FACTORY_NAME = RIBImplModuleFactory.NAME;
 
-               //mockedDataProvider = mock(DataProviderService.class);
-
-
-               Mockito.doReturn("Empty reference").when(emptyServiceReference).toString();
-               Mockito.doReturn("Data Provider Service Reference").when(dataProviderServiceReference).toString();
-               //
-               Mockito.doReturn(emptyServiceReference).when(mockedContext).getServiceReference(any(Class.class));
-               Mockito.doReturn(dataProviderServiceReference).when(mockedContext).getServiceReference(DataProviderService.class);
-
-               Mockito.doReturn(mockedDataProvider).when(mockedContext).getService(dataProviderServiceReference);
-
-               //Mockito.doReturn(null).when(mockedContext).getService(dataProviderServiceReference);
-               Mockito.doReturn(null).when(mockedContext).getService(emptyServiceReference);
-
-
-               Registration<DataCommitHandler<InstanceIdentifier, CompositeNode>> registration = mock(Registration.class);
-               Mockito.doReturn(registration).when(mockedDataProvider).registerCommitHandler(any(InstanceIdentifier.class),
-                               any(DataCommitHandler.class));
-               Mockito.doReturn(registration).when(mockedDataProvider).registerCommitHandler(any(InstanceIdentifier.class),
-                               any(DataCommitHandler.class));
-
-               Mockito.doReturn(null).when(mockedDataProvider).readOperationalData(any(InstanceIdentifier.class));
-               Mockito.doReturn(mockedTransaction).when(mockedDataProvider).beginTransaction();
-
-               Mockito.doNothing().when(mockedTransaction).putOperationalData(any(InstanceIdentifier.class), any(CompositeNode.class));
-               Mockito.doNothing().when(mockedTransaction).removeOperationalData(any(InstanceIdentifier.class));
-
-               Mockito.doReturn(mockedFuture).when(mockedTransaction).commit();
-               Mockito.doReturn(TRANSACTION_NAME).when(mockedTransaction).getIdentifier();
-
-               Mockito.doReturn(mockedResult).when(mockedFuture).get();
-               Mockito.doReturn(true).when(mockedResult).isSuccessful();
-               Mockito.doReturn(Collections.emptySet()).when(mockedResult).getErrors();
-       }
-
-       protected List<ModuleFactory> getModuleFactories() {
-               return Lists.newArrayList(this.factory,
-                               this.dispactherFactory, this.threadgroupFactory,
-                               this.reconnectFactory, this.dataBrokerFactory, this.executorFactory, this.extensionFactory,
-                               this.ribExtensionsFactory, this.domBrokerFactory, this.runtimeMappingFactory,
-                               this.dataStroreFactory);
-       }
-
-       @Override
-       protected BundleContextServiceRegistrationHandler getBundleContextServiceRegistrationHandler(final Class<?> serviceType) {
-               if (serviceType.equals(SchemaServiceListener.class)) {
-                       return new BundleContextServiceRegistrationHandler() {
-                               @Override
-                               public void handleServiceRegistration(final Object o) {
-                                       SchemaServiceListener listener = (SchemaServiceListener) o;
-                                       listener.onGlobalContextUpdated(getMockedSchemaContext());
-                               }
-                       };
-               }
-
-               return super.getBundleContextServiceRegistrationHandler(serviceType);
-       }
-
-       @Test
-       public void testCreateBean() throws Exception {
-               ConfigTransactionJMXClient transaction = configRegistryClient
-                               .createTransaction();
-               createInstance(transaction, this.factory.getImplementationName(), INSTANCE_NAME,
-                               this.dataBrokerFactory.getImplementationName(), this.reconnectFactory.getImplementationName(),
-                               this.executorFactory.getImplementationName(), this.dispactherFactory.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, 13, 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 dispatcherModuleName, final String ribExtensionsModuleName,
-                       final String domBrokerModuleName, final String dataStroreModuleName)
-                                       throws Exception {
-               ObjectName nameCreated = transaction.createModule(
-                               moduleName, instanceName);
-               RIBImplModuleMXBean mxBean = transaction.newMXBeanProxy(
-                               nameCreated, RIBImplModuleMXBean.class);
-               ObjectName reconnectObjectName = TimedReconnectStrategyModuleTest.createInstance(transaction, reconnectModueName, "session-reconnect-strategy", 100, 1000L, new BigDecimal(1.0), 5000L, 2000L, null);
-               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);
-               mxBean.setTcpReconnectStrategy(reconnectStrategyON);
-               mxBean.setBgpDispatcher(BGPDispatcherImplModuleTest.createInstance(transaction, dispatcherModuleName, "bgp-dispatcher"));
-               mxBean.setExtensions(createRibExtensionsInstance(transaction, ribExtensionsModuleName, "rib-extensions-privider1"));
-               mxBean.setRibId(new RibId("test"));
-               mxBean.setLocalAs(5000L);
-               mxBean.setBgpId(new Ipv4Address("192.168.1.1"));
-               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) {
+    private static final String RIB_ID = "test";
+    private static final String BGP_ID = "192.168.1.1";
 
+    @Test
+    public void testValidationExceptionRibIdNotSet() throws Exception {
         try {
-            return transaction.lookupConfigBean(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
-        } catch (InstanceNotFoundException e) {
-            try {
-                return transaction.createModule(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
-            } catch (InstanceAlreadyExistsException e1) {
-                throw new IllegalStateException(e1);
-            }
+            createRIBImplModuleInstance(null, 500L, new Ipv4Address(BGP_ID));
+            fail();
+        } catch (ValidationException e) {
+            assertTrue(e.getMessage().contains("RibId is not set."));
         }
-       }
+    }
 
-       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;
-       }
+    @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."));
+        }
+    }
 
-       public SchemaContext getMockedSchemaContext() {
-               List<String> paths = Arrays.asList("/META-INF/yang/bgp-rib.yang", "/META-INF/yang/ietf-inet-types.yang",
-                               "/META-INF/yang/bgp-message.yang", "/META-INF/yang/bgp-multiprotocol.yang", "/META-INF/yang/bgp-types.yang");
-               return YangParserWrapper.parseYangFiles(getFilesAsInputStreams(paths));
-       }
+    @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);
+    }
 }