BUG-2383 : Application peer rework.
[bgpcep.git] / bgp / rib-impl / src / test / java / org / opendaylight / controller / config / yang / bgp / rib / impl / AbstractRIBImplModuleTest.java
index bb85b5d5b15463a6621066bae6727b7867db9483..0d2a55539ed28043faea1a504e541f40a4d07c35 100644 (file)
@@ -17,6 +17,7 @@ import com.google.common.io.Resources;
 import com.google.common.util.concurrent.CheckedFuture;
 import java.io.IOException;
 import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -45,7 +46,6 @@ import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingAsyncD
 import org.opendaylight.controller.config.yang.md.sal.binding.impl.BindingAsyncDataBrokerImplModuleMXBean;
 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.DomInmemoryDataBrokerModuleFactory;
 import org.opendaylight.controller.config.yang.md.sal.dom.impl.DomInmemoryDataBrokerModuleMXBean;
 import org.opendaylight.controller.config.yang.md.sal.dom.impl.SchemaServiceImplSingletonModuleFactory;
@@ -71,7 +71,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
 import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
-import org.opendaylight.yangtools.yang.parser.impl.util.URLSchemaContextResolver;
+import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleListener;
 import org.osgi.framework.Filter;
@@ -86,6 +86,7 @@ public abstract class AbstractRIBImplModuleTest extends AbstractConfigTest {
 
     protected static final RibId RIB_ID = new RibId("test");
     protected static final Ipv4Address BGP_ID = new Ipv4Address("192.168.1.1");
+    protected static final Ipv4Address CLUSTER_ID = new Ipv4Address("192.168.1.2");
 
     private static final String SESSION_RS_INSTANCE_NAME = "session-reconnect-strategy-factory";
     private static final String TCP_RS_INSTANCE_NAME = "tcp-reconnect-strategy-factory";
@@ -111,61 +112,65 @@ public abstract class AbstractRIBImplModuleTest extends AbstractConfigTest {
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
-        List<ModuleFactory> moduleFactories = getModuleFactories();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, moduleFactories.toArray(new ModuleFactory[moduleFactories.size()])));
+        final List<ModuleFactory> moduleFactories = getModuleFactories();
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext, moduleFactories.toArray(new ModuleFactory[moduleFactories.size()])));
 
-        Filter mockedFilter = mock(Filter.class);
-        Mockito.doReturn(mockedFilter).when(mockedContext).createFilter(Mockito.anyString());
+        final Filter mockedFilter = mock(Filter.class);
+        Mockito.doReturn(mockedFilter).when(this.mockedContext).createFilter(Mockito.anyString());
 
         final ServiceReference<?> emptyServiceReference = mock(ServiceReference.class, "Empty");
         final ServiceReference<?> classLoadingStrategySR = mock(ServiceReference.class, "ClassLoadingStrategy");
         final ServiceReference<?> dataProviderServiceReference = mock(ServiceReference.class, "Data Provider");
 
-        Mockito.doReturn(mockedFilter).when(mockedContext).createFilter(Mockito.anyString());
+        Mockito.doReturn(mockedFilter).when(this.mockedContext).createFilter(Mockito.anyString());
 
