Fix DefaultMapBodyOrder body sorting
[netconf.git] / netconf / tools / netconf-testtool / src / main / java / org / opendaylight / netconf / test / tool / client / stress / StressClientCallable.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netconf.test.tool.client.stress;
9
10 import java.net.InetSocketAddress;
11 import java.util.List;
12 import java.util.concurrent.Callable;
13 import java.util.concurrent.ExecutionException;
14 import org.opendaylight.netconf.api.messages.NetconfMessage;
15 import org.opendaylight.netconf.client.NetconfClientFactory;
16 import org.opendaylight.netconf.client.NetconfClientSession;
17 import org.opendaylight.netconf.client.conf.NetconfClientConfiguration;
18 import org.opendaylight.netconf.client.conf.NetconfClientConfigurationBuilder;
19 import org.opendaylight.netconf.client.mdsal.NetconfDeviceCommunicator;
20 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
21 import org.opendaylight.netconf.transport.api.UnsupportedConfigurationException;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 public class StressClientCallable implements Callable<Boolean> {
26
27     private static final Logger LOG = LoggerFactory.getLogger(StressClientCallable.class);
28
29     private final NetconfDeviceCommunicator sessionListener;
30     private final NetconfClientSession netconfClientSession;
31     private final ExecutionStrategy executionStrategy;
32
33     public StressClientCallable(final Parameters params,
34                                 final NetconfClientFactory netconfClientFactory,
35                                 final NetconfClientConfiguration baseConfiguration,
36                                 final List<NetconfMessage> preparedMessages) {
37         sessionListener = getSessionListener(params.getInetAddress(), params.concurrentMessageLimit);
38         final var cfg = getNetconfClientConfiguration(baseConfiguration, sessionListener);
39
40         LOG.info("Connecting to netconf server {}:{}", params.ip, params.port);
41         try {
42             netconfClientSession = netconfClientFactory.createClient(cfg).get();
43         } catch (final InterruptedException | ExecutionException | UnsupportedConfigurationException e) {
44             throw new IllegalStateException("Unable to connect", e);
45         }
46         executionStrategy = getExecutionStrategy(params, preparedMessages, sessionListener);
47     }
48
49     @Override
50     public Boolean call() {
51         executionStrategy.invoke();
52         netconfClientSession.close();
53         return Boolean.TRUE;
54     }
55
56     private static ExecutionStrategy getExecutionStrategy(final Parameters params,
57             final List<NetconfMessage> preparedMessages, final NetconfDeviceCommunicator sessionListener) {
58         if (params.async) {
59             return new AsyncExecutionStrategy(params, preparedMessages, sessionListener);
60         } else {
61             return new SyncExecutionStrategy(params, preparedMessages, sessionListener);
62         }
63     }
64
65     private static NetconfDeviceCommunicator getSessionListener(final InetSocketAddress inetAddress,
66             final int messageLimit) {
67         return new NetconfDeviceCommunicator(new RemoteDeviceId("secure-test", inetAddress),
68             StressClient.LOGGING_REMOTE_DEVICE, messageLimit);
69     }
70
71     private static NetconfClientConfiguration getNetconfClientConfiguration(final NetconfClientConfiguration base,
72             final NetconfDeviceCommunicator sessionListener) {
73         return NetconfClientConfigurationBuilder.create()
74             .withProtocol(base.getProtocol())
75             .withTcpParameters(base.getTcpParameters())
76             .withSshParameters(base.getSshParameters())
77             .withOdlHelloCapabilities(base.getOdlHelloCapabilities())
78             .withAdditionalHeader(base.getAdditionalHeader().orElse(null))
79             .withConnectionTimeoutMillis(base.getConnectionTimeoutMillis())
80             .withSessionListener(sessionListener).build();
81     }
82 }