From 46a08c4d7290ea69f91a8fb3cfa718cc0921cc75 Mon Sep 17 00:00:00 2001 From: Juraj Veverka Date: Fri, 20 Oct 2017 09:39:53 +0200 Subject: [PATCH] Testtool functionality enhanced. User now may inject own implementation of NetconfOperationService using configuration object. Change-Id: I41ac6d807db56ee07fbfde9d9b5bb80e714b7ca2 Signed-off-by: Juraj Veverka --- netconf/tools/netconf-testtool/README.adoc | 14 ++++ .../test/tool/NetconfDeviceSimulator.java | 5 +- .../test/tool/config/Configuration.java | 11 ++- .../tool/config/ConfigurationBuilder.java | 7 ++ .../operations/DefaultOperationsCreator.java | 78 +++++++++++++++++++ .../tool/operations/OperationsCreator.java | 37 +++++++++ .../tool/operations/OperationsProvider.java | 65 ++++------------ 7 files changed, 165 insertions(+), 52 deletions(-) create mode 100644 netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/DefaultOperationsCreator.java create mode 100644 netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsCreator.java diff --git a/netconf/tools/netconf-testtool/README.adoc b/netconf/tools/netconf-testtool/README.adoc index cfdefdff9c..8072acb209 100644 --- a/netconf/tools/netconf-testtool/README.adoc +++ b/netconf/tools/netconf-testtool/README.adoc @@ -52,6 +52,19 @@ public class RpcHandlerImpl implements RpcHandler { } } +---- +* Override operations creator org.opendaylight.netconf.test.tool.operations.OperationsCreator + in order to inject custom simulated behavior. +---- +public class OperationsCreatorImpl implements OperationsCreator { + @Override + public NetconfOperationService getNetconfOperationService(Set capabilities, + SessionIdProvider idProvider, + String netconfSessionIdForReporting) { + ... + return netconfOperationService; + } +} ---- * Start NetConf device simulator in your code ---- @@ -62,6 +75,7 @@ public class Main { .setModels(models) .setCapabilities(capabilities) .setRpcHandler(new RpcHandlerImpl()) + .setOperationsCreator(new OperationsCreatorImpl()); .build(); NetConfDeviceSimulator netConfDeviceSimulator = new NetConfDeviceSimulator(configuration); diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java index dffd79e6c5..ab45f2d737 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/NetconfDeviceSimulator.java @@ -54,6 +54,7 @@ import org.opendaylight.netconf.ssh.SshProxyServerConfiguration; import org.opendaylight.netconf.ssh.SshProxyServerConfigurationBuilder; import org.opendaylight.netconf.test.tool.config.Configuration; import org.opendaylight.netconf.test.tool.customrpc.SettableOperationProvider; +import org.opendaylight.netconf.test.tool.operations.DefaultOperationsCreator; import org.opendaylight.netconf.test.tool.operations.OperationsProvider; import org.opendaylight.netconf.test.tool.rpchandler.SettableOperationRpcProvider; import org.opendaylight.netconf.test.tool.schemacache.SchemaSourceCache; @@ -150,7 +151,9 @@ public class NetconfDeviceSimulator implements Closeable { Optional.fromNullable(configuration.getInitialConfigXMLFile())); } else { LOG.info("using OperationsProvider."); - operationProvider = new OperationsProvider(idProvider, transformedCapabilities); + operationProvider = new OperationsProvider(idProvider, transformedCapabilities, + configuration.getOperationsCreator() != null ? configuration.getOperationsCreator() + : DefaultOperationsCreator.getDefaultOperationServiceCreator(idProvider.getCurrentSessionId())); } diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/Configuration.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/Configuration.java index c57f158174..b0e132d580 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/Configuration.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/Configuration.java @@ -12,6 +12,7 @@ import java.io.File; import java.util.Set; import java.util.concurrent.TimeUnit; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; +import org.opendaylight.netconf.test.tool.operations.OperationsCreator; import org.opendaylight.netconf.test.tool.rpchandler.RpcHandler; import org.opendaylight.netconf.test.tool.rpchandler.RpcHandlerDefault; @@ -39,6 +40,7 @@ public class Configuration { private Set models; private Set capabilities = DEFAULT_BASE_CAPABILITIES_EXI; private RpcHandler rpcHandler = new RpcHandlerDefault(); + private OperationsCreator operationsCreator; @Deprecated private boolean mdSal = false; @@ -130,6 +132,14 @@ public class Configuration { this.rpcHandler = rpcHandler; } + public OperationsCreator getOperationsCreator() { + return operationsCreator; + } + + public void setOperationsCreator(OperationsCreator operationsCreator) { + this.operationsCreator = operationsCreator; + } + @Deprecated public boolean isMdSal() { return mdSal; @@ -184,5 +194,4 @@ public class Configuration { public void setSchemasDir(File schemasDir) { this.schemasDir = schemasDir; } - } diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/ConfigurationBuilder.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/ConfigurationBuilder.java index 2ed4aa247a..f8d6e13049 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/ConfigurationBuilder.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/config/ConfigurationBuilder.java @@ -10,6 +10,7 @@ package org.opendaylight.netconf.test.tool.config; import java.io.File; import java.util.Set; import org.opendaylight.netconf.test.tool.TesttoolParameters; +import org.opendaylight.netconf.test.tool.operations.OperationsCreator; import org.opendaylight.netconf.test.tool.rpchandler.RpcHandler; public class ConfigurationBuilder { @@ -89,6 +90,11 @@ public class ConfigurationBuilder { return this; } + public ConfigurationBuilder setOperationsCreator(OperationsCreator operationsCreator) { + this.configuration.setOperationsCreator(operationsCreator); + return this; + } + public ConfigurationBuilder from(Configuration configuration) { this.configuration.setThreadPoolSize(configuration.getThreadPoolSize()); this.configuration.setGenerateConfigsTimeout(configuration.getGenerateConfigsTimeout()); @@ -99,6 +105,7 @@ public class ConfigurationBuilder { this.configuration.setSsh(configuration.isSsh()); this.configuration.setIp(configuration.getIp()); this.configuration.setRpcHandler(configuration.getRpcHandler()); + this.configuration.setOperationsCreator(configuration.getOperationsCreator()); this.configuration.setMdSal(configuration.isMdSal()); this.configuration.setRpcConfigFile(configuration.getRpcConfigFile()); this.configuration.setInitialConfigXMLFile(configuration.getInitialConfigXMLFile()); diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/DefaultOperationsCreator.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/DefaultOperationsCreator.java new file mode 100644 index 0000000000..21e2b59169 --- /dev/null +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/DefaultOperationsCreator.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.netconf.test.tool.operations; + +import com.google.common.base.Optional; +import com.google.common.collect.Sets; +import java.util.Set; +import org.opendaylight.controller.config.util.capability.Capability; +import org.opendaylight.netconf.impl.SessionIdProvider; +import org.opendaylight.netconf.mapping.api.NetconfOperation; +import org.opendaylight.netconf.mapping.api.NetconfOperationService; +import org.opendaylight.netconf.test.tool.rpc.DataList; +import org.opendaylight.netconf.test.tool.rpc.SimulatedCommit; +import org.opendaylight.netconf.test.tool.rpc.SimulatedCreateSubscription; +import org.opendaylight.netconf.test.tool.rpc.SimulatedDiscardChanges; +import org.opendaylight.netconf.test.tool.rpc.SimulatedEditConfig; +import org.opendaylight.netconf.test.tool.rpc.SimulatedGet; +import org.opendaylight.netconf.test.tool.rpc.SimulatedGetConfig; +import org.opendaylight.netconf.test.tool.rpc.SimulatedLock; +import org.opendaylight.netconf.test.tool.rpc.SimulatedUnLock; + +public class DefaultOperationsCreator implements OperationsCreator { + + private final SimulatedOperationService simulatedOperationService; + + private DefaultOperationsCreator(final long currentSessionId) { + simulatedOperationService = new SimulatedOperationService(currentSessionId); + } + + @Override + public NetconfOperationService getNetconfOperationService(final Set caps, + final SessionIdProvider idProvider, + final String netconfSessionIdForReporting) { + return simulatedOperationService; + } + + public static DefaultOperationsCreator getDefaultOperationServiceCreator(final long currentSessionId) { + return new DefaultOperationsCreator(currentSessionId); + } + + static class SimulatedOperationService implements NetconfOperationService { + + private final long currentSessionId; + + SimulatedOperationService(final long currentSessionId) { + this.currentSessionId = currentSessionId; + } + + @Override + public Set getNetconfOperations() { + 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, Optional.absent()); + final SimulatedCommit sCommit = new SimulatedCommit(String.valueOf(currentSessionId)); + final SimulatedLock sLock = new SimulatedLock(String.valueOf(currentSessionId)); + final SimulatedUnLock sUnlock = new SimulatedUnLock(String.valueOf(currentSessionId)); + final SimulatedCreateSubscription sCreateSubs = new SimulatedCreateSubscription( + String.valueOf(currentSessionId), Optional.absent()); + final SimulatedDiscardChanges sDiscardChanges = new SimulatedDiscardChanges( + String.valueOf(currentSessionId)); + return Sets.newHashSet( + sGet, sGetConfig, sEditConfig, sCommit, sLock, sUnlock, sCreateSubs, sDiscardChanges); + } + + @Override + public void close() { + } + + } +} diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsCreator.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsCreator.java new file mode 100644 index 0000000000..0cf0d47687 --- /dev/null +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsCreator.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.netconf.test.tool.operations; + +import java.util.Set; +import org.opendaylight.controller.config.util.capability.Capability; +import org.opendaylight.netconf.impl.SessionIdProvider; +import org.opendaylight.netconf.mapping.api.NetconfOperationService; + +/** + * Creator which enables testtool users to inject own. + * implementation of {@link NetconfOperationService} + */ +public interface OperationsCreator { + + /** + * Creates instance of {@link NetconfOperationService} based on caller context. + * @param capabilities + * Model capabilities. + * @param idProvider + * Provider's session context. + * @param netconfSessionIdForReporting + * Netconf SessionId for reporting + * @return + * Instance of {@link NetconfOperationService}. + */ + NetconfOperationService getNetconfOperationService(Set capabilities, + SessionIdProvider idProvider, + String netconfSessionIdForReporting); + +} diff --git a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsProvider.java b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsProvider.java index de05df7996..91384f6e9e 100644 --- a/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsProvider.java +++ b/netconf/tools/netconf-testtool/src/main/java/org/opendaylight/netconf/test/tool/operations/OperationsProvider.java @@ -8,36 +8,32 @@ package org.opendaylight.netconf.test.tool.operations; -import com.google.common.base.Optional; -import com.google.common.collect.Sets; import java.util.Collections; import java.util.Set; import org.opendaylight.controller.config.util.capability.Capability; import org.opendaylight.netconf.api.monitoring.CapabilityListener; import org.opendaylight.netconf.impl.SessionIdProvider; -import org.opendaylight.netconf.mapping.api.NetconfOperation; import org.opendaylight.netconf.mapping.api.NetconfOperationService; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory; -import org.opendaylight.netconf.test.tool.rpc.DataList; -import org.opendaylight.netconf.test.tool.rpc.SimulatedCommit; -import org.opendaylight.netconf.test.tool.rpc.SimulatedCreateSubscription; -import org.opendaylight.netconf.test.tool.rpc.SimulatedDiscardChanges; -import org.opendaylight.netconf.test.tool.rpc.SimulatedEditConfig; -import org.opendaylight.netconf.test.tool.rpc.SimulatedGet; -import org.opendaylight.netconf.test.tool.rpc.SimulatedGetConfig; -import org.opendaylight.netconf.test.tool.rpc.SimulatedLock; -import org.opendaylight.netconf.test.tool.rpc.SimulatedUnLock; public class OperationsProvider implements NetconfOperationServiceFactory { + private final Set caps; - private final SimulatedOperationService simulatedOperationService; + private final SessionIdProvider idProvider; + private final OperationsCreator operationsCreator; public OperationsProvider(final SessionIdProvider idProvider, - final Set caps) { + final Set caps) { + this(idProvider, caps, + DefaultOperationsCreator.getDefaultOperationServiceCreator(idProvider.getCurrentSessionId())); + } + + public OperationsProvider(final SessionIdProvider idProvider, + final Set caps, OperationsCreator operationsCreator) { this.caps = caps; - simulatedOperationService = new SimulatedOperationService( - idProvider.getCurrentSessionId()); + this.idProvider = idProvider; + this.operationsCreator = operationsCreator; } @Override @@ -47,7 +43,7 @@ public class OperationsProvider implements NetconfOperationServiceFactory { @Override public AutoCloseable registerCapabilityListener( - final CapabilityListener listener) { + final CapabilityListener listener) { listener.onCapabilitiesChanged(caps, Collections.emptySet()); return new AutoCloseable() { @Override @@ -58,38 +54,7 @@ public class OperationsProvider implements NetconfOperationServiceFactory { @Override public NetconfOperationService createService( - final String netconfSessionIdForReporting) { - return simulatedOperationService; - } - - static class SimulatedOperationService implements NetconfOperationService { - private final long currentSessionId; - - SimulatedOperationService(final long currentSessionId) { - this.currentSessionId = currentSessionId; - } - - @Override - public Set getNetconfOperations() { - 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, Optional.absent()); - final SimulatedCommit sCommit = new SimulatedCommit(String.valueOf(currentSessionId)); - final SimulatedLock sLock = new SimulatedLock(String.valueOf(currentSessionId)); - final SimulatedUnLock sUnlock = new SimulatedUnLock(String.valueOf(currentSessionId)); - final SimulatedCreateSubscription sCreateSubs = new SimulatedCreateSubscription( - String.valueOf(currentSessionId), Optional.absent()); - final SimulatedDiscardChanges sDiscardChanges = new SimulatedDiscardChanges( - String.valueOf(currentSessionId)); - return Sets.newHashSet( - sGet, sGetConfig, sEditConfig, sCommit, sLock, sUnlock, sCreateSubs, sDiscardChanges); - } - - @Override - public void close() { - } - + final String netconfSessionIdForReporting) { + return operationsCreator.getNetconfOperationService(caps, idProvider, netconfSessionIdForReporting); } } -- 2.36.6