From: Tom Pantelis Date: Thu, 10 Mar 2016 11:48:43 +0000 (-0500) Subject: Convert toaster-it to use mdsal-it X-Git-Tag: release/boron~311 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=2bf7349f94202f24f132b14c9cd66340c65a67ee;hp=68eb628b5aca1fc4de4e29bcacf46dcb7b3a19c8 Convert toaster-it to use mdsal-it I recently added an mdsal dependency to another project and it caused the toaster-it test to fail. There was no useful output to troubleshoot, just that some bundles failed to resolve. It turns out the mdsal dependency and all its dependencies would need to be added to the hard-coded bundle configuration for the test. This will be ongoing issue every time a new dependency is added that might affect the toaster test. To alleviate this I converted the test from manually installing bundles to use the mdsal-it functionality which installs features into the opendaylight-karaf-empty distro. I also changed AbstractConfigTestBase to override the pax logging to append to stdout, otherwise most output goes to karaf.log. This is helpful to troubleshoot failures. Change-Id: I1dd9150c6e617e491458560fe4b360d37548f264 Signed-off-by: Tom Pantelis --- diff --git a/opendaylight/config/config-it-base/src/main/java/org/opendaylight/controller/config/it/base/AbstractConfigTestBase.java b/opendaylight/config/config-it-base/src/main/java/org/opendaylight/controller/config/it/base/AbstractConfigTestBase.java index a61867b301..ce38de2d3a 100644 --- a/opendaylight/config/config-it-base/src/main/java/org/opendaylight/controller/config/it/base/AbstractConfigTestBase.java +++ b/opendaylight/config/config-it-base/src/main/java/org/opendaylight/controller/config/it/base/AbstractConfigTestBase.java @@ -14,18 +14,14 @@ import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfi import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features; import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.karafDistributionConfiguration; import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.keepRuntimeFolder; - import com.google.common.base.Stopwatch; - import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.management.ManagementFactory; import java.util.Properties; import java.util.concurrent.TimeUnit; - import javax.management.ObjectName; - import org.junit.Before; import org.junit.Rule; import org.junit.internal.AssumptionViolatedException; @@ -44,6 +40,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class AbstractConfigTestBase { + private static final String MAVEN_REPO_LOCAL = "maven.repo.local"; + private static final String ORG_OPS4J_PAX_URL_MVN_LOCAL_REPOSITORY = "org.ops4j.pax.url.mvn.localRepository"; + private static final String ETC_ORG_OPS4J_PAX_URL_MVN_CFG = "etc/org.ops4j.pax.url.mvn.cfg"; + private static final String ETC_ORG_OPS4J_PAX_LOGGING_CFG = "etc/org.ops4j.pax.logging.cfg"; private static final String PAX_EXAM_UNPACK_DIRECTORY = "target/exam"; private static final String KARAF_DEBUG_PORT = "5005"; @@ -121,6 +121,13 @@ public abstract class AbstractConfigTestBase { return karafUrl.getURL(); } + protected Option mvnLocalRepoOption() { + String mvnRepoLocal = System.getProperty(MAVEN_REPO_LOCAL, ""); + LOG.info("mvnLocalRepo \"{}\"", mvnRepoLocal); + return editConfigurationFilePut(ETC_ORG_OPS4J_PAX_URL_MVN_CFG, ORG_OPS4J_PAX_URL_MVN_LOCAL_REPOSITORY, + mvnRepoLocal); + } + @Configuration public Option[] config() { Option[] options = new Option[] { @@ -131,7 +138,9 @@ public abstract class AbstractConfigTestBase { .useDeployFolder(false), when(Boolean.getBoolean(KEEP_UNPACK_DIRECTORY_PROP)).useOptions(keepRuntimeFolder()), features(getFeatureRepo(), getFeatureName()), - getLoggingOption()}; + getLoggingOption(), + mvnLocalRepoOption(), + editConfigurationFilePut(ETC_ORG_OPS4J_PAX_LOGGING_CFG, "log4j.rootLogger", "INFO, stdout, osgi:*")}; return options; } diff --git a/opendaylight/md-sal/samples/toaster-it/pom.xml b/opendaylight/md-sal/samples/toaster-it/pom.xml index 4acb6636ee..766e62b737 100644 --- a/opendaylight/md-sal/samples/toaster-it/pom.xml +++ b/opendaylight/md-sal/samples/toaster-it/pom.xml @@ -2,21 +2,19 @@ 4.0.0 - org.opendaylight.controller.samples - sal-samples + org.opendaylight.controller + mdsal-it-parent 1.4.0-SNAPSHOT + sample-toaster-it - - - junit - junit - org.opendaylight.controller - sal-binding-it + features-mdsal + features + xml org.opendaylight.controller.samples @@ -26,63 +24,9 @@ org.opendaylight.controller.samples sample-toaster-consumer - - org.opendaylight.mdsal.model - yang-ext - - org.opendaylight.controller.samples sample-toaster-provider - - openexi - nagasena - - - openexi - nagasena-rta - - - org.ops4j.pax.exam - pax-exam-junit4 - - - org.ops4j.pax.exam - pax-exam-container-native - test - - - org.ops4j.pax.exam - pax-exam-link-mvn - test - - - commons-codec - commons-codec - test - - - - - - org.ops4j.pax.exam - maven-paxexam-plugin - - - generate-config - - generate-depends-file - - - - - - - - scm:git:http://git.opendaylight.org/gerrit/controller.git - scm:git:ssh://git.opendaylight.org:29418/controller.git - https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL - 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 8cc4070ce8..b255ad318f 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,84 +7,53 @@ */ package org.opendaylight.controller.sample.toaster.it; -import org.junit.Assert; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.ops4j.pax.exam.CoreOptions.maven; +import java.lang.management.ManagementFactory; +import javax.inject.Inject; +import javax.management.MBeanServer; +import javax.management.ObjectName; import org.junit.Test; import org.junit.runner.RunWith; +import org.opendaylight.controller.mdsal.it.base.AbstractMdsalTestBase; import org.opendaylight.controller.sample.kitchen.api.EggsType; import org.opendaylight.controller.sample.kitchen.api.KitchenService; 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.ops4j.pax.exam.options.DefaultCompositeOption; +import org.ops4j.pax.exam.options.MavenUrlReference; import org.ops4j.pax.exam.util.Filter; -import org.ops4j.pax.exam.util.PathUtils; - -import javax.inject.Inject; -import javax.management.MBeanServer; -import javax.management.ObjectName; - -import java.lang.management.ManagementFactory; - -import static org.junit.Assert.assertEquals; -import static org.opendaylight.controller.test.sal.binding.it.TestHelper.baseModelBundles; -import static org.opendaylight.controller.test.sal.binding.it.TestHelper.bindingAwareSalBundles; -import static org.opendaylight.controller.test.sal.binding.it.TestHelper.configMinumumBundles; -import static org.opendaylight.controller.test.sal.binding.it.TestHelper.junitAndMockitoBundles; -import static org.opendaylight.controller.test.sal.binding.it.TestHelper.mdSalCoreBundles; -import static org.ops4j.pax.exam.CoreOptions.mavenBundle; -import static org.ops4j.pax.exam.CoreOptions.options; -import static org.ops4j.pax.exam.CoreOptions.systemPackages; -import static org.ops4j.pax.exam.CoreOptions.systemProperty; @RunWith(PaxExam.class) -public class ToasterTest { - +public class ToasterTest extends AbstractMdsalTestBase { @Inject @Filter(timeout=60*1000) KitchenService kitchenService; - @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"), - systemPackages("sun.nio.ch"), - - toasterBundles(), - mdSalCoreBundles(), + @Override + public String getModuleName() { + return "toaster-provider-impl"; + } - bindingAwareSalBundles(), - configMinumumBundles(), - // BASE Models - baseModelBundles(), + @Override + public String getInstanceName() { + return "toaster-provider-impl"; + } - // Set fail if unresolved bundle present - systemProperty("pax.exam.osgi.unresolved.fail").value("true"), - junitAndMockitoBundles()); + @Override + public MavenUrlReference getFeatureRepo() { + return maven().groupId("org.opendaylight.controller").artifactId("features-mdsal").classifier("features") + .type("xml").versionAsInProject(); } - 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(), - mavenBundle("openexi", "nagasena").versionAsInProject(), - mavenBundle("openexi", "nagasena-rta").versionAsInProject() - ); + @Override + public String getFeatureName() { + return "odl-toaster"; } @Test public void testToaster() throws Exception { - MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); ObjectName providerOn = new ObjectName("org.opendaylight.controller:instanceName=toaster-provider-impl,type=RuntimeBean,moduleFactoryName=toaster-provider-impl"); @@ -97,11 +66,10 @@ public class ToasterTest { success &= kitchenService.makeBreakfast( EggsType.SCRAMBLED, HashBrown.class, 4).get().isSuccessful(); success &= kitchenService.makeBreakfast( EggsType.POACHED, WhiteBread.class, 8 ).get().isSuccessful(); - Assert.assertTrue("Not all breakfasts succeeded", success); + assertTrue("Not all breakfasts succeeded", success); // Verify toasts made count on provider via JMX/config-subsystem toastsMade = (long) platformMBeanServer.getAttribute(providerOn, "ToastsMade"); assertEquals(2, 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 deleted file mode 100644 index c1f2ff2490..0000000000 --- a/opendaylight/md-sal/samples/toaster-it/src/test/resources/controller.xml +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - - - - - - - prefix:schema-service-singleton - yang-schema-service - - - prefix:runtime-generated-mapping - runtime-mapping-singleton - - - prefix:binding-notification-adapter - binding-notification-adapter - - - binding:binding-dom-mapping-service - runtime-mapping-singleton - - - dom:dom-broker-osgi-registry - dom-broker - - - - - prefix:binding-notification-publish-adapter - binding-notification-publish-adapter - - - binding:binding-dom-mapping-service - runtime-mapping-singleton - - - dom:dom-broker-osgi-registry - dom-broker - - - - - prefix:binding-notification-broker - binding-notification-broker - - - prefix:binding-broker-impl - binding-broker-impl - - - binding:binding-dom-mapping-service - runtime-mapping-singleton - - - dom:dom-broker-osgi-registry - dom-broker - - - binding:binding-notification-service - binding-notification-broker - - - binding:binding-data-broker - binding-data-broker - - - binding:binding-async-data-broker - binding-data-broker - - - - - - - prefix:inmemory-config-datastore-provider - config-store-service - - - dom:schema-service - yang-schema-service - - - - - - prefix:inmemory-operational-datastore-provider - operational-store-service - - - dom:schema-service - yang-schema-service - - - - - - - - - prefix:dom-inmemory-data-broker - inmemory-data-broker - - - dom:schema-service - yang-schema-service - - - - config-dom-store-spi:config-dom-datastore - config-store-service - - - - operational-dom-store-spi:operational-dom-datastore - operational-store-service - - - - prefix:dom-broker-impl - inmemory-dom-broker - - dom:dom-async-data-broker - inmemory-data-broker - - - - prefix:binding-data-compatible-broker - inmemory-binding-data-broker - - - binding:binding-async-data-broker - binding-data-broker - - - - - prefix:binding-forwarded-data-broker - binding-async-data-broker - - - dom:dom-async-data-broker - inmemory-data-broker - - - dom:schema-service - yang-schema-service - - - binding:binding-dom-mapping-service - runtime-mapping-singleton - - - - - - - - prefix:toaster-provider-impl - - toaster-provider-impl - - - binding:binding-rpc-registry - binding-rpc-broker - - - - binding:binding-async-data-broker - binding-data-broker - - - - - binding:binding-notification-service - - binding-notification-broker - - - - - - - prefix:kitchen-service-impl - - kitchen-service-impl - - - binding:binding-rpc-registry - binding-rpc-broker - - - - - binding:binding-notification-service - - binding-notification-broker - - - - - - dom:schema-service - - yang-schema-service - /modules/module[type='schema-service-singleton'][name='yang-schema-service'] - - - - - config-dom-store-spi:config-dom-datastore - - config-store-service - /modules/module[type='inmemory-config-datastore-provider'][name='config-store-service'] - - - - operational-dom-store-spi:operational-dom-datastore - - operational-store-service - /modules/module[type='inmemory-operational-datastore-provider'][name='operational-store-service'] - - - - binding-impl:binding-dom-mapping-service - - runtime-mapping-singleton - /modules/module[type='runtime-generated-mapping'][name='runtime-mapping-singleton'] - - - - binding-impl:binding-new-notification-service - - binding-notification-adapter - /modules/module[type='binding-notification-adapter'][name='binding-notification-adapter'] - - - - binding-impl:binding-new-notification-publish-service - - binding-notification-publish-adapter - /modules/module[type='binding-notification-publish-adapter'][name='binding-notification-publish-adapter'] - - - - binding:binding-notification-service - - binding-notification-broker - /modules/module[type='binding-notification-broker'][name='binding-notification-broker'] - - - - binding:binding-broker-osgi-registry - - binding-osgi-broker - /modules/module[type='binding-broker-impl'][name='binding-broker-impl'] - - - - binding:binding-rpc-registry - - binding-rpc-broker - /modules/module[type='binding-broker-impl'][name='binding-broker-impl'] - - - - - dom:dom-broker-osgi-registry - - dom-broker - /modules/module[type='dom-broker-impl'][name='inmemory-dom-broker'] - - - - - binding:binding-data-broker - - binding-data-broker - /modules/module[type='binding-data-compatible-broker'][name='inmemory-binding-data-broker'] - - - - - binding:binding-async-data-broker - - binding-data-broker - /modules/module[type='binding-forwarded-data-broker'][name='binding-async-data-broker'] - - - - - - dom:dom-async-data-broker - - inmemory-data-broker - /modules/module[type='dom-inmemory-data-broker'][name='inmemory-data-broker'] - - - - - - - - kitchen:kitchen-service - - - kitchen-service - /modules/module[type='kitchen-service-impl'][name='kitchen-service-impl'] - - - - - - - - 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:md:sal:binding:impl?module=opendaylight-sal-binding-broker-impl&revision=2013-10-28 - urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:pingpong?module=opendaylight-pingpong-broker&revision=2014-11-07 - 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:md:sal:common?module=opendaylight-md-sal-common&revision=2013-10-28 - urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:config-dom-store?module=opendaylight-config-dom-datastore&revision=2014-06-17 - urn:opendaylight:params:xml:ns:yang:controller:md:sal:core:spi:operational-dom-store?module=opendaylight-operational-dom-datastore&revision=2014-06-17 - urn:opendaylight:params:xml:ns:yang:controller:inmemory-datastore-provider?module=opendaylight-inmemory-datastore-provider&revision=2014-06-17 - - - http://netconfcentral.org/ns/toaster?module=toaster&revision=2009-11-20 - urn:opendaylight:params:xml:ns:yang:controller:config:kitchen-service:impl?module=kitchen-service-impl&revision=2014-01-31 - urn:opendaylight:params:xml:ns:yang:controller:config:toaster-provider:impl?module=toaster-provider-impl&revision=2014-01-31 - - - - - 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 deleted file mode 100644 index d76c2d3c22..0000000000 --- a/opendaylight/md-sal/samples/toaster-it/src/test/resources/logback.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - - - -