@Arg(dest = "md-sal")
public boolean mdSal;
+ @Arg(dest = "initial-config-xml-file")
+ public File initialConfigXMLFile;
+
static ArgumentParser getParser() {
final ArgumentParser parser = ArgumentParsers.newArgumentParser("netconf testool");
.help("Xml file containing notifications that should be sent to clients after create subscription is called")
.dest("notification-file");
+ parser.addArgument("--initial-config-xml-file")
+ .type(File.class)
+ .help("Xml file containing initial simulatted configuration to be returned via get-config rpc")
+ .dest("initial-config-xml-file");
+
parser.addArgument("--starting-port")
.type(Integer.class)
.setDefault(17830)
this.nioExecutor = nioExecutor;
}
- private NetconfServerDispatcherImpl createDispatcher(final Map<ModuleBuilder, String> moduleBuilders, final boolean exi, final int generateConfigsTimeout, final Optional<File> notificationsFile, final boolean mdSal) {
+ private NetconfServerDispatcherImpl createDispatcher(final Map<ModuleBuilder, String> moduleBuilders, final boolean exi, final int generateConfigsTimeout, final Optional<File> notificationsFile, final boolean mdSal, final Optional<File> initialConfigXMLFile) {
final Set<Capability> capabilities = Sets.newHashSet(Collections2.transform(moduleBuilders.keySet(), new Function<ModuleBuilder, Capability>() {
@Override
final AggregatedNetconfOperationServiceFactory aggregatedNetconfOperationServiceFactory = new AggregatedNetconfOperationServiceFactory();
final NetconfOperationServiceFactory operationProvider = mdSal ? new MdsalOperationProvider(idProvider, capabilities, schemaContext) :
- new SimulatedOperationProvider(idProvider, capabilities, notificationsFile);
+ new SimulatedOperationProvider(idProvider, capabilities, notificationsFile, initialConfigXMLFile);
capabilities.add(new BasicCapability("urn:ietf:params:netconf:capability:candidate:1.0"));
final Map<ModuleBuilder, String> moduleBuilders = parseSchemasToModuleBuilders(params);
- final NetconfServerDispatcherImpl dispatcher = createDispatcher(moduleBuilders, params.exi, params.generateConfigsTimeout, Optional.fromNullable(params.notificationFile), params.mdSal);
+ final NetconfServerDispatcherImpl dispatcher = createDispatcher(moduleBuilders, params.exi, params.generateConfigsTimeout, Optional.fromNullable(params.notificationFile), params.mdSal, Optional.fromNullable(params.initialConfigXMLFile));
int currentPort = params.startingPort;
public SimulatedOperationProvider(final SessionIdProvider idProvider,
final Set<Capability> caps,
- final Optional<File> notificationsFile) {
+ final Optional<File> notificationsFile,
+ final Optional<File> initialConfigXMLFile) {
this.caps = caps;
- simulatedOperationService = new SimulatedOperationService(idProvider.getCurrentSessionId(), notificationsFile);
+ simulatedOperationService = new SimulatedOperationService(idProvider.getCurrentSessionId(), notificationsFile, initialConfigXMLFile);
}
@Override
static class SimulatedOperationService implements NetconfOperationService {
private final long currentSessionId;
private final Optional<File> notificationsFile;
+ private final Optional<File> initialConfigXMLFile;
- public SimulatedOperationService(final long currentSessionId, final Optional<File> notificationsFile) {
+ public SimulatedOperationService(final long currentSessionId, final Optional<File> notificationsFile, final Optional<File> initialConfigXMLFile) {
this.currentSessionId = currentSessionId;
this.notificationsFile = notificationsFile;
+ this.initialConfigXMLFile = initialConfigXMLFile;
}
@Override
final DataList storage = new DataList();
final SimulatedGet sGet = new SimulatedGet(String.valueOf(currentSessionId), storage);
final SimulatedEditConfig sEditConfig = new SimulatedEditConfig(String.valueOf(currentSessionId), storage);
- final SimulatedGetConfig sGetConfig = new SimulatedGetConfig(String.valueOf(currentSessionId), storage);
+ final SimulatedGetConfig sGetConfig = new SimulatedGetConfig(String.valueOf(currentSessionId), storage, initialConfigXMLFile );
final SimulatedCommit sCommit = new SimulatedCommit(String.valueOf(currentSessionId));
final SimulatedLock sLock = new SimulatedLock(String.valueOf(currentSessionId));
final SimulatedUnLock sUnlock = new SimulatedUnLock(String.valueOf(currentSessionId));
package org.opendaylight.netconf.test.tool.rpc;
import com.google.common.base.Optional;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
import org.opendaylight.controller.config.util.xml.DocumentedException;
import org.opendaylight.controller.config.util.xml.XmlElement;
import org.opendaylight.controller.config.util.xml.XmlUtil;
import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
public class SimulatedGetConfig extends AbstractConfigNetconfOperation {
private final DataList storage;
+ private static final Logger LOG = LoggerFactory
+ .getLogger(SimulatedGetConfig.class);
- public SimulatedGetConfig(final String netconfSessionIdForReporting, final DataList storage) {
+ public SimulatedGetConfig(final String netconfSessionIdForReporting, final DataList storage, final Optional<File> initialConfigXMLFile) {
super(null, netconfSessionIdForReporting);
- this.storage = storage;
+
+ if(initialConfigXMLFile.isPresent()) {
+ LOG.info("File is present: {}", initialConfigXMLFile.get()
+ .getName());
+ this.storage = loadInitialConfigXMLFile(initialConfigXMLFile.get());
+ }
+ else {
+ this.storage = storage;
+ }
+ }
+
+ private final DataList loadInitialConfigXMLFile( final File file ) {
+ LOG.info("Loading initial config xml file: {}", file.getName());
+ DataList configData = new DataList();
+ List<XmlElement> xmlElementList = Collections.emptyList();
+ try {
+ Element element = XmlUtil.readXmlToElement(file);
+ XmlElement xmlElement = XmlElement.fromDomElement(element);
+ xmlElementList = xmlElement.getChildElements();
+ configData.setConfigList(xmlElementList);
+ }
+ catch (IOException e) {
+ LOG.info("IO exception loading xml file: {} ", e.getMessage());
+
+ }
+ catch (SAXException e) {
+ LOG.info("SAXException {}", e.getMessage());
+ }
+ return configData;
}
@Override