X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fnetconf-topology%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Ftopology%2Fimpl%2FNetconfTopologyImplTest.java;h=e5d79fb3b06bfbaee8e4bcdbb786f0c182adfdae;hb=de76f7996dc99d8580345e20ac4cd6e90330037f;hp=235086f4cf17e5542663048b831cb1daf23f09cc;hpb=0daed243d5fa216f5274ad9257f9692dd91c77eb;p=netconf.git 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 235086f4cf..e5d79fb3b0 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 @@ -5,16 +5,17 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.topology.impl; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.opendaylight.mdsal.common.api.CommitInfo.emptyFluentFuture; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Futures; @@ -25,10 +26,12 @@ import io.netty.util.concurrent.Future; import io.netty.util.concurrent.ImmediateEventExecutor; import io.netty.util.concurrent.SucceededFuture; import java.util.Collection; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.opendaylight.aaa.encrypt.AAAEncryptionService; import org.opendaylight.controller.config.threadpool.ScheduledThreadPool; import org.opendaylight.controller.config.threadpool.ThreadPool; import org.opendaylight.controller.md.sal.binding.api.DataBroker; @@ -36,9 +39,10 @@ import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; 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.md.sal.dom.api.DOMMountPointService; import org.opendaylight.netconf.client.NetconfClientDispatcher; +import org.opendaylight.netconf.client.NetconfClientSessionListener; +import org.opendaylight.netconf.client.conf.NetconfClientConfiguration; import org.opendaylight.netconf.client.conf.NetconfReconnectingClientConfiguration; import org.opendaylight.netconf.sal.connect.netconf.listener.NetconfDeviceCapabilities; import org.opendaylight.netconf.topology.api.SchemaRepositoryProvider; @@ -48,6 +52,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types. import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; 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.NetconfNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.Protocol.Name; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.ProtocolBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopologyBuilder; @@ -89,6 +95,9 @@ public class NetconfTopologyImplTest { @Mock private DOMMountPointService mountPointService; + @Mock + private AAAEncryptionService encryptionService; + private TestingNetconfTopologyImpl topology; private TestingNetconfTopologyImpl spyTopology; @@ -96,14 +105,16 @@ public class NetconfTopologyImplTest { public void setUp() { MockitoAnnotations.initMocks(this); - when(mockedSchemaRepositoryProvider.getSharedSchemaRepository()).thenReturn(new SharedSchemaRepository("testingSharedSchemaRepo")); + when(mockedSchemaRepositoryProvider.getSharedSchemaRepository()) + .thenReturn(new SharedSchemaRepository("testingSharedSchemaRepo")); when(mockedProcessingExecutor.getExecutor()).thenReturn(MoreExecutors.newDirectExecutorService()); final Future future = new SucceededFuture(ImmediateEventExecutor.INSTANCE, new NetconfDeviceCapabilities()); - when(mockedClientDispatcher.createReconnectingClient(any(NetconfReconnectingClientConfiguration.class))).thenReturn(future); + when(mockedClientDispatcher.createReconnectingClient(any(NetconfReconnectingClientConfiguration.class))) + .thenReturn(future); topology = new TestingNetconfTopologyImpl(TOPOLOGY_ID, mockedClientDispatcher, mockedEventExecutor, mockedKeepaliveExecutor, mockedProcessingExecutor, mockedSchemaRepositoryProvider, - dataBroker, mountPointService); + dataBroker, mountPointService, encryptionService); spyTopology = spy(topology); } @@ -112,18 +123,22 @@ public class NetconfTopologyImplTest { public void testInit() { 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)); + doNothing().when(wtx) + .merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class), any(DataObject.class)); + doReturn(emptyFluentFuture()).when(wtx).commit(); topology.init(); //verify initialization of topology - final InstanceIdentifier networkTopologyId = InstanceIdentifier.builder(NetworkTopology.class).build(); + final InstanceIdentifier networkTopologyId = + InstanceIdentifier.builder(NetworkTopology.class).build(); final Topology topo = new TopologyBuilder().setTopologyId(new TopologyId(TOPOLOGY_ID)).build(); final NetworkTopology networkTopology = new NetworkTopologyBuilder().build(); verify(wtx).merge(LogicalDatastoreType.CONFIGURATION, networkTopologyId, networkTopology); verify(wtx).merge(LogicalDatastoreType.OPERATIONAL, networkTopologyId, networkTopology); - verify(wtx).merge(LogicalDatastoreType.CONFIGURATION, networkTopologyId.child(Topology.class, new TopologyKey(new TopologyId(TOPOLOGY_ID))), topo); - verify(wtx).merge(LogicalDatastoreType.OPERATIONAL, networkTopologyId.child(Topology.class, new TopologyKey(new TopologyId(TOPOLOGY_ID))), topo); + verify(wtx).merge(LogicalDatastoreType.CONFIGURATION, + networkTopologyId.child(Topology.class, new TopologyKey(new TopologyId(TOPOLOGY_ID))), topo); + verify(wtx).merge(LogicalDatastoreType.OPERATIONAL, + networkTopologyId.child(Topology.class, new TopologyKey(new TopologyId(TOPOLOGY_ID))), topo); } @Test @@ -134,7 +149,9 @@ public class NetconfTopologyImplTest { InstanceIdentifier.PathArgument pa = null; - for (final 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; } @@ -149,7 +166,8 @@ public class NetconfTopologyImplTest { .setBetweenAttemptsTimeoutMillis(100) .setKeepaliveDelay(1000L) .setTcpOnly(true) - .setCredentials(new LoginPasswordBuilder().setUsername("testuser").setPassword("testpassword").build()) + .setCredentials(new LoginPasswordBuilder() + .setUsername("testuser").setPassword("testpassword").build()) .build(); final NodeBuilder nn = new NodeBuilder().addAugmentation(NetconfNode.class, testingNode); @@ -178,14 +196,96 @@ public class NetconfTopologyImplTest { } + @Test + public void testGetClientConfig() { + final NetconfClientSessionListener sessionListener = mock(NetconfClientSessionListener.class); + + final NetconfNode testingNode = new NetconfNodeBuilder() + .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1")))) + .setPort(new PortNumber(9999)) + .setReconnectOnChangedSchema(true) + .setDefaultRequestTimeoutMillis(1000L) + .setBetweenAttemptsTimeoutMillis(100) + .setKeepaliveDelay(1000L) + .setTcpOnly(true) + .setCredentials(new LoginPasswordBuilder() + .setUsername("testuser").setPassword("testpassword").build()) + .build(); + final NetconfReconnectingClientConfiguration configuration = + spyTopology.getClientConfig(sessionListener, testingNode); + Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TCP, configuration.getProtocol()); + Assert.assertNotNull(configuration.getAuthHandler()); + Assert.assertNull(configuration.getSslHandlerFactory()); + + + final NetconfNode testingNode2 = new NetconfNodeBuilder() + .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1")))) + .setPort(new PortNumber(9999)) + .setReconnectOnChangedSchema(true) + .setDefaultRequestTimeoutMillis(1000L) + .setBetweenAttemptsTimeoutMillis(100) + .setKeepaliveDelay(1000L) + .setTcpOnly(false) + .setCredentials(new LoginPasswordBuilder() + .setUsername("testuser").setPassword("testpassword").build()) + .build(); + final NetconfReconnectingClientConfiguration configuration2 = + spyTopology.getClientConfig(sessionListener, testingNode2); + Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, configuration2.getProtocol()); + Assert.assertNotNull(configuration2.getAuthHandler()); + Assert.assertNull(configuration2.getSslHandlerFactory()); + + + final NetconfNode testingNode3 = new NetconfNodeBuilder() + .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1")))) + .setPort(new PortNumber(9999)) + .setReconnectOnChangedSchema(true) + .setDefaultRequestTimeoutMillis(1000L) + .setBetweenAttemptsTimeoutMillis(100) + .setKeepaliveDelay(1000L) + .setTcpOnly(false) + .setProtocol(new ProtocolBuilder().setName(Name.SSH).build()) + .setCredentials(new LoginPasswordBuilder() + .setUsername("testuser").setPassword("testpassword").build()) + .build(); + final NetconfReconnectingClientConfiguration configuration3 = + spyTopology.getClientConfig(sessionListener, testingNode3); + Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.SSH, configuration3.getProtocol()); + Assert.assertNotNull(configuration3.getAuthHandler()); + Assert.assertNull(configuration3.getSslHandlerFactory()); + + + final NetconfNode testingNode4 = new NetconfNodeBuilder() + .setHost(new Host(new IpAddress(new Ipv4Address("127.0.0.1")))) + .setPort(new PortNumber(9999)) + .setReconnectOnChangedSchema(true) + .setDefaultRequestTimeoutMillis(1000L) + .setBetweenAttemptsTimeoutMillis(100) + .setKeepaliveDelay(1000L) + .setTcpOnly(false) + .setProtocol(new ProtocolBuilder().setName(Name.TLS).build()) + .setCredentials(new LoginPasswordBuilder() + .setUsername("testuser").setPassword("testpassword").build()) + .build(); + final NetconfReconnectingClientConfiguration configuration4 = + spyTopology.getClientConfig(sessionListener, testingNode4); + Assert.assertEquals(NetconfClientConfiguration.NetconfClientProtocol.TLS, configuration4.getProtocol()); + Assert.assertNull(configuration4.getAuthHandler()); + Assert.assertNotNull(configuration4.getSslHandlerFactory()); + } + public static class TestingNetconfTopologyImpl extends NetconfTopologyImpl { 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) { + final EventExecutor eventExecutor, + final ScheduledThreadPool keepaliveExecutor, + final ThreadPool processingExecutor, + final SchemaRepositoryProvider schemaRepositoryProvider, + final DataBroker dataBroker, final DOMMountPointService mountPointService, + final AAAEncryptionService encryptionService) { super(topologyId, clientDispatcher, eventExecutor, keepaliveExecutor, - processingExecutor, schemaRepositoryProvider, dataBroker, mountPointService); + processingExecutor, schemaRepositoryProvider, dataBroker, + mountPointService, encryptionService); } @Override @@ -198,5 +298,4 @@ public class NetconfTopologyImplTest { return Futures.immediateFuture(null); } } - }