-        Mockito.doNothing().when(mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
-        Mockito.doNothing().when(mockedContext).removeServiceListener(any(ServiceListener.class));
+        Mockito.doNothing().when(this.mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
+        Mockito.doNothing().when(this.mockedContext).removeServiceListener(any(ServiceListener.class));
 
-        Mockito.doNothing().when(mockedContext).addBundleListener(any(BundleListener.class));
-        Mockito.doNothing().when(mockedContext).removeBundleListener(any(BundleListener.class));
+        Mockito.doNothing().when(this.mockedContext).addBundleListener(any(BundleListener.class));
+        Mockito.doNothing().when(this.mockedContext).removeBundleListener(any(BundleListener.class));
 
-        Mockito.doReturn(new Bundle[] {}).when(mockedContext).getBundles();
+        Mockito.doReturn(new Bundle[] {}).when(this.mockedContext).getBundles();
 
-        Mockito.doReturn(new ServiceReference[] {}).when(mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString());
+        Mockito.doReturn(new ServiceReference[] {}).when(this.mockedContext).getServiceReferences(Matchers.anyString(), Matchers.anyString());
 
         Mockito.doReturn("Empty reference").when(emptyServiceReference).toString();
         Mockito.doReturn("Data Provider Service Reference").when(dataProviderServiceReference).toString();
         Mockito.doReturn("Class loading stategy reference").when(classLoadingStrategySR).toString();
 
-        Mockito.doReturn(emptyServiceReference).when(mockedContext).getServiceReference(any(Class.class));
-        Mockito.doReturn(dataProviderServiceReference).when(mockedContext).getServiceReference(DataBroker.class);
-        Mockito.doReturn(classLoadingStrategySR).when(mockedContext).getServiceReference(GeneratedClassLoadingStrategy.class);
+        Mockito.doReturn(emptyServiceReference).when(this.mockedContext).getServiceReference(any(Class.class));
+        Mockito.doReturn(dataProviderServiceReference).when(this.mockedContext).getServiceReference(DataBroker.class);
+        Mockito.doReturn(classLoadingStrategySR).when(this.mockedContext).getServiceReference(GeneratedClassLoadingStrategy.class);
 
-        Mockito.doReturn(mockedDataProvider).when(mockedContext).getService(dataProviderServiceReference);
-        Mockito.doReturn(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()).when(mockedContext).getService(classLoadingStrategySR);
-        Mockito.doReturn(null).when(mockedContext).getService(emptyServiceReference);
+        Mockito.doReturn(this.mockedDataProvider).when(this.mockedContext).getService(dataProviderServiceReference);
+        Mockito.doReturn(GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()).when(this.mockedContext).getService(classLoadingStrategySR);
+        Mockito.doReturn(null).when(this.mockedContext).getService(emptyServiceReference);
 
-        Mockito.doReturn(mockedTransaction).when(mockedDataProvider).newReadWriteTransaction();
+        Mockito.doReturn(this.mockedTransaction).when(this.mockedDataProvider).newReadWriteTransaction();
 
-        Mockito.doReturn(null).when(mockedTransaction).read(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
-        Mockito.doNothing().when(mockedTransaction).put(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class));
-        Mockito.doNothing().when(mockedTransaction).delete(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
+        Mockito.doReturn(null).when(this.mockedTransaction).read(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
+        Mockito.doNothing().when(this.mockedTransaction).put(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(DataObject.class));
+        Mockito.doNothing().when(this.mockedTransaction).delete(Mockito.eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class));
 
-        Mockito.doReturn(mockedFuture).when(mockedTransaction).submit();
-        Mockito.doReturn(TRANSACTION_NAME).when(mockedTransaction).getIdentifier();
+        Mockito.doReturn(this.mockedFuture).when(this.mockedTransaction).submit();
+        Mockito.doReturn(TRANSACTION_NAME).when(this.mockedTransaction).getIdentifier();
 
-        Mockito.doReturn(null).when(mockedFuture).get();
+        Mockito.doReturn(null).when(this.mockedFuture).get();
 
-        GlobalBundleScanningSchemaServiceImpl schemaService = GlobalBundleScanningSchemaServiceImpl.createInstance(this.mockedContext);
-        YangContextParser parser = new YangParserImpl();
-        SchemaContext context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
-        URLSchemaContextResolver mockedContextResolver = Mockito.mock(URLSchemaContextResolver.class);
+        final GlobalBundleScanningSchemaServiceImpl schemaService = GlobalBundleScanningSchemaServiceImpl.createInstance(this.mockedContext);
+        final YangContextParser parser = new YangParserImpl();
+        final SchemaContext context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
+        final URLSchemaContextResolver mockedContextResolver = Mockito.mock(URLSchemaContextResolver.class);
         Mockito.doReturn(Optional.of(context)).when(mockedContextResolver).getSchemaContext();
 
         final Field contextResolverField = schemaService.getClass().getDeclaredField("contextResolver");
         contextResolverField.setAccessible(true);
-        contextResolverField.set(schemaService, mockedContextResolver);
 
+        final Field modifiersField = Field.class.getDeclaredField("modifiers");
+        modifiersField.setAccessible(true);
+        modifiersField.setInt(contextResolverField, contextResolverField.getModifiers() & ~Modifier.FINAL);
+
+        contextResolverField.set(schemaService, mockedContextResolver);
     }
 
     protected List<ModuleFactory> getModuleFactories() {
@@ -183,8 +188,8 @@ public abstract class AbstractRIBImplModuleTest extends AbstractConfigTest {
             return new BundleContextServiceRegistrationHandler() {
                 @Override
                 public void handleServiceRegistration(final Class<?> clazz, final Object serviceInstance, final Dictionary<String, ?> props) {
-                    SchemaContextListener listener = (SchemaContextListener) serviceInstance;
-                    YangContextParser parser = new YangParserImpl();
+                    final SchemaContextListener listener = (SchemaContextListener) serviceInstance;
+                    final YangContextParser parser = new YangParserImpl();
                     final SchemaContext context;
                     try {
                         context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
@@ -207,116 +212,114 @@ public abstract class AbstractRIBImplModuleTest extends AbstractConfigTest {
     }
 
     protected CommitStatus createInstance() throws Exception {
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
         createRIBImplModuleInstance(transaction);
         return transaction.commit();
     }
 
-    protected CommitStatus createRIBImplModuleInstance(final RibId ribId, final Long localAs, final Ipv4Address bgpId) throws Exception {
-        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
-        createRIBImplModuleInstance(transaction, ribId, localAs, bgpId, createAsyncDataBrokerInstance(transaction));
+    protected CommitStatus createRIBImplModuleInstance(final RibId ribId, final Long localAs, final Ipv4Address bgpId, final Ipv4Address clusterId) throws Exception {
+        final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
+        createRIBImplModuleInstance(transaction, ribId, localAs, bgpId, clusterId, createAsyncDataBrokerInstance(transaction));
         return transaction.commit();
     }
 
     private ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction, final RibId ribId, final Long localAs,
-            final Ipv4Address bgpId, final ObjectName dataBroker) throws Exception {
-        ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
-        RIBImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, RIBImplModuleMXBean.class);
-        ObjectName reconnectObjectName = TimedReconnectStrategyModuleTest.createInstance(transaction, SESSION_RS_INSTANCE_NAME);
+            final Ipv4Address bgpId, final Ipv4Address clusterId, final ObjectName dataBroker) throws Exception {
+        final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
+        final RIBImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, RIBImplModuleMXBean.class);
+        final ObjectName reconnectObjectName = TimedReconnectStrategyModuleTest.createInstance(transaction, SESSION_RS_INSTANCE_NAME);
         mxBean.setSessionReconnectStrategy(reconnectObjectName);
         mxBean.setDataProvider(dataBroker);
-        ObjectName reconnectStrategyON = TimedReconnectStrategyModuleTest.createInstance(transaction, TCP_RS_INSTANCE_NAME);
+        mxBean.setDomDataProvider(lookupDomAsyncDataBroker(transaction));
+        mxBean.setCodecTreeFactory(lookupMappingServiceInstance(transaction));
+        final ObjectName reconnectStrategyON = TimedReconnectStrategyModuleTest.createInstance(transaction, TCP_RS_INSTANCE_NAME);
         mxBean.setTcpReconnectStrategy(reconnectStrategyON);
         mxBean.setBgpDispatcher(BGPDispatcherImplModuleTest.createInstance(transaction));
         mxBean.setExtensions(createRibExtensionsInstance(transaction));
         mxBean.setRibId(ribId);
         mxBean.setLocalAs(localAs);
-        mxBean.setBgpId(bgpId);
+        mxBean.setBgpRibId(bgpId);
+        mxBean.setClusterId(clusterId);
         return nameCreated;
     }
 
     protected ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction) throws Exception {
-        return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID,
+        return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID, CLUSTER_ID,
                 createAsyncDataBrokerInstance(transaction));
     }
 
     public ObjectName createRIBImplModuleInstance(final ConfigTransactionJMXClient transaction, final ObjectName dataBroker)
             throws Exception {
-        return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID, dataBroker);
+        return createRIBImplModuleInstance(transaction, RIB_ID, 5000L, BGP_ID, CLUSTER_ID, dataBroker);
     }
 
     public ObjectName createAsyncDataBrokerInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException, InstanceNotFoundException {
         final ObjectName nameCreated = transaction.createModule(BindingAsyncDataBrokerImplModuleFactory.NAME, BINDING_ASYNC_BROKER_INSTANCE_NAME);
         final BindingAsyncDataBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, BindingAsyncDataBrokerImplModuleMXBean.class);
         mxBean.setBindingMappingService(lookupMappingServiceInstance(transaction));
-        mxBean.setDomAsyncBroker(lookupDomBrokerInstance(transaction));
-        return nameCreated;
-    }
-
-    private static ObjectName createDomAsyncDataBroker(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
-        final ObjectName nameCreated = transaction.createModule(DomInmemoryDataBrokerModuleFactory.NAME, DOM_ASYNC_DATA_BROKER_INSTANCE);
-        final DomInmemoryDataBrokerModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, DomInmemoryDataBrokerModuleMXBean.class);
+        mxBean.setDomAsyncBroker(lookupDomAsyncDataBroker(transaction));
         mxBean.setSchemaService(lookupSchemaServiceInstance(transaction));
         return nameCreated;
     }
 
