X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-testtool%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Ftest%2Ftool%2FMain.java;h=e4cc80fa749a8c6d8e20a9f54a39507049c98998;hp=681b9a6a2d1e0915599a36eeb86035c8b2ba72bb;hb=c31509c7a6630e54a9f9749a643fed5e1a1ad380;hpb=0eba94d9411ea40945ddc8c732640c0cc004599f diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java index 681b9a6a2d..e4cc80fa74 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/Main.java @@ -46,7 +46,7 @@ public final class Main { private static final Logger LOG = LoggerFactory.getLogger(Main.class); - static class Params { + public static class Params { @Arg(dest = "schemas-dir") public File schemasDir; @@ -78,6 +78,9 @@ public final class Main { @Arg(dest = "debug") public boolean debug; + @Arg(dest = "notification-file") + public File notificationFile; + static ArgumentParser getParser() { final ArgumentParser parser = ArgumentParsers.newArgumentParser("netconf testool"); @@ -95,6 +98,11 @@ public final class Main { .help("Directory containing yang schemas to describe simulated devices. Some schemas e.g. netconf monitoring and inet types are included by default") .dest("schemas-dir"); + parser.addArgument("--notification-file") + .type(File.class) + .help("Xml file containing notifications that should be sent to clients after create subscription is called") + .dest("notification-file"); + parser.addArgument("--starting-port") .type(Integer.class) .setDefault(17830) @@ -147,7 +155,7 @@ public final class Main { void validate() { checkArgument(deviceCount > 0, "Device count has to be > 0"); - checkArgument(startingPort > 1024, "Starting port has to be > 1024"); + checkArgument(startingPort > 1023, "Starting port has to be > 1023"); if(schemasDir != null) { checkArgument(schemasDir.exists(), "Schemas dir has to exist"); @@ -167,6 +175,10 @@ public final class Main { final NetconfDeviceSimulator netconfDeviceSimulator = new NetconfDeviceSimulator(); try { final List openDevices = netconfDeviceSimulator.start(params); + if (openDevices.size() == 0) { + LOG.error("Failed to start any simulated devices, exiting..."); + System.exit(1); + } if(params.distroFolder != null) { final ConfigGenerator configGenerator = new ConfigGenerator(params.distroFolder, openDevices); final List generated = configGenerator.generate(params.ssh, params.generateConfigBatchSize, params.generateConfigsTimeout, params.generateConfigsAddress); @@ -219,7 +231,7 @@ public final class Main { private final File configDir; private final List openDevices; - private final File ncFeatureFile; + private final List ncFeatureFiles; private final File etcDir; private final File loadOrderCfgFile; @@ -227,7 +239,7 @@ public final class Main { this.configDir = new File(directory, ETC_OPENDAYLIGHT_KARAF_PATH); this.etcDir = new File(directory, ETC_KARAF_PATH); this.loadOrderCfgFile = new File(etcDir, ORG_OPS4J_PAX_URL_MVN_CFG); - this.ncFeatureFile = getFeatureFile(directory, "features-netconf-connector"); + this.ncFeatureFiles = getFeatureFile(directory, "features-netconf-connector", "xml"); this.openDevices = openDevices; } @@ -309,37 +321,49 @@ public final class Main { public void updateFeatureFile(final List generated) { - // TODO karaf core contains jaxb for feature files, use that for modification + // TODO karaf core contains jaxb for feature files, use that for + // modification try { - final Document document = XmlUtil.readXmlToDocument(Files.toString(ncFeatureFile, Charsets.UTF_8)); - final NodeList childNodes = document.getDocumentElement().getChildNodes(); - - for (int i = 0; i < childNodes.getLength(); i++) { - final Node item = childNodes.item(i); - if(item instanceof Element == false) { - continue; - } - if(item.getLocalName().equals("feature") ==false) { - continue; - } - - if(NETCONF_CONNECTOR_ALL_FEATURE.equals(((Element) item).getAttribute("name"))) { - final Element ncAllFeatureDefinition = (Element) item; - // Clean previous generated files - for (final XmlElement configfile : XmlElement.fromDomElement(ncAllFeatureDefinition).getChildElements("configfile")) { - ncAllFeatureDefinition.removeChild(configfile.getDomElement()); + for (final File featureFile : ncFeatureFiles) { + final Document document = XmlUtil.readXmlToDocument(Files + .toString(featureFile, Charsets.UTF_8)); + final NodeList childNodes = document.getDocumentElement().getChildNodes(); + + for (int i = 0; i < childNodes.getLength(); i++) { + final Node item = childNodes.item(i); + if (item instanceof Element == false) { + continue; + } + if (item.getLocalName().equals("feature") == false) { + continue; } - for (final File file : generated) { - final Element configfile = document.createElement("configfile"); - configfile.setTextContent("file:" + ETC_OPENDAYLIGHT_KARAF_PATH + file.getName()); - configfile.setAttribute("finalname", ETC_OPENDAYLIGHT_KARAF_PATH + file.getName()); - ncAllFeatureDefinition.appendChild(configfile); + + if (NETCONF_CONNECTOR_ALL_FEATURE + .equals(((Element) item).getAttribute("name"))) { + final Element ncAllFeatureDefinition = (Element) item; + // Clean previous generated files + for (final XmlElement configfile : XmlElement + .fromDomElement(ncAllFeatureDefinition) + .getChildElements("configfile")) { + ncAllFeatureDefinition.removeChild(configfile.getDomElement()); + } + for (final File file : generated) { + final Element configfile = document.createElement("configfile"); + configfile.setTextContent("file:" + + ETC_OPENDAYLIGHT_KARAF_PATH + + file.getName()); + configfile.setAttribute( + "finalname", + ETC_OPENDAYLIGHT_KARAF_PATH + + file.getName()); + ncAllFeatureDefinition.appendChild(configfile); + } } } - } - Files.write(XmlUtil.toString(document), ncFeatureFile, Charsets.UTF_8); - LOG.info("Feature file {} updated", ncFeatureFile); + Files.write(XmlUtil.toString(document), featureFile,Charsets.UTF_8); + LOG.info("Feature file {} updated", featureFile); + } } catch (final IOException e) { throw new RuntimeException("Unable to load features file as a resource"); } catch (final SAXException e) { @@ -348,7 +372,7 @@ public final class Main { } - private static File getFeatureFile(final File distroFolder, final String featureName) { + private static List getFeatureFile(final File distroFolder, final String featureName, final String suffix) { checkExistingDir(distroFolder, String.format("Folder %s does not exist", distroFolder)); final File systemDir = checkExistingDir(new File(distroFolder, "system"), String.format("Folder %s does not contain a karaf distro, folder system is missing", distroFolder)); @@ -368,12 +392,13 @@ public final class Main { } }); - return newestVersionDir.listFiles(new FileFilter() { + return Lists.newArrayList(newestVersionDir.listFiles(new FileFilter() { @Override public boolean accept(final File pathname) { - return pathname.getName().contains(featureName); + return pathname.getName().contains(featureName) + && Files.getFileExtension(pathname.getName()).equals(suffix); } - })[0]; + })); } private static File checkExistingDir(final File folder, final String msg) {