From 4e90dc91054540e5a40144c6349d0bc0dcbba91a Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Wed, 5 Feb 2014 16:18:08 +0100 Subject: [PATCH] Migrate toaster samples to config-subsystem - Fix integration test for toaster samples. - The toaster is now disabled by default in distribution in order to enable it, you must change configure toaster module as in opendaylight/md-sal/samples/toaster-it/src/test/resources/controller.xml Change-Id: I7c70704c2faea8d39b0f9ad32394e78bca6c80dc Signed-off-by: Maros Marsalek --- opendaylight/md-sal/samples/pom.xml | 7 +- .../md-sal/samples/toaster-consumer/pom.xml | 79 +++++- .../impl/ToasterConsumerModule.java | 68 +++++ .../impl/ToasterConsumerModuleFactory.java | 19 ++ .../provider/impl/ToastConsumerImpl.java | 53 ++-- .../src/main/yang/toaster-consumer-impl.yang | 81 ++++++ .../src/main/yang/toaster-consumer.yang | 26 ++ .../md-sal/samples/toaster-it/pom.xml | 123 ++------- .../sample/toaster/it/ToasterTest.java | 160 +++++------ .../src/test/resources/controller.xml | 250 ++++++++++++++++++ .../toaster-it/src/test/resources/logback.xml | 5 +- .../md-sal/samples/toaster-provider/pom.xml | 72 ++++- .../impl/ToasterProviderModule.java | 72 +++++ .../impl/ToasterProviderModuleFactory.java | 19 ++ .../toaster/provider/OpendaylightToaster.java | 14 +- .../toaster/provider/ToasterActivator.java | 12 - .../toaster/provider/ToasterProvider.java | 49 ---- .../src/main/yang/toaster-provider-impl.yang | 63 +++++ .../src/main/yang/toaster-provider.yang | 26 ++ 19 files changed, 894 insertions(+), 304 deletions(-) create mode 100644 opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModule.java create mode 100644 opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModuleFactory.java create mode 100644 opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer-impl.yang create mode 100644 opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer.yang create mode 100644 opendaylight/md-sal/samples/toaster-it/src/test/resources/controller.xml create mode 100644 opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModule.java create mode 100644 opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModuleFactory.java delete mode 100644 opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterActivator.java delete mode 100644 opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterProvider.java create mode 100644 opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider-impl.yang create mode 100644 opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider.yang diff --git a/opendaylight/md-sal/samples/pom.xml b/opendaylight/md-sal/samples/pom.xml index a332ef77b6..54810266a7 100644 --- a/opendaylight/md-sal/samples/pom.xml +++ b/opendaylight/md-sal/samples/pom.xml @@ -1,3 +1,4 @@ + 4.0.0 @@ -18,7 +19,7 @@ toaster toaster-consumer toaster-provider - + @@ -27,10 +28,10 @@ false - + toaster-it org.opendaylight.controller.samples - + \ No newline at end of file diff --git a/opendaylight/md-sal/samples/toaster-consumer/pom.xml b/opendaylight/md-sal/samples/toaster-consumer/pom.xml index 40e99ec28b..fca9783f61 100644 --- a/opendaylight/md-sal/samples/toaster-consumer/pom.xml +++ b/opendaylight/md-sal/samples/toaster-consumer/pom.xml @@ -14,6 +14,12 @@ HEAD + + 1.1-SNAPSHOT + ${project.build.directory}/generated-sources/config + + + @@ -21,12 +27,69 @@ maven-bundle-plugin - org.opendaylight.controller.sample.toaster.provider.api - org.opendaylight.controller.sample.toaster.provider.impl - org.opendaylight.controller.sample.toaster.provider.impl.ToastConsumerImpl + + org.opendaylight.controller.sample.toaster.provider.api, + org.opendaylight.controller.config.yang.toaster-consumer, + + * + + 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 + + + + + true + + + + + + org.opendaylight.controller + yang-jmx-generator-plugin + ${config.version} + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + add-source + generate-sources + + add-source + + + + ${jmxGeneratorPath} + + + + + @@ -40,5 +103,15 @@ org.opendaylight.controller sal-binding-api + + org.opendaylight.controller + config-api + ${config.version} + + + org.opendaylight.controller + sal-binding-config + ${sal-binding-api.version} + diff --git a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModule.java b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModule.java new file mode 100644 index 0000000000..c006a34da7 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModule.java @@ -0,0 +1,68 @@ +/** +* Generated file + +* Generated from: yang module name: toaster-consumer-impl yang module local name: toaster-consumer-impl +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Wed Feb 05 11:31:30 CET 2014 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.config.toaster_consumer.impl; + +import org.opendaylight.controller.sal.binding.api.NotificationListener; +import org.opendaylight.controller.sample.toaster.provider.api.ToastConsumer; +import org.opendaylight.controller.sample.toaster.provider.impl.ToastConsumerImpl; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastDone; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastType; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterService; +import org.opendaylight.yangtools.concepts.Registration; + +/** +* +*/ +public final class ToasterConsumerModule extends org.opendaylight.controller.config.yang.config.toaster_consumer.impl.AbstractToasterConsumerModule + { + + public ToasterConsumerModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public ToasterConsumerModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, + ToasterConsumerModule oldModule, java.lang.AutoCloseable oldInstance) { + + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + protected void customValidation(){ + // No need to validate dependencies, since all dependencies have mandatory true flag in yang + // config-subsystem will perform the validation + } + + @Override + public java.lang.AutoCloseable createInstance() { + ToasterService toasterService = getRpcRegistryDependency().getRpcService(ToasterService.class); + + final ToastConsumerImpl consumer = new ToastConsumerImpl(toasterService); + final Registration> notificationRegistration = getNotificationServiceDependency() + .registerNotificationListener(ToastDone.class, consumer); + + final ToasterConsumerRuntimeRegistration runtimeRegistration = getRootRuntimeBeanRegistratorWrapper().register(consumer); + + final class AutoCloseableToastConsumer implements AutoCloseable, ToastConsumer { + + @Override + public void close() throws Exception { + runtimeRegistration.close(); + notificationRegistration.close(); + } + + @Override + public boolean createToast(Class type, int doneness) { + return consumer.createToast(type, doneness); + } + } + + return new AutoCloseableToastConsumer(); + } +} diff --git a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModuleFactory.java b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModuleFactory.java new file mode 100644 index 0000000000..f8048947b9 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/config/yang/config/toaster_consumer/impl/ToasterConsumerModuleFactory.java @@ -0,0 +1,19 @@ +/** +* Generated file + +* Generated from: yang module name: toaster-consumer-impl yang module local name: toaster-consumer-impl +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Wed Feb 05 11:31:30 CET 2014 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.config.toaster_consumer.impl; + +/** +* +*/ +public class ToasterConsumerModuleFactory extends org.opendaylight.controller.config.yang.config.toaster_consumer.impl.AbstractToasterConsumerModuleFactory +{ + + +} diff --git a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/toaster/provider/impl/ToastConsumerImpl.java b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/toaster/provider/impl/ToastConsumerImpl.java index 87e5787ef5..5a4b45c71e 100644 --- a/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/toaster/provider/impl/ToastConsumerImpl.java +++ b/opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/toaster/provider/impl/ToastConsumerImpl.java @@ -7,33 +7,27 @@ */ package org.opendaylight.controller.sample.toaster.provider.impl; -import java.util.Hashtable; import java.util.concurrent.ExecutionException; -import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareConsumer; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext; -import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer; +import org.opendaylight.controller.config.yang.config.toaster_consumer.impl.ToasterConsumerRuntimeMXBean; import org.opendaylight.controller.sal.binding.api.NotificationListener; -import org.opendaylight.controller.sal.binding.api.NotificationService; import org.opendaylight.controller.sample.toaster.provider.api.ToastConsumer; -import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.MakeToastInputBuilder; -import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastDone; -import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastType; -import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterService; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.*; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ToastConsumerImpl extends AbstractBindingAwareConsumer implements BundleActivator, BindingAwareConsumer, ToastConsumer, - NotificationListener { +public class ToastConsumerImpl implements + ToastConsumer, + NotificationListener,ToasterConsumerRuntimeMXBean { private static final Logger log = LoggerFactory.getLogger(ToastConsumerImpl.class); private ToasterService toaster; - private ConsumerContext session; + public ToastConsumerImpl(ToasterService toaster) { + this.toaster = toaster; + } @Override public boolean createToast(Class type, int doneness) { @@ -42,45 +36,28 @@ public class ToastConsumerImpl extends AbstractBindingAwareConsumer implements B toastInput.setToasterToastType(type); try { - RpcResult result = getToastService().makeToast(toastInput.build()).get(); + RpcResult result = toaster.makeToast(toastInput.build()).get(); if (result.isSuccessful()) { - log.trace("Toast was successfuly finished"); + log.trace("Toast was successfully finished"); } else { - log.warn("Toast was not successfuly finished"); + log.warn("Toast was not successfully finished"); } return result.isSuccessful(); } catch (InterruptedException | ExecutionException e) { - log.warn("Error occured during toast creation"); + log.warn("Error occurred during toast creation"); } return false; } - @Override - @Deprecated - protected void startImpl(BundleContext context) { - context.registerService(ToastConsumer.class, this, new Hashtable()); - } - - @Override - public void onSessionInitialized(ConsumerContext session) { - this.session = session; - NotificationService notificationService = session.getSALService(NotificationService.class); - notificationService.registerNotificationListener(ToastDone.class, this); - } - @Override public void onNotification(ToastDone notification) { log.trace("ToastDone Notification Received: {} ",notification.getToastStatus()); - } - private ToasterService getToastService() { - if (toaster == null) { - toaster = session.getRpcService(ToasterService.class); - } - return toaster; + @Override + public Boolean makeHashBrownToast(Integer doneness) { + return createToast(HashBrown.class, doneness); } - } diff --git a/opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer-impl.yang b/opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer-impl.yang new file mode 100644 index 0000000000..8bc1a5cc22 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer-impl.yang @@ -0,0 +1,81 @@ +// vi: set smarttab et sw=4 tabstop=4: +module toaster-consumer-impl { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer:impl"; + prefix "toaster-consumer-impl"; + + import config { prefix config; revision-date 2013-04-05; } + import rpc-context { prefix rpcx; revision-date 2013-06-17; } + + import toaster-consumer { prefix toaster-consumer; revision-date 2014-01-31; } + import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; } + + description + "This module contains the base YANG definitions for + toaster-consumer impl implementation."; + + revision "2014-01-31" { + description + "Initial revision."; + } + + // This is the definition of a service implementation + identity toaster-consumer-impl { + base config:module-type; + config:provided-service toaster-consumer:toaster-consumer; + config:java-name-prefix ToasterConsumer; + } + + augment "/config:modules/config:module/config:configuration" { + case toaster-consumer-impl { + when "/config:modules/config:module/config:type = 'toaster-consumer-impl'"; + + 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; + } + } + } + + } + } + + augment "/config:modules/config:module/config:state" { + case toaster-consumer-impl { + when "/config:modules/config:module/config:type = 'toaster-consumer-impl'"; + rpcx:rpc-context-instance "make-hash-brown-toast-rpc"; + } + } + + identity make-hash-brown-toast-rpc; + + rpc make-hash-brown-toast { + input { + uses rpcx:rpc-context-ref { + refine context-instance { + rpcx:rpc-context-instance make-hash-brown-toast-rpc; + } + } + leaf doneness { + type uint16; + } + } + output { + leaf result { + type boolean; + } + } + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer.yang b/opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer.yang new file mode 100644 index 0000000000..c050ee86c6 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-consumer/src/main/yang/toaster-consumer.yang @@ -0,0 +1,26 @@ +// vi: set smarttab et sw=4 tabstop=4: +module toaster-consumer { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer"; + prefix "toaster-consumer"; + + import config { prefix config; revision-date 2013-04-05; } + + description + "This module contains the base YANG definitions for + toaster-consumer services."; + + revision "2014-01-31" { + description + "Initial revision."; + } + + // This is the definition of a service + identity toaster-consumer { + + base "config:service-type"; + + config:java-class "org.opendaylight.controller.sample.toaster.provider.api.ToastConsumer"; + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/samples/toaster-it/pom.xml b/opendaylight/md-sal/samples/toaster-it/pom.xml index a1925a53b5..d61393c225 100644 --- a/opendaylight/md-sal/samples/toaster-it/pom.xml +++ b/opendaylight/md-sal/samples/toaster-it/pom.xml @@ -4,7 +4,7 @@ sal-samples org.opendaylight.controller.samples - 1.0-SNAPSHOT + 1.1-SNAPSHOT sample-toaster-it @@ -13,10 +13,6 @@ https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL - - 3.0.0 - 1.5.0 - @@ -33,106 +29,39 @@ - - org.jacoco - jacoco-maven-plugin - - org.opendaylight.controller.* - - - - pre-test - - prepare-agent - - - - post-test - test - - report - - - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - - org.ops4j.pax.exam - - - maven-paxexam-plugin - - - [1.2.4,) - - - - generate-depends-file - - - - - - - - - - - - - - org.opendaylight.yangtools.thirdparty - xtend-lib-osgi - 2.4.3 - - - org.opendaylight.controller.samples - sample-toaster - 1.0-SNAPSHOT + org.opendaylight.controller + sal-binding-it + 1.1-SNAPSHOT org.opendaylight.controller.samples sample-toaster-consumer - 1.0-SNAPSHOT + 1.1-SNAPSHOT org.opendaylight.controller.samples sample-toaster-provider - 1.0-SNAPSHOT + 1.1-SNAPSHOT - org.opendaylight.controller - sal-binding-broker-impl - 1.0-SNAPSHOT + org.opendaylight.controller.samples + sample-toaster + 1.1-SNAPSHOT + - org.ops4j.pax.exam - pax-exam-container-native - ${exam.version} - test + junit + junit org.ops4j.pax.exam pax-exam-junit4 ${exam.version} - test org.ops4j.pax.exam @@ -140,11 +69,11 @@ ${exam.version} test - - org.opendaylight.controller - config-manager - 0.2.3-SNAPSHOT + org.ops4j.pax.exam + pax-exam-container-native + ${exam.version} + test equinoxSDK381 @@ -152,25 +81,5 @@ 3.8.1.v20120830-144521 test - - org.slf4j - log4j-over-slf4j - 1.7.2 - - - ch.qos.logback - logback-core - 1.0.9 - - - ch.qos.logback - logback-classic - 1.0.9 - - - org.opendaylight.yangtools.thirdparty - antlr4-runtime-osgi-nohead - 4.0 - diff --git a/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java b/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java index a7e1e9b445..38a4dd4661 100644 --- a/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java +++ b/opendaylight/md-sal/samples/toaster-it/src/test/java/org/opendaylight/controller/sample/toaster/it/ToasterTest.java @@ -7,116 +7,98 @@ */ package org.opendaylight.controller.sample.toaster.it; +import static org.junit.Assert.assertEquals; +import static org.opendaylight.controller.test.sal.binding.it.TestHelper.*; +import static org.ops4j.pax.exam.CoreOptions.*; + +import javax.inject.Inject; +import javax.management.JMX; +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.config.yang.config.toaster_consumer.impl.ToasterConsumerRuntimeMXBean; +import org.opendaylight.controller.config.yang.config.toaster_provider.impl.ToasterProviderRuntimeMXBean; import org.opendaylight.controller.sample.toaster.provider.api.ToastConsumer; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.HashBrown; import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.WhiteBread; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.PaxExam; -import org.osgi.framework.BundleContext; - -import javax.inject.Inject; - -import static org.junit.Assert.assertTrue; -import static org.ops4j.pax.exam.CoreOptions.junitBundles; -import static org.ops4j.pax.exam.CoreOptions.mavenBundle; -import static org.ops4j.pax.exam.CoreOptions.options; -import static org.ops4j.pax.exam.CoreOptions.systemProperty; +import org.ops4j.pax.exam.options.DefaultCompositeOption; +import org.ops4j.pax.exam.util.Filter; import org.ops4j.pax.exam.util.PathUtils; +import java.lang.management.ManagementFactory; + @RunWith(PaxExam.class) public class ToasterTest { - public static final String ODL = "org.opendaylight.controller"; - public static final String YANG = "org.opendaylight.yangtools"; - public static final String CONTROLLER = "org.opendaylight.controller"; - public static final String YANGTOOLS = "org.opendaylight.yangtools"; - - - public static final String SAMPLE = "org.opendaylight.controller.samples"; + @Inject + @Filter(timeout=60*1000) + ToastConsumer toastConsumer; - @Test - public void properInitialized() throws Exception { + @Configuration + public Option[] config() { + return options(systemProperty("osgi.console").value("2401"), mavenBundle("org.slf4j", "slf4j-api") + .versionAsInProject(), // + mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), // + + systemProperty("logback.configurationFile").value( + "file:" + PathUtils.getBaseDir() + + "/src/test/resources/logback.xml"), + mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), // + mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), // + systemProperty("osgi.bundles.defaultStartLevel").value("4"), - Thread.sleep(500); // Waiting for services to get wired. + toasterBundles(), + mdSalCoreBundles(), - assertTrue(consumer.createToast(WhiteBread.class, 5)); + bindingAwareSalBundles(), + configMinumumBundles(), + // BASE Models + baseModelBundles(), + flowCapableModelBundles(), + // Set fail if unresolved bundle present + systemProperty("pax.exam.osgi.unresolved.fail").value("true"), + junitAndMockitoBundles()); } - @Inject - BindingAwareBroker broker; + private Option toasterBundles() { + return new DefaultCompositeOption( + mavenBundle("org.opendaylight.controller.samples", "sample-toaster-provider").versionAsInProject(), + mavenBundle("org.opendaylight.controller.samples", "sample-toaster-consumer").versionAsInProject(), + mavenBundle("org.opendaylight.controller.samples", "sample-toaster").versionAsInProject() + ); + } - @Inject - ToastConsumer consumer; + @Test + public void testToaster() throws Exception { - @Inject - BundleContext ctx; + MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); + ObjectName consumerOn = new ObjectName("org.opendaylight.controller:instanceName=toaster-consumer-impl,type=RuntimeBean,moduleFactoryName=toaster-consumer-impl"); + ObjectName providerOn = new ObjectName("org.opendaylight.controller:instanceName=toaster-provider-impl,type=RuntimeBean,moduleFactoryName=toaster-provider-impl"); - @Configuration - public Option[] config() { - return options(systemProperty("osgi.console").value("2401"), - systemProperty("logback.configurationFile").value( - "file:" + PathUtils.getBaseDir() - + "/src/test/resources/logback.xml"), - mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(), // - mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(), // - mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(), // - mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(), // - - mavenBundle(ODL, "sal-common").versionAsInProject(), // - mavenBundle(ODL, "sal-common-api").versionAsInProject(),// - mavenBundle(ODL, "sal-common-impl").versionAsInProject(), // - mavenBundle(ODL, "sal-common-util").versionAsInProject(), // - - mavenBundle(ODL, "config-api").versionAsInProject(), // - mavenBundle(ODL, "config-manager").versionAsInProject(), // - mavenBundle("commons-io", "commons-io").versionAsInProject(), - mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(), - - mavenBundle(CONTROLLER, "sal-binding-api").versionAsInProject(), // - mavenBundle(CONTROLLER, "sal-binding-config").versionAsInProject(), - mavenBundle(CONTROLLER, "sal-binding-broker-impl").versionAsInProject(), // - mavenBundle("org.javassist", "javassist").versionAsInProject(), // - mavenBundle(CONTROLLER, "sal-common-util").versionAsInProject(), // - - mavenBundle(YANGTOOLS, "yang-data-api").versionAsInProject(), // - mavenBundle(YANGTOOLS, "yang-data-impl").versionAsInProject(), // - mavenBundle(YANGTOOLS, "yang-model-api").versionAsInProject(), // - mavenBundle(YANGTOOLS, "yang-model-util").versionAsInProject(), // - mavenBundle(YANGTOOLS, "yang-parser-api").versionAsInProject(), - mavenBundle(YANGTOOLS, "yang-parser-impl").versionAsInProject(), - - - mavenBundle(YANGTOOLS, "binding-generator-spi").versionAsInProject(), // - mavenBundle(YANGTOOLS, "binding-model-api").versionAsInProject(), // - mavenBundle(YANGTOOLS, "binding-generator-util").versionAsInProject(), - mavenBundle(YANGTOOLS, "yang-parser-impl").versionAsInProject(), - mavenBundle(YANGTOOLS, "binding-type-provider").versionAsInProject(), - mavenBundle(YANGTOOLS, "binding-generator-api").versionAsInProject(), - mavenBundle(YANGTOOLS, "binding-generator-spi").versionAsInProject(), - mavenBundle(YANGTOOLS, "binding-generator-impl").versionAsInProject(), - - - mavenBundle(CONTROLLER, "sal-core-api").versionAsInProject().update(), // - mavenBundle(CONTROLLER, "sal-broker-impl").versionAsInProject(), // - mavenBundle(CONTROLLER, "sal-core-spi").versionAsInProject().update(), // - - mavenBundle(YANGTOOLS + ".thirdparty", "antlr4-runtime-osgi-nohead").versionAsInProject(), // - - mavenBundle(SAMPLE, "sample-toaster").versionAsInProject(), // - mavenBundle(SAMPLE, "sample-toaster-consumer").versionAsInProject(), // - mavenBundle(SAMPLE, "sample-toaster-provider").versionAsInProject(), // - mavenBundle(YANG, "concepts").versionAsInProject(), - mavenBundle(YANG, "yang-binding").versionAsInProject(), // - mavenBundle(YANG, "yang-common").versionAsInProject(), // - mavenBundle(YANG+".thirdparty", "xtend-lib-osgi").versionAsInProject(), - mavenBundle("com.google.guava", "guava").versionAsInProject(), // - mavenBundle("org.javassist", "javassist").versionAsInProject(), - junitBundles() - ); + long toastsMade = (long) platformMBeanServer.getAttribute(providerOn, "ToastsMade"); + assertEquals(0, toastsMade); + + boolean toasts = true; + + // Make toasts using OSGi service + toasts &= toastConsumer.createToast(HashBrown.class, 4); + toasts &= toastConsumer.createToast(WhiteBread.class, 8); + + // Make toast using JMX/config-subsystem + toasts &= (Boolean)platformMBeanServer.invoke(consumerOn, "makeHashBrownToast", new Object[]{4}, new String[]{Integer.class.getName()}); + + Assert.assertTrue("Not all toasts done by " + toastConsumer, toasts); + + // Verify toasts made count on provider via JMX/config-subsystem + toastsMade = (long) platformMBeanServer.getAttribute(providerOn, "ToastsMade"); + assertEquals(3, toastsMade); } } diff --git a/opendaylight/md-sal/samples/toaster-it/src/test/resources/controller.xml b/opendaylight/md-sal/samples/toaster-it/src/test/resources/controller.xml new file mode 100644 index 0000000000..7a282db025 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-it/src/test/resources/controller.xml @@ -0,0 +1,250 @@ + + + + + + urn:opendaylight:l2:types?module=opendaylight-l2-types&revision=2013-08-27 + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28 + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom?module=opendaylight-md-sal-dom&revision=2013-10-28 + + urn:opendaylight:params:xml:ns:yang:controller:config?module=config&revision=2013-04-05 + + urn:ietf:params:netconf:capability:candidate:1.0 + urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&revision=2010-10-04 + urn:ietf:params:xml:ns:yang:rpc-context?module=rpc-context&revision=2013-06-17 + + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&revision=2013-10-28 + + urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&revision=2010-09-24 + + urn:ietf:params:netconf:capability:rollback-on-error:1.0 + urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2010-09-24 + + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:impl?module=opendaylight-sal-dom-broker-impl&revision=2013-10-28 + + urn:opendaylight:params:xml:ns:yang:controller:logback:config?module=config-logging&revision=2013-07-16 + urn:opendaylight:yang:extension:yang-ext?module=yang-ext&revision=2013-07-09 + + + urn:opendaylight:params:xml:ns:yang:controller:md:sal:common?module=opendaylight-md-sal-common&revision=2013-10-28 + + http://netconfcentral.org/ns/toaster?module=toaster&revision=2009-11-20 + urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer?module=toaster-consumer&revision=2014-01-31 + urn:opendaylight:params:xml:ns:yang:controller:config:toaster-consumer:impl?module=toaster-consumer-impl&revision=2014-01-31 + urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider?module=toaster-provider&revision=2014-01-31 + urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider:impl?module=toaster-provider-impl&revision=2014-01-31 + + + + + + + + + prefix:toaster-provider-impl + + toaster-provider-impl + + + binding:binding-rpc-registry + binding-rpc-broker + + + + + binding:binding-notification-service + + ref_binding-notification-broker + + + + + + prefix:toaster-consumer-impl + + toaster-consumer-impl + + + binding:binding-rpc-registry + binding-rpc-broker + + + + + binding:binding-notification-service + + ref_binding-notification-broker + + + + + + prefix:schema-service-singleton + + yang-schema-service + + + + prefix:hash-map-data-store + + hash-map-data-store + + + + prefix:dom-broker-impl + + dom-broker + + + dom:dom-data-store + + ref_hash-map-data-store + + + + + prefix:binding-broker-impl + + binding-broker-impl + + + binding:binding-notification-service + + ref_binding-notification-broker + + + + binding:binding-data-broker + + ref_binding-data-broker + + + + + prefix:runtime-generated-mapping + + runtime-mapping-singleton + + + + prefix:binding-notification-broker + + binding-notification-broker + + + + prefix:binding-data-broker + + binding-data-broker + + + dom:dom-broker-osgi-registry + + ref_dom-broker + + + + binding:binding-dom-mapping-service + + ref_runtime-mapping-singleton + + + + + + + + dom:schema-service + + + ref_yang-schema-service + + /config/modules/module[name='schema-service-singleton']/instance[name='yang-schema-service'] + + + + + + binding:binding-notification-service + + + ref_binding-notification-broker + + /config/modules/module[name='binding-notification-broker']/instance[name='binding-notification-broker'] + + + + + + dom:dom-data-store + + + ref_hash-map-data-store + + /config/modules/module[name='hash-map-data-store']/instance[name='hash-map-data-store'] + + + + + binding:binding-rpc-registry + + binding-rpc-broker + /modules/module[type='binding-broker-impl'][name='binding-broker-impl'] + + + + + binding:binding-broker-osgi-registry + + + ref_binding-broker-impl + + /config/modules/module[name='binding-broker-impl']/instance[name='binding-broker-impl'] + + + + + + binding-impl:binding-dom-mapping-service + + + ref_runtime-mapping-singleton + + /config/modules/module[name='runtime-generated-mapping']/instance[name='runtime-mapping-singleton'] + + + + + + dom:dom-broker-osgi-registry + + + ref_dom-broker + /config/modules/module[name='dom-broker-impl']/instance[name='dom-broker'] + + + + + + binding:binding-data-broker + + + ref_binding-data-broker + + /config/modules/module[name='binding-data-broker']/instance[name='binding-data-broker'] + + + + + + + + + + + diff --git a/opendaylight/md-sal/samples/toaster-it/src/test/resources/logback.xml b/opendaylight/md-sal/samples/toaster-it/src/test/resources/logback.xml index 2d63ce5744..f904f9726e 100644 --- a/opendaylight/md-sal/samples/toaster-it/src/test/resources/logback.xml +++ b/opendaylight/md-sal/samples/toaster-it/src/test/resources/logback.xml @@ -7,7 +7,10 @@ - + + + + diff --git a/opendaylight/md-sal/samples/toaster-provider/pom.xml b/opendaylight/md-sal/samples/toaster-provider/pom.xml index ca1e3b4689..1a540fe949 100644 --- a/opendaylight/md-sal/samples/toaster-provider/pom.xml +++ b/opendaylight/md-sal/samples/toaster-provider/pom.xml @@ -15,6 +15,11 @@ + + ${project.build.directory}/generated-sources/config + 1.1-SNAPSHOT + + @@ -22,10 +27,67 @@ maven-bundle-plugin - org.opendaylight.controller.sample.toaster.provider.ToasterProvider + + org.opendaylight.controller.config.yang.toaster_provider, + + * + + 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 + + + + + true + + + + + + org.opendaylight.controller + yang-jmx-generator-plugin + ${config.version} + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + add-source + generate-sources + + add-source + + + + ${jmxGeneratorPath} + + + + + @@ -43,5 +105,13 @@ org.opendaylight.controller sal-common-util + + org.opendaylight.controller + sal-binding-config + + + org.opendaylight.controller + config-api + diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModule.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModule.java new file mode 100644 index 0000000000..1029105233 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModule.java @@ -0,0 +1,72 @@ +/** +* Generated file + +* Generated from: yang module name: toaster-provider-impl yang module local name: toaster-provider-impl +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Wed Feb 05 11:05:32 CET 2014 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.config.toaster_provider.impl; + +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.sample.toaster.provider.OpendaylightToaster; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.Toaster; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterData; +import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterService; + +/** +* +*/ +public final class ToasterProviderModule extends org.opendaylight.controller.config.yang.config.toaster_provider.impl.AbstractToasterProviderModule + { + + public ToasterProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public ToasterProviderModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, + ToasterProviderModule oldModule, java.lang.AutoCloseable oldInstance) { + + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + protected void customValidation() { + // No need to validate dependencies, since all dependencies have mandatory true flag in yang + // config-subsystem will perform the validation for dependencies + } + + @Override + public java.lang.AutoCloseable createInstance() { + final OpendaylightToaster opendaylightToaster = new OpendaylightToaster(); + + // Register to md-sal + opendaylightToaster.setNotificationProvider(getNotificationServiceDependency()); + final BindingAwareBroker.RpcRegistration rpcRegistration = getRpcRegistryDependency() + .addRpcImplementation(ToasterService.class, opendaylightToaster); + + // Register runtimeBean for toaster statistics via JMX + final ToasterProviderRuntimeRegistration runtimeReg = getRootRuntimeBeanRegistratorWrapper().register( + opendaylightToaster); + + // Wrap toaster as AutoCloseable and close registrations to md-sal at + // close() + final class AutoCloseableToaster implements AutoCloseable, ToasterData { + + @Override + public void close() throws Exception { + rpcRegistration.close(); + runtimeReg.close(); + } + + @Override + public Toaster getToaster() { + return opendaylightToaster.getToaster(); + } + } + + return new AutoCloseableToaster(); + } + +} diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModuleFactory.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModuleFactory.java new file mode 100644 index 0000000000..53a5071746 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/config/yang/config/toaster_provider/impl/ToasterProviderModuleFactory.java @@ -0,0 +1,19 @@ +/** +* Generated file + +* Generated from: yang module name: toaster-provider-impl yang module local name: toaster-provider-impl +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Wed Feb 05 11:05:32 CET 2014 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.config.toaster_provider.impl; + +/** +* +*/ +public class ToasterProviderModuleFactory extends org.opendaylight.controller.config.yang.config.toaster_provider.impl.AbstractToasterProviderModuleFactory +{ + + +} diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java index c3b9716783..a484154edf 100644 --- a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java @@ -13,7 +13,9 @@ import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicLong; +import org.opendaylight.controller.config.yang.config.toaster_provider.impl.ToasterProviderRuntimeMXBean; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.common.util.Futures; import org.opendaylight.controller.sal.common.util.Rpcs; @@ -31,7 +33,7 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class OpendaylightToaster implements ToasterData, ToasterService { +public class OpendaylightToaster implements ToasterData, ToasterService, ToasterProviderRuntimeMXBean { private static final Logger log = LoggerFactory.getLogger(OpendaylightToaster.class); @@ -102,6 +104,13 @@ public class OpendaylightToaster implements ToasterData, ToasterService { log.trace("Toast: {} doneness: {}", toastType, toastDoneness); } + private final AtomicLong toastsMade = new AtomicLong(0); + + @Override + public Long getToastsMade() { + return toastsMade.get(); + } + private class MakeToastTask implements Callable> { final MakeToastInput toastRequest; @@ -120,6 +129,9 @@ public class OpendaylightToaster implements ToasterData, ToasterService { log.trace("Toast Done"); logToastInput(toastRequest); currentTask = null; + + toastsMade.incrementAndGet(); + return Rpcs. getRpcResult(true, null, Collections. emptySet()); } } diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterActivator.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterActivator.java deleted file mode 100644 index 7e6e7e5d75..0000000000 --- a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterActivator.java +++ /dev/null @@ -1,12 +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.sample.toaster.provider; - -public class ToasterActivator { - -} diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterProvider.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterProvider.java deleted file mode 100644 index ae482ed978..0000000000 --- a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/ToasterProvider.java +++ /dev/null @@ -1,49 +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.sample.toaster.provider; - -import java.util.Collection; -import java.util.Collections; - -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.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterService; -import org.opendaylight.yangtools.yang.binding.RpcService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ToasterProvider extends AbstractBindingAwareProvider { - private static final Logger log = LoggerFactory.getLogger(ToasterProvider.class); - - private ProviderContext providerContext; - private final OpendaylightToaster toaster; - - public ToasterProvider() { - toaster = new OpendaylightToaster(); - } - - @Override - public void onSessionInitiated(ProviderContext session) { - log.info("Provider Session initialized"); - - this.providerContext = session; - toaster.setNotificationProvider(session.getSALService(NotificationProviderService.class)); - providerContext.addRpcImplementation(ToasterService.class, toaster); - } - - @Override - public Collection getImplementations() { - return Collections.emptySet(); - } - - @Override - public Collection getFunctionality() { - return Collections.emptySet(); - } -} diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider-impl.yang b/opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider-impl.yang new file mode 100644 index 0000000000..0be8874245 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider-impl.yang @@ -0,0 +1,63 @@ +// vi: set smarttab et sw=4 tabstop=4: +module toaster-provider-impl { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider:impl"; + prefix "toaster-provider-impl"; + + import config { prefix config; revision-date 2013-04-05; } + import toaster-provider { prefix toaster-provider; revision-date 2014-01-31; } + import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; } + + description + "This module contains the base YANG definitions for + toaster-provider impl implementation."; + + revision "2014-01-31" { + description + "Initial revision."; + } + + // This is the definition of a service implementation + identity toaster-provider-impl { + base config:module-type; + config:provided-service toaster-provider:toaster-provider; + config:java-name-prefix ToasterProvider; + } + + augment "/config:modules/config:module/config:configuration" { + case toaster-provider-impl { + when "/config:modules/config:module/config:type = 'toaster-provider-impl'"; + + 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; + } + } + } + + } + } + + augment "/config:modules/config:module/config:state" { + case toaster-provider-impl { + when "/config:modules/config:module/config:type = 'toaster-provider-impl'"; + + leaf toasts-made { + type uint32; + } + + } + } +} \ No newline at end of file diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider.yang b/opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider.yang new file mode 100644 index 0000000000..a5fba07d74 --- /dev/null +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/yang/toaster-provider.yang @@ -0,0 +1,26 @@ +// vi: set smarttab et sw=4 tabstop=4: +module toaster-provider { + + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider"; + prefix "toaster-provider"; + + import config { prefix config; revision-date 2013-04-05; } + + description + "This module contains the base YANG definitions for + toaster-provider services."; + + revision "2014-01-31" { + description + "Initial revision."; + } + + // This is the definition of a service + identity toaster-provider { + + base "config:service-type"; + + config:java-class "org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToasterData"; + } +} \ No newline at end of file -- 2.36.6