BUG-1541 Make EXI and clientConnectTimeout configurable in testtool. 97/10097/1
authorMaros Marsalek <mmarsale@cisco.com>
Wed, 20 Aug 2014 11:28:34 +0000 (13:28 +0200)
committerMaros Marsalek <mmarsale@cisco.com>
Wed, 20 Aug 2014 11:28:34 +0000 (13:28 +0200)
Change-Id: I0152a78691b87a2d2674b0ecf0e4844f0ca9b35b
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java
opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java

index 59e9f4c9809b74322ec42c6c26067fd0810824bc..7a4c10e23b73e4523367ecfcdf0decbcddce320c 100644 (file)
@@ -19,6 +19,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.List;
 
+import java.util.concurrent.TimeUnit;
 import net.sourceforge.argparse4j.ArgumentParsers;
 import net.sourceforge.argparse4j.annotation.Arg;
 import net.sourceforge.argparse4j.inf.ArgumentParser;
@@ -49,6 +50,9 @@ public final class Main {
         @Arg(dest = "starting-port")
         public int startingPort;
 
+        @Arg(dest = "generate-config-connection-timeout")
+        public int generateConfigsTimeout;
+
         @Arg(dest = "generate-configs-dir")
         public File generateConfigsDir;
 
@@ -58,6 +62,9 @@ public final class Main {
         @Arg(dest = "ssh")
         public boolean ssh;
 
+        @Arg(dest = "exi")
+        public boolean exi;
+
         static ArgumentParser getParser() {
             final ArgumentParser parser = ArgumentParsers.newArgumentParser("netconf testool");
             parser.addArgument("--devices-count")
@@ -79,6 +86,12 @@ public final class Main {
                     .help("First port for simulated device. Each other device will have previous+1 port number")
                     .dest("starting-port");
 
+            parser.addArgument("--generate-config-connection-timeout")
+                    .type(Integer.class)
+                    .setDefault((int)TimeUnit.MINUTES.toMillis(5))
+                    .help("Timeout to be generated in initial config files")
+                    .dest("generate-config-connection-timeout");
+
             parser.addArgument("--generate-configs-batch-size")
                     .type(Integer.class)
                     .setDefault(100)
@@ -96,6 +109,12 @@ public final class Main {
                     .help("Whether to use ssh for transport or just pure tcp")
                     .dest("ssh");
 
+            parser.addArgument("--exi")
+                    .type(Boolean.class)
+                    .setDefault(false)
+                    .help("Whether to use exi to transport xml content")
+                    .dest("exi");
+
             return parser;
         }
 
@@ -110,6 +129,8 @@ public final class Main {
     }
 
     public static void main(final String[] args) {
+        ch.ethz.ssh2.log.Logger.enabled = true;
+
         final Params params = parseArgs(args, Params.getParser());
         params.validate();
 
@@ -117,7 +138,7 @@ public final class Main {
         try {
             final List<Integer> openDevices = netconfDeviceSimulator.start(params);
             if(params.generateConfigsDir != null) {
-                new ConfigGenerator(params.generateConfigsDir, openDevices).generate(params.ssh, params.generateConfigBatchSize);
+                new ConfigGenerator(params.generateConfigsDir, openDevices).generate(params.ssh, params.generateConfigBatchSize, params.generateConfigsTimeout);
             }
         } catch (final Exception e) {
             LOG.error("Unhandled exception", e);
@@ -164,7 +185,7 @@ public final class Main {
             this.openDevices = openDevices;
         }
 
-        public void generate(final boolean useSsh, final int batchSize) {
+        public void generate(final boolean useSsh, final int batchSize, final int generateConfigsTimeout) {
             if(directory.exists() == false) {
                 checkState(directory.mkdirs(), "Unable to create folder %s" + directory);
             }
@@ -182,7 +203,7 @@ public final class Main {
                 configBlueprint = configBlueprint.replace(NETCONF_USE_SSH, "%s");
 
                 final String before = configBlueprint.substring(0, configBlueprint.indexOf("<module>"));
-                final String middleBlueprint = configBlueprint.substring(configBlueprint.indexOf("<module>"), configBlueprint.indexOf("</module>") + "</module>".length());
+                final String middleBlueprint = configBlueprint.substring(configBlueprint.indexOf("<module>"), configBlueprint.indexOf("</module>"));
                 final String after = configBlueprint.substring(configBlueprint.indexOf("</module>") + "</module>".length());
 
                 int connectorCount = 0;
@@ -196,7 +217,9 @@ public final class Main {
                     }
 
                     final String name = String.valueOf(openDevice) + SIM_DEVICE_SUFFIX;
-                    final String configContent = String.format(middleBlueprint, name, String.valueOf(openDevice), String.valueOf(!useSsh));
+                    String configContent = String.format(middleBlueprint, name, String.valueOf(openDevice), String.valueOf(!useSsh));
+                    configContent = String.format("%s%s%d%s\n%s\n", configContent, "<connection-timeout-millis>", generateConfigsTimeout, "</connection-timeout-millis>", "</module>");
+
                     b.append(configContent);
                     connectorCount++;
                     if(connectorCount == batchSize) {
index b21c02ac35a24709f1e55b2a35778c26ee36212a..3a52f0a85ea4af1aca3f3fb452bf1e711a2da2df 100644 (file)
@@ -24,7 +24,6 @@ import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.util.HashedWheelTimer;
 import java.io.Closeable;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.management.ManagementFactory;
 import java.net.Inet4Address;
@@ -42,6 +41,7 @@ import java.util.concurrent.ExecutionException;
 import org.antlr.v4.runtime.ParserRuleContext;
 import org.antlr.v4.runtime.tree.ParseTreeWalker;
 import org.opendaylight.controller.netconf.api.monitoring.NetconfManagementSession;
+import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants;
 import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer;
 import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher;
 import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory;
@@ -91,7 +91,7 @@ public class NetconfDeviceSimulator implements Closeable {
         this.hashedWheelTimer = hashedWheelTimer;
     }
 
-    private NetconfServerDispatcher createDispatcher(final Map<ModuleBuilder, String> moduleBuilders) {
+    private NetconfServerDispatcher createDispatcher(final Map<ModuleBuilder, String> moduleBuilders, final boolean exi) {
 
         final Set<Capability> capabilities = Sets.newHashSet(Collections2.transform(moduleBuilders.keySet(), new Function<ModuleBuilder, Capability>() {
             @Override
@@ -108,8 +108,12 @@ public class NetconfDeviceSimulator implements Closeable {
 
         final DefaultCommitNotificationProducer commitNotifier = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer());
 
+        final Set<String> serverCapabilities = exi
+                ? NetconfServerSessionNegotiatorFactory.DEFAULT_BASE_CAPABILITIES
+                : Sets.newHashSet(XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0, XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1);
+
         final NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(
-                hashedWheelTimer, simulatedOperationProvider, idProvider, CONNECTION_TIMEOUT_MILLIS, commitNotifier, new LoggingMonitoringService());
+                hashedWheelTimer, simulatedOperationProvider, idProvider, CONNECTION_TIMEOUT_MILLIS, commitNotifier, new LoggingMonitoringService(), serverCapabilities);
 
         final NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(
                 serverNegotiatorFactory);
@@ -147,7 +151,7 @@ public class NetconfDeviceSimulator implements Closeable {
     public List<Integer> start(final Main.Params params) {
         final Map<ModuleBuilder, String> moduleBuilders = parseSchemasToModuleBuilders(params);
 
-        final NetconfServerDispatcher dispatcher = createDispatcher(moduleBuilders);
+        final NetconfServerDispatcher dispatcher = createDispatcher(moduleBuilders, params.exi);
 
         int currentPort = params.startingPort;