From 6a0a63249f5e6b9b21569e4610c292567e315176 Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Wed, 18 Dec 2013 14:44:56 +0100 Subject: [PATCH] Fixed some TODOs in netconf. Remove duplicate code Remove commented modules in get-config response Add test for netconf - persister integration Remove already fixed TODOs Change-Id: If79fa8652a7018ba2927044d6784d7c9dfafb220 Signed-off-by: Maros Marsalek --- .../mapping/config/Config.java | 23 +- .../mapping/runtime/InstanceRuntime.java | 1 - .../operations/editconfig/EditConfig.java | 48 +-- .../editconfig/EditStrategyType.java | 1 - .../operations/get/Get.java | 6 +- .../operations/getconfig/GetConfig.java | 28 +- .../operations/runtimerpc/RuntimeRpc.java | 1 - .../confignetconfconnector/util/Util.java | 18 -- .../ConfigPersisterNotificationHandler.java | 10 +- .../controller/netconf/persist/impl/Util.java | 2 - .../netconf/impl/CapabilityProviderImpl.java | 10 +- .../netconf/impl/NetconfServerDispatcher.java | 4 +- ...NetconfServerSessionNegotiatorFactory.java | 11 +- .../osgi/NetconfMonitoringServiceImpl.java | 5 +- .../impl/osgi/NetconfOperationRouterImpl.java | 1 - .../netconf/impl/util/NetconfUtil.java | 16 +- .../impl/NetconfDispatcherImplTest.java | 28 +- .../it/NetconfConfigPersisterITTest.java | 286 ++++++++++++++++++ .../controller/netconf/it/NetconfITTest.java | 42 +-- .../netconf/it/NetconfMonitoringITTest.java | 38 ++- .../netconf/mapping/api/HandlingPriority.java | 2 - .../AbstractNetconfSessionNegotiator.java | 2 +- .../editConfig_expectedResult.xml | 15 +- 23 files changed, 410 insertions(+), 188 deletions(-) create mode 100644 opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java index fc6499e06e..ec73cd6068 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/config/Config.java @@ -119,12 +119,11 @@ public class Config { ModuleConfig mapping = moduleConfigs.get(moduleNamespace).get(moduleMappingEntry.getKey()); if (moduleMappingEntry.getValue().isEmpty()) { - addEmptyModulesCommented(document, modulesElement, moduleNamespace, moduleMappingEntry); - } else { - for (ObjectName objectName : moduleMappingEntry.getValue()) { - modulesElement - .appendChild(mapping.toXml(objectName, serviceTracker, document, moduleNamespace)); - } + continue; + } + + for (ObjectName objectName : moduleMappingEntry.getValue()) { + modulesElement.appendChild(mapping.toXml(objectName, serviceTracker, document, moduleNamespace)); } } @@ -135,18 +134,6 @@ public class Config { return root; } - // TODO remove commented modules from output - private void addEmptyModulesCommented(Document document, Element root, String moduleNamespace, - Entry> moduleMappingEntry) { - Element emptyModule = document.createElement(XmlNetconfConstants.MODULE_KEY); - - Element typeElement = XmlUtil.createTextElement(document, XmlNetconfConstants.TYPE_KEY, - moduleMappingEntry.getKey()); - emptyModule.appendChild(typeElement); - - root.appendChild(document.createComment(XmlUtil.toString(emptyModule, false))); - } - // TODO refactor, replace string representing namespace with namespace class // TODO refactor, replace Map->Multimap with e.g. ConfigElementResolved // class diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java index 70b10d0019..6a0d7508c8 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/mapping/runtime/InstanceRuntime.java @@ -88,7 +88,6 @@ public class InstanceRuntime { public Element toXml(ObjectName rootOn, Set childRbeOns, Document document, String instanceIndex, Element parentElement, String namespace) { - // TODO namespace Element xml = instanceMapping.toXml(rootOn, null, namespace, document, parentElement); if (instanceIndex != null) { diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java index ca9fb60423..709573c241 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditConfig.java @@ -210,32 +210,38 @@ public class EditConfig extends AbstractConfigNetconfOperation { public static Config getConfigMapping(ConfigRegistryClient configRegistryClient, Map> mBeanEntries) { - Map> factories = transform(configRegistryClient, mBeanEntries); + Map> factories = transformMbeToModuleConfigs(configRegistryClient, mBeanEntries); return new Config(factories); } - // TODO refactor - private static Map> transform - (final ConfigRegistryClient configRegistryClient, Map> transformMbeToModuleConfigs + (final ConfigRegistryClient configRegistryClient, Map> mBeanEntries) { - return Maps.transformEntries(mBeanEntries, - new Maps.EntryTransformer, Map>() { - - @Override - public Map transformEntry(String arg0, Map arg1) { - return Maps.transformEntries(arg1, - new Maps.EntryTransformer() { - - @Override - public ModuleConfig transformEntry(String key, ModuleMXBeanEntry moduleMXBeanEntry) { - return new ModuleConfig(key, new InstanceConfig(configRegistryClient, moduleMXBeanEntry - .getAttributes()), moduleMXBeanEntry.getProvidedServices().values()); - } - }); - } - }); + + Map> namespaceToModuleNameToModuleConfig = Maps.newHashMap(); + + for (String namespace : mBeanEntries.keySet()) { + for (Entry moduleNameToMbe : mBeanEntries.get(namespace).entrySet()) { + String moduleName = moduleNameToMbe.getKey(); + ModuleMXBeanEntry moduleMXBeanEntry = moduleNameToMbe.getValue(); + + ModuleConfig moduleConfig = new ModuleConfig(moduleName, new InstanceConfig(configRegistryClient, + moduleMXBeanEntry.getAttributes()), moduleMXBeanEntry + .getProvidedServices().values()); + + Map moduleNameToModuleConfig = namespaceToModuleNameToModuleConfig.get(namespace); + if(moduleNameToModuleConfig == null) { + moduleNameToModuleConfig = Maps.newHashMap(); + namespaceToModuleNameToModuleConfig.put(namespace, moduleNameToModuleConfig); + } + + moduleNameToModuleConfig.put(moduleName, moduleConfig); + } + } + + return namespaceToModuleNameToModuleConfig; } @Override diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java index 676467553b..06560b2d27 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/editconfig/EditStrategyType.java @@ -13,7 +13,6 @@ import com.google.common.collect.Multimap; import java.util.EnumSet; import java.util.Set; -//FIXME: make thread safe public enum EditStrategyType { // can be default merge, replace, none, diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java index 21771b64c7..ea602091a0 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/get/Get.java @@ -26,7 +26,7 @@ import org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtim import org.opendaylight.controller.netconf.confignetconfconnector.mapping.runtime.Runtime; import org.opendaylight.controller.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation; import org.opendaylight.controller.netconf.confignetconfconnector.operations.Datastore; -import org.opendaylight.controller.netconf.confignetconfconnector.operations.getconfig.GetConfig; +import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig; import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; @@ -144,8 +144,8 @@ public class Get extends AbstractConfigNetconfOperation { final Map> moduleRuntimes = createModuleRuntimes(configRegistryClient, yangStoreSnapshot.getModuleMXBeanEntryMap()); - final Map> moduleConfigs = GetConfig.transform(configRegistryClient, - yangStoreSnapshot.getModuleMXBeanEntryMap()); + final Map> moduleConfigs = EditConfig.transformMbeToModuleConfigs( + configRegistryClient, yangStoreSnapshot.getModuleMXBeanEntryMap()); final Runtime runtime = new Runtime(moduleRuntimes, moduleConfigs); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java index 42f8c2dd8b..16dd5ad80a 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java @@ -9,21 +9,18 @@ package org.opendaylight.controller.netconf.confignetconfconnector.operations.getconfig; import com.google.common.base.Optional; -import com.google.common.collect.Maps; import org.opendaylight.controller.config.util.ConfigRegistryClient; import org.opendaylight.controller.config.util.ConfigTransactionClient; import org.opendaylight.controller.config.yang.store.api.YangStoreSnapshot; -import org.opendaylight.controller.config.yangjmxgenerator.ModuleMXBeanEntry; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity; import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag; import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorType; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config; -import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfig; -import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleConfig; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; import org.opendaylight.controller.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation; import org.opendaylight.controller.netconf.confignetconfconnector.operations.Datastore; +import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig; import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; @@ -83,7 +80,7 @@ public class GetConfig extends AbstractConfigNetconfOperation { final Set instances = Datastore.getInstanceQueryStrategy(source, this.transactionProvider) .queryInstances(configRegistryClient); - final Config configMapping = new Config(transform(configRegistryClient, + final Config configMapping = new Config(EditConfig.transformMbeToModuleConfigs(configRegistryClient, yangStoreSnapshot.getModuleMXBeanEntryMap())); @@ -98,27 +95,6 @@ public class GetConfig extends AbstractConfigNetconfOperation { return dataElement; } - // TODO refactor ... duplicate code - public static Map> transform(final ConfigRegistryClient configRegistryClient, - Map> mBeanEntries) { - return Maps.transformEntries(mBeanEntries, - new Maps.EntryTransformer, Map>() { - - @Override - public Map transformEntry(String arg0, Map arg1) { - return Maps.transformEntries(arg1, - new Maps.EntryTransformer() { - - @Override - public ModuleConfig transformEntry(String key, ModuleMXBeanEntry value) { - return new ModuleConfig(key, new InstanceConfig(configRegistryClient, value - .getAttributes()), value.getProvidedServices().values()); - } - }); - } - }); - } - @Override protected String getOperationName() { return GET_CONFIG; diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java index 7463bdd429..f838c6f9f5 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/runtimerpc/RuntimeRpc.java @@ -127,7 +127,6 @@ public class RuntimeRpc extends AbstractConfigNetconfOperation { if (contextInstanceElement.isPresent() == false) return HandlingPriority.CANNOT_HANDLE; - // FIXME update xpath to instance to conform to config-api yang final RuntimeRpcElementResolved id = RuntimeRpcElementResolved.fromXpath(contextInstanceElement.get() .getTextContent(), netconfOperationName, netconfOperationNamespace); diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/util/Util.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/util/Util.java index 1c806742e9..fc8ddc01bd 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/util/Util.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/util/Util.java @@ -9,13 +9,6 @@ package org.opendaylight.controller.netconf.confignetconfconnector.util; import com.google.common.base.Preconditions; -import org.opendaylight.controller.config.yang.store.api.YangStoreException; -import org.opendaylight.controller.config.yang.store.api.YangStoreService; -import org.opendaylight.controller.config.yang.store.api.YangStoreSnapshot; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorType; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -41,15 +34,4 @@ public final class Util { + " should be " + clazz + " of " + value); } - // TODO: add message and proper error types - public static YangStoreSnapshot getYangStore(final YangStoreService yangStoreService) - throws NetconfDocumentedException { - try { - return yangStoreService.getYangStoreSnapshot(); - } catch (final YangStoreException e) { - throw new NetconfDocumentedException("TODO", e, ErrorType.application, ErrorTag.bad_attribute, - ErrorSeverity.error); - } - } - } diff --git a/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/ConfigPersisterNotificationHandler.java b/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/ConfigPersisterNotificationHandler.java index 1c3ac7a455..b66a1a57c2 100644 --- a/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/ConfigPersisterNotificationHandler.java +++ b/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/ConfigPersisterNotificationHandler.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.netconf.persist.impl; +import org.opendaylight.controller.config.persist.api.Persister; import org.opendaylight.controller.netconf.api.jmx.CommitJMXNotification; import org.opendaylight.controller.netconf.api.jmx.DefaultCommitOperationMXBean; import org.opendaylight.controller.netconf.api.jmx.NetconfJMXNotification; @@ -36,11 +37,11 @@ public class ConfigPersisterNotificationHandler implements NotificationListener, private static final Logger logger = LoggerFactory.getLogger(ConfigPersisterNotificationHandler.class); private final MBeanServerConnection mBeanServerConnection; private final NetconfClient netconfClient; - private final PersisterAggregator persisterAggregator; + private final Persister persisterAggregator; private final Pattern ignoredMissingCapabilityRegex; public ConfigPersisterNotificationHandler(MBeanServerConnection mBeanServerConnection, NetconfClient netconfClient, - PersisterAggregator persisterAggregator, Pattern ignoredMissingCapabilityRegex) { + Persister persisterAggregator, Pattern ignoredMissingCapabilityRegex) { this.mBeanServerConnection = mBeanServerConnection; this.netconfClient = netconfClient; this.persisterAggregator = persisterAggregator; @@ -72,8 +73,9 @@ public class ConfigPersisterNotificationHandler implements NotificationListener, if (notification instanceof CommitJMXNotification) { try { handleAfterCommitNotification((CommitJMXNotification) notification); - } catch (Exception e) { - // TODO: notificationBroadcast support logs only DEBUG + } catch (Throwable e) { + // log exceptions from notification Handler here since + // notificationBroadcastSupport logs only DEBUG level logger.warn("Exception occured during notification handling: ", e); throw e; } diff --git a/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/Util.java b/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/Util.java index 811ba38c10..86a024a240 100644 --- a/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/Util.java +++ b/opendaylight/netconf/config-persister-impl/src/main/java/org/opendaylight/controller/netconf/persist/impl/Util.java @@ -40,8 +40,6 @@ public final class Util { return true; } - - // TODO: check if closing in correct order public static void closeClientAndDispatcher(NetconfClient client) { NetconfClientDispatcher dispatcher = client.getNetconfClientDispatcher(); Exception fromClient = null; diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/CapabilityProviderImpl.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/CapabilityProviderImpl.java index 1d2e039b29..8dbdb26bff 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/CapabilityProviderImpl.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/CapabilityProviderImpl.java @@ -15,6 +15,8 @@ import org.opendaylight.controller.netconf.impl.mapping.CapabilityProvider; import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot; import org.opendaylight.controller.netconf.mapping.api.Capability; import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Collections; import java.util.Map; @@ -24,6 +26,8 @@ public class CapabilityProviderImpl implements CapabilityProvider { private final NetconfOperationServiceSnapshot netconfOperationServiceSnapshot; private final Set capabilityURIs; + private static final Logger logger = LoggerFactory.getLogger(DefaultCommitNotificationProducer.class); + public CapabilityProviderImpl(NetconfOperationServiceSnapshot netconfOperationServiceSnapshot) { this.netconfOperationServiceSnapshot = netconfOperationServiceSnapshot; Map urisToCapabilitiesInternalMap = getCapabilitiesInternal(netconfOperationServiceSnapshot); @@ -38,7 +42,11 @@ public class CapabilityProviderImpl implements CapabilityProvider { final Set caps = netconfOperationService.getCapabilities(); for (Capability cap : caps) { - // TODO check for duplicates ? + + if(capabilityMap.containsKey(cap.getCapabilityUri())) { + logger.debug("Duplicate capability {} from service {}", cap.getCapabilityUri(), netconfOperationService); + } + capabilityMap.put(cap.getCapabilityUri(), cap); } } diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerDispatcher.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerDispatcher.java index 4f60788975..7c5bd0cb21 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerDispatcher.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerDispatcher.java @@ -12,12 +12,13 @@ import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.util.concurrent.Promise; -import java.net.InetSocketAddress; import org.opendaylight.controller.netconf.api.NetconfSession; import org.opendaylight.controller.netconf.impl.util.DeserializerExceptionHandler; import org.opendaylight.controller.netconf.util.AbstractChannelInitializer; import org.opendaylight.protocol.framework.AbstractDispatcher; +import java.net.InetSocketAddress; + public class NetconfServerDispatcher extends AbstractDispatcher { private final ServerChannelInitializer initializer; @@ -28,7 +29,6 @@ public class NetconfServerDispatcher extends AbstractDispatcher() { diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiatorFactory.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiatorFactory.java index e74723032d..91734beacb 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiatorFactory.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionNegotiatorFactory.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.netconf.impl; +import com.google.common.base.Preconditions; import io.netty.channel.Channel; import io.netty.util.Timer; import io.netty.util.concurrent.Promise; @@ -28,9 +29,12 @@ import org.w3c.dom.Node; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; +import java.io.InputStream; public class NetconfServerSessionNegotiatorFactory implements SessionNegotiatorFactory { + public static final String SERVER_HELLO_XML_LOCATION = "/server_hello.xml"; + private final Timer timer; private static final Document helloMessageTemplate = loadHelloMessageTemplate(); @@ -45,8 +49,11 @@ public class NetconfServerSessionNegotiatorFactory implements SessionNegotiatorF } private static Document loadHelloMessageTemplate() { - return NetconfUtil.createMessage( - NetconfServerSessionNegotiatorFactory.class.getResourceAsStream("/server_hello.xml")).getDocument(); + InputStream resourceAsStream = NetconfServerSessionNegotiatorFactory.class + .getResourceAsStream(SERVER_HELLO_XML_LOCATION); + Preconditions.checkNotNull(resourceAsStream, "Unable to load server hello message blueprint from %s", + SERVER_HELLO_XML_LOCATION); + return NetconfUtil.createMessage(resourceAsStream).getDocument(); } @Override diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfMonitoringServiceImpl.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfMonitoringServiceImpl.java index 1b3542595f..505c74714a 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfMonitoringServiceImpl.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfMonitoringServiceImpl.java @@ -68,6 +68,7 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S @Override public Schemas getSchemas() { // FIXME, session ID + // capabilities should be split from operations (it will allow to move getSchema operation to monitoring module) return transformSchemas(factoriesListener.getSnapshot(0)); } @@ -78,6 +79,7 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S for (NetconfOperationService netconfOperationService : snapshot.getServices()) { // TODO check for duplicates ? move capability merging to snapshot + // Split capabilities from operations first and delete this duplicate code caps.addAll(netconfOperationService.getCapabilities()); } @@ -115,8 +117,7 @@ public class NetconfMonitoringServiceImpl implements NetconfMonitoringService, S monitoringLocations.add(new Schema.Location(Schema.Location.Enumeration.NETCONF)); for (String location : locations) { - // TODO how to create enumerration from string location ? - // monitoringLocations.add(new Schema.Location(Schema.Location.Enumeration.valueOf(location))); + monitoringLocations.add(new Schema.Location(new Uri(location))); } return monitoringLocations; diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java index ee474dbba0..d70a15c18b 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/osgi/NetconfOperationRouterImpl.java @@ -185,7 +185,6 @@ public class NetconfOperationRouterImpl implements NetconfOperationRouter { private NetconfOperationExecution getNetconfOperationWithHighestPriority( Document message, NetconfSession session) { - // TODO test TreeMap> sortedPriority = getSortedNetconfOperationsWithCanHandle( message, session); diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/util/NetconfUtil.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/util/NetconfUtil.java index f2c70d6101..b70a31a84b 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/util/NetconfUtil.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/util/NetconfUtil.java @@ -1,11 +1,6 @@ package org.opendaylight.controller.netconf.impl.util; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; - +import com.google.common.base.Preconditions; import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.slf4j.Logger; @@ -13,12 +8,18 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.xml.sax.SAXException; -// TODO purge nulls +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + public class NetconfUtil { private static final Logger logger = LoggerFactory.getLogger(NetconfUtil.class); public static NetconfMessage createMessage(final File f) { + Preconditions.checkNotNull(f, "File parameter was null"); try { return createMessage(new FileInputStream(f)); } catch (final FileNotFoundException e) { @@ -28,6 +29,7 @@ public class NetconfUtil { } public static NetconfMessage createMessage(final InputStream is) { + Preconditions.checkNotNull(is, "InputStream parameter was null"); Document doc = null; try { doc = XmlUtil.readXmlToDocument(is); diff --git a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/NetconfDispatcherImplTest.java b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/NetconfDispatcherImplTest.java index 0140b65c14..0ecc1cb383 100644 --- a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/NetconfDispatcherImplTest.java +++ b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/NetconfDispatcherImplTest.java @@ -24,21 +24,14 @@ import java.net.InetSocketAddress; public class NetconfDispatcherImplTest { private EventLoopGroup nettyGroup; + private NetconfServerDispatcher dispatch; + private DefaultCommitNotificationProducer commitNot; @Before public void setUp() throws Exception { nettyGroup = new NioEventLoopGroup(); - } - - @After - public void tearDown() throws Exception { - nettyGroup.shutdownGracefully(); - } - @Test - public void test() throws Exception { - - DefaultCommitNotificationProducer commitNot = new DefaultCommitNotificationProducer( + commitNot = new DefaultCommitNotificationProducer( ManagementFactory.getPlatformMBeanServer()); NetconfOperationServiceFactoryListener factoriesListener = new NetconfOperationServiceFactoryListenerImpl(); @@ -50,13 +43,20 @@ public class NetconfDispatcherImplTest { factoriesListener, commitNot, idProvider, null); NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(serverNegotiatorFactory, listenerFactory); - - NetconfServerDispatcher dispatch = new NetconfServerDispatcher( + dispatch = new NetconfServerDispatcher( serverChannelInitializer, nettyGroup, nettyGroup); + } + @After + public void tearDown() throws Exception { + commitNot.close(); + nettyGroup.shutdownGracefully(); + } + + @Test + public void test() throws Exception { InetSocketAddress addr = new InetSocketAddress("127.0.0.1", 8333); ChannelFuture s = dispatch.createServer(addr); - - commitNot.close(); + s.get(); } } diff --git a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java new file mode 100644 index 0000000000..14f70d398c --- /dev/null +++ b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfConfigPersisterITTest.java @@ -0,0 +1,286 @@ +/* + * Copyright (c) 2013 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.controller.netconf.it; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import io.netty.channel.ChannelFuture; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.util.HashedWheelTimer; +import org.apache.commons.lang3.StringUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.matchers.JUnitMatchers; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; +import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; +import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder; +import org.opendaylight.controller.config.persist.api.Persister; +import org.opendaylight.controller.config.spi.ModuleFactory; +import org.opendaylight.controller.config.yang.store.api.YangStoreException; +import org.opendaylight.controller.config.yang.store.impl.HardcodedYangStoreService; +import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.api.jmx.CommitJMXNotification; +import org.opendaylight.controller.netconf.api.monitoring.NetconfManagementSession; +import org.opendaylight.controller.netconf.client.NetconfClient; +import org.opendaylight.controller.netconf.client.NetconfClientDispatcher; +import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl; +import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer; +import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher; +import org.opendaylight.controller.netconf.impl.NetconfServerSessionListenerFactory; +import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory; +import org.opendaylight.controller.netconf.impl.SessionIdProvider; +import org.opendaylight.controller.netconf.impl.osgi.NetconfMonitoringServiceImpl; +import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListener; +import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl; +import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot; +import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService; +import org.opendaylight.controller.netconf.mapping.api.Capability; +import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService; +import org.opendaylight.controller.netconf.monitoring.osgi.NetconfMonitoringActivator; +import org.opendaylight.controller.netconf.monitoring.osgi.NetconfMonitoringOperationService; +import org.opendaylight.controller.netconf.persist.impl.ConfigPersisterNotificationHandler; +import org.opendaylight.controller.netconf.util.test.XmlFileLoader; +import org.opendaylight.controller.netconf.util.xml.XmlUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Element; + +import javax.management.InstanceNotFoundException; +import javax.management.Notification; +import javax.management.NotificationListener; +import java.io.IOException; +import java.io.InputStream; +import java.net.InetSocketAddress; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; + +import static junit.framework.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +public class NetconfConfigPersisterITTest extends AbstractConfigTest { + + private static final Logger logger = LoggerFactory.getLogger(NetconfConfigPersisterITTest.class); + + private static final InetSocketAddress tcpAddress = new InetSocketAddress("127.0.0.1", 12023); + + private EventLoopGroup nettyThreadgroup; + + private NetconfClientDispatcher clientDispatcher; + + @Before + public void setUp() throws Exception { + super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(NetconfITTest.getModuleFactoriesS().toArray( + new ModuleFactory[0]))); + + NetconfMonitoringServiceImpl monitoringService = new NetconfMonitoringServiceImpl(getFactoriesListener()); + + NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl(); + factoriesListener.onAddNetconfOperationServiceFactory(new NetconfOperationServiceFactoryImpl(getYangStore())); + factoriesListener + .onAddNetconfOperationServiceFactory(new NetconfMonitoringActivator.NetconfMonitoringOperationServiceFactory( + new NetconfMonitoringOperationService(monitoringService))); + + nettyThreadgroup = new NioEventLoopGroup(); + + NetconfServerDispatcher dispatch = createDispatcher(factoriesListener); + ChannelFuture s = dispatch.createServer(tcpAddress); + s.await(); + + clientDispatcher = new NetconfClientDispatcher(nettyThreadgroup, nettyThreadgroup); + } + + private HardcodedYangStoreService getYangStore() throws YangStoreException, IOException { + final Collection yangDependencies = NetconfITTest.getBasicYangs(); + return new HardcodedYangStoreService(yangDependencies); + } + + private NetconfServerDispatcher createDispatcher( + NetconfOperationServiceFactoryListenerImpl factoriesListener) { + SessionIdProvider idProvider = new SessionIdProvider(); + NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory( + new HashedWheelTimer(5000, TimeUnit.MILLISECONDS), factoriesListener, idProvider); + + NetconfServerSessionListenerFactory listenerFactory = new NetconfServerSessionListenerFactory( + factoriesListener, new DefaultCommitNotificationProducer(platformMBeanServer), idProvider, mockSessionMonitoringService()); + + NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer( + serverNegotiatorFactory, listenerFactory); + return new NetconfServerDispatcher(serverChannelInitializer, nettyThreadgroup, nettyThreadgroup); + } + + private SessionMonitoringService mockSessionMonitoringService() { + SessionMonitoringService mockedSessionMonitor = mock(SessionMonitoringService.class); + doNothing().when(mockedSessionMonitor).onSessionUp(any(NetconfManagementSession.class)); + doNothing().when(mockedSessionMonitor).onSessionDown(any(NetconfManagementSession.class)); + return mockedSessionMonitor; + } + + @Test + public void testNetconfCommitNotifications() throws Exception { + + VerifyingNotificationListener notificationVerifier = createCommitNotificationListener(); + VerifyingPersister mockedAggregator = mockAggregator(); + + try (NetconfClient persisterClient = new NetconfClient("persister", tcpAddress, 4000, clientDispatcher)) { + ConfigPersisterNotificationHandler configPersisterNotificationHandler = new ConfigPersisterNotificationHandler( + platformMBeanServer, persisterClient, mockedAggregator, + Pattern.compile("")); + configPersisterNotificationHandler.init(); + + try (NetconfClient netconfClient = new NetconfClient("client", tcpAddress, 4000, clientDispatcher)) { + NetconfMessage response = netconfClient.sendMessage(loadGetConfigMessage()); + assertResponse(response, " caps = Sets.newHashSet(); + doReturn(caps).when(service).getCapabilities(); + Set services = Sets.newHashSet(service); + doReturn(services).when(snap).getServices(); + doReturn(snap).when(factoriesListener).getSnapshot(anyLong()); + + return factoriesListener; + } + + private static class VerifyingNotificationListener implements NotificationListener { + public List notifications = Lists.newArrayList(); + + @Override + public void handleNotification(Notification notification, Object handback) { + this.notifications.add(notification); + } + + void assertNotificationCount(Object size) { + assertEquals(size, notifications.size()); + } + + void assertNotificationContent(int notificationIndex, int expectedModulesSize, int expectedServicesSize, int expectedCapsSize) { + Notification notification = notifications.get(notificationIndex); + assertEquals(CommitJMXNotification.class, notification.getClass()); + int capsSize = ((CommitJMXNotification) notification).getCapabilities().size(); + assertEquals("Expected capabilities count", expectedCapsSize, capsSize); + Element configSnapshot = ((CommitJMXNotification) notification).getConfigSnapshot(); + int modulesSize = configSnapshot.getElementsByTagName("module").getLength(); + assertEquals("Expected modules count", expectedModulesSize, modulesSize); + int servicesSize = configSnapshot.getElementsByTagName("instance").getLength(); + assertEquals("Expected services count", expectedServicesSize, servicesSize); + } + } + + private static class VerifyingPersister implements Persister { + + public List snapshots = Lists.newArrayList(); + private Persister mockedPersister; + + public VerifyingPersister() throws IOException { + Persister mockedAggregator = mock(Persister.class); + + doAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + ConfigSnapshotHolder configSnapshot = (ConfigSnapshotHolder) invocation.getArguments()[0]; + snapshots.add(configSnapshot); + return null; + } + }).when(mockedAggregator).persistConfig(any(ConfigSnapshotHolder.class)); + + this.mockedPersister = mockedAggregator; + } + + void assertSnapshotCount(Object size) { + assertEquals(size, snapshots.size()); + } + + void assertSnapshotContent(int notificationIndex, int expectedModulesSize, int expectedServicesSize, int expectedCapsSize) { + ConfigSnapshotHolder snapshot = snapshots.get(notificationIndex); + int capsSize = snapshot.getCapabilities().size(); + assertEquals("Expected capabilities count", expectedCapsSize, capsSize); + String configSnapshot = snapshot.getConfigSnapshot(); + int modulesSize = StringUtils.countMatches(configSnapshot, ""); + assertEquals("Expected modules count", expectedModulesSize, modulesSize); + int servicesSize = StringUtils.countMatches(configSnapshot, ""); + assertEquals("Expected services count", expectedServicesSize, servicesSize); + } + + @Override + public void persistConfig(ConfigSnapshotHolder configSnapshotHolder) throws IOException { + mockedPersister.persistConfig(configSnapshotHolder); + } + + @Override + public List loadLastConfigs() throws IOException { + return mockedPersister.loadLastConfigs(); + } + + @Override + public void close() { + mockedPersister.close(); + } + } +} diff --git a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java index 4818b5f0a3..64c410219f 100644 --- a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java +++ b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java @@ -16,19 +16,6 @@ import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.HashedWheelTimer; -import java.io.IOException; -import java.io.InputStream; -import java.lang.management.ManagementFactory; -import java.net.InetSocketAddress; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import javax.management.ObjectName; -import javax.xml.parsers.ParserConfigurationException; import junit.framework.Assert; import org.junit.After; import org.junit.Before; @@ -74,6 +61,21 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.xml.sax.SAXException; + +import javax.management.ObjectName; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.InputStream; +import java.lang.management.ManagementFactory; +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + import static java.util.Collections.emptyList; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; @@ -215,20 +217,6 @@ public class NetconfITTest extends AbstractConfigTest { } } - - //TODO: test persister actually - @Ignore - @Test(timeout = 10000) - public void testPersister() throws Exception { -// Persister persister = mock(Persister.class); -// doReturn("mockPersister").when(persister).toString(); -// doReturn(Collections.emptyList()).when(persister).loadLastConfigs(); -// ConfigPersisterNotificationHandler h = -// new ConfigPersisterNotificationHandler(persister, tcpAddress, ManagementFactory.getPlatformMBeanServer(), -// Pattern.compile(ConfigPersisterActivator.DEFAULT_IGNORED_REGEX)); -// h.init(); - } - @Ignore @Test public void waitingTest() throws Exception { diff --git a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfMonitoringITTest.java b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfMonitoringITTest.java index 3a7b7de7a0..fdea831b47 100644 --- a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfMonitoringITTest.java +++ b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfMonitoringITTest.java @@ -7,27 +7,14 @@ */ package org.opendaylight.controller.netconf.it; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; +import com.google.common.base.Charsets; +import com.google.common.base.Optional; +import com.google.common.collect.Sets; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.HashedWheelTimer; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; - import junit.framework.Assert; - import org.junit.Before; import org.junit.Test; import org.junit.matchers.JUnitMatchers; @@ -61,9 +48,20 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; -import com.google.common.base.Charsets; -import com.google.common.base.Optional; -import com.google.common.collect.Sets; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; public class NetconfMonitoringITTest extends AbstractConfigTest { @@ -197,7 +195,7 @@ public class NetconfMonitoringITTest extends AbstractConfigTest { return XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/get.xml"); } - public NetconfOperationServiceFactoryListener getFactoriesListener() { + public static NetconfOperationServiceFactoryListener getFactoriesListener() { NetconfOperationServiceFactoryListener factoriesListener = mock(NetconfOperationServiceFactoryListener.class); NetconfOperationServiceSnapshot snap = mock(NetconfOperationServiceSnapshot.class); NetconfOperationService service = mock(NetconfOperationService.class); diff --git a/opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/HandlingPriority.java b/opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/HandlingPriority.java index 5a0688c8d1..176cf2d28c 100644 --- a/opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/HandlingPriority.java +++ b/opendaylight/netconf/netconf-mapping-api/src/main/java/org/opendaylight/controller/netconf/mapping/api/HandlingPriority.java @@ -36,8 +36,6 @@ public class HandlingPriority implements Comparable { return Optional.of(priority).or(Optional. absent()); } - // TODO test - @Override public int compareTo(HandlingPriority o) { if (this == o) diff --git a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSessionNegotiator.java b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSessionNegotiator.java index e30ce5b47e..b4018a716f 100644 --- a/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSessionNegotiator.java +++ b/opendaylight/netconf/netconf-util/src/main/java/org/opendaylight/controller/netconf/util/AbstractNetconfSessionNegotiator.java @@ -42,7 +42,7 @@ import java.util.concurrent.TimeUnit; public abstract class AbstractNetconfSessionNegotiator

extends AbstractSessionNegotiator { - // TODO what time ? + // TODO Adjust wait time for negotiation, now is 1 minute ? private static final long INITIAL_HOLDTIMER = 1; private static final Logger logger = LoggerFactory.getLogger(AbstractNetconfSessionNegotiator.class); diff --git a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig_expectedResult.xml b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig_expectedResult.xml index 7f884dc43c..36f79a50bc 100644 --- a/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig_expectedResult.xml +++ b/opendaylight/netconf/netconf-util/src/test/resources/netconfMessages/editConfig_expectedResult.xml @@ -1,19 +1,6 @@ - - - - - + -- 2.36.6