Migrate StatisticsManagerImpl 16/108216/8
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Feb 2024 12:15:58 +0000 (13:15 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 5 Feb 2024 12:27:45 +0000 (13:27 +0100)
Migrate to not use generated roll-up RPC service.

JIRA: OPNFLWPLUG-1125
Change-Id: I8b2bcf9d113d6d140d96bb64f374d500bea20241
Signed-off-by: lubos-cicut <lubos.cicut@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImpl.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImplTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImplTest.java

index 1e5f1b7dd3da349dcb50bf5991e614aa4e67706b..392f08facb5e3d2aba96731af4be1da26b05e781 100644 (file)
@@ -7,8 +7,8 @@
  */
 package org.opendaylight.openflowplugin.impl.statistics;
 
-import static java.util.Objects.requireNonNull;
-
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -24,30 +24,33 @@ import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProviderFactory;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkMode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkMode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsManagerControlService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsWorkMode;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.Rpc;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class StatisticsManagerImpl implements StatisticsManager, StatisticsManagerControlService {
-
+public final class StatisticsManagerImpl implements StatisticsManager {
     private static final Logger LOG = LoggerFactory.getLogger(StatisticsManagerImpl.class);
 
+    @VisibleForTesting
+    final ConcurrentMap<DeviceInfo, StatisticsContext> contexts = new ConcurrentHashMap<>();
+
     private final OpenflowProviderConfig config;
     private final ConvertorExecutor converterExecutor;
     private final Executor executor;
-    private final ConcurrentMap<DeviceInfo, StatisticsContext> contexts = new ConcurrentHashMap<>();
     private final Semaphore workModeGuard = new Semaphore(1, true);
-    private final ObjectRegistration<StatisticsManagerControlService> controlServiceRegistration;
+    private final Registration controlServiceRegistration;
     private final StatisticsWorkMode workMode = StatisticsWorkMode.COLLECTALL;
     private boolean isStatisticsFullyDisabled;
 
@@ -58,20 +61,23 @@ public final class StatisticsManagerImpl implements StatisticsManager, Statistic
         this.config = config;
         this.executor = executor;
         converterExecutor = convertorExecutor;
-        controlServiceRegistration = requireNonNull(rpcProviderRegistry)
-                .registerRpcImplementation(StatisticsManagerControlService.class, this);
+        controlServiceRegistration = rpcProviderRegistry.registerRpcImplementations(
+            ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+            .put(GetStatisticsWorkMode.class, this::getStatisticsWorkMode)
+            .put(ChangeStatisticsWorkMode.class, this::changeStatisticsWorkMode)
+            .build());
     }
 
-    @Override
-    public ListenableFuture<RpcResult<GetStatisticsWorkModeOutput>> getStatisticsWorkMode(
+    @VisibleForTesting
+    ListenableFuture<RpcResult<GetStatisticsWorkModeOutput>> getStatisticsWorkMode(
             final GetStatisticsWorkModeInput input) {
         return RpcResultBuilder.success(new GetStatisticsWorkModeOutputBuilder()
                 .setMode(workMode)
                 .build()).buildFuture();
     }
 
-    @Override
-    public ListenableFuture<RpcResult<ChangeStatisticsWorkModeOutput>> changeStatisticsWorkMode(
+    @VisibleForTesting
+    ListenableFuture<RpcResult<ChangeStatisticsWorkModeOutput>> changeStatisticsWorkMode(
             final ChangeStatisticsWorkModeInput input) {
         if (workModeGuard.tryAcquire()) {
             final StatisticsWorkMode targetWorkMode = input.getMode();
index 1b875c86063659b1b84fd7bf45c04547ee81b5ae..dda1d864f0f79b388e2cf8d70226e463f7a9135f 100644 (file)
@@ -33,8 +33,6 @@ import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionPro
 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;
 import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
@@ -65,9 +63,6 @@ public class OpenFlowPluginProviderImplTest {
     @Mock
     EntityOwnershipListenerRegistration entityOwnershipListenerRegistration;
 
-    @Mock
-    ObjectRegistration<StatisticsManagerControlService> controlServiceRegistration;
-
     @Mock
     SwitchConnectionProvider switchConnectionProvider;
 
@@ -92,8 +87,6 @@ public class OpenFlowPluginProviderImplTest {
         when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
         doReturn(CommitInfo.emptyFluentFuture()).when(writeTransaction).commit();
         when(entityOwnershipService.registerListener(any(), any())).thenReturn(entityOwnershipListenerRegistration);
-        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()),
index 68b3ded838a49e9a13055acee19418dc20db193c..8c458f8855d866eac2752dce2e94cf206aa3307a 100644 (file)
@@ -7,25 +7,22 @@
  */
 package org.opendaylight.openflowplugin.impl.statistics;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.lang.reflect.Field;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentMatchers;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
@@ -53,20 +50,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsManagerControlService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsWorkMode;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.Uint32;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @RunWith(MockitoJUnitRunner.class)
 public class StatisticsManagerImplTest {
-
-    private static final Logger LOG = LoggerFactory.getLogger(StatisticsManagerImplTest.class);
-
     public static final NodeId NODE_ID = new NodeId("ofp-unit-dummy-node-id");
 
     @Mock
@@ -90,27 +81,26 @@ public class StatisticsManagerImplTest {
     @Mock
     private MultiMsgCollector multiMagCollector;
     @Mock
-    private ObjectRegistration<StatisticsManagerControlService> serviceControlRegistration;
+    private Registration serviceControlRegistration;
     @Mock
     private DeviceInfo deviceInfo;
     @Mock
     private DataBroker dataBroker;
     @Mock
     private ReconciliationFrameworkRegistrar reconciliationFrameworkRegistrar;
+    @Mock
+    private StatisticsContext statisticContext;
 
     private RequestContext<List<MultipartReply>> currentRequestContext;
     private StatisticsManagerImpl statisticsManager;
 
-
     @Before
     public void initialization() {
         final KeyedInstanceIdentifier<Node, NodeKey> nodePath = KeyedInstanceIdentifier
                 .create(Nodes.class)
                 .child(Node.class, new NodeKey(new NodeId("openflow:10")));
 
-        when(rpcProviderRegistry.registerRpcImplementation(
-                eq(StatisticsManagerControlService.class),
-                ArgumentMatchers.any())).thenReturn(serviceControlRegistration);
+        when(rpcProviderRegistry.registerRpcImplementations(any())).thenReturn(serviceControlRegistration);
 
         final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
 
@@ -124,22 +114,13 @@ public class StatisticsManagerImplTest {
                 MoreExecutors.directExecutor());
     }
 
-    private static Map<DeviceInfo, StatisticsContext> getContextsMap(final StatisticsManagerImpl statisticsManager)
-            throws NoSuchFieldException, IllegalAccessException {
-        // HACK: contexts map for testing shall be accessed in some more civilized way
-        final Field contextsField = StatisticsManagerImpl.class.getDeclaredField("contexts");
-        assertNotNull(contextsField);
-        contextsField.setAccessible(true);
-        return (Map<DeviceInfo, StatisticsContext>) contextsField.get(statisticsManager);
-    }
-
     @Test
     public void testGetStatisticsWorkMode() throws Exception {
         final Future<RpcResult<GetStatisticsWorkModeOutput>> workMode = statisticsManager.getStatisticsWorkMode(null);
-        Assert.assertTrue(workMode.isDone());
-        Assert.assertTrue(workMode.get().isSuccessful());
+        assertTrue(workMode.isDone());
+        assertTrue(workMode.get().isSuccessful());
         assertNotNull(workMode.get().getResult());
-        Assert.assertEquals(StatisticsWorkMode.COLLECTALL, workMode.get().getResult().getMode());
+        assertEquals(StatisticsWorkMode.COLLECTALL, workMode.get().getResult().getMode());
     }
 
     /**
@@ -148,9 +129,7 @@ public class StatisticsManagerImplTest {
      */
     @Test
     public void testChangeStatisticsWorkMode1() throws Exception {
-        final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class);
-
-        getContextsMap(statisticsManager).put(deviceInfo, statisticContext);
+        statisticsManager.contexts.put(deviceInfo, statisticContext);
 
         final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld =
                 new ChangeStatisticsWorkModeInputBuilder()
@@ -163,10 +142,11 @@ public class StatisticsManagerImplTest {
         verify(statisticContext).disableGathering();
     }
 
-    private static void checkWorkModeChangeOutcome(ListenableFuture<RpcResult<ChangeStatisticsWorkModeOutput>> workMode)
+    private static void checkWorkModeChangeOutcome(
+            final ListenableFuture<RpcResult<ChangeStatisticsWorkModeOutput>> workMode)
             throws InterruptedException, ExecutionException {
-        Assert.assertTrue(workMode.isDone());
-        Assert.assertTrue(workMode.get().isSuccessful());
+        assertTrue(workMode.isDone());
+        assertTrue(workMode.get().isSuccessful());
     }
 
 
@@ -176,9 +156,7 @@ public class StatisticsManagerImplTest {
      */
     @Test
     public void testChangeStatisticsWorkMode2() throws Exception {
-        final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class);
-
-        getContextsMap(statisticsManager).put(deviceInfo, statisticContext);
+        statisticsManager.contexts.put(deviceInfo, statisticContext);
 
         final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld =
                 new ChangeStatisticsWorkModeInputBuilder()
@@ -198,9 +176,7 @@ public class StatisticsManagerImplTest {
      */
     @Test
     public void testChangeStatisticsWorkMode3() throws Exception {
-        final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class);
-
-        getContextsMap(statisticsManager).put(deviceInfo, statisticContext);
+        statisticsManager.contexts.put(deviceInfo, statisticContext);
 
         final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld =
                 new ChangeStatisticsWorkModeInputBuilder()