BUG 3274 - Generate multiple configs for same port 16/31716/2
authorTomas Cere <tcere@cisco.com>
Tue, 22 Dec 2015 14:39:22 +0000 (15:39 +0100)
committerTomas Cere <tcere@cisco.com>
Tue, 22 Dec 2015 14:40:15 +0000 (15:40 +0100)
Change-Id: I1fdf43efa6b0abf3df9e8844b06d30ace2425b50
Signed-off-by: Tomas Cere <tcere@cisco.com>
opendaylight/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/Main.java

index ee8cce67034a45f27f7000997317894961d183ee..7f6595f614748193a9e9afedf13832c7ee8005af 100644 (file)
@@ -53,6 +53,9 @@ public final class Main {
         @Arg(dest = "devices-count")
         public int deviceCount;
 
+        @Arg(dest = "devices-per-port")
+        public int devicesPerPort;
+
         @Arg(dest = "starting-port")
         public int startingPort;
 
@@ -94,10 +97,15 @@ public final class Main {
             parser.addArgument("--device-count")
                     .type(Integer.class)
                     .setDefault(1)
-                    .type(Integer.class)
-                    .help("Number of simulated netconf devices to spin")
+                    .help("Number of simulated netconf devices to spin. This is the number of actual ports open for the devices.")
                     .dest("devices-count");
 
+            parser.addArgument("--devices-per-port")
+                    .type(Integer.class)
+                    .setDefault(1)
+                    .help("Amount of config files generated per port to spoof more devices then are actually running")
+                    .dest("devices-per-port");
+
             parser.addArgument("--schemas-dir")
                     .type(File.class)
                     .help("Directory containing yang schemas to describe simulated devices. Some schemas e.g. netconf monitoring and inet types are included by default")
@@ -172,6 +180,7 @@ public final class Main {
         void validate() {
             checkArgument(deviceCount > 0, "Device count has to be > 0");
             checkArgument(startingPort > 1023, "Starting port has to be > 1023");
+            checkArgument(devicesPerPort > 0, "Atleast one device per port needed");
 
             if(schemasDir != null) {
                 checkArgument(schemasDir.exists(), "Schemas dir has to exist");
@@ -197,7 +206,10 @@ public final class Main {
             }
             if(params.distroFolder != null) {
                 final ConfigGenerator configGenerator = new ConfigGenerator(params.distroFolder, openDevices);
-                final List<File> generated = configGenerator.generate(params.ssh, params.generateConfigBatchSize, params.generateConfigsTimeout, params.generateConfigsAddress);
+                final List<File> generated = configGenerator.generate(
+                        params.ssh, params.generateConfigBatchSize,
+                        params.generateConfigsTimeout, params.generateConfigsAddress,
+                        params.devicesPerPort);
                 configGenerator.updateFeatureFile(generated);
                 configGenerator.changeLoadOrder();
             }
@@ -255,7 +267,9 @@ public final class Main {
             this.openDevices = openDevices;
         }
 
-        public List<File> generate(final boolean useSsh, final int batchSize, final int generateConfigsTimeout, final String address) {
+        public List<File> generate(final boolean useSsh, final int batchSize,
+                                   final int generateConfigsTimeout, final String address,
+                                   final int devicesPerPort) {
             if(configDir.exists() == false) {
                 Preconditions.checkState(configDir.mkdirs(), "Unable to create directory " + configDir);
             }
@@ -289,21 +303,23 @@ public final class Main {
                         batchStart = openDevice;
                     }
 
-                    final String name = String.valueOf(openDevice) + SIM_DEVICE_SUFFIX;
-                    String configContent = String.format(middleBlueprint, name, address, 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) {
-                        b.append(after);
-                        final File to = new File(configDir, String.format(SIM_DEVICE_CFG_PREFIX + "%d-%d.xml", batchStart, openDevice));
-                        generatedConfigs.add(to);
-                        Files.write(b.toString(), to, Charsets.UTF_8);
-                        connectorCount = 0;
-                        b = new StringBuilder();
-                        b.append(before);
-                        batchStart = null;
+                    for (int i = 0; i < devicesPerPort; i++) {
+                        final String name = String.valueOf(openDevice) + SIM_DEVICE_SUFFIX + (i == 0 ? "" : "-" + String.valueOf(i));
+                        String configContent = String.format(middleBlueprint, name, address, 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) {
+                            b.append(after);
+                            final File to = new File(configDir, String.format(SIM_DEVICE_CFG_PREFIX + "%d-%d.xml", batchStart, openDevice));
+                            generatedConfigs.add(to);
+                            Files.write(b.toString(), to, Charsets.UTF_8);
+                            connectorCount = 0;
+                            b = new StringBuilder();
+                            b.append(before);
+                            batchStart = null;
+                        }
                     }
                 }