import io.lighty.core.controller.api.AbstractLightyModule;
import io.lighty.core.controller.api.LightyServices;
+
import java.util.Arrays;
import java.util.List;
-import org.opendaylight.mdsal.binding.api.NotificationService;
+
import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperationsImpl;
import org.opendaylight.transportpce.tapi.impl.TapiProvider;
import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
-import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelServiceImpl;
import org.opendaylight.transportpce.tapi.topology.TapiNetworkUtilsImpl;
-import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
-import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
import org.opendaylight.transportpce.tapi.utils.TapiLink;
import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl;
-import org.opendaylight.transportpce.tapi.utils.TapiListener;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
if (activateTapi) {
LOG.info("Creating tapi beans ...");
TapiLink tapiLink = new TapiLinkImpl(networkTransaction);
- TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
- .getBindingDataBroker(), lightyServices.getBindingNotificationPublishService());
- TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
- TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(
- lightyServices.getBindingDataBroker());
- TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
- networkTransaction, tapiLink);
+ new TapiNetworkUtilsImpl(networkTransaction, tapiLink);
TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(networkTransaction,
deviceTransactionManager, tapiLink, lightyServices.getBindingNotificationPublishService());
- TapiNetconfTopologyListener tapiNetConfTopologyListener =
- new TapiNetconfTopologyListener(tapiNetworkModelService);
- TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
- TapiPortMappingListener tapiPortMappingListener =
- new TapiPortMappingListener(tapiNetworkModelService);
TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl =
new TapiNetworkModelListenerImpl(networkTransaction,
lightyServices.getBindingNotificationPublishService());
tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
- tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl,
- tapiPceListenerImpl, tapiRendererListenerImpl, tapiServiceHandlerListener,
- lightyServices.getNotificationService(), orLinkListener, tapiNetworkModelListenerImpl);
+ tapiNetworkModelListenerImpl, tapiLink, tapiNetworkModelService);
+
}
if (activateNbiNotification) {
LOG.info("Creating nbi-notifications beans ...");
protected boolean initProcedure() {
if (tapiProvider != null) {
LOG.info("Initializing tapi provider ...");
- tapiProvider.init();
}
if (nbiNotificationsProvider != null) {
LOG.info("Initializing nbi-notifications provider ...");
private TapiProvider initTapi(LightyServices lightyServices, OrgOpenroadmServiceService servicehandler,
NetworkTransactionService networkTransactionService,
ServiceDataStoreOperations serviceDataStoreOperations,
- TapiNetconfTopologyListener tapiNetConfTopologyListener,
- TapiPortMappingListener tapiPortMappingListener,
- TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl,
- TapiPceListenerImpl pceListenerImpl, TapiRendererListenerImpl rendererListenerImpl,
- TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
- NotificationService notificationService, TapiOrLinkListener orLinkListener,
- TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl) {
+ TapiNetworkModelListenerImpl tapiNetworkModelListenerImpl,
+ TapiLink tapiLink, TapiNetworkModelService tapiNetworkModelService) {
+ TransportpceTapinetworkutilsService tapiNetworkUtils = new TapiNetworkUtilsImpl(networkTransactionService,
+ tapiLink);
return new TapiProvider(lightyServices.getBindingDataBroker(), lightyServices.getRpcProviderService(),
- servicehandler, serviceDataStoreOperations, new TapiListener(), networkTransactionService,
- tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, pceListenerImpl,
- rendererListenerImpl, serviceHandlerListenerImpl, notificationService, orLinkListener,
- tapiNetworkModelListenerImpl);
+ lightyServices.getNotificationService(), lightyServices.getBindingNotificationPublishService(),
+ networkTransactionService, servicehandler, serviceDataStoreOperations, tapiNetworkUtils,
+ tapiNetworkModelListenerImpl, tapiNetworkModelService);
}
private RendererProvider initRenderer(LightyServices lightyServices, TransportpceOlmService olmPowerServiceRpc,
package org.opendaylight.transportpce.tapi.impl;
import java.util.HashMap;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.api.DataBroker;
import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.mdsal.binding.api.NotificationService;
import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
+import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
import org.opendaylight.transportpce.tapi.topology.TapiTopologyImpl;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
* @author Gilles Thouenon (gilles.thouenon@orange.com) on behalf of Orange
*
*/
+@Component
public class TapiProvider {
private static final Logger LOG = LoggerFactory.getLogger(TapiProvider.class);
.child(Link.class);
private final DataBroker dataBroker;
private final RpcProviderService rpcProviderService;
+ private final NotificationService notificationService;
+ private final NetworkTransactionService networkTransactionService;
+ private final OrgOpenroadmServiceService serviceHandler;
+ private final ServiceDataStoreOperations serviceDataStoreOperations;
+ private final TransportpceTapinetworkutilsService tapiNetworkUtils;
+ private TapiNotificationListener tapiNetworkModelListenerImpl;
private ObjectRegistration<TapiConnectivityService> rpcRegistration;
private ObjectRegistration<TransportpceTapinetworkutilsService> tapiNetworkutilsServiceRpcRegistration;
private ListenerRegistration<TapiNetconfTopologyListener> dataTreeChangeListenerRegistration;
private ListenerRegistration<TransportpceRendererListener> rendererlistenerRegistration;
private ListenerRegistration<TransportpceServicehandlerListener> servicehandlerlistenerRegistration;
private ListenerRegistration<TapiNotificationListener> tapinetworkmodellistenerRegistration;
- private final OrgOpenroadmServiceService serviceHandler;
- private final ServiceDataStoreOperations serviceDataStoreOperations;
- private final TapiListener tapiListener;
- private final TapiNetconfTopologyListener topologyListener;
- private final TapiOrLinkListener orLinkListener;
- private TapiPortMappingListener tapiPortMappingListener;
- private final NetworkTransactionService networkTransactionService;
- private final TransportpceTapinetworkutilsService tapiNetworkUtils;
- private TapiPceListenerImpl pceListenerImpl;
- private TapiRendererListenerImpl rendererListenerImpl;
- private TapiServiceHandlerListenerImpl serviceHandlerListenerImpl;
- private final NotificationService notificationService;
- private TapiNotificationListener tapiNetworkModelListenerImpl;
- public TapiProvider(DataBroker dataBroker, RpcProviderService rpcProviderService,
- OrgOpenroadmServiceService serviceHandler,ServiceDataStoreOperations serviceDataStoreOperations,
- TapiListener tapiListener, NetworkTransactionService networkTransactionService,
- TapiNetconfTopologyListener topologyListener, TapiPortMappingListener tapiPortMappingListener,
- TransportpceTapinetworkutilsService tapiNetworkUtils, TapiPceListenerImpl pceListenerImpl,
- TapiRendererListenerImpl rendererListenerImpl, TapiServiceHandlerListenerImpl serviceHandlerListenerImpl,
- NotificationService notificationService, TapiOrLinkListener orLinkListener,
- TapiNotificationListener tapiNetworkModelListenerImpl) {
+ @Activate
+ public TapiProvider(@Reference DataBroker dataBroker,
+ @Reference RpcProviderService rpcProviderService,
+ @Reference NotificationService notificationService,
+ @Reference NotificationPublishService notificationPublishService,
+ @Reference NetworkTransactionService networkTransactionService,
+ @Reference OrgOpenroadmServiceService serviceHandler,
+ @Reference ServiceDataStoreOperations serviceDataStoreOperations,
+ @Reference TransportpceTapinetworkutilsService tapiNetworkUtils,
+ @Reference TapiNotificationListener tapiNetworkModelListenerImpl,
+ @Reference TapiNetworkModelService tapiNetworkModelServiceImpl) {
this.dataBroker = dataBroker;
this.rpcProviderService = rpcProviderService;
+ this.notificationService = notificationService;
+ this.networkTransactionService = networkTransactionService;
this.serviceHandler = serviceHandler;
this.serviceDataStoreOperations = serviceDataStoreOperations;
- this.tapiListener = tapiListener;
- this.networkTransactionService = networkTransactionService;
- this.topologyListener = topologyListener;
- this.tapiPortMappingListener = tapiPortMappingListener;
this.tapiNetworkUtils = tapiNetworkUtils;
- this.pceListenerImpl = pceListenerImpl;
- this.rendererListenerImpl = rendererListenerImpl;
- this.serviceHandlerListenerImpl = serviceHandlerListenerImpl;
- this.notificationService = notificationService;
- this.orLinkListener = orLinkListener;
this.tapiNetworkModelListenerImpl = tapiNetworkModelListenerImpl;
- //this.notificationPublishService = notificationPublishService;
- }
- /**
- * Method called when the blueprint container is created.
- */
- public void init() {
LOG.info("TapiProvider Session Initiated");
TapiContext tapiContext = new TapiContext(this.networkTransactionService);
LOG.info("Empty TAPI context created: {}", tapiContext.getTapiContext());
tapiContext, this.serviceDataStoreOperations);
tapiInitialORMapping.performTopoInitialMapping();
tapiInitialORMapping.performServInitialMapping();
+ TapiPceListenerImpl pceListenerImpl = new TapiPceListenerImpl(dataBroker);
+ TapiRendererListenerImpl rendererListenerImpl = new TapiRendererListenerImpl(dataBroker,
+ notificationPublishService);
TapiConnectivityImpl tapi = new TapiConnectivityImpl(this.serviceHandler, tapiContext, connectivityUtils,
pceListenerImpl, rendererListenerImpl);
rpcRegistration = rpcProviderService.registerRpcImplementation(TapiConnectivityService.class, tapi);
rpcProviderService.registerRpcImplementation(TapiTopologyService.class, topo);
rpcProviderService.registerRpcImplementation(TapiCommonService.class, topo);
+
+ TapiNetconfTopologyListener topologyListener = new TapiNetconfTopologyListener(tapiNetworkModelServiceImpl);
+ TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransactionService);
+ TapiPortMappingListener tapiPortMappingListener = new TapiPortMappingListener(tapiNetworkModelServiceImpl);
dataTreeChangeListenerRegistration1 =
dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
LINK_II), orLinkListener);
tapiNetworkutilsServiceRpcRegistration =
rpcProviderService.registerRpcImplementation(TransportpceTapinetworkutilsService.class,
this.tapiNetworkUtils);
- @NonNull
- InstanceIdentifier<ServiceInterfacePoints> sipIID = InstanceIdentifier.create(ServiceInterfacePoints.class);
- dataBroker.registerDataTreeChangeListener(DataTreeIdentifier.create(
- LogicalDatastoreType.CONFIGURATION, sipIID), tapiListener);
+ TapiListener tapiListener = new TapiListener();
+ dataBroker.registerDataTreeChangeListener(
+ DataTreeIdentifier.create(
+ LogicalDatastoreType.CONFIGURATION,
+ InstanceIdentifier.create(ServiceInterfacePoints.class)),
+ tapiListener);
// Notification Listener
pcelistenerRegistration = notificationService.registerNotificationListener(pceListenerImpl);
rendererlistenerRegistration = notificationService.registerNotificationListener(rendererListenerImpl);
- servicehandlerlistenerRegistration =
- notificationService.registerNotificationListener(serviceHandlerListenerImpl);
- tapinetworkmodellistenerRegistration =
- notificationService.registerNotificationListener(tapiNetworkModelListenerImpl);
+ TapiServiceHandlerListenerImpl serviceHandlerListenerImpl = new TapiServiceHandlerListenerImpl(dataBroker);
+ servicehandlerlistenerRegistration = notificationService
+ .registerNotificationListener(serviceHandlerListenerImpl);
+ tapinetworkmodellistenerRegistration = notificationService
+ .registerNotificationListener(tapiNetworkModelListenerImpl);
}
/**
* Method called when the blueprint container is destroyed.
*/
+ @Deactivate
public void close() {
LOG.info("TapiProvider Session Closed");
if (dataTreeChangeListenerRegistration != null) {
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
-Copyright © 2018 Orange and others. All rights reserved.
-
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html
-
-Author: Gilles Thouenon <gilles.thouenon@orange.com>
--->
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
-
- <reference id="dataBroker"
- interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-
- <reference id="deviceTransactionManager"
- interface="org.opendaylight.transportpce.common.device.DeviceTransactionManager" />
-
- <reference id="notificationService"
- interface="org.opendaylight.mdsal.binding.api.NotificationService"/>
-
- <reference id="notificationPublishService"
- interface="org.opendaylight.mdsal.binding.api.NotificationPublishService"/>
-
- <reference id="rpcProviderService"
- interface="org.opendaylight.mdsal.binding.api.RpcProviderService"/>
-
- <reference id="serviceHandlerService"
- interface="org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService" />
-
- <reference id="networkTransactionImpl"
- interface="org.opendaylight.transportpce.common.network.NetworkTransactionService" />
-
- <reference id="serviceDatastoreOperation"
- interface="org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations" />
- <reference id="tapiLink" interface="org.opendaylight.transportpce.tapi.utils.TapiLink" />
- <reference id="tapiNetworkModelService" interface="org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService" />
- <reference id="tapiNetworkUtilsImpl"
- interface="org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService" />
- <reference id="tapiNetworkModelListenerImpl"
- interface="org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener" />
-
- <bean id="tapiListener"
- class="org.opendaylight.transportpce.tapi.utils.TapiListener">
- </bean>
-
- <bean id="tapiPceListener" class="org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl">
- <argument ref="dataBroker" />
- </bean>
-
- <bean id="tapiRendererListener" class="org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl">
- <argument ref="dataBroker" />
- <argument ref="notificationPublishService" />
- </bean>
-
- <bean id="tapiServiceHandlerListener" class="org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl">
- <argument ref="dataBroker" />
- </bean>
-
- <bean id="tapiNetconfTopologyListener" class="org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener">
- <argument ref="tapiNetworkModelService" />
- </bean>
-
- <bean id="tapiOrLinkListener" class="org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener">
- <argument ref="tapiLink" />
- <argument ref="networkTransactionImpl" />
- </bean>
-
- <bean id="tapiProvider"
- class="org.opendaylight.transportpce.tapi.impl.TapiProvider"
- init-method="init" destroy-method="close">
- <argument ref="dataBroker" />
- <argument ref="rpcProviderService" />
- <argument ref="serviceHandlerService" />
- <argument ref="serviceDatastoreOperation" />
- <argument ref="tapiListener" />
- <argument ref="networkTransactionImpl" />
- <argument ref="tapiNetconfTopologyListener" />
- <argument ref="tapiPortMappingListener" />
- <argument ref="tapiNetworkUtilsImpl" />
- <argument ref="tapiPceListener" />
- <argument ref="tapiRendererListener" />
- <argument ref="tapiServiceHandlerListener" />
- <argument ref="notificationService" />
- <argument ref="tapiOrLinkListener" />
- <argument ref="tapiNetworkModelListenerImpl" />
- </bean>
-
- <bean id="tapiPortMappingListener" class="org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener">
- <argument ref="tapiNetworkModelService" />
- </bean>
-</blueprint>
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationService;
import org.opendaylight.mdsal.binding.api.RpcProviderService;
import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
import org.opendaylight.transportpce.common.network.NetworkTransactionService;
import org.opendaylight.transportpce.servicehandler.service.ServiceDataStoreOperations;
import org.opendaylight.transportpce.tapi.impl.TapiProvider;
-import org.opendaylight.transportpce.tapi.listeners.TapiNetworkModelListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiPceListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiRendererListenerImpl;
-import org.opendaylight.transportpce.tapi.listeners.TapiServiceHandlerListenerImpl;
-import org.opendaylight.transportpce.tapi.topology.TapiNetconfTopologyListener;
-import org.opendaylight.transportpce.tapi.topology.TapiOrLinkListener;
-import org.opendaylight.transportpce.tapi.topology.TapiPortMappingListener;
-import org.opendaylight.transportpce.tapi.utils.TapiListener;
+import org.opendaylight.transportpce.tapi.topology.TapiNetworkModelService;
import org.opendaylight.transportpce.test.AbstractTest;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408.TransportpceTapinetworkutilsService;
import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OrgOpenroadmServiceService;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.TapiCommonService;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.TapiConnectivityService;
+import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.TapiNotificationListener;
import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.TapiTopologyService;
@ExtendWith(MockitoExtension.class)
@Mock
private RpcProviderService rpcProviderRegistry;
@Mock
+ private NotificationService notificationService;
+ @Mock
+ private NotificationPublishService notificationPublishService;
+ @Mock
private OrgOpenroadmServiceService serviceHandler;
@Mock
private ServiceDataStoreOperations serviceDataStoreOperations;
@Mock
- private TapiListener tapiListener;
- @Mock
private TransportpceTapinetworkutilsService tapiNetworkUtils;
@Mock
- private TapiPortMappingListener tapiPortMappingListener;
- @Mock
- private TapiNetconfTopologyListener topologyListener;
- @Mock
- private TapiOrLinkListener orLinkListener;
+ private TapiNotificationListener tapiNetworkModelListenerImpl;
@Mock
- private TapiPceListenerImpl pceListenerImpl;
- @Mock
- private TapiRendererListenerImpl rendererListenerImpl;
- @Mock
- private TapiServiceHandlerListenerImpl serviceHandlerListenerImpl;
- @Mock
- private TapiNetworkModelListenerImpl networkModelListener;
-
+ private TapiNetworkModelService tapiNetworkModelServiceImpl;
@BeforeAll
static void setUp() {
@Test
void testInitRegisterTapiToRpcRegistry() {
- TapiProvider provider = new TapiProvider(getDataBroker(), rpcProviderRegistry, serviceHandler,
- serviceDataStoreOperations, tapiListener, networkTransactionService, topologyListener,
- tapiPortMappingListener, tapiNetworkUtils, pceListenerImpl, rendererListenerImpl,
- serviceHandlerListenerImpl, getNotificationService(), orLinkListener, networkModelListener);
-
- provider.init();
+ TapiProvider provider = new TapiProvider(getDataBroker(), rpcProviderRegistry, notificationService,
+ notificationPublishService, networkTransactionService, serviceHandler, serviceDataStoreOperations,
+ tapiNetworkUtils, tapiNetworkModelListenerImpl, tapiNetworkModelServiceImpl);
verify(rpcProviderRegistry, times(1)).registerRpcImplementation(any(), any(TapiConnectivityService.class));
verify(rpcProviderRegistry, times(2)).registerRpcImplementation(any(), any(TapiTopologyService.class));