From 45a09556b6b20b86b1ef520984960ec4491cdd2d Mon Sep 17 00:00:00 2001 From: Tomas Cere Date: Mon, 9 Mar 2015 10:23:56 +0100 Subject: [PATCH] Fixed testool performance bottleneck due to testtool using NetconfMonitoring from ODL. Added a dummy NetconfMonitoring implementation for testtool. Change-Id: I4d2eaf955ccac78de135749bd8c2bda3e3d6f35b Signed-off-by: Tomas Cere --- .../test/tool/DummyMonitoringService.java | 129 ++++++++++++++++++ .../tool/FakeModuleBuilderCapability.java | 4 +- .../test/tool/ModuleBuilderCapability.java | 3 +- .../test/tool/NetconfDeviceSimulator.java | 8 +- 4 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/DummyMonitoringService.java diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/DummyMonitoringService.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/DummyMonitoringService.java new file mode 100644 index 0000000000..e96be6c7ae --- /dev/null +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/DummyMonitoringService.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.netconf.test.tool; + +import com.google.common.base.Function; +import com.google.common.base.Optional; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Collections2; +import com.google.common.collect.Lists; +import java.util.Collections; +import java.util.Set; +import javax.annotation.Nullable; +import org.opendaylight.controller.netconf.api.Capability; +import org.opendaylight.controller.netconf.api.monitoring.NetconfManagementSession; +import org.opendaylight.controller.netconf.api.monitoring.NetconfMonitoringService; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.Yang; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Capabilities; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.CapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Schemas; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.SchemasBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.Sessions; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.SessionsBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema.Location; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.Schema.Location.Enumeration; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.SchemaBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.schemas.SchemaKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session; + +public class DummyMonitoringService implements NetconfMonitoringService { + + private static final Sessions EMPTY_SESSIONS = new SessionsBuilder().setSession(Collections.emptyList()).build(); + private static final Function CAPABILITY_URI_FUNCTION = new Function() { + @Nullable + @Override + public Uri apply(Capability capability) { + return new Uri(capability.getCapabilityUri()); + } + }; + + private static final Function CAPABILITY_SCHEMA_FUNCTION = new Function() { + @Nullable + @Override + public Schema apply(@Nullable Capability capability) { + return new SchemaBuilder() + .setIdentifier(capability.getModuleName().get()) + .setNamespace(new Uri(capability.getModuleNamespace().get())) + .setFormat(Yang.class) + .setVersion(capability.getRevision().get()) + .setLocation(Collections.singletonList(new Location(Enumeration.NETCONF))) + .setKey(new SchemaKey(Yang.class, capability.getModuleName().get(), capability.getRevision().get())).build(); + } + }; + + private final Capabilities capabilities; + private final ArrayListMultimap capabilityMultiMap; + private final Schemas schemas; + + public DummyMonitoringService(Set capabilities) { + + this.capabilities = new CapabilitiesBuilder().setCapability( + Lists.newArrayList(Collections2.transform(capabilities, CAPABILITY_URI_FUNCTION))).build(); + + this.capabilityMultiMap = ArrayListMultimap.create(); + for (Capability cap : capabilities) { + capabilityMultiMap.put(cap.getModuleName().get(), cap); + } + + this.schemas = new SchemasBuilder().setSchema(Lists.newArrayList(Collections2.transform(capabilities, CAPABILITY_SCHEMA_FUNCTION))).build(); + } + + @Override + public Sessions getSessions() { + return EMPTY_SESSIONS; + } + + @Override + public Schemas getSchemas() { + return schemas; + } + + @Override + public String getSchemaForCapability(String moduleName, Optional revision) { + + for (Capability capability : capabilityMultiMap.get(moduleName)) { + if (capability.getRevision().get().equals(revision.get())) { + return capability.getCapabilitySchema().get(); + } + } + throw new IllegalArgumentException("Module with name: " + moduleName + " and revision: " + revision + " does not exist"); + } + + @Override + public Capabilities getCapabilities() { + return capabilities; + } + + @Override + public AutoCloseable registerListener(MonitoringListener listener) { + return null; + } + + @Override + public void onCapabilitiesAdded(Set addedCaps) { + + } + + @Override + public void onCapabilitiesRemoved(Set removedCaps) { + + } + + @Override + public void onSessionUp(NetconfManagementSession session) { + + } + + @Override + public void onSessionDown(NetconfManagementSession session) { + + } +} diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java index 3aba6f81a3..5f8107ccb1 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/FakeModuleBuilderCapability.java @@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder; */ public class FakeModuleBuilderCapability implements Capability{ private static final Date NO_REVISION = new Date(0); + private static final List NETCONF = Collections.singletonList("NETCONF"); private final ModuleBuilder input; private final Optional content; @@ -68,6 +69,7 @@ public class FakeModuleBuilderCapability implements Capability{ @Override public List getLocation() { - return Collections.emptyList(); + return NETCONF; } + } diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java index 11af568321..eb9d906272 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/ModuleBuilderCapability.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder; final class ModuleBuilderCapability implements Capability { private static final Date NO_REVISION = new Date(0); + private static final List NETCONF = Collections.singletonList("NETCONF"); private final ModuleBuilder input; private final Optional content; @@ -60,6 +61,6 @@ final class ModuleBuilderCapability implements Capability { @Override public List getLocation() { - return Collections.emptyList(); + return NETCONF; } } diff --git a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java index 72a9da6d08..817b45f786 100644 --- a/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java +++ b/opendaylight/netconf/netconf-testtool/src/main/java/org/opendaylight/controller/netconf/test/tool/NetconfDeviceSimulator.java @@ -64,7 +64,6 @@ import org.opendaylight.controller.netconf.impl.NetconfServerDispatcherImpl; import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory; import org.opendaylight.controller.netconf.impl.SessionIdProvider; import org.opendaylight.controller.netconf.impl.osgi.AggregatedNetconfOperationServiceFactory; -import org.opendaylight.controller.netconf.impl.osgi.NetconfMonitoringServiceImpl; import org.opendaylight.controller.netconf.mapping.api.NetconfOperation; import org.opendaylight.controller.netconf.mapping.api.NetconfOperationService; import org.opendaylight.controller.netconf.mapping.api.NetconfOperationServiceFactory; @@ -142,13 +141,14 @@ public class NetconfDeviceSimulator implements Closeable { final SessionIdProvider idProvider = new SessionIdProvider(); - final AggregatedNetconfOperationServiceFactory aggregatedNetconfOperationServiceFactory = new AggregatedNetconfOperationServiceFactory(); final SimulatedOperationProvider simulatedOperationProvider = new SimulatedOperationProvider(idProvider, capabilities, notificationsFile); - final NetconfMonitoringService monitoringService1 = new NetconfMonitoringServiceImpl(aggregatedNetconfOperationServiceFactory); + final NetconfMonitoringService monitoringService1 = new DummyMonitoringService(capabilities); + final NetconfMonitoringActivator.NetconfMonitoringOperationServiceFactory monitoringService = - new NetconfMonitoringActivator.NetconfMonitoringOperationServiceFactory(new NetconfMonitoringOperationService(monitoringService1)); + new NetconfMonitoringActivator.NetconfMonitoringOperationServiceFactory( + new NetconfMonitoringOperationService(monitoringService1)); aggregatedNetconfOperationServiceFactory.onAddNetconfOperationServiceFactory(simulatedOperationProvider); aggregatedNetconfOperationServiceFactory.onAddNetconfOperationServiceFactory(monitoringService); -- 2.36.6