Code Clean Up
[bgpcep.git] / bgp / bmp-impl / src / test / java / org / opendaylight / controller / config / yang / bmp / impl / BmpMonitorImplModuleTest.java
index 354c0cdc4866f3078543329a87a724389653a42b..b043f708081a41f1fce86d9c6526654174b81b77 100644 (file)
@@ -8,17 +8,16 @@
 package org.opendaylight.controller.config.yang.bmp.impl;
 
 import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import com.google.common.base.Optional;
+
 import com.google.common.collect.Lists;
-import com.google.common.io.ByteSource;
-import com.google.common.io.Resources;
 import com.google.common.util.concurrent.CheckedFuture;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.net.URL;
+import io.netty.channel.nio.NioEventLoopGroup;
+import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import javax.management.InstanceAlreadyExistsException;
@@ -27,49 +26,51 @@ import org.junit.After;
 import org.junit.Assert;
 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.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 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.rib.spi.RIBExtensionsImplModuleFactory;
 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleMXBean;
-import org.opendaylight.controller.config.yang.bmp.spi.SimpleBmpExtensionProviderContextModuleFactory;
 import org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModuleFactory;
 import org.opendaylight.controller.config.yang.md.sal.binding.impl.RuntimeMappingModuleMXBean;
 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;
 import org.opendaylight.controller.config.yang.md.sal.dom.impl.SchemaServiceImplSingletonModuleMXBean;
-import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory;
-import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
-import org.opendaylight.controller.config.yang.protocol.framework.TimedReconnectStrategyFactoryModuleFactory;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
+import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodecFactory;
 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.controller.sal.core.api.model.SchemaService;
-import org.opendaylight.controller.sal.dom.broker.GlobalBundleScanningSchemaServiceImpl;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
-import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy;
+import org.opendaylight.controller.sal.core.api.model.YangTextSourceProvider;
+import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy;
+import org.opendaylight.mdsal.binding.generator.impl.GeneratedClassLoadingStrategy;
+import org.opendaylight.protocol.bmp.api.BmpDispatcher;
+import org.opendaylight.protocol.bmp.impl.BmpDispatcherImpl;
+import org.opendaylight.protocol.bmp.impl.session.DefaultBmpSessionFactory;
+import org.opendaylight.protocol.bmp.spi.registry.SimpleBmpMessageRegistry;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
-import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
-import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
+import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 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;
 
-public class BmpMonitorImplModuleTest extends AbstractConfigTest {
+public class BmpMonitorImplModuleTest extends AbstractBmpModuleTest {
 
     private static final String FACTORY_NAME = BmpMonitorImplModuleFactory.NAME;
     private static final String INSTANCE_NAME = "bmp-monitor-impl-instance";
@@ -83,43 +84,31 @@ public class BmpMonitorImplModuleTest extends AbstractConfigTest {
     @Mock private CheckedFuture<Void, TransactionCommitFailedException> mockedFuture;
     @Mock private RpcResult<TransactionStatus> mockedResult;
 
+    @Override
     @SuppressWarnings("unchecked")
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
+        super.setUp();
         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.mockedContext,
             new BmpMonitorImplModuleFactory(),
             new RIBExtensionsImplModuleFactory(),
             new RuntimeMappingModuleFactory(),
             new DomInmemoryDataBrokerModuleFactory(),
             new BmpDispatcherImplModuleFactory(),
-            new NettyThreadgroupModuleFactory(),
-            new SimpleBmpExtensionProviderContextModuleFactory(),
-            new TimedReconnectStrategyFactoryModuleFactory(),
-            new GlobalEventExecutorModuleFactory(),
             new SchemaServiceImplSingletonModuleFactory()));
 
-        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");
         final ServiceReference<?> schemaServiceReference = mock(ServiceReference.class, "schemaServiceReference");
 
-        Mockito.doReturn(mockedFilter).when(this.mockedContext).createFilter(Mockito.anyString());
-
-        Mockito.doNothing().when(this.mockedContext).addServiceListener(any(ServiceListener.class), Mockito.anyString());
-        Mockito.doNothing().when(this.mockedContext).removeServiceListener(any(ServiceListener.class));
-
         Mockito.doNothing().when(this.mockedContext).addBundleListener(any(BundleListener.class));
         Mockito.doNothing().when(this.mockedContext).removeBundleListener(any(BundleListener.class));
 
         Mockito.doReturn(new Bundle[] {}).when(this.mockedContext).getBundles();
 
-        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();
@@ -129,12 +118,11 @@ public class BmpMonitorImplModuleTest extends AbstractConfigTest {
         Mockito.doReturn(dataProviderServiceReference).when(this.mockedContext).getServiceReference(DataBroker.class);
         Mockito.doReturn(classLoadingStrategySR).when(this.mockedContext).getServiceReference(GeneratedClassLoadingStrategy.class);
         Mockito.doReturn(schemaServiceReference).when(this.mockedContext).getServiceReference(SchemaService.class);
+        Mockito.doReturn(classLoadingStrategySR).when(this.mockedContext).getServiceReference(ClassLoadingStrategy.class);
 
         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);
-        final GlobalBundleScanningSchemaServiceImpl schemaService = GlobalBundleScanningSchemaServiceImpl.createInstance(this.mockedContext);
-        Mockito.doReturn(schemaService).when(this.mockedContext).getService(schemaServiceReference);
 
         Mockito.doReturn(this.mockedTransaction).when(this.mockedDataProvider).newReadWriteTransaction();
 
@@ -147,55 +135,71 @@ public class BmpMonitorImplModuleTest extends AbstractConfigTest {
 
         Mockito.doReturn(null).when(this.mockedFuture).get();
 
-        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);
-
-        final Field modifiersField = Field.class.getDeclaredField("modifiers");
-        modifiersField.setAccessible(true);
-        modifiersField.setInt(contextResolverField, contextResolverField.getModifiers() & ~Modifier.FINAL);
+        final SchemaContext context = parseYangStreams(getFilesAsStreams(getYangModelsPaths()));
+        final SchemaService mockedSchemaService = mock(SchemaService.class);
+        doReturn(context).when(mockedSchemaService).getGlobalContext();
+        doAnswer(invocation -> {
+            invocation.getArgumentAt(0, SchemaContextListener.class).onGlobalContextUpdated(context);
+            final ListenerRegistration<SchemaContextListener> reg = mock(ListenerRegistration.class);
+            doNothing().when(reg).close();
+            return reg;
+        }).when(mockedSchemaService).registerSchemaContextListener(any(SchemaContextListener.class));
+
+        setupMockService(SchemaService.class, mockedSchemaService);
+        setupMockService(YangTextSourceProvider.class, mock(YangTextSourceProvider.class));
+        Mockito.doReturn(mockedSchemaService).when(this.mockedContext).getService(schemaServiceReference);
+
+        final BindingToNormalizedNodeCodec bindingCodec = BindingToNormalizedNodeCodecFactory.newInstance(
+                GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy());
+        BindingToNormalizedNodeCodecFactory.registerInstance(bindingCodec, mockedSchemaService);
+        setupMockService(BindingToNormalizedNodeCodec.class, bindingCodec);
+
+        final BmpDispatcher bmpDispatcher = new BmpDispatcherImpl(new NioEventLoopGroup(), new NioEventLoopGroup(),
+                new SimpleBmpMessageRegistry(), new DefaultBmpSessionFactory());
+        setupMockService(BmpDispatcher.class, bmpDispatcher);
+    }
 
