From 6c4137eab4bb0fdae7af9b4947e606a9a6266759 Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Fri, 22 Apr 2016 16:31:50 -0400 Subject: [PATCH] Fix test failures in sal-binding-it With the recent blueprint patch, the sal-binding-it integration tests are failing in merge jobs (they don't run on veriy jobs) b/c they don't install the blueprint bundle. I cobverted them from using the deprecated TestHelper, which installs bundles, to using AbstractMdsalTestBase which which installs features. Also fixed a race condition in BindingToNormalizedNodeCodecFactory founf when running the tests. Change-Id: I06bbc33e7dbcb0bff557daccd8e1d87103bebc7d Signed-off-by: Tom Pantelis --- features/mdsal/src/main/features/features.xml | 2 +- .../BindingToNormalizedNodeCodecFactory.java | 9 +- opendaylight/md-sal/sal-binding-it/pom.xml | 208 ++---------------- .../test/sal/binding/it/AbstractIT.java | 75 ++----- .../test/sal/binding/it/DataServiceIT.java | 12 +- .../test/sal/binding/it/RoutedServiceIT.java | 3 +- 6 files changed, 52 insertions(+), 257 deletions(-) diff --git a/features/mdsal/src/main/features/features.xml b/features/mdsal/src/main/features/features.xml index 897ec4ff18..ca5593d993 100644 --- a/features/mdsal/src/main/features/features.xml +++ b/features/mdsal/src/main/features/features.xml @@ -42,7 +42,7 @@ mvn:org.opendaylight.controller/sal-core-api/{{VERSION}} mvn:org.opendaylight.controller/sal-core-spi/{{VERSION}} - mvn:org.opendaylight.controller/sal-broker-impl/{{VERSION}} + mvn:org.opendaylight.controller/sal-broker-impl/{{VERSION}} mvn:org.opendaylight.controller/sal-binding-api/{{VERSION}} mvn:org.opendaylight.controller/sal-binding-broker-impl/{{VERSION}} mvn:org.opendaylight.controller/sal-binding-util/{{VERSION}} diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java index a68ace70c6..180f7b8f45 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodecFactory.java @@ -39,10 +39,15 @@ public class BindingToNormalizedNodeCodecFactory { BindingNormalizedNodeCodecRegistry codecRegistry = new BindingNormalizedNodeCodecRegistry( StreamWriterGenerator.create(SingletonHolder.JAVASSIST)); - instance = new BindingToNormalizedNodeCodec(classLoadingStrategy, codecRegistry, true); + BindingToNormalizedNodeCodec localInstance = new BindingToNormalizedNodeCodec( + classLoadingStrategy, codecRegistry, true); - schemaService.registerSchemaContextListener(instance); + schemaService.registerSchemaContextListener(localInstance); + // Publish the BindingToNormalizedNodeCodec instance after we've registered it as a + // SchemaContextListener to avoid a race condition by publishing it too early when it isn't + // fully initialized. + instance = localInstance; return instance; } diff --git a/opendaylight/md-sal/sal-binding-it/pom.xml b/opendaylight/md-sal/sal-binding-it/pom.xml index f3561eb451..b5d37c2e41 100644 --- a/opendaylight/md-sal/sal-binding-it/pom.xml +++ b/opendaylight/md-sal/sal-binding-it/pom.xml @@ -3,95 +3,22 @@ 4.0.0 org.opendaylight.controller - sal-parent + mdsal-it-parent 1.4.0-SNAPSHOT + sal-binding-it - - ch.qos.logback - logback-classic - - - ch.qos.logback - logback-core - - - org.eclipse.tycho - org.eclipse.osgi - - - javax.validation - validation-api - - - org.eclipse.persistence - org.eclipse.persistence.core - - - org.eclipse.persistence - org.eclipse.persistence.moxy - - - org.mockito - mockito-all - - - org.opendaylight.yangtools - object-cache-guava - org.opendaylight.controller - config-manager + features-mdsal + features + xml org.opendaylight.controller - config-manager-facade-xml - - - org.opendaylight.controller - config-persister-file-xml-adapter - - - org.opendaylight.controller - config-persister-impl - - - org.opendaylight.controller - logback-config - - - org.opendaylight.controller - sal-binding-broker-impl - - - org.opendaylight.controller - sal-binding-config - - - org.opendaylight.controller - sal-dom-broker-config - - - - org.antlr - antlr4-runtime - 4.5.1-1 - - - - - - - - - openexi - nagasena - - - openexi - nagasena-rta + sal-test-model org.ops4j.pax.exam @@ -101,124 +28,29 @@ tests. --> compile - - org.ops4j.pax.exam - pax-exam-container-native - compile - - - org.ops4j.pax.exam - pax-exam-junit4 - compile - - - org.ops4j.pax.exam - pax-exam-link-mvn - compile - - - commons-io - commons-io - - - org.slf4j - log4j-over-slf4j - - - org.slf4j - slf4j-api - - - org.opendaylight.controller - sal-test-model - ${mdsal.version} - - - org.opendaylight.mdsal.model - ietf-yang-types - - - org.opendaylight.mdsal.model - ietf-inet-types - - - org.opendaylight.mdsal.model - opendaylight-l2-types - - - javax.inject - javax.inject - 1 - - - - - - org.eclipse.m2e - lifecycle-mapping - ${lifecycle.mapping.version} - - - - - - org.ops4j.pax.exam - maven-paxexam-plugin - [1.2.4,) - - generate-depends-file - - - - - - - - - - - - - - org.ops4j.pax.exam - maven-paxexam-plugin - - - generate-config - - generate-depends-file - - - - org.apache.maven.plugins - maven-failsafe-plugin + maven-dependency-plugin - - integration-test - verify - + unpack-karaf-resources + + unpack-dependencies + + process-test-resources + + ${project.build.directory}/test-classes + org.opendaylight.controller + mockito-all,config-it-base,mdsal-it-base + META-INF\/** + false + - - - - true - + diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractIT.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractIT.java index 10b40e3bed..29a336e98e 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractIT.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/AbstractIT.java @@ -7,82 +7,47 @@ */ package org.opendaylight.controller.test.sal.binding.it; -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.opendaylight.controller.test.sal.binding.it.TestHelper.salTestModelBundles; +import static org.ops4j.pax.exam.CoreOptions.maven; 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; - import javax.inject.Inject; import org.junit.runner.RunWith; +import org.opendaylight.controller.mdsal.it.base.AbstractMdsalTestBase; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; -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.MavenUrlReference; import org.ops4j.pax.exam.util.Filter; -import org.osgi.framework.BundleContext; @RunWith(PaxExam.class) -public abstract class AbstractIT { - - public static final String CONTROLLER = "org.opendaylight.controller"; - public static final String YANGTOOLS = "org.opendaylight.yangtools"; - - public static final String CONTROLLER_MODELS = "org.opendaylight.controller.model"; - public static final String YANGTOOLS_MODELS = "org.opendaylight.yangtools.model"; +public abstract class AbstractIT extends AbstractMdsalTestBase { @Inject @Filter(timeout=120*1000) BindingAwareBroker broker; - @Inject - BundleContext bundleContext; - - public BindingAwareBroker getBroker() { - return broker; + @Override + public String getModuleName() { + return "binding-broker-impl"; } - public void setBroker(final BindingAwareBroker broker) { - this.broker = broker; + @Override + public String getInstanceName() { + return "binding-broker-impl"; } - public BundleContext getBundleContext() { - return bundleContext; + @Override + public MavenUrlReference getFeatureRepo() { + return maven().groupId("org.opendaylight.controller").artifactId("features-mdsal").classifier("features") + .type("xml").versionAsInProject(); } - public void setBundleContext(final BundleContext bundleContext) { - this.bundleContext = bundleContext; + @Override + public String getFeatureName() { + return "odl-mdsal-broker"; } - @Configuration - public Option[] config() { - return options(systemProperty("osgi.console").value("2401"), 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("openexi", "nagasena").versionAsInProject(), - mavenBundle("openexi", "nagasena-rta").versionAsInProject(), - // - systemProperty("osgi.bundles.defaultStartLevel").value("4"), - systemPackages("sun.nio.ch"), - - mdSalCoreBundles(), - configMinumumBundles(), - bindingAwareSalBundles(), - - // BASE Models - baseModelBundles(), - salTestModelBundles(), - - // Set fail if unresolved bundle present - systemProperty("pax.exam.osgi.unresolved.fail").value("true"), - junitAndMockitoBundles()); + @Override + protected Option[] getAdditionalOptions() { + return new Option[]{mavenBundle("org.opendaylight.controller", "sal-test-model").versionAsInProject()}; } - } diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/DataServiceIT.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/DataServiceIT.java index dd95e03131..717aa63811 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/DataServiceIT.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/DataServiceIT.java @@ -10,8 +10,6 @@ package org.opendaylight.controller.test.sal.binding.it; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; - -import javax.inject.Inject; import java.util.concurrent.Future; import org.junit.Test; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; @@ -19,7 +17,6 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerCo import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer; import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; -import org.opendaylight.controller.sal.core.api.Broker; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.store.rev140422.Lists; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.store.rev140422.lists.UnorderedContainer; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.store.rev140422.lists.unordered.container.UnorderedList; @@ -33,12 +30,8 @@ import org.opendaylight.yangtools.yang.common.RpcResult; * covers creating, reading and deleting of an item in dataStore */ public class DataServiceIT extends AbstractIT { - protected DataBrokerService consumerDataService; - @Inject - Broker broker2; - /** * * Ignored this, because classes here are constructed from @@ -49,14 +42,15 @@ public class DataServiceIT extends AbstractIT { */ @Test public void test() throws Exception { - BindingAwareConsumer consumer1 = new BindingAwareConsumer() { + BindingAwareConsumer consumer = new BindingAwareConsumer() { @Override public void onSessionInitialized(final ConsumerContext session) { consumerDataService = session.getSALService(DataBrokerService.class); } }; - broker.registerConsumer(consumer1); + + broker.registerConsumer(consumer); assertNotNull(consumerDataService); diff --git a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java index c5833a8587..0b365cac49 100644 --- a/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java +++ b/opendaylight/md-sal/sal-binding-it/src/test/java/org/opendaylight/controller/test/sal/binding/it/RoutedServiceIT.java @@ -13,7 +13,6 @@ import static org.junit.Assert.assertSame; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; - import com.google.common.util.concurrent.Futures; import org.junit.Before; import org.junit.Test; @@ -68,7 +67,7 @@ public class RoutedServiceIT extends AbstractIT { @Test public void testServiceRegistration() { - assertNotNull(getBroker()); + assertNotNull(broker); final BindingAwareProvider provider1 = new AbstractTestProvider() { @Override -- 2.36.6