X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fsal-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Fconnect%2Fnetconf%2Fsal%2FNetconfDeviceSalFacadeTest.java;h=e833f556b858128172aae5c8f6b8c2d218bcae11;hb=0cf6d180df77a544362e2480beb4b9119b50a8c6;hp=4cb0ed7a155d480d31fa51d152ff34e461a78284;hpb=3d01a690f3d26dbd2bec429415b026e501fcead5;p=netconf.git 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 4cb0ed7a15..e833f556b8 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 @@ -8,59 +8,76 @@ package org.opendaylight.netconf.sal.connect.netconf.sal; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.MockitoAnnotations.initMocks; import java.net.InetSocketAddress; -import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; 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.mockito.junit.MockitoJUnitRunner; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.TransactionChain; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMNotification; +import org.opendaylight.mdsal.dom.api.DOMRpcService; +import org.opendaylight.netconf.dom.api.NetconfDataTreeService; +import org.opendaylight.netconf.sal.connect.netconf.NetconfDeviceSchema; 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; import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus; +import org.opendaylight.yangtools.rfc8528.data.util.EmptyMountPointContext; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -@RunWith(PowerMockRunner.class) -@PrepareForTest({NetconfDeviceTopologyAdapter.class, NetconfDeviceSalProvider.MountInstance.class, NetconfSessionPreferences.class}) +@RunWith(MockitoJUnitRunner.StrictStubs.class) public class NetconfDeviceSalFacadeTest { + private final RemoteDeviceId remoteDeviceId = new RemoteDeviceId("test", new InetSocketAddress("127.0.0.1", 8000)); - private NetconfDeviceSalFacade deviceFacade; - - private NetconfDeviceTopologyAdapter netconfDeviceTopologyAdapter; + @Mock private NetconfDeviceSalProvider.MountInstance mountInstance; - @Mock private NetconfDeviceSalProvider salProvider; + @Mock + private DataBroker dataBroker; + @Mock + private TransactionChain txChain; + @Mock + private WriteTransaction tx; + @Captor + private ArgumentCaptor nodeCaptor; + + private NetconfDeviceSalFacade deviceFacade; @Before - public void setUp() throws Exception{ - initMocks(this); - final InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8000); - final RemoteDeviceId remoteDeviceId = new RemoteDeviceId("test", address); + public void setUp() throws Exception { + doReturn(txChain).when(dataBroker).createMergingTransactionChain(any()); + doReturn(tx).when(txChain).newWriteOnlyTransaction(); + doNothing().when(tx).mergeParentStructurePut(eq(LogicalDatastoreType.OPERATIONAL), + eq(remoteDeviceId.getTopologyBindingPath().augmentation(NetconfNode.class)), nodeCaptor.capture()); + doReturn(CommitInfo.emptyFluentFuture()).when(tx).commit(); - deviceFacade = new NetconfDeviceSalFacade(remoteDeviceId, salProvider); + final NetconfDeviceTopologyAdapter adapter = new NetconfDeviceTopologyAdapter(dataBroker, remoteDeviceId); - netconfDeviceTopologyAdapter = PowerMockito.mock(NetconfDeviceTopologyAdapter.class); - mountInstance = PowerMockito.mock(NetconfDeviceSalProvider.MountInstance.class); + deviceFacade = new NetconfDeviceSalFacade(remoteDeviceId, salProvider, dataBroker, "mockTopo"); - doReturn(netconfDeviceTopologyAdapter).when(salProvider).getTopologyDatastoreAdapter(); - doNothing().when(netconfDeviceTopologyAdapter).updateDeviceData(any(Boolean.class), any(NetconfDeviceCapabilities.class)); + doReturn(adapter).when(salProvider).getTopologyDatastoreAdapter(); doReturn(mountInstance).when(salProvider).getMountInstance(); doNothing().when(mountInstance).onTopologyDeviceDisconnected(); @@ -70,9 +87,8 @@ public class NetconfDeviceSalFacadeTest { public void testOnDeviceDisconnected() { deviceFacade.onDeviceDisconnected(); - verify(netconfDeviceTopologyAdapter).updateDeviceData(eq(false), any(NetconfDeviceCapabilities.class)); + verifyConnectionStatusUpdate(ConnectionStatus.Connecting); verify(mountInstance, times(1)).onTopologyDeviceDisconnected(); - } @Test @@ -80,7 +96,7 @@ public class NetconfDeviceSalFacadeTest { final Throwable throwable = new Throwable(); deviceFacade.onDeviceFailed(throwable); - verify(netconfDeviceTopologyAdapter).setDeviceAsFailed(throwable); + verifyConnectionStatusUpdate(ConnectionStatus.UnableToConnect); verify(mountInstance, times(1)).onTopologyDeviceDisconnected(); } @@ -92,15 +108,20 @@ public class NetconfDeviceSalFacadeTest { @Test public void testOnDeviceConnected() { - final SchemaContext schemaContext = mock(SchemaContext.class); + final EffectiveModelContext schemaContext = mock(EffectiveModelContext.class); - final NetconfSessionPreferences netconfSessionPreferences = NetconfSessionPreferences.fromStrings(getCapabilities()); + final var netconfSessionPreferences = NetconfSessionPreferences.fromStrings( + List.of(NetconfMessageTransformUtil.NETCONF_CANDIDATE_URI.toString())); final DOMRpcService deviceRpc = mock(DOMRpcService.class); - deviceFacade.onDeviceConnected(schemaContext, netconfSessionPreferences, deviceRpc); - - verify(mountInstance, times(1)).onTopologyDeviceConnected(eq(schemaContext), any(DOMDataBroker.class), eq(deviceRpc), any(NetconfDeviceNotificationService.class)); - verify(netconfDeviceTopologyAdapter, times(1)).updateDeviceData(true, netconfSessionPreferences.getNetconfDeviceCapabilities()); + deviceFacade.onDeviceConnected( + new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), new EmptyMountPointContext(schemaContext)), + netconfSessionPreferences, deviceRpc, null); + + verifyConnectionStatusUpdate(ConnectionStatus.Connected); + verify(mountInstance, times(1)).onTopologyDeviceConnected(eq(schemaContext), + any(DOMDataBroker.class), any(NetconfDataTreeService.class), eq(deviceRpc), + any(NetconfDeviceNotificationService.class), isNull()); } @Test @@ -110,7 +131,9 @@ public class NetconfDeviceSalFacadeTest { verify(mountInstance).publish(domNotification); } - private static List getCapabilities() { - return Arrays.asList(NetconfMessageTransformUtil.NETCONF_CANDIDATE_URI.toString()); + private void verifyConnectionStatusUpdate(final ConnectionStatus expectedStatus) { + verify(tx).mergeParentStructurePut(eq(LogicalDatastoreType.OPERATIONAL), + eq(remoteDeviceId.getTopologyBindingPath().augmentation(NetconfNode.class)), any()); + assertEquals(expectedStatus, nodeCaptor.getValue().getConnectionStatus()); } }