Switch to MD-SAL APIs
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / OpenFlowPluginProviderImplTest.java
index c32fdc8aab54cbde124a6d2ebcc4ab98e5743007..24383c5469b2ee40979fa81d859f750de64b0b8b 100644 (file)
@@ -5,43 +5,54 @@
  * 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.openflowplugin.impl;
 
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.times;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+
 import com.google.common.collect.Lists;
 import com.google.common.util.concurrent.Futures;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.NotificationService;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration;
-import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.infrautils.ready.SystemReadyMonitor;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.common.api.CommitInfo;
+import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
+import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
+import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProviderList;
+import org.opendaylight.openflowplugin.api.openflow.configuration.ConfigurationProperty;
+import org.opendaylight.openflowplugin.api.openflow.configuration.ConfigurationService;
+import org.opendaylight.openflowplugin.api.openflow.mastership.MastershipChangeServiceManager;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsManagerControlService;
+import org.opendaylight.yangtools.concepts.ObjectRegistration;
 
 @RunWith(MockitoJUnitRunner.class)
 public class OpenFlowPluginProviderImplTest {
 
     @Mock
-    DataBroker dataBroker;
+    PingPongDataBroker dataBroker;
 
     @Mock
-    RpcProviderRegistry rpcProviderRegistry;
+    RpcProviderService rpcProviderRegistry;
 
     @Mock
-    NotificationService notificationService;
+    NotificationPublishService notificationPublishService;
+
+    @Mock
+    OpenflowPluginDiagStatusProvider ofPluginDiagstatusProvider;
+
+    @Mock
+    SystemReadyMonitor systemReadyMonitor;
 
     @Mock
     WriteTransaction writeTransaction;
@@ -53,43 +64,69 @@ public class OpenFlowPluginProviderImplTest {
     EntityOwnershipListenerRegistration entityOwnershipListenerRegistration;
 
     @Mock
-    BindingAwareBroker.RpcRegistration<StatisticsManagerControlService> controlServiceRegistration;
+    ObjectRegistration<StatisticsManagerControlService> controlServiceRegistration;
 
     @Mock
     SwitchConnectionProvider switchConnectionProvider;
 
-    private static final long RPC_REQUESTS_QUOTA = 500;
-    private static final long GLOBAL_NOTIFICATION_QUOTA = 131072;
+    @Mock
+    ClusterSingletonServiceProvider clusterSingletonServiceProvider;
+
+    @Mock
+    ConfigurationService configurationService;
 
-    private OpenFlowPluginProviderImpl provider;
+    @Mock
+    MastershipChangeServiceManager mastershipChangeServiceManager;
+
+    private static final int RPC_REQUESTS_QUOTA = 500;
+    private static final long GLOBAL_NOTIFICATION_QUOTA = 131072;
+    private static final int THREAD_POOL_MIN_THREADS = 1;
+    private static final int THREAD_POOL_MAX_THREADS = 32000;
+    private static final long THREAD_POOL_TIMEOUT = 60;
+    private static final long BASIC_TIMER_DELAY = 1L;
+    private static final boolean USE_SINGLE_LAYER_SERIALIZATION = false;
+    private static final int DEVICE_CONNECTION_RATE_LIMIT_PER_MIN = 0;
 
     @Before
     public void setUp() throws Exception {
         when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
-        when(writeTransaction.submit()).thenReturn(Futures.immediateCheckedFuture(null));
+        doReturn(CommitInfo.emptyFluentFuture()).when(writeTransaction).commit();
         when(entityOwnershipService.registerListener(any(), any())).thenReturn(entityOwnershipListenerRegistration);
-        when(rpcProviderRegistry.addRpcImplementation(eq(StatisticsManagerControlService.class), any())).thenReturn(controlServiceRegistration);
-        when(switchConnectionProvider.startup()).thenReturn(Futures.immediateCheckedFuture(null));
-
-        provider = new OpenFlowPluginProviderImpl(RPC_REQUESTS_QUOTA, GLOBAL_NOTIFICATION_QUOTA);
-        provider.setDataBroker(dataBroker);
-        provider.setRpcProviderRegistry(rpcProviderRegistry);
-        provider.setNotificationProviderService(notificationService);
-        provider.setEntityOwnershipService(entityOwnershipService);
-        provider.setSwitchConnectionProviders(Lists.newArrayList(switchConnectionProvider));
-    }
-
-    @After
-    public void tearDown() throws Exception {
-
+        when(rpcProviderRegistry.registerRpcImplementation(eq(StatisticsManagerControlService.class), any()))
+                .thenReturn(controlServiceRegistration);
+        when(switchConnectionProvider.startup()).thenReturn(Futures.immediateFuture(true));
+        when(switchConnectionProvider.shutdown()).thenReturn(Futures.immediateFuture(true));
+        when(configurationService.getProperty(eq(ConfigurationProperty.USE_SINGLE_LAYER_SERIALIZATION.toString()),
+                any())).thenReturn(USE_SINGLE_LAYER_SERIALIZATION);
+        when(configurationService.getProperty(eq(ConfigurationProperty.THREAD_POOL_MIN_THREADS.toString()), any()))
+                .thenReturn(THREAD_POOL_MIN_THREADS);
+        when(configurationService.getProperty(eq(ConfigurationProperty.THREAD_POOL_MAX_THREADS.toString()), any()))
+                .thenReturn(THREAD_POOL_MAX_THREADS);
+        when(configurationService.getProperty(eq(ConfigurationProperty.THREAD_POOL_TIMEOUT.toString()), any()))
+                .thenReturn(THREAD_POOL_TIMEOUT);
+        when(configurationService.getProperty(eq(ConfigurationProperty.DEVICE_CONNECTION_RATE_LIMIT_PER_MIN.toString()),
+                any())).thenReturn(DEVICE_CONNECTION_RATE_LIMIT_PER_MIN);
     }
 
     @Test
     public void testInitializeAndClose() throws Exception {
+        final OpenFlowPluginProviderImpl provider = new OpenFlowPluginProviderImpl(
+                configurationService,
+                new SwitchConnectionProviderList(Lists.newArrayList(switchConnectionProvider)),
+                dataBroker,
+                rpcProviderRegistry,
+                notificationPublishService,
+                clusterSingletonServiceProvider,
+                entityOwnershipService,
+                mastershipChangeServiceManager,
+                ofPluginDiagstatusProvider,
+                systemReadyMonitor);
+
         provider.initialize();
+        // Calling the onSystemBootReady() callback
+        provider.onSystemBootReady();
         verify(switchConnectionProvider).startup();
-
         provider.close();
-        verify(entityOwnershipListenerRegistration, times(2)).close();
+        verify(switchConnectionProvider).shutdown();
     }
-}
\ No newline at end of file
+}