Add branch for creating TLS client 81/69481/1
authorLiGuosheng <li.guosheng6@zte.com.cn>
Wed, 14 Mar 2018 06:40:51 +0000 (14:40 +0800)
committerLiGuosheng <li.guosheng6@zte.com.cn>
Wed, 14 Mar 2018 06:40:55 +0000 (14:40 +0800)
Add TLS case to NetconfClientDispatcherImpl for creating TLS
clients.

Change-Id: I7da44d1c7c074633e7ae08b2863b4c3466066a4f
Signed-off-by: Li guosheng <li.guosheng6@zte.com.cn>
netconf/netconf-client/src/main/java/org/opendaylight/netconf/client/NetconfClientDispatcherImpl.java
netconf/netconf-client/src/test/java/org/opendaylight/netconf/client/NetconfClientDispatcherImplTest.java

index 6abce42b43239d0c0d645964d11450c8abcb2c7a..d0dc480299b97192a7a5495daf2e3fed344525c6 100644 (file)
@@ -42,6 +42,8 @@ public class NetconfClientDispatcherImpl extends AbstractDispatcher<NetconfClien
                 return createTcpClient(clientConfiguration);
             case SSH:
                 return createSshClient(clientConfiguration);
+            case TLS:
+                return createTlsClient(clientConfiguration);
             default:
                 throw new IllegalArgumentException("Unknown client protocol " + clientConfiguration.getProtocol());
         }
@@ -54,6 +56,8 @@ public class NetconfClientDispatcherImpl extends AbstractDispatcher<NetconfClien
                 return createReconnectingTcpClient(clientConfiguration);
             case SSH:
                 return createReconnectingSshClient(clientConfiguration);
+            case TLS:
+                return createReconnectingTlsClient(clientConfiguration);
             default:
                 throw new IllegalArgumentException("Unknown client protocol " + clientConfiguration.getProtocol());
         }
@@ -98,6 +102,26 @@ public class NetconfClientDispatcherImpl extends AbstractDispatcher<NetconfClien
                 init::initialize);
     }
 
+    private Future<NetconfClientSession> createTlsClient(final NetconfClientConfiguration currentConfiguration) {
+        LOG.debug("Creating TLS client with configuration: {}", currentConfiguration);
+        return super.createClient(currentConfiguration.getAddress(), currentConfiguration.getReconnectStrategy(),
+            (ch, sessionPromise) -> new TlsClientChannelInitializer(currentConfiguration.getSslHandlerFactory(),
+                    getNegotiatorFactory(currentConfiguration), currentConfiguration.getSessionListener())
+                    .initialize(ch, sessionPromise));
+    }
+
+    private Future<Void> createReconnectingTlsClient(
+            final NetconfReconnectingClientConfiguration currentConfiguration) {
+        LOG.debug("Creating reconnecting TLS client with configuration: {}", currentConfiguration);
+        final TlsClientChannelInitializer init = new TlsClientChannelInitializer(
+                currentConfiguration.getSslHandlerFactory(), getNegotiatorFactory(currentConfiguration),
+                currentConfiguration.getSessionListener());
+
+        return super.createReconnectingClient(currentConfiguration.getAddress(), currentConfiguration
+                .getConnectStrategyFactory(), currentConfiguration.getReconnectStrategy(),
+                init::initialize);
+    }
+
     protected NetconfClientSessionNegotiatorFactory getNegotiatorFactory(final NetconfClientConfiguration cfg) {
         return new NetconfClientSessionNegotiatorFactory(timer, cfg.getAdditionalHeader(),
                 cfg.getConnectionTimeoutMillis());
index 82bbe001381154707cb111422ff8190791508092..45019fede49267a05b1ec864e1994c2a8b5c0114 100644 (file)
@@ -95,5 +95,21 @@ public class NetconfClientDispatcherImplTest {
         assertNotNull(sshReconn);
         assertNotNull(tcpReconn);
 
+        SslHandlerFactory sslHandlerFactory = Mockito.mock(SslHandlerFactory.class);
+        NetconfReconnectingClientConfiguration cfg3 = NetconfReconnectingClientConfigurationBuilder.create()
+                .withProtocol(NetconfClientConfiguration.NetconfClientProtocol.TLS)
+                .withAddress(address)
+                .withConnectionTimeoutMillis(timeout)
+                .withReconnectStrategy(reconnect)
+                .withAdditionalHeader(header)
+                .withSessionListener(listener)
+                .withConnectStrategyFactory(reconnectStrategyFactory)
+                .withSslHandlerFactory(sslHandlerFactory).build();
+
+        Future<NetconfClientSession> tlsSession = dispatcher.createClient(cfg3);
+        Future<Void> tlsReconn = dispatcher.createReconnectingClient(cfg3);
+
+        assertNotNull(tlsSession);
+        assertNotNull(tlsReconn);
     }
 }