From 211fb2e30f8e22dd96acdedcc9a18a964e90f201 Mon Sep 17 00:00:00 2001 From: "miroslav.kovac" Date: Tue, 4 Apr 2017 15:27:06 +0200 Subject: [PATCH] Bug 8032 - Initialization in sal failed, disconnecting from device MountpointService is initialized with blueprint and therefore it should never throw null pointer exception anymore. All the binding and dom broker are deleted because they are not needed any more. Change-Id: I9aa9064752043819bc73043f7b667b4ea2c0fd0a Signed-off-by: miroslav.kovac --- .../callhome/mount/BaseCallHomeTopology.java | 22 +++---- .../mount/CallHomeMountDispatcher.java | 44 ++++++------- .../callhome/mount/CallHomeTopology.java | 21 +++---- .../blueprint/callhome-topology.xml | 6 -- .../mount/CallHomeMountDispatcherTest.java | 45 ++++++------- .../blueprint/netconf-topology.xml | 10 ++- .../singleton/impl/MasterSalFacade.java | 29 +++------ .../singleton/impl/NetconfNodeManager.java | 17 +++-- .../impl/NetconfTopologyContext.java | 18 +++--- .../impl/NetconfTopologyManager.java | 29 ++++----- .../impl/RemoteDeviceConnectorImpl.java | 14 +++-- .../singleton/impl/SlaveSalFacade.java | 16 ++--- .../impl/actors/NetconfNodeActor.java | 15 +++-- .../impl/utils/NetconfTopologySetup.java | 34 ---------- .../blueprint/netconf-topology-singleton.xml | 10 ++- .../singleton/impl/NetconfNodeActorTest.java | 15 +++-- .../impl/NetconfTopologyManagerTest.java | 10 ++- .../impl/RemoteDeviceConnectorImplTest.java | 42 ++++++++----- .../TestingRemoteDeviceConnectorImpl.java | 6 +- .../impl/tx/ReadOnlyTransactionTest.java | 10 ++- .../impl/tx/WriteOnlyTransactionTest.java | 5 +- .../topology/AbstractNetconfTopology.java | 16 ++--- .../topology/impl/NetconfTopologyImpl.java | 25 ++++---- .../impl/NetconfTopologyImplTest.java | 52 +++++++-------- .../sal/connect/netconf/NetconfDevice.java | 4 +- .../netconf/sal/NetconfDeviceSalFacade.java | 20 ++---- .../netconf/sal/NetconfDeviceSalProvider.java | 63 +++++++------------ .../sal/NetconfDeviceSalFacadeTest.java | 6 +- .../sal/NetconfDeviceSalProviderTest.java | 38 +++++------ 29 files changed, 274 insertions(+), 368 deletions(-) diff --git a/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/BaseCallHomeTopology.java b/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/BaseCallHomeTopology.java index 0b1972a3ef..f2d01b753e 100644 --- a/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/BaseCallHomeTopology.java +++ b/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/BaseCallHomeTopology.java @@ -13,8 +13,6 @@ import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.topology.AbstractNetconfTopology; import org.opendaylight.netconf.topology.api.SchemaRepositoryProvider; @@ -23,17 +21,15 @@ abstract class BaseCallHomeTopology extends AbstractNetconfTopology { protected DOMMountPointService mountPointService = null; - BaseCallHomeTopology(String topologyId, NetconfClientDispatcher clientDispatcher, - BindingAwareBroker bindingAwareBroker, - Broker domBroker, - EventExecutor eventExecutor, - ScheduledThreadPool keepaliveExecutor, - ThreadPool processingExecutor, - SchemaRepositoryProvider schemaRepositoryProvider, - DataBroker dataBroker, - DOMMountPointService mountPointService) { - super(topologyId, clientDispatcher, bindingAwareBroker, domBroker, eventExecutor, keepaliveExecutor, - processingExecutor, schemaRepositoryProvider, dataBroker); + BaseCallHomeTopology(final String topologyId, final NetconfClientDispatcher clientDispatcher, + final EventExecutor eventExecutor, + final ScheduledThreadPool keepaliveExecutor, + final ThreadPool processingExecutor, + final SchemaRepositoryProvider schemaRepositoryProvider, + final DataBroker dataBroker, + final DOMMountPointService mountPointService) { + super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor, + processingExecutor, schemaRepositoryProvider, dataBroker, mountPointService); this.mountPointService = mountPointService; } } diff --git a/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcher.java b/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcher.java index ee1790ce45..2241d6995a 100644 --- a/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcher.java +++ b/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcher.java @@ -16,8 +16,6 @@ import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.callhome.mount.CallHomeMountSessionContext.CloseCallback; import org.opendaylight.netconf.callhome.protocol.CallHomeChannelActivator; import org.opendaylight.netconf.callhome.protocol.CallHomeNetconfSubsystemListener; @@ -38,12 +36,10 @@ public class CallHomeMountDispatcher implements NetconfClientDispatcher, CallHom private final static Logger LOG = LoggerFactory.getLogger(CallHomeMountDispatcher.class); private final String topologyId; - private final BindingAwareBroker bindingAwareBroker; private final EventExecutor eventExecutor; private final ScheduledThreadPool keepaliveExecutor; private final ThreadPool processingExecutor; private final SchemaRepositoryProvider schemaRepositoryProvider; - private final org.opendaylight.controller.sal.core.api.Broker domBroker; private final CallHomeMountSessionManager sessionManager; private final DataBroker dataBroker; private final DOMMountPointService mountService; @@ -52,44 +48,42 @@ public class CallHomeMountDispatcher implements NetconfClientDispatcher, CallHom private final CloseCallback onCloseHandler = new CloseCallback() { @Override - public void onClosed(CallHomeMountSessionContext deviceContext) { + public void onClosed(final CallHomeMountSessionContext deviceContext) { LOG.info("Removing {} from Netconf Topology.", deviceContext.getId()); topology.disconnectNode(deviceContext.getId()); } }; - public CallHomeMountDispatcher(String topologyId, BindingAwareBroker bindingAwareBroker, - EventExecutor eventExecutor, - ScheduledThreadPool keepaliveExecutor, - ThreadPool processingExecutor, - SchemaRepositoryProvider schemaRepositoryProvider, - Broker domBroker, DataBroker dataBroker, - DOMMountPointService mountService) { + public CallHomeMountDispatcher(final String topologyId, + final EventExecutor eventExecutor, + final ScheduledThreadPool keepaliveExecutor, + final ThreadPool processingExecutor, + final SchemaRepositoryProvider schemaRepositoryProvider, + final DataBroker dataBroker, + final DOMMountPointService mountService) { this.topologyId = topologyId; - this.bindingAwareBroker = bindingAwareBroker; this.eventExecutor = eventExecutor; this.keepaliveExecutor = keepaliveExecutor; this.processingExecutor = processingExecutor; this.schemaRepositoryProvider = schemaRepositoryProvider; - this.domBroker = domBroker; this.sessionManager = new CallHomeMountSessionManager(); this.dataBroker = dataBroker; this.mountService = mountService; } @Override - public Future createClient(NetconfClientConfiguration clientConfiguration) { + public Future createClient(final NetconfClientConfiguration clientConfiguration) { return activateChannel(clientConfiguration); } @Override - public Future createReconnectingClient(NetconfReconnectingClientConfiguration clientConfiguration) { + public Future createReconnectingClient(final NetconfReconnectingClientConfiguration clientConfiguration) { return activateChannel(clientConfiguration); } - private Future activateChannel(NetconfClientConfiguration conf) { - InetSocketAddress remoteAddr = conf.getAddress(); - CallHomeMountSessionContext context = getSessionManager().getByAddress(remoteAddr); + private Future activateChannel(final NetconfClientConfiguration conf) { + final InetSocketAddress remoteAddr = conf.getAddress(); + final CallHomeMountSessionContext context = getSessionManager().getByAddress(remoteAddr); LOG.info("Activating NETCONF channel for ip {} device context {}", remoteAddr, context); if (context == null) { return new FailedFuture<>(eventExecutor, new NullPointerException()); @@ -98,16 +92,16 @@ public class CallHomeMountDispatcher implements NetconfClientDispatcher, CallHom } void createTopology() { - this.topology = new CallHomeTopology(topologyId, this, bindingAwareBroker, domBroker, eventExecutor, + this.topology = new CallHomeTopology(topologyId, this, eventExecutor, keepaliveExecutor, processingExecutor, schemaRepositoryProvider, dataBroker, mountService); } @Override - public void onNetconfSubsystemOpened(CallHomeProtocolSessionContext session, - CallHomeChannelActivator activator) { - CallHomeMountSessionContext deviceContext = getSessionManager().createSession(session, activator, onCloseHandler); - NodeId nodeId = deviceContext.getId(); - Node configNode = deviceContext.getConfigNode(); + public void onNetconfSubsystemOpened(final CallHomeProtocolSessionContext session, + final CallHomeChannelActivator activator) { + final CallHomeMountSessionContext deviceContext = getSessionManager().createSession(session, activator, onCloseHandler); + final NodeId nodeId = deviceContext.getId(); + final Node configNode = deviceContext.getConfigNode(); LOG.info("Provisioning fake config {}", configNode); topology.connectNode(nodeId, configNode); } diff --git a/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeTopology.java b/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeTopology.java index fc774b0a81..71a7af1340 100644 --- a/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeTopology.java +++ b/netconf/callhome-provider/src/main/java/org/opendaylight/netconf/callhome/mount/CallHomeTopology.java @@ -13,8 +13,6 @@ import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; @@ -25,21 +23,18 @@ import org.opendaylight.netconf.topology.api.SchemaRepositoryProvider; public class CallHomeTopology extends BaseCallHomeTopology { - public CallHomeTopology(String topologyId, NetconfClientDispatcher clientDispatcher, - BindingAwareBroker bindingAwareBroker, - Broker domBroker, EventExecutor eventExecutor, - ScheduledThreadPool keepaliveExecutor, ThreadPool processingExecutor, - SchemaRepositoryProvider schemaRepositoryProvider, - DataBroker dataBroker, DOMMountPointService mountPointService) { - super(topologyId, clientDispatcher, bindingAwareBroker, domBroker, eventExecutor, + public CallHomeTopology(final String topologyId, final NetconfClientDispatcher clientDispatcher, + final EventExecutor eventExecutor, + final ScheduledThreadPool keepaliveExecutor, final ThreadPool processingExecutor, + final SchemaRepositoryProvider schemaRepositoryProvider, + final DataBroker dataBroker, final DOMMountPointService mountPointService) { + super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor, processingExecutor, schemaRepositoryProvider, dataBroker, mountPointService); } @Override - protected RemoteDeviceHandler createSalFacade(RemoteDeviceId id, - Broker domBroker, - BindingAwareBroker bindingBroker) { - return new NetconfDeviceSalFacade(id, domBroker, bindingAwareBroker); + protected RemoteDeviceHandler createSalFacade(final RemoteDeviceId id) { + return new NetconfDeviceSalFacade(id, mountPointService, dataBroker); } } diff --git a/netconf/callhome-provider/src/main/resources/org/opendaylight/blueprint/callhome-topology.xml b/netconf/callhome-provider/src/main/resources/org/opendaylight/blueprint/callhome-topology.xml index 831980c33e..d97360476e 100755 --- a/netconf/callhome-provider/src/main/resources/org/opendaylight/blueprint/callhome-topology.xml +++ b/netconf/callhome-provider/src/main/resources/org/opendaylight/blueprint/callhome-topology.xml @@ -10,16 +10,12 @@ xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true"> - - @@ -42,12 +38,10 @@ - - diff --git a/netconf/callhome-provider/src/test/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcherTest.java b/netconf/callhome-provider/src/test/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcherTest.java index c426471997..cca8f5de3d 100644 --- a/netconf/callhome-provider/src/test/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcherTest.java +++ b/netconf/callhome-provider/src/test/java/org/opendaylight/netconf/callhome/mount/CallHomeMountDispatcherTest.java @@ -11,8 +11,8 @@ package org.opendaylight.netconf.callhome.mount; import static org.junit.Assert.assertFalse; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -20,15 +20,12 @@ import io.netty.util.concurrent.EventExecutor; import io.netty.util.concurrent.Future; import java.net.InetSocketAddress; import java.net.UnknownHostException; - import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.api.messages.NetconfHelloMessageAdditionalHeader; import org.opendaylight.netconf.callhome.protocol.CallHomeChannelActivator; import org.opendaylight.netconf.callhome.protocol.CallHomeProtocolSessionContext; @@ -44,12 +41,10 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. public class CallHomeMountDispatcherTest { private String topologyId; - private BindingAwareBroker mockBroker; private EventExecutor mockExecutor; private ScheduledThreadPool mockKeepAlive; private ThreadPool mockProcessingExecutor; private SchemaRepositoryProvider mockSchemaRepoProvider; - private Broker mockDomBroker; private CallHomeMountDispatcher instance; private DataBroker mockDataBroker; @@ -62,20 +57,18 @@ public class CallHomeMountDispatcherTest { @Before public void setup() { topologyId = ""; - mockBroker = mock(BindingAwareBroker.class); mockExecutor = mock(EventExecutor.class); mockKeepAlive = mock(ScheduledThreadPool.class); mockProcessingExecutor = mock(ThreadPool.class); mockSchemaRepoProvider = mock(SchemaRepositoryProvider.class); - mockDomBroker = mock(Broker.class); mockDataBroker = mock(DataBroker.class); mockMount = mock(DOMMountPointService.class); mockSessMgr = mock(CallHomeMountSessionManager.class); mockTopology = mock(CallHomeTopology.class); mockProtoSess = mock(CallHomeProtocolSessionContext.class); - instance = new CallHomeMountDispatcher(topologyId, mockBroker, mockExecutor, mockKeepAlive, - mockProcessingExecutor, mockSchemaRepoProvider, mockDomBroker, mockDataBroker, mockMount) { + instance = new CallHomeMountDispatcher(topologyId, mockExecutor, mockKeepAlive, + mockProcessingExecutor, mockSchemaRepoProvider, mockDataBroker, mockMount) { @Override public CallHomeMountSessionManager getSessionManager() { return mockSessMgr; @@ -87,15 +80,15 @@ public class CallHomeMountDispatcherTest { }; } - NetconfClientConfiguration someConfiguration(InetSocketAddress address) { + NetconfClientConfiguration someConfiguration(final InetSocketAddress address) { // NetconfClientConfiguration has mostly final methods, making it un-mock-able - NetconfClientConfiguration.NetconfClientProtocol protocol = + final NetconfClientConfiguration.NetconfClientProtocol protocol = NetconfClientConfiguration.NetconfClientProtocol.SSH; - NetconfHelloMessageAdditionalHeader additionalHeader = mock(NetconfHelloMessageAdditionalHeader.class); - NetconfClientSessionListener sessionListener = mock(NetconfClientSessionListener.class); - ReconnectStrategy reconnectStrategy = mock(ReconnectStrategy.class); - AuthenticationHandler authHandler = mock(AuthenticationHandler.class); + final NetconfHelloMessageAdditionalHeader additionalHeader = mock(NetconfHelloMessageAdditionalHeader.class); + final NetconfClientSessionListener sessionListener = mock(NetconfClientSessionListener.class); + final ReconnectStrategy reconnectStrategy = mock(ReconnectStrategy.class); + final AuthenticationHandler authHandler = mock(AuthenticationHandler.class); return NetconfClientConfigurationBuilder.create().withProtocol(protocol).withAddress(address) .withConnectionTimeoutMillis(0).withAdditionalHeader(additionalHeader) @@ -106,11 +99,11 @@ public class CallHomeMountDispatcherTest { @Test public void canCreateASessionFromAConfiguration() { // given - CallHomeMountSessionContext mockContext = mock(CallHomeMountSessionContext.class); - InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123); + final CallHomeMountSessionContext mockContext = mock(CallHomeMountSessionContext.class); + final InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123); doReturn(mockContext).when(mockSessMgr).getByAddress(eq(someAddress)); - NetconfClientConfiguration someCfg = someConfiguration(someAddress); + final NetconfClientConfiguration someCfg = someConfiguration(someAddress); // when instance.createClient(someCfg); // then @@ -120,10 +113,10 @@ public class CallHomeMountDispatcherTest { @Test public void noSessionIsCreatedWithoutAContextAvailableForAGivenAddress() { // given - InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123); - NetconfClientConfiguration someCfg = someConfiguration(someAddress); + final InetSocketAddress someAddress = InetSocketAddress.createUnresolved("1.2.3.4", 123); + final NetconfClientConfiguration someCfg = someConfiguration(someAddress); // when - Future future = instance.createClient(someCfg); + final Future future = instance.createClient(someCfg); // then assertFalse(future.isSuccess()); } @@ -131,14 +124,14 @@ public class CallHomeMountDispatcherTest { @Test public void nodeIsInsertedIntoTopologyWhenSubsystemIsOpened() throws UnknownHostException { // given - NodeId mockNodeId = mock(NodeId.class); - Node mockNode = mock(Node.class); - CallHomeMountSessionContext mockDevCtxt = mock(CallHomeMountSessionContext.class); + final NodeId mockNodeId = mock(NodeId.class); + final Node mockNode = mock(Node.class); + final CallHomeMountSessionContext mockDevCtxt = mock(CallHomeMountSessionContext.class); doReturn(mockNodeId).when(mockDevCtxt).getId(); doReturn(mockNode).when(mockDevCtxt).getConfigNode(); doReturn(mockDevCtxt).when(mockSessMgr).createSession(any(CallHomeProtocolSessionContext.class), any(CallHomeChannelActivator.class), any(CallHomeMountSessionContext.CloseCallback.class)); - CallHomeChannelActivator activator = mock(CallHomeChannelActivator.class); + final CallHomeChannelActivator activator = mock(CallHomeChannelActivator.class); instance.createTopology(); // when instance.onNetconfSubsystemOpened(mockProtoSess, activator); diff --git a/netconf/netconf-topology-config/src/main/resources/org/opendaylight/blueprint/netconf-topology.xml b/netconf/netconf-topology-config/src/main/resources/org/opendaylight/blueprint/netconf-topology.xml index 8728ce2f4e..11e922f34d 100755 --- a/netconf/netconf-topology-config/src/main/resources/org/opendaylight/blueprint/netconf-topology.xml +++ b/netconf/netconf-topology-config/src/main/resources/org/opendaylight/blueprint/netconf-topology.xml @@ -13,21 +13,20 @@ - - + @@ -38,13 +37,12 @@ destroy-method="close"> - - + diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java index 1087df67f3..3b04d0fa95 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/MasterSalFacade.java @@ -18,11 +18,11 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import java.util.List; import java.util.stream.Collectors; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMNotification; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; @@ -45,37 +45,26 @@ class MasterSalFacade implements AutoCloseable, RemoteDeviceHandler dataChangeListenerRegistration; private RemoteDeviceId id; - private final SchemaSourceRegistry schemaRegistry; - private final SchemaRepository schemaRepository; private ActorRef slaveActorRef; - private final Timeout actorResponseWaitTime; + NetconfNodeManager(final NetconfTopologySetup setup, - final RemoteDeviceId id, final Timeout actorResponseWaitTime) { + final RemoteDeviceId id, final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { this.setup = setup; this.id = id; this.schemaRegistry = setup.getSchemaResourcesDTO().getSchemaRegistry(); this.schemaRepository = setup.getSchemaResourcesDTO().getSchemaRepository(); this.actorResponseWaitTime = actorResponseWaitTime; + this.mountPointService = mountPointService; } @Override @@ -134,7 +141,7 @@ class NetconfNodeManager private void createActorRef() { if (slaveActorRef == null) { slaveActorRef = setup.getActorSystem().actorOf(NetconfNodeActor.props(setup, id, schemaRegistry, - schemaRepository, actorResponseWaitTime), id.getName()); + schemaRepository, actorResponseWaitTime, mountPointService), id.getName()); } } diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java index 8b2ccf66af..31a7f64d6c 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java @@ -19,6 +19,7 @@ import com.google.common.base.Preconditions; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import javax.annotation.Nonnull; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService; import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; @@ -38,28 +39,30 @@ class NetconfTopologyContext implements ClusterSingletonService { private final ServiceGroupIdentifier serviceGroupIdent; private final Timeout actorResponseWaitTime; + private final DOMMountPointService mountService; + private NetconfTopologySetup netconfTopologyDeviceSetup; private RemoteDeviceId remoteDeviceId; private RemoteDeviceConnector remoteDeviceConnector; private NetconfNodeManager netconfNodeManager; + private ActorRef masterActorRef; private boolean finalClose = false; private boolean closed = false; private boolean isMaster; - private ActorRef masterActorRef; - NetconfTopologyContext(final NetconfTopologySetup netconfTopologyDeviceSetup, final ServiceGroupIdentifier serviceGroupIdent, - final Timeout actorResponseWaitTime) { + final Timeout actorResponseWaitTime, final DOMMountPointService mountService) { this.netconfTopologyDeviceSetup = Preconditions.checkNotNull(netconfTopologyDeviceSetup); this.serviceGroupIdent = serviceGroupIdent; this.actorResponseWaitTime = actorResponseWaitTime; + this.mountService = mountService; remoteDeviceId = NetconfTopologyUtils.createRemoteDeviceId(netconfTopologyDeviceSetup.getNode().getNodeId(), netconfTopologyDeviceSetup.getNode().getAugmentation(NetconfNode.class)); remoteDeviceConnector = new RemoteDeviceConnectorImpl(netconfTopologyDeviceSetup, remoteDeviceId, - actorResponseWaitTime); + actorResponseWaitTime, mountService); netconfNodeManager = createNodeDeviceManager(); } @@ -80,7 +83,7 @@ class NetconfTopologyContext implements ClusterSingletonService { final String masterAddress = Cluster.get(netconfTopologyDeviceSetup.getActorSystem()).selfAddress().toString(); masterActorRef = netconfTopologyDeviceSetup.getActorSystem().actorOf(NetconfNodeActor.props( netconfTopologyDeviceSetup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY, DEFAULT_SCHEMA_REPOSITORY, - actorResponseWaitTime), + actorResponseWaitTime, mountService), NetconfTopologyUtils.createMasterActorName(remoteDeviceId.getName(), masterAddress)); remoteDeviceConnector.startRemoteDeviceConnection(masterActorRef); @@ -108,7 +111,7 @@ class NetconfTopologyContext implements ClusterSingletonService { private NetconfNodeManager createNodeDeviceManager() { final NetconfNodeManager ndm = - new NetconfNodeManager(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime); + new NetconfNodeManager(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime, mountService); ndm.registerDataTreeChangeListener(netconfTopologyDeviceSetup.getTopologyId(), netconfTopologyDeviceSetup.getNode().getKey()); @@ -140,7 +143,8 @@ class NetconfTopologyContext implements ClusterSingletonService { if (!isMaster) { netconfNodeManager.refreshDevice(netconfTopologyDeviceSetup, remoteDeviceId); } - remoteDeviceConnector = new RemoteDeviceConnectorImpl(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime); + remoteDeviceConnector = new RemoteDeviceConnectorImpl(netconfTopologyDeviceSetup, remoteDeviceId, + actorResponseWaitTime, mountService); if (isMaster) { final Future future = Patterns.ask(masterActorRef, new RefreshSetupMasterActorData( diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java index 0ca6325f62..1a9816c3f7 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManager.java @@ -29,9 +29,8 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier; @@ -65,40 +64,38 @@ public class NetconfTopologyManager private final Map, ClusterSingletonServiceRegistration> clusterRegistrations = new HashMap<>(); - private ListenerRegistration dataChangeListenerRegistration; - private final DataBroker dataBroker; private final RpcProviderRegistry rpcProviderRegistry; private final ClusterSingletonServiceProvider clusterSingletonServiceProvider; - private final BindingAwareBroker bindingAwareBroker; private final ScheduledThreadPool keepaliveExecutor; private final ThreadPool processingExecutor; - private final Broker domBroker; private final ActorSystem actorSystem; private final EventExecutor eventExecutor; private final NetconfClientDispatcher clientDispatcher; private final String topologyId; private final Duration writeTxIdleTimeout; + private final DOMMountPointService mountPointService; + + private ListenerRegistration dataChangeListenerRegistration; public NetconfTopologyManager(final DataBroker dataBroker, final RpcProviderRegistry rpcProviderRegistry, final ClusterSingletonServiceProvider clusterSingletonServiceProvider, - final BindingAwareBroker bindingAwareBroker, final ScheduledThreadPool keepaliveExecutor, final ThreadPool processingExecutor, - final Broker domBroker, final ActorSystemProvider actorSystemProvider, + final ActorSystemProvider actorSystemProvider, final EventExecutor eventExecutor, final NetconfClientDispatcher clientDispatcher, - final String topologyId, final Config config) { + final String topologyId, final Config config, + final DOMMountPointService mountPointService) { this.dataBroker = Preconditions.checkNotNull(dataBroker); this.rpcProviderRegistry = Preconditions.checkNotNull(rpcProviderRegistry); this.clusterSingletonServiceProvider = Preconditions.checkNotNull(clusterSingletonServiceProvider); - this.bindingAwareBroker = Preconditions.checkNotNull(bindingAwareBroker); this.keepaliveExecutor = Preconditions.checkNotNull(keepaliveExecutor); this.processingExecutor = Preconditions.checkNotNull(processingExecutor); - this.domBroker = Preconditions.checkNotNull(domBroker); this.actorSystem = Preconditions.checkNotNull(actorSystemProvider).getActorSystem(); this.eventExecutor = Preconditions.checkNotNull(eventExecutor); this.clientDispatcher = Preconditions.checkNotNull(clientDispatcher); this.topologyId = Preconditions.checkNotNull(topologyId); this.writeTxIdleTimeout = Duration.apply(config.getWriteTransactionIdleTimeout(), TimeUnit.SECONDS); + this.mountPointService = mountPointService; } // Blueprint init method @@ -155,9 +152,9 @@ public class NetconfTopologyManager final NetconfTopologyContext newNetconfTopologyContext = new NetconfTopologyContext(createSetup(instanceIdentifier, node), serviceGroupIdent, - actorResponseWaitTime); + actorResponseWaitTime, mountPointService); - final ClusterSingletonServiceRegistration clusterSingletonServiceRegistration = + final ClusterSingletonServiceRegistration clusterSingletonServiceRegistration = clusterSingletonServiceProvider.registerClusterSingletonService(newNetconfTopologyContext); clusterRegistrations.put(instanceIdentifier, clusterSingletonServiceRegistration); @@ -219,8 +216,8 @@ public class NetconfTopologyManager LOG.debug("Registering datastore listener"); return dataBroker.registerDataTreeChangeListener( - new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, - NetconfTopologyUtils.createTopologyListPath(topologyId).child(Node.class)), this); + new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, + NetconfTopologyUtils.createTopologyListPath(topologyId).child(Node.class)), this); } private void initTopology(final WriteTransaction wtx, final LogicalDatastoreType datastoreType, final String topologyId) { @@ -240,10 +237,8 @@ public class NetconfTopologyManager .setInstanceIdentifier(instanceIdentifier) .setRpcProviderRegistry(rpcProviderRegistry) .setNode(node) - .setBindingAwareBroker(bindingAwareBroker) .setActorSystem(actorSystem) .setEventExecutor(eventExecutor) - .setDomBroker(domBroker) .setKeepaliveExecutor(keepaliveExecutor) .setProcessingExecutor(processingExecutor) .setTopologyId(topologyId) diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java index 9a9ad5e357..02f9fe8aba 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImpl.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.client.NetconfClientSessionListener; import org.opendaylight.netconf.client.conf.NetconfClientConfiguration; @@ -69,21 +70,24 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { private static final Logger LOG = LoggerFactory.getLogger(RemoteDeviceConnectorImpl.class); - private final Timeout actorResponseWaitTime; - // Initializes default constant instances for the case when the default schema repository // directory cache/schema is used. private final NetconfTopologySetup netconfTopologyDeviceSetup; private final RemoteDeviceId remoteDeviceId; + private final DOMMountPointService mountService; + private final Timeout actorResponseWaitTime; + private NetconfConnectorDTO deviceCommunicatorDTO; public RemoteDeviceConnectorImpl(final NetconfTopologySetup netconfTopologyDeviceSetup, - final RemoteDeviceId remoteDeviceId, final Timeout actorResponseWaitTime) { + final RemoteDeviceId remoteDeviceId, final Timeout actorResponseWaitTime, + final DOMMountPointService mountService) { this.netconfTopologyDeviceSetup = Preconditions.checkNotNull(netconfTopologyDeviceSetup); this.remoteDeviceId = remoteDeviceId; this.actorResponseWaitTime = actorResponseWaitTime; + this.mountService = mountService; } @Override @@ -138,8 +142,8 @@ public class RemoteDeviceConnectorImpl implements RemoteDeviceConnector { ? NetconfTopologyUtils.DEFAULT_RECONNECT_ON_CHANGED_SCHEMA : node.isReconnectOnChangedSchema(); RemoteDeviceHandler salFacade = new MasterSalFacade(remoteDeviceId, - netconfTopologyDeviceSetup.getDomBroker(), netconfTopologyDeviceSetup.getBindingAwareBroker(), - netconfTopologyDeviceSetup.getActorSystem(), deviceContextActorRef, actorResponseWaitTime); + netconfTopologyDeviceSetup.getActorSystem(), deviceContextActorRef, actorResponseWaitTime, + mountService, netconfTopologyDeviceSetup.getDataBroker()); if (keepaliveDelay > 0) { LOG.info("{}: Adding keepalive facade.", remoteDeviceId); salFacade = new KeepaliveSalFacade(remoteDeviceId, salFacade, diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java index 92d7e1a36a..ed4a27530c 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/SlaveSalFacade.java @@ -11,8 +11,8 @@ package org.opendaylight.netconf.topology.singleton.impl; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.util.Timeout; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceNotificationService; import org.opendaylight.netconf.sal.connect.netconf.sal.NetconfDeviceSalProvider; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; @@ -26,25 +26,17 @@ public class SlaveSalFacade { private final RemoteDeviceId id; private final NetconfDeviceSalProvider salProvider; - private final ActorSystem actorSystem; private final Timeout actorResponseWaitTime; public SlaveSalFacade(final RemoteDeviceId id, - final Broker domBroker, final ActorSystem actorSystem, - final Timeout actorResponseWaitTime) { + final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { this.id = id; - this.salProvider = new NetconfDeviceSalProvider(id); + this.salProvider = new NetconfDeviceSalProvider(id, mountPointService); this.actorSystem = actorSystem; this.actorResponseWaitTime = actorResponseWaitTime; - - registerToSal(domBroker); - } - - private void registerToSal(final Broker domRegistryDependency) { - domRegistryDependency.registerProvider(salProvider); - } public void registerSlaveMountPoint(final SchemaContext remoteSchemaContext, final DOMRpcService deviceRpc, diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java index fbd0422b69..f04430f666 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/actors/NetconfNodeActor.java @@ -26,6 +26,7 @@ import org.opendaylight.controller.cluster.schema.provider.impl.YangTextSchemaSo import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; @@ -74,6 +75,7 @@ public class NetconfNodeActor extends UntypedActor { private final SchemaRepository schemaRepository; private final Timeout actorResponseWaitTime; private final Duration writeTxIdleTimeout; + private final DOMMountPointService mountPointService; private RemoteDeviceId id; private NetconfTopologySetup setup; @@ -87,20 +89,24 @@ public class NetconfNodeActor extends UntypedActor { public static Props props(final NetconfTopologySetup setup, final RemoteDeviceId id, final SchemaSourceRegistry schemaRegistry, - final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime) { + final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { return Props.create(NetconfNodeActor.class, () -> - new NetconfNodeActor(setup, id, schemaRegistry, schemaRepository, actorResponseWaitTime)); + new NetconfNodeActor(setup, id, schemaRegistry, schemaRepository, actorResponseWaitTime, + mountPointService)); } private NetconfNodeActor(final NetconfTopologySetup setup, final RemoteDeviceId id, final SchemaSourceRegistry schemaRegistry, - final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime) { + final SchemaRepository schemaRepository, final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { this.setup = setup; this.id = id; this.schemaRegistry = schemaRegistry; this.schemaRepository = schemaRepository; this.actorResponseWaitTime = actorResponseWaitTime; this.writeTxIdleTimeout = setup.getIdleTimeout(); + this.mountPointService = mountPointService; } @Override @@ -225,7 +231,8 @@ public class NetconfNodeActor extends UntypedActor { slaveSalManager.close(); } closeSchemaSourceRegistrations(); - slaveSalManager = new SlaveSalFacade(id, setup.getDomBroker(), setup.getActorSystem(), actorResponseWaitTime); + slaveSalManager = new SlaveSalFacade(id, setup.getActorSystem(), actorResponseWaitTime, + mountPointService); final CheckedFuture remoteSchemaContext = getSchemaContext(masterReference); diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologySetup.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologySetup.java index be57ce35aa..cee8c0d807 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologySetup.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/utils/NetconfTopologySetup.java @@ -13,9 +13,7 @@ import io.netty.util.concurrent.EventExecutor; import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.sal.connect.netconf.NetconfDevice; @@ -30,10 +28,8 @@ public class NetconfTopologySetup { private final DataBroker dataBroker; private final InstanceIdentifier instanceIdentifier; private final Node node; - private final BindingAwareBroker bindingAwareBroker; private final ScheduledThreadPool keepaliveExecutor; private final ThreadPool processingExecutor; - private final Broker domBroker; private final ActorSystem actorSystem; private final EventExecutor eventExecutor; private final NetconfClientDispatcher netconfClientDispatcher; @@ -47,10 +43,8 @@ public class NetconfTopologySetup { this.dataBroker = builder.getDataBroker(); this.instanceIdentifier = builder.getInstanceIdentifier(); this.node = builder.getNode(); - this.bindingAwareBroker = builder.getBindingAwareBroker(); this.keepaliveExecutor = builder.getKeepaliveExecutor(); this.processingExecutor = builder.getProcessingExecutor(); - this.domBroker = builder.getDomBroker(); this.actorSystem = builder.getActorSystem(); this.eventExecutor = builder.getEventExecutor(); this.netconfClientDispatcher = builder.getNetconfClientDispatcher(); @@ -79,10 +73,6 @@ public class NetconfTopologySetup { return node; } - public BindingAwareBroker getBindingAwareBroker() { - return bindingAwareBroker; - } - public ThreadPool getProcessingExecutor() { return processingExecutor; } @@ -91,10 +81,6 @@ public class NetconfTopologySetup { return keepaliveExecutor; } - public Broker getDomBroker() { - return domBroker; - } - public ActorSystem getActorSystem() { return actorSystem; } @@ -126,10 +112,8 @@ public class NetconfTopologySetup { private DataBroker dataBroker; private InstanceIdentifier instanceIdentifier; private Node node; - private BindingAwareBroker bindingAwareBroker; private ScheduledThreadPool keepaliveExecutor; private ThreadPool processingExecutor; - private Broker domBroker; private ActorSystem actorSystem; private EventExecutor eventExecutor; private String topologyId; @@ -190,15 +174,6 @@ public class NetconfTopologySetup { return new NetconfTopologySetup(this); } - private BindingAwareBroker getBindingAwareBroker() { - return bindingAwareBroker; - } - - public NetconfTopologySetupBuilder setBindingAwareBroker(final BindingAwareBroker bindingAwareBroker) { - this.bindingAwareBroker = bindingAwareBroker; - return this; - } - private ScheduledThreadPool getKeepaliveExecutor() { return keepaliveExecutor; } @@ -217,15 +192,6 @@ public class NetconfTopologySetup { return this; } - private Broker getDomBroker() { - return domBroker; - } - - public NetconfTopologySetupBuilder setDomBroker(final Broker domBroker) { - this.domBroker = domBroker; - return this; - } - private ActorSystem getActorSystem() { return actorSystem; } diff --git a/netconf/netconf-topology-singleton/src/main/resources/org/opendaylight/blueprint/netconf-topology-singleton.xml b/netconf/netconf-topology-singleton/src/main/resources/org/opendaylight/blueprint/netconf-topology-singleton.xml index 977018f62c..8c60682605 100644 --- a/netconf/netconf-topology-singleton/src/main/resources/org/opendaylight/blueprint/netconf-topology-singleton.xml +++ b/netconf/netconf-topology-singleton/src/main/resources/org/opendaylight/blueprint/netconf-topology-singleton.xml @@ -17,16 +17,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"/> - - + - - + diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java index 02e4440dc2..3bb0125c70 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfNodeActorTest.java @@ -51,12 +51,13 @@ import org.junit.rules.ExpectedException; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.opendaylight.controller.cluster.schema.provider.impl.YangTextSchemaSourceSerializationProxy; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.netconf.topology.singleton.impl.actors.NetconfNodeActor; import org.opendaylight.netconf.topology.singleton.impl.utils.ClusteringRpcException; @@ -103,6 +104,10 @@ public class NetconfNodeActorTest { @Mock private DOMRpcService domRpcService; + @Mock + private DOMMountPointService mountPointService; + @Mock + private DataBroker dataBroker; @Before public void setup() throws UnknownHostException { @@ -113,7 +118,7 @@ public class NetconfNodeActorTest { final NetconfTopologySetup setup = mock(NetconfTopologySetup.class); final Props props = NetconfNodeActor.props(setup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY, - DEFAULT_SCHEMA_REPOSITORY, TIMEOUT); + DEFAULT_SCHEMA_REPOSITORY, TIMEOUT, mountPointService); system = ActorSystem.create(); @@ -191,7 +196,6 @@ public class NetconfNodeActorTest { @Test public void testReceiveRegisterMountpoint() throws Exception { final NetconfTopologySetup setup = mock(NetconfTopologySetup.class); - doReturn(mock(Broker.class)).when(setup).getDomBroker(); final RevisionSourceIdentifier yang1 = RevisionSourceIdentifier.create("yang1"); final RevisionSourceIdentifier yang2 = RevisionSourceIdentifier.create("yang2"); final SchemaSourceRegistry registry = mock(SchemaSourceRegistry.class); @@ -207,7 +211,8 @@ public class NetconfNodeActorTest { Futures.makeChecked(schemaContextFuture, e -> new SchemaResolutionException("fail", e)); doReturn(checkedFuture).when(schemaContextFactory).createSchemaContext(any()); final ActorRef slaveRef = - system.actorOf(NetconfNodeActor.props(setup, remoteDeviceId, registry, schemaRepository, TIMEOUT)); + system.actorOf(NetconfNodeActor.props(setup, remoteDeviceId, registry, schemaRepository, TIMEOUT, + mountPointService)); final List sources = ImmutableList.of(yang1, yang2); slaveRef.tell(new RegisterMountPoint(sources), masterRef); @@ -226,7 +231,7 @@ public class NetconfNodeActorTest { final SchemaRepository schemaRepository = mock(SchemaRepository.class); final SourceIdentifier sourceIdentifier = RevisionSourceIdentifier.create("testID", Optional.absent()); final Props props = NetconfNodeActor.props(mock(NetconfTopologySetup.class), remoteDeviceId, - DEFAULT_SCHEMA_REPOSITORY, schemaRepository, TIMEOUT); + DEFAULT_SCHEMA_REPOSITORY, schemaRepository, TIMEOUT, mountPointService); final ActorRef actorRefSchemaRepo = TestActorRef.create(system, props, "master_mocked_schema_repository"); final ActorContext actorContext = mock(ActorContext.class); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java index 060ed0e987..ffc52a5f46 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyManagerTest.java @@ -40,9 +40,8 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration; import org.opendaylight.netconf.client.NetconfClientDispatcher; @@ -78,18 +77,17 @@ public class NetconfTopologyManagerTest { initMocks(this); final RpcProviderRegistry rpcProviderRegistry = mock(RpcProviderRegistry.class); - final BindingAwareBroker bindingAwareBroker = mock(BindingAwareBroker.class); final ScheduledThreadPool keepaliveExecutor = mock(ScheduledThreadPool.class); final ThreadPool processingExecutor = mock(ThreadPool.class); - final Broker domBroker = mock(Broker.class); final ActorSystemProvider actorSystemProvider = mock(ActorSystemProvider.class); final EventExecutor eventExecutor = mock(EventExecutor.class); final NetconfClientDispatcher clientDispatcher = mock(NetconfClientDispatcher.class); + final DOMMountPointService mountPointService = mock(DOMMountPointService.class); final Config config = new ConfigBuilder().setWriteTransactionIdleTimeout(0).build(); netconfTopologyManager = new NetconfTopologyManager(dataBroker, rpcProviderRegistry, - clusterSingletonServiceProvider, bindingAwareBroker, keepaliveExecutor, processingExecutor, domBroker, - actorSystemProvider, eventExecutor, clientDispatcher, topologyId, config); + clusterSingletonServiceProvider, keepaliveExecutor, processingExecutor, + actorSystemProvider, eventExecutor, clientDispatcher, topologyId, config, mountPointService); } @Test diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java index fbdde9466d..a8df0afd38 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/RemoteDeviceConnectorImplTest.java @@ -11,7 +11,10 @@ package org.opendaylight.netconf.topology.singleton.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -20,6 +23,7 @@ import static org.mockito.MockitoAnnotations.initMocks; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.util.Timeout; +import com.google.common.util.concurrent.Futures; import io.netty.util.concurrent.EventExecutor; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -30,10 +34,13 @@ import org.junit.Test; import org.mockito.Mock; import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; +import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.client.NetconfClientSessionListener; @@ -74,18 +81,12 @@ public class RemoteDeviceConnectorImplTest { @Mock private ClusterSingletonServiceProvider clusterSingletonServiceProvider; - @Mock - private BindingAwareBroker bindingAwareBroker; - @Mock private ScheduledThreadPool keepaliveExecutor; @Mock private ThreadPool processingExecutor; - @Mock - private Broker domBroker; - @Mock private ActorSystem actorSystem; @@ -95,6 +96,15 @@ public class RemoteDeviceConnectorImplTest { @Mock private NetconfClientDispatcher clientDispatcher; + @Mock + private DOMMountPointService mountPointService; + + @Mock + private BindingTransactionChain txChain; + + @Mock + private WriteTransaction writeTx; + private NetconfTopologySetup.NetconfTopologySetupBuilder builder; private RemoteDeviceId remoteDeviceId; @@ -105,14 +115,17 @@ public class RemoteDeviceConnectorImplTest { remoteDeviceId = new RemoteDeviceId(TOPOLOGY_ID, new InetSocketAddress(InetAddress.getByName("127.0.0.1"), 9999)); + doReturn(txChain).when(dataBroker).createTransactionChain(any(TransactionChainListener.class)); + doReturn(writeTx).when(txChain).newWriteOnlyTransaction(); + doNothing().when(writeTx).merge(eq(LogicalDatastoreType.OPERATIONAL), any(), any()); + doReturn("Some object").when(writeTx).getIdentifier(); + doReturn(Futures.immediateCheckedFuture(null)).when(writeTx).submit(); builder = new NetconfTopologySetup.NetconfTopologySetupBuilder(); builder.setDataBroker(dataBroker); builder.setRpcProviderRegistry(rpcProviderRegistry); builder.setClusterSingletonServiceProvider(clusterSingletonServiceProvider); - builder.setBindingAwareBroker(bindingAwareBroker); builder.setKeepaliveExecutor(keepaliveExecutor); builder.setProcessingExecutor(processingExecutor); - builder.setDomBroker(domBroker); builder.setActorSystem(actorSystem); builder.setEventExecutor(eventExecutor); builder.setNetconfClientDispatcher(clientDispatcher); @@ -141,7 +154,8 @@ public class RemoteDeviceConnectorImplTest { final RemoteDeviceHandler salFacade = mock(RemoteDeviceHandler.class); final TestingRemoteDeviceConnectorImpl remoteDeviceConnection = - new TestingRemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, communicator, salFacade, TIMEOUT); + new TestingRemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, communicator, salFacade, TIMEOUT, + mountPointService); final ActorRef masterRef = mock(ActorRef.class); @@ -174,7 +188,7 @@ public class RemoteDeviceConnectorImplTest { final Node node = new NodeBuilder().setNodeId(NODE_ID).addAugmentation(NetconfNode.class, netconfNode).build(); builder.setSchemaResourceDTO(NetconfTopologyUtils.setupSchemaCacheDTO(node)); final RemoteDeviceConnectorImpl remoteDeviceConnection = - new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT); + new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT, mountPointService); final ActorRef masterRef = mock(ActorRef.class); @@ -208,7 +222,7 @@ public class RemoteDeviceConnectorImplTest { builder.setSchemaResourceDTO(NetconfTopologyUtils.setupSchemaCacheDTO(node)); final RemoteDeviceConnectorImpl remoteDeviceConnection = - new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT); + new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT, mountPointService); final ActorRef masterRef = mock(ActorRef.class); @@ -235,7 +249,7 @@ public class RemoteDeviceConnectorImplTest { .build(); final RemoteDeviceConnectorImpl remoteDeviceConnection = - new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT); + new RemoteDeviceConnectorImpl(builder.build(), remoteDeviceId, TIMEOUT, mountPointService); final NetconfReconnectingClientConfiguration defaultClientConfig = remoteDeviceConnection.getClientConfig(listener, testingNode); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/TestingRemoteDeviceConnectorImpl.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/TestingRemoteDeviceConnectorImpl.java index d2a515b1e0..96eb505844 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/TestingRemoteDeviceConnectorImpl.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/TestingRemoteDeviceConnectorImpl.java @@ -14,6 +14,7 @@ import static org.mockito.Mockito.doReturn; import akka.actor.ActorRef; import akka.util.Timeout; import com.google.common.util.concurrent.Futures; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCommunicator; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; @@ -31,8 +32,9 @@ class TestingRemoteDeviceConnectorImpl extends RemoteDeviceConnectorImpl { final RemoteDeviceId remoteDeviceId, final NetconfDeviceCommunicator communicator, final RemoteDeviceHandler salFacade, - final Timeout actorResponseWaitTime) { - super(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime); + final Timeout actorResponseWaitTime, + final DOMMountPointService mountPointService) { + super(netconfTopologyDeviceSetup, remoteDeviceId, actorResponseWaitTime, mountPointService); this.communicator = communicator; this.salFacade = salFacade; } diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ReadOnlyTransactionTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ReadOnlyTransactionTest.java index e90fc345b0..b214a51899 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ReadOnlyTransactionTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/ReadOnlyTransactionTest.java @@ -40,6 +40,7 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.netconf.topology.singleton.impl.ProxyDOMDataBroker; @@ -68,14 +69,17 @@ public class ReadOnlyTransactionTest { private ActorRef masterRef; private ProxyDOMDataBroker slaveDataBroker; private List sourceIdentifiers; + private YangInstanceIdentifier instanceIdentifier; + private LogicalDatastoreType storeType; @Mock private DOMDataBroker deviceDataBroker; @Mock private DOMDataReadOnlyTransaction readTx; @Mock private DOMRpcService domRpcService; - private YangInstanceIdentifier instanceIdentifier; - private LogicalDatastoreType storeType; + @Mock + private DOMMountPointService mountPointService; + @Before public void setup() throws Exception { @@ -88,7 +92,7 @@ public class ReadOnlyTransactionTest { final NetconfTopologySetup setup = mock(NetconfTopologySetup.class); final Props props = NetconfNodeActor.props(setup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY, - DEFAULT_SCHEMA_REPOSITORY, TIMEOUT); + DEFAULT_SCHEMA_REPOSITORY, TIMEOUT, mountPointService); masterRef = TestActorRef.create(system, props, "master_read"); diff --git a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/WriteOnlyTransactionTest.java b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/WriteOnlyTransactionTest.java index 46081a96f2..9cd9adcaee 100644 --- a/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/WriteOnlyTransactionTest.java +++ b/netconf/netconf-topology-singleton/src/test/java/org/opendaylight/netconf/topology/singleton/impl/tx/WriteOnlyTransactionTest.java @@ -44,6 +44,7 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFaile import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.netconf.topology.singleton.impl.ProxyDOMDataBroker; @@ -75,6 +76,8 @@ public class WriteOnlyTransactionTest { private DOMDataWriteTransaction writeTx; @Mock private DOMRpcService domRpcService; + @Mock + private DOMMountPointService mountPointService; private ActorRef masterRef; private ProxyDOMDataBroker slaveDataBroker; private List sourceIdentifiers; @@ -94,7 +97,7 @@ public class WriteOnlyTransactionTest { final NetconfTopologySetup setup = mock(NetconfTopologySetup.class); doReturn(Duration.apply(0, TimeUnit.SECONDS)).when(setup).getIdleTimeout(); final Props props = NetconfNodeActor.props(setup, remoteDeviceId, DEFAULT_SCHEMA_REPOSITORY, - DEFAULT_SCHEMA_REPOSITORY, TIMEOUT); + DEFAULT_SCHEMA_REPOSITORY, TIMEOUT, mountPointService); masterRef = TestActorRef.create(system, props, "master_read"); diff --git a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/AbstractNetconfTopology.java b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/AbstractNetconfTopology.java index 836d9bdb10..68a6f11f9f 100644 --- a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/AbstractNetconfTopology.java +++ b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/AbstractNetconfTopology.java @@ -27,8 +27,7 @@ import java.util.Map; import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.client.NetconfClientSessionListener; @@ -154,13 +153,12 @@ public abstract class AbstractNetconfTopology implements NetconfTopology { protected final String topologyId; private final NetconfClientDispatcher clientDispatcher; - protected final BindingAwareBroker bindingAwareBroker; - protected final Broker domBroker; private final EventExecutor eventExecutor; protected final ScheduledThreadPool keepaliveExecutor; protected final ThreadPool processingExecutor; protected final SharedSchemaRepository sharedSchemaRepository; protected final DataBroker dataBroker; + protected final DOMMountPointService mountPointService; protected SchemaSourceRegistry schemaRegistry = DEFAULT_SCHEMA_REPOSITORY; protected SchemaRepository schemaRepository = DEFAULT_SCHEMA_REPOSITORY; @@ -169,19 +167,17 @@ public abstract class AbstractNetconfTopology implements NetconfTopology { protected final HashMap activeConnectors = new HashMap<>(); protected AbstractNetconfTopology(final String topologyId, final NetconfClientDispatcher clientDispatcher, - final BindingAwareBroker bindingAwareBroker, final Broker domBroker, final EventExecutor eventExecutor, final ScheduledThreadPool keepaliveExecutor, final ThreadPool processingExecutor, final SchemaRepositoryProvider schemaRepositoryProvider, - final DataBroker dataBroker) { + final DataBroker dataBroker, final DOMMountPointService mountPointService) { this.topologyId = topologyId; this.clientDispatcher = clientDispatcher; - this.bindingAwareBroker = bindingAwareBroker; - this.domBroker = domBroker; this.eventExecutor = eventExecutor; this.keepaliveExecutor = keepaliveExecutor; this.processingExecutor = processingExecutor; this.sharedSchemaRepository = schemaRepositoryProvider.getSharedSchemaRepository(); this.dataBroker = dataBroker; + this.mountPointService = mountPointService; } public void setSchemaRegistry(final SchemaSourceRegistry schemaRegistry) { @@ -258,7 +254,7 @@ public abstract class AbstractNetconfTopology implements NetconfTopology { final RemoteDeviceId remoteDeviceId = new RemoteDeviceId(nodeId.getValue(), address); RemoteDeviceHandler salFacade = - createSalFacade(remoteDeviceId, domBroker, bindingAwareBroker); + createSalFacade(remoteDeviceId); if (keepaliveDelay > 0) { LOG.warn("Adding keepalive facade, for device {}", nodeId); @@ -423,7 +419,7 @@ public abstract class AbstractNetconfTopology implements NetconfTopology { .build(); } - protected abstract RemoteDeviceHandler createSalFacade(final RemoteDeviceId id, final Broker domBroker, final BindingAwareBroker bindingBroker); + protected abstract RemoteDeviceHandler createSalFacade(final RemoteDeviceId id); private InetSocketAddress getSocketAddress(final Host host, final int port) { if(host.getDomainName() != null) { diff --git a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java index fc4be28123..243f09a77f 100644 --- a/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java +++ b/netconf/netconf-topology/src/main/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImpl.java @@ -22,8 +22,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; @@ -50,19 +49,17 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data private ListenerRegistration datastoreListenerRegistration = null; public NetconfTopologyImpl(final String topologyId, final NetconfClientDispatcher clientDispatcher, - final BindingAwareBroker bindingAwareBroker, final Broker domBroker, final EventExecutor eventExecutor, final ScheduledThreadPool keepaliveExecutor, final ThreadPool processingExecutor, final SchemaRepositoryProvider schemaRepositoryProvider, - final DataBroker dataBroker) { - super(topologyId, clientDispatcher, - bindingAwareBroker, domBroker, eventExecutor, - keepaliveExecutor, processingExecutor, schemaRepositoryProvider, dataBroker); + final DataBroker dataBroker, final DOMMountPointService mountPointService) { + super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor, processingExecutor, + schemaRepositoryProvider, dataBroker, mountPointService); } @Override public void close() throws Exception { // close all existing connectors, delete whole topology in datastore? - for (NetconfConnectorDTO connectorDTO : activeConnectors.values()) { + for (final NetconfConnectorDTO connectorDTO : activeConnectors.values()) { connectorDTO.close(); } activeConnectors.clear(); @@ -74,8 +71,8 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data } @Override - protected RemoteDeviceHandler createSalFacade(RemoteDeviceId id, Broker domBroker, BindingAwareBroker bindingBroker) { - return new NetconfDeviceSalFacade(id, domBroker, bindingAwareBroker); + protected RemoteDeviceHandler createSalFacade(final RemoteDeviceId id) { + return new NetconfDeviceSalFacade(id, mountPointService, dataBroker); } /** @@ -87,12 +84,12 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data initTopology(wtx, LogicalDatastoreType.OPERATIONAL); Futures.addCallback(wtx.submit(), new FutureCallback() { @Override - public void onSuccess(Void result) { + public void onSuccess(final Void result) { LOG.debug("topology initialization successful"); } @Override - public void onFailure(Throwable t) { + public void onFailure(final Throwable t) { LOG.error("Unable to initialize netconf-topology, {}", t); } }); @@ -107,8 +104,8 @@ public class NetconfTopologyImpl extends AbstractNetconfTopology implements Data } @Override - public void onDataTreeChanged(@Nonnull Collection> collection) { - for (DataTreeModification change : collection) { + public void onDataTreeChanged(@Nonnull final Collection> collection) { + for (final DataTreeModification change : collection) { final DataObjectModification rootNode = change.getRootNode(); switch (rootNode.getModificationType()) { case SUBTREE_MODIFIED: diff --git a/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java b/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java index 6798d1d0ee..235086f4cf 100644 --- a/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java +++ b/netconf/netconf-topology/src/test/java/org/opendaylight/netconf/topology/impl/NetconfTopologyImplTest.java @@ -37,8 +37,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; 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.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; +import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.netconf.client.NetconfClientDispatcher; import org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities; @@ -69,15 +68,9 @@ public class NetconfTopologyImplTest { private static final NodeId NODE_ID = new NodeId("testing-node"); private static final String TOPOLOGY_ID = "testing-topology"; - @Mock - private Broker mockedDataBroker; - @Mock private NetconfClientDispatcher mockedClientDispatcher; - @Mock - private BindingAwareBroker mockedBindingAwareBroker; - @Mock private EventExecutor mockedEventExecutor; @@ -93,6 +86,9 @@ public class NetconfTopologyImplTest { @Mock private DataBroker dataBroker; + @Mock + private DOMMountPointService mountPointService; + private TestingNetconfTopologyImpl topology; private TestingNetconfTopologyImpl spyTopology; @@ -102,19 +98,19 @@ public class NetconfTopologyImplTest { when(mockedSchemaRepositoryProvider.getSharedSchemaRepository()).thenReturn(new SharedSchemaRepository("testingSharedSchemaRepo")); when(mockedProcessingExecutor.getExecutor()).thenReturn(MoreExecutors.newDirectExecutorService()); - Future future = new SucceededFuture(ImmediateEventExecutor.INSTANCE, new NetconfDeviceCapabilities()); + final Future future = new SucceededFuture(ImmediateEventExecutor.INSTANCE, new NetconfDeviceCapabilities()); when(mockedClientDispatcher.createReconnectingClient(any(NetconfReconnectingClientConfiguration.class))).thenReturn(future); - topology = new TestingNetconfTopologyImpl(TOPOLOGY_ID, mockedClientDispatcher, mockedBindingAwareBroker, - mockedDataBroker, mockedEventExecutor, mockedKeepaliveExecutor, mockedProcessingExecutor, mockedSchemaRepositoryProvider, - dataBroker); + topology = new TestingNetconfTopologyImpl(TOPOLOGY_ID, mockedClientDispatcher, + mockedEventExecutor, mockedKeepaliveExecutor, mockedProcessingExecutor, mockedSchemaRepositoryProvider, + dataBroker, mountPointService); spyTopology = spy(topology); } @Test public void testInit() { - WriteTransaction wtx = mock(WriteTransaction.class); + final WriteTransaction wtx = mock(WriteTransaction.class); when(dataBroker.newWriteOnlyTransaction()).thenReturn(wtx); doNothing().when(wtx).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class), any(DataObject.class)); when(wtx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); @@ -133,19 +129,19 @@ public class NetconfTopologyImplTest { @Test public void testOnDataTreeChange() { - DataObjectModification newNode = mock(DataObjectModification.class); + final DataObjectModification newNode = mock(DataObjectModification.class); when(newNode.getModificationType()).thenReturn(DataObjectModification.ModificationType.WRITE); InstanceIdentifier.PathArgument pa = null; - for (InstanceIdentifier.PathArgument p : TopologyUtil.createTopologyListPath(TOPOLOGY_ID).child(Node.class, new NodeKey(NODE_ID)).getPathArguments()) { + for (final InstanceIdentifier.PathArgument p : TopologyUtil.createTopologyListPath(TOPOLOGY_ID).child(Node.class, new NodeKey(NODE_ID)).getPathArguments()) { pa = p; } when(newNode.getIdentifier()).thenReturn(pa); - NetconfNode testingNode = new NetconfNodeBuilder() + final NetconfNode testingNode = new NetconfNodeBuilder() .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1")))) .setPort(new PortNumber(9999)) .setReconnectOnChangedSchema(true) @@ -156,14 +152,13 @@ public class NetconfTopologyImplTest { .setCredentials(new LoginPasswordBuilder().setUsername("testuser").setPassword("testpassword").build()) .build(); - NodeBuilder nn = new NodeBuilder().addAugmentation(NetconfNode.class, testingNode); + final NodeBuilder nn = new NodeBuilder().addAugmentation(NetconfNode.class, testingNode); when(newNode.getDataAfter()).thenReturn(nn.build()); - - Collection> changes = Sets.newHashSet(); - DataTreeModification ch = mock(DataTreeModification.class); + final Collection> changes = Sets.newHashSet(); + final DataTreeModification ch = mock(DataTreeModification.class); when(ch.getRootNode()).thenReturn(newNode); changes.add(ch); spyTopology.onDataTreeChanged(changes); @@ -185,22 +180,21 @@ public class NetconfTopologyImplTest { public static class TestingNetconfTopologyImpl extends NetconfTopologyImpl { - public TestingNetconfTopologyImpl(String topologyId, NetconfClientDispatcher clientDispatcher, - BindingAwareBroker bindingAwareBroker, Broker domBroker, - EventExecutor eventExecutor, ScheduledThreadPool keepaliveExecutor, - ThreadPool processingExecutor, SchemaRepositoryProvider schemaRepositoryProvider, - DataBroker dataBroker) { - super(topologyId, clientDispatcher, bindingAwareBroker, domBroker, eventExecutor, keepaliveExecutor, - processingExecutor, schemaRepositoryProvider, dataBroker); + public TestingNetconfTopologyImpl(final String topologyId, final NetconfClientDispatcher clientDispatcher, + final EventExecutor eventExecutor, final ScheduledThreadPool keepaliveExecutor, + final ThreadPool processingExecutor, final SchemaRepositoryProvider schemaRepositoryProvider, + final DataBroker dataBroker, final DOMMountPointService mountPointService) { + super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor, + processingExecutor, schemaRepositoryProvider, dataBroker, mountPointService); } @Override - public ListenableFuture connectNode(NodeId nodeId, Node configNode) { + public ListenableFuture connectNode(final NodeId nodeId, final Node configNode) { return Futures.immediateFuture(new NetconfDeviceCapabilities()); } @Override - public ListenableFuture disconnectNode(NodeId nodeId) { + public ListenableFuture disconnectNode(final NodeId nodeId) { return Futures.immediateFuture(null); } } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java index d2f73ae468..86ef2abc7f 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java @@ -201,7 +201,9 @@ public class NetconfDevice implements RemoteDevice salRegistrations = Lists.newArrayList(); - public NetconfDeviceSalFacade(final RemoteDeviceId id, final Broker domBroker, final BindingAwareBroker bindingBroker) { + public NetconfDeviceSalFacade(final RemoteDeviceId id, final DOMMountPointService mountPointService, + final DataBroker dataBroker) { this.id = id; - this.salProvider = new NetconfDeviceSalProvider(id); - registerToSal(domBroker, bindingBroker); + this.salProvider = new NetconfDeviceSalProvider(id, mountPointService, dataBroker); } @VisibleForTesting - NetconfDeviceSalFacade(final RemoteDeviceId id, NetconfDeviceSalProvider salProvider, - final Broker domBroker, final BindingAwareBroker bindingBroker) { + NetconfDeviceSalFacade(final RemoteDeviceId id, final NetconfDeviceSalProvider salProvider) { this.id = id; this.salProvider = salProvider; - registerToSal(domBroker, bindingBroker); - } - - public void registerToSal(final Broker domRegistryDependency, final BindingAwareBroker bindingBroker) { - domRegistryDependency.registerProvider(salProvider); - bindingBroker.registerProvider(salProvider); } @Override diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProvider.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProvider.java index c0f066ffdc..e9d74c0637 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProvider.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProvider.java @@ -8,8 +8,6 @@ package org.opendaylight.netconf.sal.connect.netconf.sal; import com.google.common.base.Preconditions; -import java.util.Collection; -import java.util.Collections; import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; @@ -21,31 +19,27 @@ import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.md.sal.dom.api.DOMNotification; import org.opendaylight.controller.md.sal.dom.api.DOMNotificationService; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; -import org.opendaylight.controller.sal.core.api.Broker; -import org.opendaylight.controller.sal.core.api.Provider; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class NetconfDeviceSalProvider implements AutoCloseable, Provider, BindingAwareProvider { +public class NetconfDeviceSalProvider implements AutoCloseable { private static final Logger logger = LoggerFactory.getLogger(NetconfDeviceSalProvider.class); private final RemoteDeviceId id; - private MountInstance mountInstance; + private final MountInstance mountInstance; + private final DataBroker dataBroker; private volatile NetconfDeviceTopologyAdapter topologyDatastoreAdapter; - private DataBroker dataBroker; private BindingTransactionChain txChain; private final TransactionChainListener transactionChainListener = new TransactionChainListener() { @Override - public void onTransactionChainFailed(TransactionChain chain, AsyncTransaction transaction, Throwable cause) { + public void onTransactionChainFailed(final TransactionChain chain, final AsyncTransaction transaction, final Throwable cause) { logger.error("{}: TransactionChain({}) {} FAILED!", id, chain, transaction.getIdentifier(), cause); chain.close(); resetTransactionChainForAdapaters(); @@ -53,13 +47,25 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin } @Override - public void onTransactionChainSuccessful(TransactionChain chain) { + public void onTransactionChainSuccessful(final TransactionChain chain) { logger.trace("{}: TransactionChain({}) {} SUCCESSFUL", id, chain); } }; - public NetconfDeviceSalProvider(final RemoteDeviceId deviceId) { + public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService, + final DataBroker dataBroker) { this.id = deviceId; + mountInstance = new MountInstance(mountService, id); + this.dataBroker = dataBroker; + txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener); + + topologyDatastoreAdapter = new NetconfDeviceTopologyAdapter(id, txChain); + } + + public NetconfDeviceSalProvider(final RemoteDeviceId deviceId, final DOMMountPointService mountService) { + this.id = deviceId; + mountInstance = new MountInstance(mountService, id); + this.dataBroker = null; } public MountInstance getMountInstance() { @@ -74,31 +80,6 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin return topologyDatastoreAdapter; } - @Override - public void onSessionInitiated(final Broker.ProviderSession session) { - logger.debug("{}: (BI)Session with sal established {}", id, session); - - final DOMMountPointService mountService = session.getService(DOMMountPointService.class); - if (mountService != null) { - mountInstance = new MountInstance(mountService, id); - } - } - - @Override - public Collection getProviderFunctionality() { - return Collections.emptySet(); - } - - @Override - public void onSessionInitiated(final BindingAwareBroker.ProviderContext session) { - logger.debug("{}: Session with sal established {}", id, session); - - this.dataBroker = session.getSALService(DataBroker.class); - txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener); - - topologyDatastoreAdapter = new NetconfDeviceTopologyAdapter(id, txChain); - } - private void resetTransactionChainForAdapaters() { txChain = Preconditions.checkNotNull(dataBroker).createTransactionChain(transactionChainListener); @@ -121,7 +102,7 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin public static final class MountInstance implements AutoCloseable { - private DOMMountPointService mountService; + private final DOMMountPointService mountService; private final RemoteDeviceId id; private NetconfDeviceNotificationService notificationService; @@ -133,9 +114,8 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin } public synchronized void onTopologyDeviceConnected(final SchemaContext initialCtx, - final DOMDataBroker broker, final DOMRpcService rpc, - final NetconfDeviceNotificationService notificationService) { - + final DOMDataBroker broker, final DOMRpcService rpc, + final NetconfDeviceNotificationService notificationService) { Preconditions.checkNotNull(mountService, "Closed"); Preconditions.checkState(topologyRegistration == null, "Already initialized"); @@ -172,7 +152,6 @@ public class NetconfDeviceSalProvider implements AutoCloseable, Provider, Bindin @Override public synchronized void close() throws Exception { onTopologyDeviceDisconnected(); - mountService = null; } public synchronized void publish(final DOMNotification domNotification) { diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java index 8df394c773..4cb0ed7a15 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalFacadeTest.java @@ -27,8 +27,6 @@ import org.mockito.Mock; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMNotification; import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfSessionPreferences; import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransformUtil; @@ -56,9 +54,7 @@ public class NetconfDeviceSalFacadeTest { final InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8000); final RemoteDeviceId remoteDeviceId = new RemoteDeviceId("test", address); - final Broker domRegistry = mock(Broker.class); - final BindingAwareBroker bindingRegistry = mock(BindingAwareBroker.class); - deviceFacade = new NetconfDeviceSalFacade(remoteDeviceId, salProvider, domRegistry, bindingRegistry); + deviceFacade = new NetconfDeviceSalFacade(remoteDeviceId, salProvider); netconfDeviceTopologyAdapter = PowerMockito.mock(NetconfDeviceTopologyAdapter.class); mountInstance = PowerMockito.mock(NetconfDeviceSalProvider.MountInstance.class); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProviderTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProviderTest.java index b49b3fd3fb..16ca3da8cf 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProviderTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceSalProviderTest.java @@ -9,13 +9,15 @@ package org.opendaylight.netconf.sal.connect.netconf.sal; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import com.google.common.util.concurrent.Futures; import java.net.InetSocketAddress; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -24,6 +26,7 @@ import org.mockito.MockitoAnnotations; import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; @@ -44,38 +47,31 @@ public class NetconfDeviceSalProviderTest { private DataBroker dataBroker; @Mock private BindingTransactionChain chain; + @Mock + private DOMMountPointService mountPointService; + @Mock + private WriteTransaction writeTx; private NetconfDeviceSalProvider provider; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - provider = new NetconfDeviceSalProvider(new RemoteDeviceId("device1", InetSocketAddress.createUnresolved("localhost", 17830))); + doReturn(chain).when(dataBroker).createTransactionChain(any(TransactionChainListener.class)); + doReturn(writeTx).when(chain).newWriteOnlyTransaction(); + doNothing().when(writeTx).merge(eq(LogicalDatastoreType.OPERATIONAL), any(), any()); + doReturn("Some object").when(writeTx).getIdentifier(); + doReturn(Futures.immediateCheckedFuture(null)).when(writeTx).submit(); + provider = new NetconfDeviceSalProvider(new RemoteDeviceId("device1", + InetSocketAddress.createUnresolved("localhost", 17830)), mountPointService, dataBroker); when(session.getService(DOMMountPointService.class)).thenReturn(mountpointService); when(context.getSALService(DataBroker.class)).thenReturn(dataBroker); - when(dataBroker.createTransactionChain(any())).thenReturn(chain); when(chain.newWriteOnlyTransaction()).thenReturn(tx); when(tx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); when(tx.getIdentifier()).thenReturn(tx); } - @Test - public void onSessionInitiated() throws Exception { - provider.onSessionInitiated(session); - provider.onSessionInitiated(context); - Assert.assertNotNull(provider.getMountInstance()); - Assert.assertNotNull(provider.getTopologyDatastoreAdapter()); - } - - @Test - public void getProviderFunctionality() throws Exception { - Assert.assertTrue(provider.getProviderFunctionality().isEmpty()); - } - @Test public void replaceChainIfFailed() throws Exception { - provider.onSessionInitiated(session); - provider.onSessionInitiated(context); - Assert.assertNotNull(provider.getMountInstance()); final ArgumentCaptor captor = ArgumentCaptor.forClass(TransactionChainListener.class); verify(dataBroker).createTransactionChain(captor.capture()); try { @@ -88,16 +84,12 @@ public class NetconfDeviceSalProviderTest { @Test public void close() throws Exception { - provider.onSessionInitiated(session); - provider.onSessionInitiated(context); provider.close(); verify(chain).close(); } @Test public void closeWithoutNPE() throws Exception { - provider.onSessionInitiated(session); - provider.onSessionInitiated(context); provider.close(); provider.close(); verify(chain, times(2)).close(); -- 2.36.6