-        contextResolverField.set(schemaService, mockedContextResolver);
+    private static SchemaContext parseYangStreams(final List<InputStream> streams) {
+        try {
+            return YangParserTestUtils.parseYangStreams(streams);
+        } catch (final ReactorException e) {
+            throw new RuntimeException("Unable to build schema context from " + streams, e);
+        }
     }
 
     private List<String> getYangModelsPaths() {
-        final List<String> paths = Lists.newArrayList("/META-INF/yang/bgp-rib.yang", "/META-INF/yang/ietf-inet-types.yang",
+        final List<String> paths = Lists.newArrayList("/META-INF/yang/bgp-rib.yang", "/META-INF/yang/ietf-inet-types@2013-07-15.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", "/META-INF/yang/yang-ext.yang",
-                "/META-INF/yang/bmp-monitor.yang", "/META-INF/yang/bmp-message.yang", "/META-INF/yang/ietf-yang-types.yang");
+                "/META-INF/yang/bmp-monitor.yang", "/META-INF/yang/bmp-message.yang", "/META-INF/yang/ietf-yang-types@2013-07-15.yang");
         return paths;
     }
 
-    private Collection<ByteSource> getFilesAsByteSources(final List<String> paths) {
-        final Collection<ByteSource> resources = new ArrayList<>();
+    private List<InputStream> getFilesAsStreams(final List<String> paths) {
+        final List<InputStream> resources = new ArrayList<>();
         final List<String> failedToFind = new ArrayList<>();
         for (final String path : paths) {
-            final URL url = BmpMonitorImplModuleTest.class.getResource(path);
-            if (url == null) {
+            final InputStream is = BmpMonitorImplModuleTest.class.getResourceAsStream(path);
+            if (is == null) {
                 failedToFind.add(path);
             } else {
-                resources.add(Resources.asByteSource(url));
+                resources.add(is);
             }
         }
-        Assert.assertEquals("Some files were not found", Collections.<String> emptyList(), failedToFind);
+        Assert.assertEquals("Some files were not found", Collections.emptyList(), failedToFind);
         return resources;
     }
 
     @After
     public void closeAllModules() throws Exception {
         super.destroyAllConfigBeans();
-        GlobalBundleScanningSchemaServiceImpl.destroyInstance();
     }
 
     @Test
     public void testCreateBean() throws Exception {
         final CommitStatus status = createInstance();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 11, 0, 0);
+        assertStatus(status, 6, 0, 0);
     }
 
     @Test
@@ -205,7 +209,7 @@ public class BmpMonitorImplModuleTest extends AbstractConfigTest {
         assertBeanCount(1, FACTORY_NAME);
         final CommitStatus status = transaction.commit();
         assertBeanCount(1, FACTORY_NAME);
-        assertStatus(status, 0, 0, 11);
+        assertStatus(status, 0, 0, 6);
     }
 
     private CommitStatus createInstance() throws Exception {
@@ -246,6 +250,8 @@ public class BmpMonitorImplModuleTest extends AbstractConfigTest {
     }
 
     private static ObjectName createDispatcher(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
-        return BmpDispatcherImplModuleTest.createInstance(transaction);
+        final ObjectName nameCreated = transaction.createModule(BmpDispatcherImplModuleFactory.NAME, "bmp-message-fct");
+        transaction.newMXBeanProxy(nameCreated, BmpDispatcherImplModuleMXBean.class);
+        return nameCreated;
     }
 }