From d6f88909ce1dd271c43b5f415a99a46350888f84 Mon Sep 17 00:00:00 2001 From: Vaclav Demcak Date: Tue, 2 Dec 2014 12:10:18 +0100 Subject: [PATCH] Bug 2175 - Migrate frm, statistics and inventory manager to config subsystem * migrated statistics manager to config subsystem * updated tests * patch resolves Bug 1646 and Bug 2079 * Patch Set 6 - add log.warn msg for a fail loading xml ConfigSubsystem input value + fix MIN_REQUEST_NET_MONITOR_INTERVAL_DEFAULT to 3sec (follow Anil's comment) Change-Id: I67d398c82c3dafbb2ef759d07a80d17ad6656c1e Signed-off-by: Jan Hajnar Signed-off-by: Vaclav Demcak --- features/flow/pom.xml | 9 + features/flow/src/main/resources/features.xml | 1 + opendaylight/commons/opendaylight/pom.xml | 1 + opendaylight/md-sal/pom.xml | 1 + .../md-sal/statistics-manager-config/pom.xml | 49 +++ .../initial/30-statistics-manager.xml | 52 +++ .../md-sal/statistics-manager/pom.xml | 54 +++- .../StatisticsManagerModule.java | 71 +++++ .../StatisticsManagerModuleFactory.java | 13 + .../statistics/manager/StatisticsManager.java | 5 +- .../manager/StatisticsManagerActivator.java | 73 ----- .../manager/impl/StatisticsManagerConfig.java | 48 +++ .../manager/impl/StatisticsManagerImpl.java | 42 +-- .../src/main/yang/statistics-manager.yang | 66 ++++ .../manager/StatisticsManagerProvider.java | 39 --- .../java/test/mock/FlowStatisticsTest.java | 159 ---------- .../java/test/mock/GroupStatisticsTest.java | 151 --------- .../java/test/mock/MeterStatisticsTest.java | 150 --------- .../java/test/mock/NodeRegistrationTest.java | 39 +-- .../java/test/mock/PortStatisticsTest.java | 73 ----- .../java/test/mock/QueueStatisticsTest.java | 197 ------------ .../java/test/mock/StatCollectorTest.java | 298 ++++++++++++++++++ .../java/test/mock/TableStatisticsTest.java | 71 ----- ...OpendaylightFlowStatisticsServiceMock.java | 21 +- ...aylightFlowTableStatisticsServiceMock.java | 13 +- ...pendaylightGroupStatisticsServiceMock.java | 19 +- ...pendaylightMeterStatisticsServiceMock.java | 19 +- ...OpendaylightPortStatisticsServiceMock.java | 17 +- ...pendaylightQueueStatisticsServiceMock.java | 6 +- .../test/mock/util/ProviderContextMock.java | 69 ---- .../test/mock/util/StatisticsManagerTest.java | 33 +- .../test/java/test/mock/util/TestUtils.java | 8 + 32 files changed, 770 insertions(+), 1097 deletions(-) create mode 100644 opendaylight/md-sal/statistics-manager-config/pom.xml create mode 100644 opendaylight/md-sal/statistics-manager-config/src/main/resources/initial/30-statistics-manager.xml create mode 100644 opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModule.java create mode 100644 opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModuleFactory.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java create mode 100644 opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerConfig.java create mode 100644 opendaylight/md-sal/statistics-manager/src/main/yang/statistics-manager.yang delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerProvider.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/FlowStatisticsTest.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/GroupStatisticsTest.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/MeterStatisticsTest.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/PortStatisticsTest.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/QueueStatisticsTest.java create mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/StatCollectorTest.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/TableStatisticsTest.java delete mode 100644 opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/ProviderContextMock.java diff --git a/features/flow/pom.xml b/features/flow/pom.xml index ab30b0b61f..53b45d2810 100644 --- a/features/flow/pom.xml +++ b/features/flow/pom.xml @@ -23,6 +23,15 @@ features xml + + + org.opendaylight.controller.md + statistics-manager-config + ${mdsal.version} + xml + config + + org.opendaylight.controller.model model-flow-base diff --git a/features/flow/src/main/resources/features.xml b/features/flow/src/main/resources/features.xml index 0540458630..cf54e8b446 100644 --- a/features/flow/src/main/resources/features.xml +++ b/features/flow/src/main/resources/features.xml @@ -21,6 +21,7 @@ mvn:org.opendaylight.controller.md/inventory-manager/${project.version} mvn:org.opendaylight.controller.md/forwardingrules-manager/${project.version} mvn:org.opendaylight.controller/liblldp/${sal.version} + mvn:org.opendaylight.controller.md/statistics-manager-config/${mdsal.version}/xml/config diff --git a/opendaylight/commons/opendaylight/pom.xml b/opendaylight/commons/opendaylight/pom.xml index b2585adb04..1030be5699 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -87,6 +87,7 @@ 0.1.0-SNAPSHOT 0.5.0-SNAPSHOT 1.2.0-SNAPSHOT + 30-statistics-manager.xml 2.5.0 3.8.0.I20120518-2145 diff --git a/opendaylight/md-sal/pom.xml b/opendaylight/md-sal/pom.xml index 38756f2906..d21f16c478 100644 --- a/opendaylight/md-sal/pom.xml +++ b/opendaylight/md-sal/pom.xml @@ -51,6 +51,7 @@ inventory-manager statistics-manager + statistics-manager-config topology-manager forwardingrules-manager topology-lldp-discovery diff --git a/opendaylight/md-sal/statistics-manager-config/pom.xml b/opendaylight/md-sal/statistics-manager-config/pom.xml new file mode 100644 index 0000000000..f4b5f7671b --- /dev/null +++ b/opendaylight/md-sal/statistics-manager-config/pom.xml @@ -0,0 +1,49 @@ + + + + + 4.0.0 + + org.opendaylight.controller + sal-parent + 1.2.0-SNAPSHOT + + + org.opendaylight.controller.md + statistics-manager-config + Configuration files for statistics manager + jar + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-artifacts + + attach-artifact + + package + + + + ${project.build.directory}/classes/initial/30-statistics-manager.xml + xml + config + + + + + + + + + diff --git a/opendaylight/md-sal/statistics-manager-config/src/main/resources/initial/30-statistics-manager.xml b/opendaylight/md-sal/statistics-manager-config/src/main/resources/initial/30-statistics-manager.xml new file mode 100644 index 0000000000..797c14e8e4 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager-config/src/main/resources/initial/30-statistics-manager.xml @@ -0,0 +1,52 @@ + + + + + + + + + + statsmanager:statistics-manager + + statistics-manager + + + binding:binding-rpc-registry + binding-rpc-broker + + + + binding:binding-async-data-broker + binding-data-broker + + + + + binding:binding-notification-service + + binding-notification-broker + + + + 3000 + 16 + + + + + + + + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:statistics-manager?module=statistics-manager&revision=2014-09-25 + + + + diff --git a/opendaylight/md-sal/statistics-manager/pom.xml b/opendaylight/md-sal/statistics-manager/pom.xml index eb6c51b351..234e1084f6 100644 --- a/opendaylight/md-sal/statistics-manager/pom.xml +++ b/opendaylight/md-sal/statistics-manager/pom.xml @@ -42,6 +42,14 @@ org.osgi.core provided + + org.opendaylight.controller + sal-binding-config + + + org.opendaylight.controller + config-api + org.slf4j slf4j-log4j12 @@ -51,15 +59,43 @@ - - org.apache.felix - maven-bundle-plugin - - - org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator - - - + + org.apache.felix + maven-bundle-plugin + + + * + + + + + org.opendaylight.yangtools + yang-maven-plugin + + + config + + generate-sources + + + + + org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator + ${jmxGeneratorPath} + + urn:opendaylight:params:xml:ns:yang:controller==org.opendaylight.controller.config.yang + + + + org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl + ${salGeneratorPath} + + + true + + + + diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModule.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModule.java new file mode 100644 index 0000000000..fb920a6692 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModule.java @@ -0,0 +1,71 @@ +package org.opendaylight.controller.config.yang.md.sal.statistics_manager; + +import org.opendaylight.controller.md.statistics.manager.StatisticsManager; +import org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerConfig; +import org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class StatisticsManagerModule extends org.opendaylight.controller.config.yang.md.sal.statistics_manager.AbstractStatisticsManagerModule { + private final static Logger LOG = LoggerFactory.getLogger(StatisticsManagerModule.class); + + private final static int MAX_NODES_FOR_COLLECTOR_DEFAULT = 16; + private final static int MIN_REQUEST_NET_MONITOR_INTERVAL_DEFAULT = 3000; + + private StatisticsManager statisticsManagerProvider; + + public StatisticsManagerModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public StatisticsManagerModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final StatisticsManagerModule oldModule, final java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + public void customValidation() { + // add custom validation form module attributes here. + } + + @Override + public java.lang.AutoCloseable createInstance() { + LOG.info("StatisticsManager module initialization."); + final StatisticsManagerConfig config = createConfig(); + statisticsManagerProvider = new StatisticsManagerImpl(getDataBrokerDependency(), config); + statisticsManagerProvider.start(getNotificationServiceDependency(), getRpcRegistryDependency()); + LOG.info("StatisticsManager started successfully."); + return new AutoCloseable() { + @Override + public void close() throws Exception { + try { + statisticsManagerProvider.close(); + } + catch (final Exception e) { + LOG.error("Unexpected error by stopping StatisticsManager module", e); + } + LOG.info("StatisticsManager module stopped."); + } + }; + } + + public StatisticsManagerConfig createConfig() { + final StatisticsManagerConfig.StatisticsManagerConfigBuilder builder = StatisticsManagerConfig.builder(); + if (getStatisticsManagerSettings() != null && getStatisticsManagerSettings().getMaxNodesForCollector() != null) { + builder.setMaxNodesForCollector(getStatisticsManagerSettings().getMaxNodesForCollector()); + } else { + LOG.warn("Load the xml ConfigSubsystem input value fail! MaxNodesForCollector value is set to {} ", + MAX_NODES_FOR_COLLECTOR_DEFAULT); + builder.setMaxNodesForCollector(MAX_NODES_FOR_COLLECTOR_DEFAULT); + } + if (getStatisticsManagerSettings() != null && + getStatisticsManagerSettings().getMinRequestNetMonitorInterval() != null) { + builder.setMinRequestNetMonitorInterval(getStatisticsManagerSettings().getMinRequestNetMonitorInterval()); + } else { + LOG.warn("Load the xml CofnigSubsystem input value fail! MinRequestNetMonitorInterval value is set to {} ", + MIN_REQUEST_NET_MONITOR_INTERVAL_DEFAULT); + builder.setMinRequestNetMonitorInterval(MIN_REQUEST_NET_MONITOR_INTERVAL_DEFAULT); + } + return builder.build(); + } + +} diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModuleFactory.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModuleFactory.java new file mode 100644 index 0000000000..dc374477d1 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/config/yang/md/sal/statistics_manager/StatisticsManagerModuleFactory.java @@ -0,0 +1,13 @@ +/* +* Generated file +* +* Generated from: yang module name: statistics-manager yang module local name: statistics-manager +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Tue Oct 07 14:09:47 CEST 2014 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.md.sal.statistics_manager; +public class StatisticsManagerModuleFactory extends org.opendaylight.controller.config.yang.md.sal.statistics_manager.AbstractStatisticsManagerModuleFactory { + +} diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java index 7d57067df1..831dc224d1 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManager.java @@ -13,6 +13,7 @@ import java.util.List; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; import org.opendaylight.controller.md.statistics.manager.StatPermCollector.StatCapabTypes; +import org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerConfig; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter; @@ -70,7 +71,7 @@ public interface StatisticsManager extends AutoCloseable, TransactionChainListen * @param minReqNetMonitInt */ void start(final NotificationProviderService notifService, - final RpcConsumerRegistry rpcRegistry, final long minReqNetMonitInt); + final RpcConsumerRegistry rpcRegistry); /** * Method provides read/write DataStore functionality cross applyOperation @@ -185,5 +186,7 @@ public interface StatisticsManager extends AutoCloseable, TransactionChainListen */ StatNotifyCommiter getPortNotifyCommit(); + StatisticsManagerConfig getConfiguration(); + } diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java deleted file mode 100644 index c505af49e6..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerActivator.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright IBM Corporation, 2013. 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.md.statistics.manager; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerImpl; -import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; -import org.opendaylight.controller.sal.binding.api.NotificationProviderService; -import org.osgi.framework.BundleContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.annotations.VisibleForTesting; - -/** - * Statistics Manager Activator - * - * OSGi bundle activator - * - */ -public class StatisticsManagerActivator extends AbstractBindingAwareProvider { - - private final static Logger LOG = LoggerFactory.getLogger(StatisticsManagerActivator.class); - - /* TODO move it to ConfigSubsystem */ - private static final long DEFAULT_MIN_REQUEST_NET_MONITOR_INTERVAL = 3000L; - private static final int MAX_NODES_FOR_COLLECTOR = 16; - - private StatisticsManager statsProvider; - - @Override - public void onSessionInitiated(final ProviderContext session) { - LOG.info("StatisticsManagerActivator initialization."); - try { - final DataBroker dataBroker = session.getSALService(DataBroker.class); - final NotificationProviderService notifService = - session.getSALService(NotificationProviderService.class); - statsProvider = new StatisticsManagerImpl(dataBroker, MAX_NODES_FOR_COLLECTOR); - statsProvider.start(notifService, session, DEFAULT_MIN_REQUEST_NET_MONITOR_INTERVAL); - LOG.info("StatisticsManagerActivator started successfully."); - } - catch (final Exception e) { - LOG.error("Unexpected error by initialization of StatisticsManagerActivator", e); - stopImpl(null); - } - } - - @VisibleForTesting - StatisticsManager getStatisticManager() { - return statsProvider; - } - - @Override - protected void stopImpl(final BundleContext context) { - if (statsProvider != null) { - try { - statsProvider.close(); - } - catch (final Exception e) { - LOG.error("Unexpected error by stopping StatisticsManagerActivator", e); - } - statsProvider = null; - } - LOG.info("StatisticsManagerActivator stoped."); - } -} diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerConfig.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerConfig.java new file mode 100644 index 0000000000..0f56ea98f0 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerConfig.java @@ -0,0 +1,48 @@ +package org.opendaylight.controller.md.statistics.manager.impl; + +public class StatisticsManagerConfig { + private final int maxNodesForCollector; + private final int minRequestNetMonitorInterval; + + private StatisticsManagerConfig(StatisticsManagerConfigBuilder builder) { + this.maxNodesForCollector = builder.getMaxNodesForCollector(); + this.minRequestNetMonitorInterval = builder.getMinRequestNetMonitorInterval(); + } + + public int getMaxNodesForCollector() { + return maxNodesForCollector; + } + + public int getMinRequestNetMonitorInterval() { + return minRequestNetMonitorInterval; + } + + public static StatisticsManagerConfigBuilder builder() { + return new StatisticsManagerConfigBuilder(); + } + + public static class StatisticsManagerConfigBuilder { + private int maxNodesForCollector; + private int minRequestNetMonitorInterval; + + public int getMaxNodesForCollector() { + return maxNodesForCollector; + } + + public void setMaxNodesForCollector(int maxNodesForCollector) { + this.maxNodesForCollector = maxNodesForCollector; + } + + public int getMinRequestNetMonitorInterval() { + return minRequestNetMonitorInterval; + } + + public void setMinRequestNetMonitorInterval(int minRequestNetMonitorInterval) { + this.minRequestNetMonitorInterval = minRequestNetMonitorInterval; + } + + public StatisticsManagerConfig build() { + return new StatisticsManagerConfig(this); + } + } +} diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java index 396ff0e1f6..edf9fad433 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/impl/StatisticsManagerImpl.java @@ -8,15 +8,8 @@ package org.opendaylight.controller.md.statistics.manager.impl; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.ThreadFactory; - +import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; @@ -46,8 +39,14 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadFactory; /** * statistics-manager @@ -73,8 +72,6 @@ public class StatisticsManagerImpl implements StatisticsManager, Runnable { private final BlockingQueue dataStoreOperQueue = new LinkedBlockingDeque<>(QUEUE_DEPTH); private final DataBroker dataBroker; - private final int maxNodesForCollectors; - private long minReqNetMonitInt; private final ExecutorService statRpcMsgManagerExecutor; private final ExecutorService statDataStoreOperationServ; private StatRpcMsgManager rpcMsgManager; @@ -91,23 +88,24 @@ public class StatisticsManagerImpl implements StatisticsManager, Runnable { private StatNotifyCommiter tableNotifCommiter; private StatNotifyCommiter portNotifyCommiter; - public StatisticsManagerImpl (final DataBroker dataBroker, final int maxNodesForCollector) { + private final StatisticsManagerConfig statManagerConfig; + + public StatisticsManagerImpl (final DataBroker dataBroker, StatisticsManagerConfig statManagerconfig) { + this.statManagerConfig = Preconditions.checkNotNull(statManagerconfig); this.dataBroker = Preconditions.checkNotNull(dataBroker, "DataBroker can not be null!"); ThreadFactory threadFact; threadFact = new ThreadFactoryBuilder().setNameFormat("odl-stat-rpc-oper-thread-%d").build(); statRpcMsgManagerExecutor = Executors.newSingleThreadExecutor(threadFact); threadFact = new ThreadFactoryBuilder().setNameFormat("odl-stat-ds-oper-thread-%d").build(); statDataStoreOperationServ = Executors.newSingleThreadExecutor(threadFact); - maxNodesForCollectors = maxNodesForCollector; txChain = dataBroker.createTransactionChain(this); } @Override public void start(final NotificationProviderService notifService, - final RpcConsumerRegistry rpcRegistry, final long minReqNetMonitInt) { + final RpcConsumerRegistry rpcRegistry) { Preconditions.checkArgument(rpcRegistry != null, "RpcConsumerRegistry can not be null !"); - this.minReqNetMonitInt = minReqNetMonitInt; - rpcMsgManager = new StatRpcMsgManagerImpl(this, rpcRegistry, minReqNetMonitInt); + rpcMsgManager = new StatRpcMsgManagerImpl(this, rpcRegistry, statManagerConfig.getMinRequestNetMonitorInterval()); statCollectors = Collections.emptyList(); nodeRegistrator = new StatNodeRegistrationImpl(this, dataBroker, notifService); flowListeningCommiter = new StatListenCommitFlow(this, dataBroker, notifService); @@ -272,7 +270,8 @@ public class StatisticsManagerImpl implements StatisticsManager, Runnable { } } final StatPermCollectorImpl newCollector = new StatPermCollectorImpl(this, - minReqNetMonitInt, statCollectors.size() + 1, maxNodesForCollectors); + statManagerConfig.getMinRequestNetMonitorInterval(), statCollectors.size() + 1, + statManagerConfig.getMaxNodesForCollector()); final List statCollectorsNew = new ArrayList<>(statCollectors); newCollector.connectedNodeRegistration(nodeIdent, statTypes, nrOfSwitchTables); statCollectorsNew.add(newCollector); @@ -355,5 +354,10 @@ public class StatisticsManagerImpl implements StatisticsManager, Runnable { public StatNotifyCommiter getPortNotifyCommit() { return portNotifyCommiter; } + + @Override + public StatisticsManagerConfig getConfiguration() { + return statManagerConfig; + } } diff --git a/opendaylight/md-sal/statistics-manager/src/main/yang/statistics-manager.yang b/opendaylight/md-sal/statistics-manager/src/main/yang/statistics-manager.yang new file mode 100644 index 0000000000..5f35f70d01 --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/main/yang/statistics-manager.yang @@ -0,0 +1,66 @@ +module statistics-manager { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:md:sal:statistics-manager"; + prefix "statistics-manager"; + + import config { prefix config; revision-date 2013-04-05; } + import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; } + + description + "This module contains the base YANG definitions for + statitics-manager implementation."; + + revision "2014-09-25" { + description + "Initial revision."; + } + + identity statistics-manager { + base config:module-type; + config:java-name-prefix StatisticsManager; + } + + augment "/config:modules/config:module/config:configuration" { + case statistics-manager { + when "/config:modules/config:module/config:type = 'statistics-manager'"; + + container rpc-registry { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity mdsal:binding-rpc-registry; + } + } + } + + container notification-service { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity mdsal:binding-notification-service; + } + } + } + + container data-broker { + uses config:service-ref { + refine type { + mandatory false; + config:required-identity mdsal:binding-async-data-broker; + } + } + } + + container statistics-manager-settings { + leaf min-request-net-monitor-interval { + type int32; + } + leaf max-nodes-for-collector { + type int32; + } + } + } + } + +} diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerProvider.java b/opendaylight/md-sal/statistics-manager/src/test/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerProvider.java deleted file mode 100644 index 6a01cd2c26..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/org/opendaylight/controller/md/statistics/manager/StatisticsManagerProvider.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * 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.controller.md.statistics.manager; - -/** - * statistics-manager - * org.opendaylight.controller.md.statistics.manager - * - * - * - * @author Vaclav Demcak - * - * Created: Sep 6, 2014 - */ -public class StatisticsManagerProvider { - - private final StatisticsManagerActivator activator; - - public StatisticsManagerProvider(final StatisticsManagerActivator activator) { - this.activator = activator; - } - - /** - * Method provides Initialized {@link StatisticsManager} - * from {@link StatisticsManagerActivator} for all tests - * suites; - * - * @return - */ - public StatisticsManager getStatisticsManager() { - return activator.getStatisticManager(); - } -} diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/FlowStatisticsTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/FlowStatisticsTest.java deleted file mode 100644 index 7fc171c49b..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/FlowStatisticsTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package test.mock; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Collections; -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityFlowStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowStatisticsData; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import test.mock.util.StatisticsManagerTest; - -import com.google.common.base.Optional; - -public class FlowStatisticsTest extends StatisticsManagerTest { - private final Object waitObject = new Object(); - -// @Test(timeout = 5000) - public void addedFlowOnDemandStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Flow flow = getFlow(); - - final InstanceIdentifier flowII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(flow.getTableId())) - .child(Flow.class, flow.getKey()); - final InstanceIdentifier tableII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(flow.getTableId())); - final Table table = new TableBuilder().setKey(new TableKey(flow.getTableId())).setFlow(Collections.emptyList()).build(); - - final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, tableII, table); - writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow); - writeTx.put(LogicalDatastoreType.OPERATIONAL, tableII, table); - writeTx.put(LogicalDatastoreType.OPERATIONAL, flowII, flow); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - flowII.augmentation(FlowStatisticsData.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional flowStatDataOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, flowII.augmentation(FlowStatisticsData.class)) - .checkedGet(); - assertTrue(flowStatDataOptional.isPresent()); - assertEquals(COUNTER_64_TEST_VALUE, flowStatDataOptional.get().getFlowStatistics().getByteCount()); - - } - -// @Test(timeout = 5000) - public void deletedFlowStatsRemovalTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Flow flow = getFlow(); - - final InstanceIdentifier flowII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(flow.getTableId())) - .child(Flow.class, flow.getKey()); - final InstanceIdentifier
tableII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(flow.getTableId())); - final Table table = new TableBuilder().setKey(new TableKey(flow.getTableId())).setFlow(Collections.emptyList()).build(); - - WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, tableII, table); - writeTx.put(LogicalDatastoreType.CONFIGURATION, flowII, flow); - writeTx.put(LogicalDatastoreType.OPERATIONAL, tableII, table); - writeTx.put(LogicalDatastoreType.OPERATIONAL, flowII, flow); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - flowII.augmentation(FlowStatisticsData.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - assertCommit(writeTx.submit()); - - synchronized (waitObject) { - waitObject.wait(); - } - - ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - Optional flowStatDataOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, flowII).checkedGet(); - assertTrue(flowStatDataOptional.isPresent()); -// assertEquals(COUNTER_64_TEST_VALUE, flowStatDataOptional.get().getFlowStatistics().getByteCount()); - - writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.delete(LogicalDatastoreType.CONFIGURATION, flowII); - assertCommit(writeTx.submit()); - - readTx = getDataBroker().newReadOnlyTransaction(); - flowStatDataOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, flowII).checkedGet(); - assertFalse(flowStatDataOptional.isPresent()); - } - -// @Test(timeout = 23000) - public void getAllStatsWhenNodeIsConnectedTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityFlowStats.class); - - final Flow flow = getFlow(); - - final InstanceIdentifier
tableII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(flow.getTableId())); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - tableII.child(Flow.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional
tableOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).augmentation(FlowCapableNode.class) - .child(Table.class, new TableKey(flow.getTableId()))).checkedGet(); - assertTrue(tableOptional.isPresent()); - final FlowStatisticsData flowStats = tableOptional.get().getFlow().get(0).getAugmentation(FlowStatisticsData.class); - assertTrue(flowStats != null); - assertEquals(COUNTER_64_TEST_VALUE, flowStats.getFlowStatistics().getByteCount()); - } - - public class ChangeListener implements DataChangeListener { - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - synchronized (waitObject) { - waitObject.notify(); - } - } - } -} - diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/GroupStatisticsTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/GroupStatisticsTest.java deleted file mode 100644 index 7a61bf280f..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/GroupStatisticsTest.java +++ /dev/null @@ -1,151 +0,0 @@ -package test.mock; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityGroupStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupDescStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupFeatures; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupStatistics; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.group.features.GroupFeatures; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import test.mock.util.StatisticsManagerTest; - -import com.google.common.base.Optional; - -public class GroupStatisticsTest extends StatisticsManagerTest { - private final Object waitObject = new Object(); - -// @Test(timeout = 5000) - public void addedGroupOnDemandStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Group group = getGroup(); - - final InstanceIdentifier groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Group.class, group.getKey()); - - final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group); - writeTx.put(LogicalDatastoreType.OPERATIONAL, groupII, group); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional groupOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, groupII.augmentation(NodeGroupStatistics.class)).checkedGet(); - assertTrue(groupOptional.isPresent()); - assertEquals(COUNTER_64_TEST_VALUE, groupOptional.get().getGroupStatistics().getByteCount()); - } - -// @Test(timeout = 5000) - public void deletedGroupStasRemovalTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Group group = getGroup(); - final InstanceIdentifier groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Group.class, group.getKey()); - - WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, groupII, group); - writeTx.put(LogicalDatastoreType.OPERATIONAL, groupII, group); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - Optional groupOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, - groupII.augmentation(NodeGroupStatistics.class)).checkedGet(); - assertTrue(groupOptional.isPresent()); - assertEquals(COUNTER_64_TEST_VALUE, groupOptional.get().getGroupStatistics().getByteCount()); - - writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.delete(LogicalDatastoreType.CONFIGURATION, groupII); - assertCommit(writeTx.submit()); - - readTx = getDataBroker().newReadOnlyTransaction(); - groupOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, - groupII.augmentation(NodeGroupStatistics.class)).checkedGet(); - assertFalse(groupOptional.isPresent()); - - } - -// @Test(timeout = 23000) - public void getAllStatsFromConnectedNodeTest() throws ExecutionException, InterruptedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityGroupStats.class); - - final InstanceIdentifier groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Group.class, getGroup().getKey()); - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional optionalGroup = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).augmentation(FlowCapableNode.class) - .child(Group.class, getGroup().getKey())).get(); - - assertTrue(optionalGroup.isPresent()); - assertTrue(optionalGroup.get().getAugmentation(NodeGroupDescStats.class) != null); - final NodeGroupStatistics groupStats = optionalGroup.get().getAugmentation(NodeGroupStatistics.class); - assertTrue(groupStats != null); - assertEquals(COUNTER_64_TEST_VALUE, groupStats.getGroupStatistics().getByteCount()); - - readTx = getDataBroker().newReadOnlyTransaction(); - final Optional optionalGroupFeatures = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).augmentation(NodeGroupFeatures.class).child(GroupFeatures.class)).get(); - assertTrue(optionalGroupFeatures.isPresent()); - assertEquals(1, optionalGroupFeatures.get().getMaxGroups().size()); - assertEquals(MAX_GROUPS_TEST_VALUE, optionalGroupFeatures.get().getMaxGroups().get(0)); - } - - private class ChangeListener implements DataChangeListener { - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - synchronized (waitObject) { - waitObject.notify(); - } - } - } -} - diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/MeterStatisticsTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/MeterStatisticsTest.java deleted file mode 100644 index a0f360c475..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/MeterStatisticsTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package test.mock; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterConfigStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterFeatures; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterStatistics; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.nodes.node.MeterFeatures; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import test.mock.util.StatisticsManagerTest; - -import com.google.common.base.Optional; - -public class MeterStatisticsTest extends StatisticsManagerTest { - private final Object waitObject = new Object(); - -// @Test(timeout = 5000) - public void addedMeterOnDemandStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Meter meter = getMeter(); - final InstanceIdentifier meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Meter.class, meter.getKey()); - - final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter); - writeTx.put(LogicalDatastoreType.OPERATIONAL, meterII, meter); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - meterII.augmentation(NodeMeterStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional meterStatsOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, - meterII.augmentation(NodeMeterStatistics.class)).checkedGet(); - assertTrue(meterStatsOptional.isPresent()); - assertEquals(COUNTER_64_TEST_VALUE, meterStatsOptional.get().getMeterStatistics().getByteInCount()); - assertEquals(COUNTER_64_TEST_VALUE, meterStatsOptional.get().getMeterStatistics().getPacketInCount()); - } - -// @Test(timeout = 5000) - public void deletedMeterStatsRemovalTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Meter meter = getMeter(); - final InstanceIdentifier meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Meter.class, meter.getKey()); - - WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, meterII, meter); - writeTx.put(LogicalDatastoreType.OPERATIONAL, meterII, meter); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - meterII.augmentation(NodeMeterStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional meterStatsOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, - meterII.augmentation(NodeMeterStatistics.class)).checkedGet(); - assertTrue(meterStatsOptional.isPresent()); - assertEquals(COUNTER_64_TEST_VALUE, meterStatsOptional.get().getMeterStatistics().getByteInCount()); - assertEquals(COUNTER_64_TEST_VALUE, meterStatsOptional.get().getMeterStatistics().getPacketInCount()); - - writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.delete(LogicalDatastoreType.CONFIGURATION, meterII); - assertCommit(writeTx.submit()); - - readTx = getDataBroker().newReadOnlyTransaction(); - final Optional meterOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, meterII).checkedGet(); - assertFalse(meterOptional.isPresent()); - } - -// @Test(timeout = 23000) - public void getAllStatsFromConnectedNodeTest() throws ExecutionException, InterruptedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNodeWithFeatures(s1Key, true); - - final InstanceIdentifier meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Meter.class, getMeter().getKey()); - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - meterII.augmentation(NodeMeterStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional optionalMeter = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).augmentation(FlowCapableNode.class) - .child(Meter.class, getMeter().getKey())).get(); - - assertTrue(optionalMeter.isPresent()); - assertTrue(optionalMeter.get().getAugmentation(NodeMeterConfigStats.class) != null); - final NodeMeterStatistics meterStats = optionalMeter.get().getAugmentation(NodeMeterStatistics.class); - assertTrue(meterStats != null); - assertEquals(COUNTER_64_TEST_VALUE, meterStats.getMeterStatistics().getByteInCount()); - assertEquals(COUNTER_64_TEST_VALUE, meterStats.getMeterStatistics().getPacketInCount()); - - readTx = getDataBroker().newReadOnlyTransaction(); - final Optional optionalMeterFeautures = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).augmentation(NodeMeterFeatures.class).child(MeterFeatures.class)).get(); - assertTrue(optionalMeterFeautures.isPresent()); - assertEquals(COUNTER_32_TEST_VALUE, optionalMeterFeautures.get().getMaxMeter()); - } - - private class ChangeListener implements DataChangeListener { - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - synchronized (waitObject) { - waitObject.notify(); - } - } - } -} - diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/NodeRegistrationTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/NodeRegistrationTest.java index 18bd2d42ef..79eb236089 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/NodeRegistrationTest.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/NodeRegistrationTest.java @@ -1,48 +1,43 @@ package test.mock; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator; -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerProvider; +import org.junit.Test; +import org.opendaylight.controller.md.statistics.manager.StatisticsManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - import test.mock.util.StatisticsManagerTest; +import java.util.concurrent.ExecutionException; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + public class NodeRegistrationTest extends StatisticsManagerTest { -// @Test + @Test public void nodeRegistrationTest() throws ExecutionException, InterruptedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - final StatisticsManagerProvider statisticsManagerProvider = new StatisticsManagerProvider(activator); - activator.onSessionInitiated(providerContext); + StatisticsManager statisticsManager = setupStatisticsManager(); addFlowCapableNode(s1Key); - Thread.sleep(1000); + Thread.sleep(2000); final InstanceIdentifier nodeII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key); - assertTrue(statisticsManagerProvider.getStatisticsManager().isProvidedFlowNodeActive(nodeII)); + assertTrue(statisticsManager.isProvidedFlowNodeActive(nodeII)); } -// @Test + @Test public void nodeUnregistrationTest() throws ExecutionException, InterruptedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - final StatisticsManagerProvider statisticsManagerProvider = new StatisticsManagerProvider(activator); - activator.onSessionInitiated(providerContext); + StatisticsManager statisticsManager = setupStatisticsManager(); addFlowCapableNode(s1Key); - Thread.sleep(1000); + Thread.sleep(2000); final InstanceIdentifier nodeII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key); - assertTrue(statisticsManagerProvider.getStatisticsManager().isProvidedFlowNodeActive(nodeII)); + assertTrue(statisticsManager.isProvidedFlowNodeActive(nodeII)); removeNode(s1Key); - Thread.sleep(1000); - assertFalse(statisticsManagerProvider.getStatisticsManager().isProvidedFlowNodeActive(nodeII)); + Thread.sleep(2000); + assertFalse(statisticsManager.isProvidedFlowNodeActive(nodeII)); } } diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/PortStatisticsTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/PortStatisticsTest.java deleted file mode 100644 index 9f193b03d7..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/PortStatisticsTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package test.mock; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityPortStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.FlowCapableNodeConnectorStatisticsData; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import test.mock.util.StatisticsManagerTest; - -import com.google.common.base.Optional; - -public class PortStatisticsTest extends StatisticsManagerTest { - private final Object waitObject = new Object(); - -// @Test(timeout = 23000) - public void getPortStatisticsTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityPortStats.class); - - final InstanceIdentifier nodeConnectorII = InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).child(NodeConnector.class, new NodeConnectorKey(getNodeConnectorId())); - - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - nodeConnectorII.augmentation(FlowCapableNodeConnectorStatisticsData.class), - new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional flowCapableNodeConnectorStatisticsDataOptional = - readTx.read(LogicalDatastoreType.OPERATIONAL, - nodeConnectorII.augmentation(FlowCapableNodeConnectorStatisticsData.class)).checkedGet(); - assertTrue(flowCapableNodeConnectorStatisticsDataOptional.isPresent()); - assertEquals(BIG_INTEGER_TEST_VALUE, - flowCapableNodeConnectorStatisticsDataOptional.get().getFlowCapableNodeConnectorStatistics() - .getReceiveDrops()); - assertEquals(BIG_INTEGER_TEST_VALUE, - flowCapableNodeConnectorStatisticsDataOptional.get().getFlowCapableNodeConnectorStatistics() - .getCollisionCount()); - } - - private class ChangeListener implements DataChangeListener { - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - synchronized (waitObject) { - waitObject.notify(); - } - } - } -} - diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/QueueStatisticsTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/QueueStatisticsTest.java deleted file mode 100644 index bb9bd21134..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/QueueStatisticsTest.java +++ /dev/null @@ -1,197 +0,0 @@ -package test.mock; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Collections; -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityQueueStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.port.mod.port.Port; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.QueueBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsData; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import test.mock.util.StatisticsManagerTest; - -import com.google.common.base.Optional; - - -public class QueueStatisticsTest extends StatisticsManagerTest { - private final Object waitObject = new Object(); - -// @Test(timeout = 5000) - public void addedQueueOnDemandStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Port port = getPort(); - - final NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder(); - final FlowCapableNodeConnectorBuilder fcncBuilder = new FlowCapableNodeConnectorBuilder(); - fcncBuilder.setConfiguration(port.getConfiguration()); - fcncBuilder.setPortNumber(port.getPortNumber()); - fcncBuilder.setQueue(Collections.emptyList()); - ncBuilder.setKey(new NodeConnectorKey(new NodeConnectorId("connector.1"))); - ncBuilder.addAugmentation(FlowCapableNodeConnector.class, fcncBuilder.build()); - - - final Queue queue = getQueue(); - final InstanceIdentifier queueII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .child(NodeConnector.class, ncBuilder.getKey()).augmentation(FlowCapableNodeConnector.class) - .child(Queue.class, queue.getKey()); - final InstanceIdentifier nodeConnectorII = InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).child(NodeConnector.class, ncBuilder.getKey()); - - final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, nodeConnectorII, ncBuilder.build()); - writeTx.put(LogicalDatastoreType.CONFIGURATION, queueII, queue); - writeTx.put(LogicalDatastoreType.OPERATIONAL, nodeConnectorII, ncBuilder.build()); - writeTx.put(LogicalDatastoreType.OPERATIONAL, queueII, queue); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - queueII.augmentation(FlowCapableNodeConnectorQueueStatisticsData.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional queueStatsOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, - queueII.augmentation(FlowCapableNodeConnectorQueueStatisticsData.class)).checkedGet(); - assertTrue(queueStatsOptional.isPresent()); - assertEquals(COUNTER_64_TEST_VALUE, - queueStatsOptional.get().getFlowCapableNodeConnectorQueueStatistics().getTransmittedBytes()); - } - -// @Test(timeout = 5000) - public void deletedQueueStatsRemovalTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNode(s1Key); - - final Port port = getPort(); - - final NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder(); - final FlowCapableNodeConnectorBuilder fcncBuilder = new FlowCapableNodeConnectorBuilder(); - fcncBuilder.setConfiguration(port.getConfiguration()); - fcncBuilder.setPortNumber(port.getPortNumber()); - fcncBuilder.setQueue(Collections.emptyList()); - ncBuilder.setKey(new NodeConnectorKey(new NodeConnectorId("connector.1"))); - ncBuilder.addAugmentation(FlowCapableNodeConnector.class, fcncBuilder.build()); - - - final Queue queue = getQueue(); - final InstanceIdentifier queueII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .child(NodeConnector.class, ncBuilder.getKey()).augmentation(FlowCapableNodeConnector.class) - .child(Queue.class, queue.getKey()); - final InstanceIdentifier nodeConnectorII = InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key).child(NodeConnector.class, ncBuilder.getKey()); - - WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.CONFIGURATION, nodeConnectorII, ncBuilder.build()); - writeTx.put(LogicalDatastoreType.CONFIGURATION, queueII, queue); - writeTx.put(LogicalDatastoreType.OPERATIONAL, nodeConnectorII, ncBuilder.build()); - writeTx.put(LogicalDatastoreType.OPERATIONAL, queueII, queue); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - queueII.augmentation(FlowCapableNodeConnectorQueueStatisticsData.class), - new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - Optional queueStatsOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, - queueII.augmentation(FlowCapableNodeConnectorQueueStatisticsData.class)).checkedGet(); - assertTrue(queueStatsOptional.isPresent()); - assertEquals(COUNTER_64_TEST_VALUE, - queueStatsOptional.get().getFlowCapableNodeConnectorQueueStatistics().getTransmittedBytes()); - - writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.delete(LogicalDatastoreType.CONFIGURATION, queueII); - assertCommit(writeTx.submit()); - - readTx = getDataBroker().newReadOnlyTransaction(); - queueStatsOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, - queueII.augmentation(FlowCapableNodeConnectorQueueStatisticsData.class)).checkedGet(); - assertFalse(queueStatsOptional.isPresent()); - } - -// @Test(timeout = 23000) - public void getAllStatsFromConnectedNodeTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityQueueStats.class); - - final NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder(); - final FlowCapableNodeConnectorBuilder fcncBuilder = new FlowCapableNodeConnectorBuilder(); - ncBuilder.setKey(new NodeConnectorKey(getNodeConnectorId())); - ncBuilder.addAugmentation(FlowCapableNodeConnector.class, fcncBuilder.build()); - - final InstanceIdentifier nodeConnectorII = InstanceIdentifier.create(Nodes.class) - .child(Node.class, s1Key) - .child(NodeConnector.class, ncBuilder.getKey()); - - final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); - writeTx.put(LogicalDatastoreType.OPERATIONAL, nodeConnectorII, ncBuilder.build()); - final InstanceIdentifier queueII = nodeConnectorII.augmentation(FlowCapableNodeConnector.class) - .child(Queue.class, getQueue().getKey()); - final QueueBuilder qBuilder = new QueueBuilder(getQueue()); - writeTx.put(LogicalDatastoreType.OPERATIONAL, queueII, qBuilder.build()); - assertCommit(writeTx.submit()); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - queueII.augmentation(FlowCapableNodeConnectorQueueStatisticsData.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional queueOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, queueII).checkedGet(); - assertTrue(queueOptional.isPresent()); - final FlowCapableNodeConnectorQueueStatisticsData queueStats = - queueOptional.get().getAugmentation(FlowCapableNodeConnectorQueueStatisticsData.class); - assertTrue(queueStats != null); - assertEquals(COUNTER_64_TEST_VALUE, - queueStats.getFlowCapableNodeConnectorQueueStatistics().getTransmittedBytes()); - } - - private class ChangeListener implements DataChangeListener { - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - synchronized (waitObject) { - waitObject.notify(); - } - } - } -} - diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/StatCollectorTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/StatCollectorTest.java new file mode 100644 index 0000000000..48a993e6bd --- /dev/null +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/StatCollectorTest.java @@ -0,0 +1,298 @@ +package test.mock; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import com.google.common.base.Optional; +import java.util.concurrent.ExecutionException; +import org.junit.Test; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityFlowStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityGroupStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityPortStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityQueueStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityTableStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowStatisticsData; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsData; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.Queue; +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.queues.QueueBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupDescStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupFeatures; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupStatistics; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.group.features.GroupFeatures; +import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterConfigStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterFeatures; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.NodeMeterStatistics; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.nodes.node.MeterFeatures; +import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.FlowCapableNodeConnectorStatisticsData; +import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.FlowCapableNodeConnectorQueueStatisticsData; +import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import test.mock.util.StatisticsManagerTest; + +public class StatCollectorTest extends StatisticsManagerTest { + private final Object waitObject = new Object(); + + @Test(timeout = 200000) + public void getAllFlowStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { + setupStatisticsManager(); + + addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityFlowStats.class); + + final Flow flow = getFlow(); + + final InstanceIdentifier
tableII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) + .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(flow.getTableId())); + + getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, + tableII.child(Flow.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); + + synchronized (waitObject) { + waitObject.wait(); + } + + final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); + final Optional
tableOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).augmentation(FlowCapableNode.class) + .child(Table.class, new TableKey(flow.getTableId()))).checkedGet(); + assertTrue(tableOptional.isPresent()); + final FlowStatisticsData flowStats = tableOptional.get().getFlow().get(0).getAugmentation(FlowStatisticsData.class); + assertTrue(flowStats != null); + assertEquals(COUNTER_64_TEST_VALUE, flowStats.getFlowStatistics().getByteCount()); + } + + @Test(timeout = 200000) + public void getAllGroupStatsFeatureNotAdvertisedTest() throws ExecutionException, InterruptedException { + setupStatisticsManager(); + + addFlowCapableNodeWithFeatures(s1Key, true); + + final InstanceIdentifier groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) + .augmentation(FlowCapableNode.class).child(Group.class, getGroup().getKey()); + getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, + groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); + + synchronized (waitObject) { + waitObject.wait(); + } + + ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); + final Optional optionalGroup = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).augmentation(FlowCapableNode.class) + .child(Group.class, getGroup().getKey())).get(); + + assertTrue(optionalGroup.isPresent()); + assertTrue(optionalGroup.get().getAugmentation(NodeGroupDescStats.class) != null); + final NodeGroupStatistics groupStats = optionalGroup.get().getAugmentation(NodeGroupStatistics.class); + assertTrue(groupStats != null); + assertEquals(COUNTER_64_TEST_VALUE, groupStats.getGroupStatistics().getByteCount()); + + readTx = getDataBroker().newReadOnlyTransaction(); + final Optional optionalGroupFeatures = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).augmentation(NodeGroupFeatures.class).child(GroupFeatures.class)).get(); + assertTrue(optionalGroupFeatures.isPresent()); + assertEquals(1, optionalGroupFeatures.get().getMaxGroups().size()); + assertEquals(MAX_GROUPS_TEST_VALUE, optionalGroupFeatures.get().getMaxGroups().get(0)); + } + + @Test(timeout = 200000) + public void getAllGroupStatsFeatureAdvertisedTest() throws ExecutionException, InterruptedException { + setupStatisticsManager(); + + addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityGroupStats.class); + + final InstanceIdentifier groupII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) + .augmentation(FlowCapableNode.class).child(Group.class, getGroup().getKey()); + getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, + groupII.augmentation(NodeGroupStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); + + synchronized (waitObject) { + waitObject.wait(); + } + + ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); + final Optional optionalGroup = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).augmentation(FlowCapableNode.class) + .child(Group.class, getGroup().getKey())).get(); + + assertTrue(optionalGroup.isPresent()); + assertTrue(optionalGroup.get().getAugmentation(NodeGroupDescStats.class) != null); + final NodeGroupStatistics groupStats = optionalGroup.get().getAugmentation(NodeGroupStatistics.class); + assertTrue(groupStats != null); + assertEquals(COUNTER_64_TEST_VALUE, groupStats.getGroupStatistics().getByteCount()); + + readTx = getDataBroker().newReadOnlyTransaction(); + final Optional optionalGroupFeatures = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).augmentation(NodeGroupFeatures.class).child(GroupFeatures.class)).get(); + assertTrue(optionalGroupFeatures.isPresent()); + assertEquals(1, optionalGroupFeatures.get().getMaxGroups().size()); + assertEquals(MAX_GROUPS_TEST_VALUE, optionalGroupFeatures.get().getMaxGroups().get(0)); + } + + @Test(timeout = 200000) + public void getAllMeterStatsTest() throws ExecutionException, InterruptedException { + setupStatisticsManager(); + + addFlowCapableNodeWithFeatures(s1Key, true); + + final InstanceIdentifier meterII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) + .augmentation(FlowCapableNode.class).child(Meter.class, getMeter().getKey()); + getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, + meterII.augmentation(NodeMeterStatistics.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); + + synchronized (waitObject) { + waitObject.wait(); + } + + ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); + final Optional optionalMeter = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).augmentation(FlowCapableNode.class) + .child(Meter.class, getMeter().getKey())).get(); + + assertTrue(optionalMeter.isPresent()); + assertTrue(optionalMeter.get().getAugmentation(NodeMeterConfigStats.class) != null); + final NodeMeterStatistics meterStats = optionalMeter.get().getAugmentation(NodeMeterStatistics.class); + assertTrue(meterStats != null); + assertEquals(COUNTER_64_TEST_VALUE, meterStats.getMeterStatistics().getByteInCount()); + assertEquals(COUNTER_64_TEST_VALUE, meterStats.getMeterStatistics().getPacketInCount()); + + readTx = getDataBroker().newReadOnlyTransaction(); + final Optional optionalMeterFeautures = readTx.read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).augmentation(NodeMeterFeatures.class).child(MeterFeatures.class)).get(); + assertTrue(optionalMeterFeautures.isPresent()); + assertEquals(COUNTER_32_TEST_VALUE, optionalMeterFeautures.get().getMaxMeter()); + } + + @Test(timeout = 200000) + public void getAllQueueStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { + setupStatisticsManager(); + + addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityQueueStats.class); + + final NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder(); + final FlowCapableNodeConnectorBuilder fcncBuilder = new FlowCapableNodeConnectorBuilder(); + ncBuilder.setKey(new NodeConnectorKey(getNodeConnectorId())); + ncBuilder.addAugmentation(FlowCapableNodeConnector.class, fcncBuilder.build()); + + final InstanceIdentifier nodeConnectorII = InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key) + .child(NodeConnector.class, ncBuilder.getKey()); + + final WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); + writeTx.put(LogicalDatastoreType.OPERATIONAL, nodeConnectorII, ncBuilder.build()); + final InstanceIdentifier queueII = nodeConnectorII.augmentation(FlowCapableNodeConnector.class) + .child(Queue.class, getQueue().getKey()); + final QueueBuilder qBuilder = new QueueBuilder(getQueue()); + writeTx.put(LogicalDatastoreType.OPERATIONAL, queueII, qBuilder.build()); + assertCommit(writeTx.submit()); + + getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, + queueII.augmentation(FlowCapableNodeConnectorQueueStatisticsData.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); + + synchronized (waitObject) { + waitObject.wait(); + } + + final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); + final Optional queueOptional = readTx.read(LogicalDatastoreType.OPERATIONAL, queueII).checkedGet(); + assertTrue(queueOptional.isPresent()); + final FlowCapableNodeConnectorQueueStatisticsData queueStats = + queueOptional.get().getAugmentation(FlowCapableNodeConnectorQueueStatisticsData.class); + assertTrue(queueStats != null); + assertEquals(COUNTER_64_TEST_VALUE, + queueStats.getFlowCapableNodeConnectorQueueStatistics().getTransmittedBytes()); + } + + @Test(timeout = 200000) + public void getAllPortStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { + setupStatisticsManager(); + + addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityPortStats.class); + + final InstanceIdentifier nodeConnectorII = InstanceIdentifier.create(Nodes.class) + .child(Node.class, s1Key).child(NodeConnector.class, new NodeConnectorKey(getNodeConnectorId())); + + NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder(); + ncBuilder.setKey(new NodeConnectorKey(getNodeConnectorId())); + WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction(); + writeTx.put(LogicalDatastoreType.OPERATIONAL, nodeConnectorII, ncBuilder.build()); + assertCommit(writeTx.submit()); + + getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, + nodeConnectorII.augmentation(FlowCapableNodeConnectorStatisticsData.class), + new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); + + synchronized (waitObject) { + waitObject.wait(); + } + + final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); + final Optional flowCapableNodeConnectorStatisticsDataOptional = + readTx.read(LogicalDatastoreType.OPERATIONAL, + nodeConnectorII.augmentation(FlowCapableNodeConnectorStatisticsData.class)).checkedGet(); + assertTrue(flowCapableNodeConnectorStatisticsDataOptional.isPresent()); + assertEquals(BIG_INTEGER_TEST_VALUE, + flowCapableNodeConnectorStatisticsDataOptional.get().getFlowCapableNodeConnectorStatistics() + .getReceiveDrops()); + assertEquals(BIG_INTEGER_TEST_VALUE, + flowCapableNodeConnectorStatisticsDataOptional.get().getFlowCapableNodeConnectorStatistics() + .getCollisionCount()); + } + + @Test(timeout = 200000) + public void getAllTableStatsTest() throws ExecutionException, InterruptedException, ReadFailedException { + setupStatisticsManager(); + + addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityTableStats.class); + + final TableId tableId = getTableId(); + final InstanceIdentifier
tableII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) + .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(tableId.getValue())); + + getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, + tableII.augmentation(FlowTableStatisticsData.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); + + synchronized (waitObject) { + waitObject.wait(); + } + + final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); + final Optional flowTableStatisticsDataOptional = readTx.read( + LogicalDatastoreType.OPERATIONAL, tableII.augmentation(FlowTableStatisticsData.class)).checkedGet(); + assertTrue(flowTableStatisticsDataOptional.isPresent()); + assertEquals(COUNTER_32_TEST_VALUE, + flowTableStatisticsDataOptional.get().getFlowTableStatistics().getActiveFlows()); + assertEquals(COUNTER_64_TEST_VALUE, + flowTableStatisticsDataOptional.get().getFlowTableStatistics().getPacketsLookedUp()); + } + + public class ChangeListener implements DataChangeListener { + + @Override + public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { + synchronized (waitObject) { + waitObject.notify(); + } + } + } +} diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/TableStatisticsTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/TableStatisticsTest.java deleted file mode 100644 index f0c0fedb70..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/TableStatisticsTest.java +++ /dev/null @@ -1,71 +0,0 @@ -package test.mock; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.concurrent.ExecutionException; - -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.statistics.manager.StatisticsManagerActivator; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowFeatureCapabilityTableStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsData; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import test.mock.util.StatisticsManagerTest; - -import com.google.common.base.Optional; - -public class TableStatisticsTest extends StatisticsManagerTest { - private final Object waitObject = new Object(); - -// @Test(timeout = 23000) - public void getTableStatisticsTest() throws ExecutionException, InterruptedException, ReadFailedException { - final StatisticsManagerActivator activator = new StatisticsManagerActivator(); - activator.onSessionInitiated(providerContext); - - addFlowCapableNodeWithFeatures(s1Key, false, FlowFeatureCapabilityTableStats.class); - - final TableId tableId = getTableId(); - final InstanceIdentifier
tableII = InstanceIdentifier.create(Nodes.class).child(Node.class, s1Key) - .augmentation(FlowCapableNode.class).child(Table.class, new TableKey(tableId.getValue())); - - getDataBroker().registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - tableII.augmentation(FlowTableStatisticsData.class), new ChangeListener(), AsyncDataBroker.DataChangeScope.BASE); - - synchronized (waitObject) { - waitObject.wait(); - } - - final ReadOnlyTransaction readTx = getDataBroker().newReadOnlyTransaction(); - final Optional flowTableStatisticsDataOptional = readTx.read( - LogicalDatastoreType.OPERATIONAL, tableII.augmentation(FlowTableStatisticsData.class)).checkedGet(); - assertTrue(flowTableStatisticsDataOptional.isPresent()); - assertEquals(COUNTER_32_TEST_VALUE, - flowTableStatisticsDataOptional.get().getFlowTableStatistics().getActiveFlows()); - assertEquals(COUNTER_64_TEST_VALUE, - flowTableStatisticsDataOptional.get().getFlowTableStatistics().getPacketsLookedUp()); - } - - private class ChangeListener implements DataChangeListener { - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> change) { - synchronized (waitObject) { - waitObject.notify(); - } - } - } -} - diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowStatisticsServiceMock.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowStatisticsServiceMock.java index 2628bb9f41..f483881975 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowStatisticsServiceMock.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowStatisticsServiceMock.java @@ -1,6 +1,10 @@ package test.mock.util; import com.google.common.util.concurrent.Futures; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Future; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.AggregateFlowStatisticsUpdateBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowsStatisticsUpdateBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForAllFlowsInput; @@ -27,15 +31,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicLong; - public class OpendaylightFlowStatisticsServiceMock implements OpendaylightFlowStatisticsService { NotificationProviderServiceHelper notifService; - AtomicLong transNum = new AtomicLong(); public OpendaylightFlowStatisticsServiceMock(NotificationProviderServiceHelper notifService) { this.notifService = notifService; @@ -44,7 +41,7 @@ public class OpendaylightFlowStatisticsServiceMock implements OpendaylightFlowSt @Override public Future> getAggregateFlowStatisticsFromFlowTableForAllFlows(GetAggregateFlowStatisticsFromFlowTableForAllFlowsInput input) { GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutputBuilder builder = new GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); return Futures.immediateFuture(RpcResultBuilder.success(builder.build()).build()); } @@ -52,7 +49,7 @@ public class OpendaylightFlowStatisticsServiceMock implements OpendaylightFlowSt @Override public Future> getAggregateFlowStatisticsFromFlowTableForGivenMatch(GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput input) { GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutputBuilder builder = new GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); AggregateFlowStatisticsUpdateBuilder afsuBuilder = new AggregateFlowStatisticsUpdateBuilder(); afsuBuilder.setMoreReplies(false); @@ -66,7 +63,7 @@ public class OpendaylightFlowStatisticsServiceMock implements OpendaylightFlowSt @Override public Future> getAllFlowStatisticsFromFlowTable(GetAllFlowStatisticsFromFlowTableInput input) { GetAllFlowStatisticsFromFlowTableOutputBuilder builder = new GetAllFlowStatisticsFromFlowTableOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); return Futures.immediateFuture(RpcResultBuilder.success(builder.build()).build()); } @@ -74,7 +71,7 @@ public class OpendaylightFlowStatisticsServiceMock implements OpendaylightFlowSt @Override public Future> getAllFlowsStatisticsFromAllFlowTables(GetAllFlowsStatisticsFromAllFlowTablesInput input) { GetAllFlowsStatisticsFromAllFlowTablesOutputBuilder builder = new GetAllFlowsStatisticsFromAllFlowTablesOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); List flowAndStatisticsMapLists = new ArrayList<>(); FlowsStatisticsUpdateBuilder flowsStatisticsUpdateBuilder = new FlowsStatisticsUpdateBuilder(); @@ -95,7 +92,7 @@ public class OpendaylightFlowStatisticsServiceMock implements OpendaylightFlowSt @Override public Future> getFlowStatisticsFromFlowTable(GetFlowStatisticsFromFlowTableInput input) { GetFlowStatisticsFromFlowTableOutputBuilder builder = new GetFlowStatisticsFromFlowTableOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); List flowAndStatisticsMapLists = new ArrayList<>(); FlowsStatisticsUpdateBuilder flowsStatisticsUpdateBuilder = new FlowsStatisticsUpdateBuilder(); diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowTableStatisticsServiceMock.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowTableStatisticsServiceMock.java index 42be70892c..ea9f40390f 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowTableStatisticsServiceMock.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightFlowTableStatisticsServiceMock.java @@ -1,6 +1,10 @@ package test.mock.util; import com.google.common.util.concurrent.Futures; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Future; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsUpdateBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.GetFlowTablesStatisticsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.GetFlowTablesStatisticsOutput; @@ -15,15 +19,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicLong; - public class OpendaylightFlowTableStatisticsServiceMock implements OpendaylightFlowTableStatisticsService { NotificationProviderServiceHelper notifService; - AtomicLong transNum = new AtomicLong(); public OpendaylightFlowTableStatisticsServiceMock(NotificationProviderServiceHelper notifService) { this.notifService = notifService; @@ -32,7 +29,7 @@ public class OpendaylightFlowTableStatisticsServiceMock implements OpendaylightF @Override public Future> getFlowTablesStatistics(GetFlowTablesStatisticsInput input) { GetFlowTablesStatisticsOutputBuilder builder = new GetFlowTablesStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); FlowTableStatisticsUpdateBuilder ftsBuilder = new FlowTableStatisticsUpdateBuilder(); FlowTableAndStatisticsMapBuilder ftasmBuilder = new FlowTableAndStatisticsMapBuilder(); diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightGroupStatisticsServiceMock.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightGroupStatisticsServiceMock.java index 7e7342f609..4b9c047d84 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightGroupStatisticsServiceMock.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightGroupStatisticsServiceMock.java @@ -1,6 +1,10 @@ package test.mock.util; import com.google.common.util.concurrent.Futures; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Future; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsOutput; @@ -29,15 +33,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicLong; - public class OpendaylightGroupStatisticsServiceMock implements OpendaylightGroupStatisticsService { NotificationProviderServiceHelper notifService; - AtomicLong transNum = new AtomicLong(); public OpendaylightGroupStatisticsServiceMock(NotificationProviderServiceHelper notifService) { this.notifService = notifService; @@ -46,7 +43,7 @@ public class OpendaylightGroupStatisticsServiceMock implements OpendaylightGroup @Override public Future> getAllGroupStatistics(GetAllGroupStatisticsInput input) { GetAllGroupStatisticsOutputBuilder builder = new GetAllGroupStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); List groupStats = new ArrayList<>(); GroupStatsBuilder gsBuilder = new GroupStatsBuilder(); @@ -66,7 +63,7 @@ public class OpendaylightGroupStatisticsServiceMock implements OpendaylightGroup @Override public Future> getGroupDescription(GetGroupDescriptionInput input) { GetGroupDescriptionOutputBuilder builder = new GetGroupDescriptionOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); List groupDescStats = new ArrayList<>(); GroupDescStatsUpdatedBuilder gdsuBuilder = new GroupDescStatsUpdatedBuilder(); @@ -89,7 +86,7 @@ public class OpendaylightGroupStatisticsServiceMock implements OpendaylightGroup @Override public Future> getGroupFeatures(GetGroupFeaturesInput input) { GetGroupFeaturesOutputBuilder builder = new GetGroupFeaturesOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); GroupFeaturesUpdatedBuilder gfuBuilder = new GroupFeaturesUpdatedBuilder(); gfuBuilder.setTransactionId(transId); @@ -105,7 +102,7 @@ public class OpendaylightGroupStatisticsServiceMock implements OpendaylightGroup @Override public Future> getGroupStatistics(GetGroupStatisticsInput input) { GetGroupStatisticsOutputBuilder builder = new GetGroupStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); GroupStatsBuilder gsBuilder = new GroupStatsBuilder(); List groupStats = new ArrayList<>(); diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightMeterStatisticsServiceMock.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightMeterStatisticsServiceMock.java index 2d65d1ebed..d5f0ce5995 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightMeterStatisticsServiceMock.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightMeterStatisticsServiceMock.java @@ -1,6 +1,10 @@ package test.mock.util; import com.google.common.util.concurrent.Futures; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Future; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; @@ -28,15 +32,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicLong; - public class OpendaylightMeterStatisticsServiceMock implements OpendaylightMeterStatisticsService { NotificationProviderServiceHelper notifService; - AtomicLong transNum = new AtomicLong(); public OpendaylightMeterStatisticsServiceMock(NotificationProviderServiceHelper notifService) { this.notifService = notifService; @@ -45,7 +42,7 @@ public class OpendaylightMeterStatisticsServiceMock implements OpendaylightMeter @Override public Future> getAllMeterConfigStatistics(GetAllMeterConfigStatisticsInput input) { GetAllMeterConfigStatisticsOutputBuilder builder = new GetAllMeterConfigStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); List meterConfigStats = new ArrayList<>(); MeterConfigStatsBuilder mcsBuilder = new MeterConfigStatsBuilder(); @@ -66,7 +63,7 @@ public class OpendaylightMeterStatisticsServiceMock implements OpendaylightMeter @Override public Future> getAllMeterStatistics(GetAllMeterStatisticsInput input) { GetAllMeterStatisticsOutputBuilder builder = new GetAllMeterStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); MeterStatsBuilder msBuilder = new MeterStatsBuilder(); msBuilder.setByteInCount(StatisticsManagerTest.COUNTER_64_TEST_VALUE); @@ -86,7 +83,7 @@ public class OpendaylightMeterStatisticsServiceMock implements OpendaylightMeter @Override public Future> getMeterFeatures(GetMeterFeaturesInput input) { GetMeterFeaturesOutputBuilder builder = new GetMeterFeaturesOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); MeterFeaturesUpdatedBuilder mfuBuilder = new MeterFeaturesUpdatedBuilder(); mfuBuilder.setTransactionId(transId); @@ -100,7 +97,7 @@ public class OpendaylightMeterStatisticsServiceMock implements OpendaylightMeter @Override public Future> getMeterStatistics(GetMeterStatisticsInput input) { GetMeterStatisticsOutputBuilder builder = new GetMeterStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); MeterStatsBuilder msBuilder = new MeterStatsBuilder(); msBuilder.setKey(new MeterStatsKey(input.getMeterId())); diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightPortStatisticsServiceMock.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightPortStatisticsServiceMock.java index 7164c56c1b..c3d13f4c24 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightPortStatisticsServiceMock.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightPortStatisticsServiceMock.java @@ -1,6 +1,10 @@ package test.mock.util; import com.google.common.util.concurrent.Futures; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Future; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; @@ -18,15 +22,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.n import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Future; -import java.util.concurrent.atomic.AtomicLong; - public class OpendaylightPortStatisticsServiceMock implements OpendaylightPortStatisticsService { NotificationProviderServiceHelper notifService; - AtomicLong transNum = new AtomicLong(); public OpendaylightPortStatisticsServiceMock(NotificationProviderServiceHelper notifService) { this.notifService = notifService; @@ -35,7 +32,7 @@ public class OpendaylightPortStatisticsServiceMock implements OpendaylightPortSt @Override public Future> getAllNodeConnectorsStatistics(GetAllNodeConnectorsStatisticsInput input) { GetAllNodeConnectorsStatisticsOutputBuilder builder = new GetAllNodeConnectorsStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); NodeConnectorStatisticsUpdateBuilder ncsuBuilder = new NodeConnectorStatisticsUpdateBuilder(); NodeConnectorStatisticsAndPortNumberMapBuilder ncsapnmBuilder = new NodeConnectorStatisticsAndPortNumberMapBuilder(); @@ -43,7 +40,7 @@ public class OpendaylightPortStatisticsServiceMock implements OpendaylightPortSt ncsapnmBuilder.setKey(new NodeConnectorStatisticsAndPortNumberMapKey(StatisticsManagerTest.getNodeConnectorId())); ncsapnmBuilder.setReceiveDrops(StatisticsManagerTest.BIG_INTEGER_TEST_VALUE); nodeConnectorStatisticsAndPortNumberMaps.add(ncsapnmBuilder.build()); - ncsuBuilder.setTransactionId(new TransactionId(BigInteger.valueOf(1))); + ncsuBuilder.setTransactionId(transId); ncsuBuilder.setId(input.getNode().getValue().firstKeyOf(Node.class, NodeKey.class).getId()); ncsuBuilder.setNodeConnectorStatisticsAndPortNumberMap(nodeConnectorStatisticsAndPortNumberMaps); ncsuBuilder.setMoreReplies(true); @@ -60,7 +57,7 @@ public class OpendaylightPortStatisticsServiceMock implements OpendaylightPortSt @Override public Future> getNodeConnectorStatistics(GetNodeConnectorStatisticsInput input) { GetNodeConnectorStatisticsOutputBuilder builder = new GetNodeConnectorStatisticsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); return Futures.immediateFuture(RpcResultBuilder.success(builder.build()).build()); } diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightQueueStatisticsServiceMock.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightQueueStatisticsServiceMock.java index 4f6806b8ca..8908dd5c0e 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightQueueStatisticsServiceMock.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/OpendaylightQueueStatisticsServiceMock.java @@ -38,7 +38,7 @@ public class OpendaylightQueueStatisticsServiceMock implements OpendaylightQueue @Override public Future> getAllQueuesStatisticsFromAllPorts(GetAllQueuesStatisticsFromAllPortsInput input) { GetAllQueuesStatisticsFromAllPortsOutputBuilder builder = new GetAllQueuesStatisticsFromAllPortsOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); QueueStatisticsUpdateBuilder qsuBuilder = new QueueStatisticsUpdateBuilder(); QueueIdAndStatisticsMapBuilder qiasmBuilder = new QueueIdAndStatisticsMapBuilder(); @@ -57,7 +57,7 @@ public class OpendaylightQueueStatisticsServiceMock implements OpendaylightQueue @Override public Future> getAllQueuesStatisticsFromGivenPort(GetAllQueuesStatisticsFromGivenPortInput input) { GetAllQueuesStatisticsFromGivenPortOutputBuilder builder = new GetAllQueuesStatisticsFromGivenPortOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); return Futures.immediateFuture(RpcResultBuilder.success(builder.build()).build()); } @@ -65,7 +65,7 @@ public class OpendaylightQueueStatisticsServiceMock implements OpendaylightQueue @Override public Future> getQueueStatisticsFromGivenPort(GetQueueStatisticsFromGivenPortInput input) { GetQueueStatisticsFromGivenPortOutputBuilder builder = new GetQueueStatisticsFromGivenPortOutputBuilder(); - TransactionId transId = new TransactionId(BigInteger.valueOf(transNum.incrementAndGet())); + TransactionId transId = new TransactionId(BigInteger.valueOf(TestUtils.getNewTransactionId())); builder.setTransactionId(transId); QueueIdAndStatisticsMapBuilder qiasmBuilder = new QueueIdAndStatisticsMapBuilder(); List queueIdAndStatisticsMaps = new ArrayList<>(); diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/ProviderContextMock.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/ProviderContextMock.java deleted file mode 100644 index 9b40a7684f..0000000000 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/ProviderContextMock.java +++ /dev/null @@ -1,69 +0,0 @@ -package test.mock.util; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; -import org.opendaylight.controller.sal.binding.api.BindingAwareService; -import org.opendaylight.controller.sal.binding.api.NotificationProviderService; -import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.controller.sal.binding.api.rpc.RpcContextIdentifier; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.RpcService; - -public class ProviderContextMock implements BindingAwareBroker.ProviderContext { - - RpcProviderRegistry rpcProviderMock; - NotificationProviderService notificationProviderService; - DataBroker dataBroker; - - public ProviderContextMock(RpcProviderRegistry rpcProviderMock, DataBroker dataBroker, - NotificationProviderService notificationProviderServiceMock) { - this.rpcProviderMock = rpcProviderMock; - this.dataBroker = dataBroker; - this.notificationProviderService = notificationProviderServiceMock; - } - - @Override - public void registerFunctionality(BindingAwareProvider.ProviderFunctionality functionality) { - - } - - @Override - public void unregisterFunctionality(BindingAwareProvider.ProviderFunctionality functionality) { - - } - - @SuppressWarnings("unchecked") - @Override - public T getSALService(Class service) { - if (service.equals(DataBroker.class)) { - return (T) dataBroker; - } - else if (service.equals(NotificationProviderService.class)) { - return (T) notificationProviderService; - } - return null; - } - - @Override - public BindingAwareBroker.RpcRegistration addRpcImplementation(Class serviceInterface, T implementation) throws IllegalStateException { - return null; - } - - @Override - public BindingAwareBroker.RoutedRpcRegistration addRoutedRpcImplementation(Class serviceInterface, T implementation) throws IllegalStateException { - return null; - } - - @Override - public >> ListenerRegistration registerRouteChangeListener(L listener) { - return null; - } - - @Override - public T getRpcService(Class serviceInterface) { - return rpcProviderMock.getRpcService(serviceInterface); - } -} diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/StatisticsManagerTest.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/StatisticsManagerTest.java index 7f266d9c3c..45765edd0e 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/StatisticsManagerTest.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/StatisticsManagerTest.java @@ -1,9 +1,17 @@ package test.mock.util; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.BeforeClass; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.statistics.manager.StatisticsManager; +import org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerConfig; +import org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerImpl; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter32; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter64; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FeatureCapability; @@ -35,12 +43,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111. import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ExecutionException; - public abstract class StatisticsManagerTest extends AbstractDataBrokerTest { public static final Counter64 COUNTER_64_TEST_VALUE = new Counter64(BigInteger.valueOf(128)); @@ -48,6 +50,9 @@ public abstract class StatisticsManagerTest extends AbstractDataBrokerTest { public static final Long MAX_GROUPS_TEST_VALUE = 2000L; public static final BigInteger BIG_INTEGER_TEST_VALUE = BigInteger.valueOf(1000); + private static final int DEFAULT_MIN_REQUEST_NET_MONITOR_INTERVAL = 5000; + private static final int MAX_NODES_FOR_COLLECTOR = 16; + private static Flow flow; private static Group group; private static Meter meter; @@ -59,7 +64,6 @@ public abstract class StatisticsManagerTest extends AbstractDataBrokerTest { private final NotificationProviderServiceHelper notificationMock = new NotificationProviderServiceHelper(); protected final NodeKey s1Key = new NodeKey(new NodeId("S1")); protected RpcProviderRegistryMock rpcRegistry; - protected ProviderContextMock providerContext; @BeforeClass public static void setupTests() { @@ -75,7 +79,6 @@ public abstract class StatisticsManagerTest extends AbstractDataBrokerTest { @Before public void init() { rpcRegistry = new RpcProviderRegistryMock(notificationMock); - providerContext = new ProviderContextMock(rpcRegistry, getDataBroker(), notificationMock.getNotifBroker()); } // node with statistics capabilities will enable cyclic statistics collection @@ -94,7 +97,7 @@ public abstract class StatisticsManagerTest extends AbstractDataBrokerTest { capabilitiyList.add(capability); } sfBuilder.setCapabilities(capabilitiyList); - sfBuilder.setMaxTables((short) 2); + sfBuilder.setMaxTables((short) 255); final NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setKey(nodeKey); fcnBuilder.setSwitchFeatures(sfBuilder.build()); @@ -137,6 +140,9 @@ public abstract class StatisticsManagerTest extends AbstractDataBrokerTest { final FlowCapableNodeBuilder fcnBuilder = new FlowCapableNodeBuilder(); final NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setKey(nodeKey); + final SwitchFeaturesBuilder sfBuilder = new SwitchFeaturesBuilder(); + sfBuilder.setMaxTables((short) 255); + fcnBuilder.setSwitchFeatures(sfBuilder.build()); final FlowCapableNode flowCapableNode = fcnBuilder.build(); nodeBuilder.addAugmentation(FlowCapableNode.class, flowCapableNode); final Node node = nodeBuilder.build(); @@ -167,6 +173,15 @@ public abstract class StatisticsManagerTest extends AbstractDataBrokerTest { notificationMock.pushNotification(nrBuilder.build()); } + public StatisticsManager setupStatisticsManager() { + StatisticsManagerConfig.StatisticsManagerConfigBuilder confBuilder = StatisticsManagerConfig.builder(); + confBuilder.setMaxNodesForCollector(MAX_NODES_FOR_COLLECTOR); + confBuilder.setMinRequestNetMonitorInterval(DEFAULT_MIN_REQUEST_NET_MONITOR_INTERVAL); + StatisticsManager statsProvider = new StatisticsManagerImpl(getDataBroker(), confBuilder.build()); + statsProvider.start(notificationMock.getNotifBroker(), rpcRegistry); + return statsProvider; + } + public static Flow getFlow() { return flow; } diff --git a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/TestUtils.java b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/TestUtils.java index e38a25e8e9..d18dc23ad4 100644 --- a/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/TestUtils.java +++ b/opendaylight/md-sal/statistics-manager/src/test/java/test/mock/util/TestUtils.java @@ -1,11 +1,19 @@ package test.mock.util; import java.util.Random; +import java.util.concurrent.atomic.AtomicLong; public class TestUtils { + + private static AtomicLong transId = new AtomicLong(); + private static Random rnd = new Random(); public static long nextLong(long RangeBottom, long rangeTop) { return RangeBottom + ((long)(rnd.nextDouble()*(rangeTop - RangeBottom))); } + + public static long getNewTransactionId() { + return transId.incrementAndGet(); + } } -- 2.36.6