-    private static ObjectName lookupMappingServiceInstance(final ConfigTransactionJMXClient transaction) {
+    public static ObjectName lookupDomAsyncDataBroker(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
         try {
-            return transaction.lookupConfigBean(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
-        } catch (InstanceNotFoundException e) {
+            return transaction.lookupConfigBean(DomInmemoryDataBrokerModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
+        } catch (final InstanceNotFoundException e) {
             try {
-                return transaction.createModule(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
-            } catch (InstanceAlreadyExistsException e1) {
+                final ObjectName nameCreated = transaction.createModule(DomInmemoryDataBrokerModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
+                final DomInmemoryDataBrokerModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, DomInmemoryDataBrokerModuleMXBean.class);
+                mxBean.setSchemaService(lookupSchemaServiceInstance(transaction));
+                return nameCreated;
+            } catch (final InstanceAlreadyExistsException e1) {
                 throw new IllegalStateException(e1);
             }
         }
     }
 
-    private static ObjectName lookupSchemaServiceInstance(final ConfigTransactionJMXClient transaction) {
+    private static ObjectName lookupMappingServiceInstance(final ConfigTransactionJMXClient transaction) {
         try {
-            return transaction.lookupConfigBean(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
-        } catch (InstanceNotFoundException e) {
+            return transaction.lookupConfigBean(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
+        } catch (final InstanceNotFoundException e) {
             try {
-                return transaction.createModule(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
-            } catch (InstanceAlreadyExistsException e1) {
+                return transaction.createModule(RuntimeMappingModuleFactory.NAME, RuntimeMappingModuleFactory.SINGLETON_NAME);
+            } catch (final InstanceAlreadyExistsException e1) {
                 throw new IllegalStateException(e1);
             }
         }
     }
 
-    public static ObjectName lookupDomBrokerInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
+    private static ObjectName lookupSchemaServiceInstance(final ConfigTransactionJMXClient transaction) {
         try {
-            return transaction.lookupConfigBean(DomBrokerImplModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
-        } catch (InstanceNotFoundException e) {
+            return transaction.lookupConfigBean(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
+        } catch (final InstanceNotFoundException e) {
             try {
-                final ObjectName nameCreated = transaction.createModule(DomBrokerImplModuleFactory.NAME, DOM_BROKER_INSTANCE_NAME);
-                final DomBrokerImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, DomBrokerImplModuleMXBean.class);
-                mxBean.setAsyncDataBroker(createDomAsyncDataBroker(transaction));
-                return nameCreated;
-            } catch (InstanceAlreadyExistsException e1) {
+                return transaction.createModule(SchemaServiceImplSingletonModuleFactory.NAME, SchemaServiceImplSingletonModuleFactory.SINGLETON_NAME);
+            } catch (final InstanceAlreadyExistsException e1) {
                 throw new IllegalStateException(e1);
             }
         }
     }
 
     private ObjectName createRibExtensionsInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
-        ObjectName nameCreated = transaction.createModule(RIBExtensionsImplModuleFactory.NAME, RIB_EXTENSIONS_INSTANCE_NAME);
+        final ObjectName nameCreated = transaction.createModule(RIBExtensionsImplModuleFactory.NAME, RIB_EXTENSIONS_INSTANCE_NAME);
         transaction.newMXBeanProxy(nameCreated, RIBExtensionsImplModuleMXBean.class);
         return nameCreated;
     }
 
     public List<String> getYangModelsPaths() {
-        List<String> paths = Lists.newArrayList("/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");
+        final List<String> paths = Lists.newArrayList("/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",
+                "/META-INF/yang/network-concepts.yang", "/META-INF/yang/ieee754.yang");
         return paths;
     }
 
     // TODO move back to AbstractConfigTest
     private static Collection<ByteSource> getFilesAsByteSources(final List<String> paths) {
         final Collection<ByteSource> resources = new ArrayList<>();
-        List<String> failedToFind = new ArrayList<>();
-        for (String path : paths) {
-            URL url = AbstractRIBImplModuleTest.class.getResource(path);
+        final List<String> failedToFind = new ArrayList<>();
+        for (final String path : paths) {
+            final URL url = AbstractRIBImplModuleTest.class.getResource(path);
             if (url == null) {
                 failedToFind.add(path);
             } else {