From aa57d11e1eeeb1f9a9bf6f7ef615981832713a5c Mon Sep 17 00:00:00 2001 From: Patrick Chu Date: Thu, 2 May 2013 13:54:39 -0700 Subject: [PATCH] Adding integration tests for clustering service. Added to pom file for sonar integration. Change-Id: I69555941a1d8aa7487090793aed946c1711dfe67 Signed-off-by: Patrick Chu --- .../clustering/integrationtest/pom.xml | 85 +++++++ .../ClusteringServicesIntegrationTest.java | 235 ++++++++++++++++++ .../src/test/resources/logback.xml | 13 + .../services_implementation/pom.xml | 42 +++- .../distribution/opendaylight/pom.xml | 1 + 5 files changed, 374 insertions(+), 2 deletions(-) create mode 100644 opendaylight/clustering/integrationtest/pom.xml create mode 100644 opendaylight/clustering/integrationtest/src/test/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusteringServicesIntegrationTest.java create mode 100644 opendaylight/clustering/integrationtest/src/test/resources/logback.xml diff --git a/opendaylight/clustering/integrationtest/pom.xml b/opendaylight/clustering/integrationtest/pom.xml new file mode 100644 index 0000000000..24a59d2b7a --- /dev/null +++ b/opendaylight/clustering/integrationtest/pom.xml @@ -0,0 +1,85 @@ + + + 4.0.0 + + org.opendaylight.controller + commons.opendaylight + 1.4.0-SNAPSHOT + ../../commons/opendaylight + + + org.opendaylight.controller + clustering.services.integrationtest + 0.4.0-SNAPSHOT + + + + org.infinispan + infinispan-core + 5.2.3.Final + + + org.opendaylight.controller + clustering.services + 0.4.0-SNAPSHOT + + + org.opendaylight.controller + sal + 0.5.0-SNAPSHOT + + + org.opendaylight.controller + sal.implementation + 0.4.0-SNAPSHOT + + + org.opendaylight.controller + clustering.services-implementation + 0.4.0-SNAPSHOT + + + + + jacoco + ../implementation/target/jacoco.exec + ../implementaiton/target/jacoco-it.exec + java + + + + + + org.jacoco + jacoco-maven-plugin + 0.5.3.201107060350 + + + + + + org.jacoco + jacoco-maven-plugin + 0.5.3.201107060350 + + ../implementation/target/jacoco-it.exec + org.opendaylight.controller.* + + + + pre-test + + prepare-agent + + + + post-test + + true + + + + + + + diff --git a/opendaylight/clustering/integrationtest/src/test/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusteringServicesIntegrationTest.java b/opendaylight/clustering/integrationtest/src/test/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusteringServicesIntegrationTest.java new file mode 100644 index 0000000000..587a4cf729 --- /dev/null +++ b/opendaylight/clustering/integrationtest/src/test/java/org/opendaylight/controller/clustering/services_implementation/internal/ClusteringServicesIntegrationTest.java @@ -0,0 +1,235 @@ +package org.opendaylight.controller.clustering.services_implementation.internal; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +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.systemPackages; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; + +import java.net.InetAddress; +import java.util.HashSet; +import java.util.List; +import java.util.concurrent.ConcurrentMap; + +import javax.inject.Inject; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.opendaylight.controller.clustering.services.CacheConfigException; +import org.opendaylight.controller.clustering.services.CacheExistException; +import org.opendaylight.controller.clustering.services.CacheListenerAddException; +import org.opendaylight.controller.clustering.services.IClusterServices; +import org.opendaylight.controller.clustering.services.IClusterServices.cacheMode; +import org.opendaylight.controller.clustering.services.IGetUpdates; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.Configuration; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.util.PathUtils; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@RunWith(PaxExam.class) +public class ClusteringServicesIntegrationTest { + private Logger log = LoggerFactory + .getLogger(ClusteringServicesIntegrationTest.class); + // get the OSGI bundle context + @Inject + private BundleContext bc; + + private IClusterServices clusterServices = null; + + // Configure the OSGi container + @Configuration + public Option[] config() { + return options( + // + systemProperty("logback.configurationFile").value( + "file:" + PathUtils.getBaseDir() + + "/src/test/resources/logback.xml"), + // To start OSGi console for inspection remotely + systemProperty("osgi.console").value("2401"), + // Set the systemPackages (used by clustering) + systemPackages("sun.reflect", "sun.reflect.misc", "sun.misc"), + // List framework bundles + mavenBundle("equinoxSDK381", "org.eclipse.equinox.console", + "1.0.0.v20120522-1841"), + mavenBundle("equinoxSDK381", "org.eclipse.equinox.util", + "1.0.400.v20120522-2049"), + mavenBundle("equinoxSDK381", "org.eclipse.osgi.services", + "3.3.100.v20120522-1822"), + mavenBundle("equinoxSDK381", "org.eclipse.equinox.ds", + "1.4.0.v20120522-1841"), + mavenBundle("equinoxSDK381", "org.apache.felix.gogo.command", + "0.8.0.v201108120515"), + mavenBundle("equinoxSDK381", "org.apache.felix.gogo.runtime", + "0.8.0.v201108120515"), + mavenBundle("equinoxSDK381", "org.apache.felix.gogo.shell", + "0.8.0.v201110170705"), + // List logger bundles + mavenBundle("org.slf4j", "slf4j-api", "1.7.2"), + mavenBundle("org.slf4j", "log4j-over-slf4j", "1.7.2"), + mavenBundle("ch.qos.logback", "logback-core", "1.0.9"), + mavenBundle("ch.qos.logback", "logback-classic", "1.0.9"), + // List all the bundles on which the test case depends + mavenBundle("org.opendaylight.controller", + "clustering.services", "0.4.0-SNAPSHOT"), + mavenBundle("org.opendaylight.controller", + "clustering.services-implementation", "0.4.0-SNAPSHOT"), + mavenBundle("org.opendaylight.controller", "sal", + "0.5.0-SNAPSHOT"), + mavenBundle("org.opendaylight.controller", + "sal.implementation", "0.4.0-SNAPSHOT"), + mavenBundle("org.jboss.spec.javax.transaction", + "jboss-transaction-api_1.1_spec", "1.0.1.Final"), + mavenBundle("org.apache.commons", "commons-lang3", "3.1"), + mavenBundle("org.apache.felix", + "org.apache.felix.dependencymanager", "3.1.0"), + junitBundles()); + } + + private String stateToString(int state) { + switch (state) { + case Bundle.ACTIVE: + return "ACTIVE"; + case Bundle.INSTALLED: + return "INSTALLED"; + case Bundle.RESOLVED: + return "RESOLVED"; + case Bundle.UNINSTALLED: + return "UNINSTALLED"; + default: + return "Not CONVERTED"; + } + } + + @Before + public void areWeReady() { + assertNotNull(bc); + boolean debugit = false; + Bundle b[] = bc.getBundles(); + for (int i = 0; i < b.length; i++) { + int state = b[i].getState(); + if (state != Bundle.ACTIVE && state != Bundle.RESOLVED) { + log.debug("Bundle:" + b[i].getSymbolicName() + " state:" + + stateToString(state)); + debugit = true; + } + } + if (debugit) { + log.debug("Do some debugging because some bundle is " + + "unresolved"); + } + + // Assert if true, if false we are good to go! + assertFalse(debugit); + + ServiceReference r = bc.getServiceReference(IClusterServices.class + .getName()); + if (r != null) { + this.clusterServices = (IClusterServices) bc.getService(r); + } + assertNotNull(this.clusterServices); + + } + + @Test + public void clusterTest() throws CacheExistException, CacheConfigException, + CacheListenerAddException { + + String container1 = "Container1"; + String container2 = "Container2"; + String cache1 = "Cache1"; + String cache2 = "Cache2"; + String cache3 = "Cache3"; + + HashSet cacheModeSet = new HashSet(); + cacheModeSet.add(cacheMode.NON_TRANSACTIONAL); + ConcurrentMap cm11 = this.clusterServices.createCache(container1, + cache1, cacheModeSet); + assertNotNull(cm11); + + assertNull(this.clusterServices.getCache(container2, cache2)); + assertEquals(cm11, this.clusterServices.getCache(container1, cache1)); + + assertFalse(this.clusterServices.existCache(container2, cache2)); + assertTrue(this.clusterServices.existCache(container1, cache1)); + + ConcurrentMap cm12 = this.clusterServices.createCache(container1, + cache2, cacheModeSet); + ConcurrentMap cm23 = this.clusterServices.createCache(container2, + cache3, cacheModeSet); + + HashSet cacheList = (HashSet) this.clusterServices + .getCacheList(container1); + assertEquals(2, cacheList.size()); + assertTrue(cacheList.contains(cache1)); + assertTrue(cacheList.contains(cache2)); + assertFalse(cacheList.contains(cache3)); + + assertNotNull(this.clusterServices.getCacheProperties(container1, + cache1)); + + HashSet> listeners = (HashSet>) this.clusterServices + .getListeners(container1, cache1); + assertEquals(0, listeners.size()); + + IGetUpdates getUpdate1 = new GetUpdates(); + this.clusterServices.addListener(container1, cache1, getUpdate1); + listeners = (HashSet>) this.clusterServices + .getListeners(container1, cache1); + assertEquals(1, listeners.size()); + this.clusterServices.addListener(container1, cache1, new GetUpdates()); + listeners = (HashSet>) this.clusterServices + .getListeners(container1, cache1); + assertEquals(2, listeners.size()); + + listeners = (HashSet>) this.clusterServices + .getListeners(container2, cache3); + assertEquals(0, listeners.size()); + + this.clusterServices.removeListener(container1, cache1, getUpdate1); + listeners = (HashSet>) this.clusterServices + .getListeners(container1, cache1); + assertEquals(1, listeners.size()); + + InetAddress addr = this.clusterServices.getMyAddress(); + assertNotNull(addr); + + List addrList = this.clusterServices + .getClusteredControllers(); + + this.clusterServices.destroyCache(container1, cache1); + assertFalse(this.clusterServices.existCache(container1, cache1)); + + } + + private class GetUpdates implements IGetUpdates { + + @Override + public void entryCreated(Integer key, String containerName, + String cacheName, boolean originLocal) { + return; + } + + @Override + public void entryUpdated(Integer key, String new_value, + String containerName, String cacheName, boolean originLocal) { + return; + } + + @Override + public void entryDeleted(Integer key, String containerName, + String cacheName, boolean originLocal) { + return; + } + } +} diff --git a/opendaylight/clustering/integrationtest/src/test/resources/logback.xml b/opendaylight/clustering/integrationtest/src/test/resources/logback.xml new file mode 100644 index 0000000000..2d63ce5744 --- /dev/null +++ b/opendaylight/clustering/integrationtest/src/test/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + diff --git a/opendaylight/clustering/services_implementation/pom.xml b/opendaylight/clustering/services_implementation/pom.xml index 80fc1c4099..ee2f65d2c8 100644 --- a/opendaylight/clustering/services_implementation/pom.xml +++ b/opendaylight/clustering/services_implementation/pom.xml @@ -12,8 +12,24 @@ clustering.services-implementation 0.4.0-SNAPSHOT bundle - + + + jacoco + reuseReports + target/jacoco.exec + target/jacoco-it.exec + java + + + + + org.jacoco + jacoco-maven-plugin + 0.5.3.201107060350 + + + org.apache.felix @@ -54,6 +70,28 @@ + + org.jacoco + jacoco-maven-plugin + + org.opendaylight.controller.* + + + + pre-test + + prepare-agent + + + + post-test + test + + report + + + + @@ -70,7 +108,7 @@ org.opendaylight.controller sal - 0.5.0-SNAPSHOT + 0.4.0-SNAPSHOT diff --git a/opendaylight/distribution/opendaylight/pom.xml b/opendaylight/distribution/opendaylight/pom.xml index c26b38843b..4eef0a2f15 100644 --- a/opendaylight/distribution/opendaylight/pom.xml +++ b/opendaylight/distribution/opendaylight/pom.xml @@ -34,6 +34,7 @@ ../../forwarding/staticrouting ../../clustering/services ../../clustering/services_implementation + ../../clustering/integrationtest ../../clustering/stub ../../clustering/test ../../configuration/api -- 2.36.6