Author: jconlon Date: Wed Feb 7 17:07:47 2007 New Revision: 715 Added: slf4j/trunk/slf4j-osgi-integration-test/ slf4j/trunk/slf4j-osgi-integration-test/pom.xml slf4j/trunk/slf4j-osgi-integration-test/src/ slf4j/trunk/slf4j-osgi-integration-test/src/main/ slf4j/trunk/slf4j-osgi-integration-test/src/main/java/ slf4j/trunk/slf4j-osgi-integration-test/src/main/resources/ slf4j/trunk/slf4j-osgi-integration-test/src/test/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/IntegrationTestConstants.java slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/log4j/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/log4j/test/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/log4j/test/Log4JBundleTest.java slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/nop/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/nop/test/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/nop/test/NopBundleTest.java slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/simple/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/simple/test/ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/simple/test/SimpleBundleTest.java slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/log4j.properties slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/log4j/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/log4j/test/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/log4j/test/MANIFEST.MF slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/nop/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/nop/test/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/nop/test/MANIFEST.MF slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/simple/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/simple/test/ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/simple/test/MANIFEST.MF
Log: Spring-OSGi based OSGi integration test project. Added: slf4j/trunk/slf4j-osgi-integration-test/pom.xml ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/pom.xml Wed Feb 7 17:07:47 2007 @@ -0,0 +1,220 @@ +<project + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <parent> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-parent</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + + <modelVersion>4.0.0</modelVersion> + + <groupId>org.slf4j</groupId> + <artifactId>slf4j-osgi-integration-test</artifactId> + <version>${parent.version}</version> + <packaging>jar</packaging> + <name>SLF4J OSGi Integration Test</name> + + <url>http://www.slf4j.org</url> + <description> + OSGi integration tests for the slf4j. + </description> + <!-- These dependencies are deceptive they are only for the springframework testing env. + bundles being tested are specified in the --> + + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-osgi-test-bundle</artifactId> + <version>${parent.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.osgi</groupId> + <artifactId>org.springframework.osgi.test</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.springframework.osgi</groupId> + <artifactId>spring-core</artifactId> + <version>2.1-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.springframework.osgi</groupId> + <artifactId>spring-context</artifactId> + <version>2.1-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.springframework.osgi</groupId> + <artifactId>spring-beans</artifactId> + <version>2.1-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.springframework.osgi</groupId> + <artifactId>jcl104-over-slf4j.osgi</artifactId> + <version>1.1.0</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j-full</artifactId> + <version>1.1.0</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>org.springframework.osgi</groupId> + <artifactId>log4j.osgi</artifactId> + <version>1.2.13-SNAPSHOT</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.springframework.osgi</groupId> + <artifactId>backport-util-concurrent</artifactId> + <version>3.0-SNAPSHOT</version> + <scope>test</scope> + </dependency> + </dependencies> + + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + <!-- run tests during the integration-test phase, not the normal test phase --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skip>true</skip> + <systemProperties> + <property> + <name>org.springframework.osgi.test.framework</name> + <value>${osgi.test.platform}</value> + </property> + <property> + <name>org.osgi.framework.system.packages</name> + <value>${osgi.test.system.packages}</value> + </property> + <!-- + <property> + <name>org.osgi.vendor.framework</name> + <value>${org.osgi.vendor.framework}</value> + </property> + --> + </systemProperties> + </configuration> + <executions> + <execution> + <id>default</id> + <phase>test</phase> + <goals></goals> + </execution> + <execution> + <id>integration-test</id> + <phase>integration-test</phase> + <goals> + <goal>test</goal> + </goals> + <configuration> + <skip>false</skip> + <forkMode>pertest</forkMode> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + <profiles> + <profile> + <id>equinox</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + <dependencies> + <dependency> + <groupId>org.eclipse.equinox</groupId> + <artifactId>org.eclipse.osgi</artifactId> + <version>3.2.0</version> + <type>jar</type> + <scope>provided</scope> + </dependency> + </dependencies> + <properties> + <osgi.test.system.packages>org.xml.sax, org.w3c.dom, javax.xml.parsers, javax.naming, javax.management</osgi.test.system.packages> + <osgi.test.platform>equinox</osgi.test.platform> + </properties> + </profile> + <profile> + <id>knopflerfish</id> + <dependencies> + <dependency> + <groupId>org.knopflerfish</groupId> + <artifactId>framework</artifactId> + <version>2.0.1</version> + <type>jar</type> + <scope>provided</scope> + </dependency> + </dependencies> + <properties> + <!-- knopflerfish testing requires that the system property + org.osgi.framework.system.packages be set with a list + system packages that are to be imported on the kf classpath. + This property is a placeholder for the list. See the surefire + plugin configuration systemProperties referenced above to see + the mapping to this element. --> + <osgi.test.system.packages>org.xml.sax, org.w3c.dom, javax.xml.parsers, javax.naming, javax.management</osgi.test.system.packages> + <osgi.test.platform>knopflerfish</osgi.test.platform> + </properties> + </profile> + <profile> + <id>felix</id> + <dependencies> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.framework</artifactId> + <version>0.8.0-SNAPSHOT</version> + <type>jar</type> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.main</artifactId> + <version>0.8.0-SNAPSHOT</version> + <type>jar</type> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.osgi.core</artifactId> + <version>0.8.0-SNAPSHOT</version> + <type>jar</type> + <scope>runtime</scope> + </dependency> + </dependencies> + <properties> + <osgi.test.platform>felix</osgi.test.platform> + <!-- <org.osgi.vendor.framework>org.apache.felix.framework</org.osgi.vendor.framework> --> + </properties> + </profile> + </profiles> +</project> \ No newline at end of file Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/IntegrationTestConstants.java ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/IntegrationTestConstants.java Wed Feb 7 17:07:47 2007 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2004-2005 SLF4J.ORG + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ +package org.slf4j.osgi.integration; + +public interface IntegrationTestConstants { + + public static final String SLF4J_NOP = "org.slf4j.slf4j-nop"; + + public static final String SLF4J_OSGI_TEST = "org.slf4j.slf4j-osgi-test-bundle"; + + public static final String SLF4J_LOG4J = "org.slf4j.slf4j-log4j12"; + + public static final String SLF4J_SIMPLE = "org.slf4j.slf4j-simple"; + + public static final String SLF4J_JCL = "org.slf4j.jcl104-over-slf4j"; + + + + public static final String VERSION = "1.3.0-SNAPSHOT"; +} Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/log4j/test/Log4JBundleTest.java ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/log4j/test/Log4JBundleTest.java Wed Feb 7 17:07:47 2007 @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2004-2005 SLF4J.ORG + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ + +package org.slf4j.osgi.integration.log4j.test; + +import java.util.ArrayList; +import java.util.List; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.osgi.integration.IntegrationTestConstants; +import org.slf4j.osgi.test.service.Probe; +import org.springframework.osgi.test.ConfigurableBundleCreatorTests; + +/** + * + * <code>Log4JBundleTest</code> starts up an OSGi environment (equinox, + * knopflerfish, or felix according to the profile selected) and installs the + * slf4j.osgi.test.bundle, the slf4j.log4j12 bundle and the bundles they depend + * on. + * + * The slf4j.log4j12 will use the log4j bundle associated with the Spring-OSGi + * testing framework. + * + * The test classes in this project will be turned into a virtual bundle which + * is also installed and the tests are then run inside the OSGi runtime. + * + * The tests have access to a BundleContext, which we use to test that all + * bundles have been started. + * + * + * @author John Conlon + */ +public class Log4JBundleTest extends ConfigurableBundleCreatorTests implements IntegrationTestConstants { + + + + + + + /** + * The manifest to use for the "virtual bundle" created out of the test + * classes and resources in this project + * + * This is actually the boilerplate manifest with one additional + * import-package added. We should provide a simpler customization point for + * such use cases that doesn't require duplication of the entire manifest... + */ + protected String getManifestLocation() { + return "classpath:org/slf4j/osgi/integration/log4j/test/MANIFEST.MF"; + } + + /** + * The location of the packaged OSGi bundles to be installed for this test. + * Values are Spring resource paths. The bundles we want to use are part of + * the same multi-project maven build as this project is. Hence we use the + * localMavenArtifact helper method to find the bundles produced by the + * package phase of the maven build (these tests will run after the + * packaging phase, in the integration-test phase). + * + * JUnit, commons-logging, spring-core and the spring OSGi test bundle are + * automatically included so they do not need to be specified here. + * + * Except in the case of slf4j.log4j12 using the log4j bundle associated + * with the Spring-OSGi testing framework our test bundles are using package + * import and export versions to keep these other logging bundles from + * getting mixed up with our test bundles. + */ + protected String[] getBundleLocations() { + return new String[] { + localMavenArtifact("org.springframework.osgi", + "aopalliance.osgi", "1.0-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", + "spring-context", "2.1-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", "spring-beans", + "2.1-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", + "spring-osgi-core", "1.0-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", "spring-aop", + "2.1-SNAPSHOT"), + localMavenArtifact("org.slf4j", "slf4j-log4j12", VERSION), + localMavenArtifact("org.slf4j", "slf4j-osgi-test-bundle", + VERSION) }; + } + + /** + * The superclass provides us access to the root bundle context via the + * 'getBundleContext' operation. Make sure it is not null. + */ + public void testOSGiStartedOk() { + BundleContext bundleContext = getBundleContext(); + assertNotNull(bundleContext); + + } + + /** + * Makes sure our bundles are in the OSGi runtime and their state is Active. + * + */ + public void testSlf4jLog4j12BundleIntegration() { + Logger log = LoggerFactory.getLogger(Log4JBundleTest.class); + assertNotNull(log); + BundleContext context = getBundleContext(); + List symNames = new ArrayList(); + + Bundle[] bundles = context.getBundles(); + log.info("Loaded bundles:"); + for (int i = 0; i < bundles.length; i++) { + Bundle bundle = bundles[i]; + assertEquals("Bundle " + bundle.getSymbolicName() + + " is not active.", Bundle.ACTIVE, bundle.getState()); + symNames.add(bundle.getSymbolicName()); + if (bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR) != null) { + log.info("Symbolic Name:" + bundle.getSymbolicName() + + ", Activator:" + + bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR)); + } else { + log.info("Symbolic Name:" + bundle.getSymbolicName()); + } + } + + assertTrue(symNames.contains(SLF4J_LOG4J)); + assertTrue(symNames.contains(SLF4J_OSGI_TEST)); + + } + + public void testProbeService() { + BundleContext context = getBundleContext(); + ServiceReference ref = context.getServiceReference(Probe.class + .getName()); + assertNotNull("Service Reference is null", ref); + Probe probe = null; + + probe = (Probe) context.getService(ref); + assertNotNull("Cannot find the probe service", probe); + + try { + probe.testCommonslogging(); + fail("The commons logging package should not be found. Instead an exception should be thrown."); + } catch (Throwable t) { + // "Expect.",t); + } + + context.ungetService(ref); + + } +} Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/nop/test/NopBundleTest.java ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/nop/test/NopBundleTest.java Wed Feb 7 17:07:47 2007 @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2004-2005 SLF4J.ORG + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ + +package org.slf4j.osgi.integration.nop.test; + +import java.util.ArrayList; +import java.util.List; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.osgi.integration.IntegrationTestConstants; +import org.slf4j.osgi.test.service.Probe; +import org.springframework.osgi.test.ConfigurableBundleCreatorTests; + +/** + * + * <code>NopBundleTest</code> starts up an OSGi environment (equinox, + * knopflerfish, or felix according to the profile selected) and installs the + * slf4j.osgi.test.bundle, the slf4j.nop bundle and the bundles they depend on. + * + * The test classes in this project will be turned into a virtual bundle which is + * also installed and the tests are then run inside the OSGi runtime. + * + * The tests have access to a BundleContext, which we use to test that all bundles have + * been started. + * + * + * @author John Conlon + */ +public class NopBundleTest extends ConfigurableBundleCreatorTests implements IntegrationTestConstants{ + + + + /** + * The manifest to use for the "virtual bundle" created out of the test + * classes and resources in this project + * + * This is actually the boilerplate manifest with one additional + * import-package added. We should provide a simpler customization point for + * such use cases that doesn't require duplication of the entire manifest... + */ + protected String getManifestLocation() { + return "classpath:org/slf4j/osgi/integration/nop/test/MANIFEST.MF"; + } + + /** + * The location of the packaged OSGi bundles to be installed for this test. + * Values are Spring resource paths. The bundles we want to use are part of + * the same multi-project maven build as this project is. Hence we use the + * localMavenArtifact helper method to find the bundles produced by the + * package phase of the maven build (these tests will run after the + * packaging phase, in the integration-test phase). + * + * JUnit, commons-logging, spring-core and the spring OSGi test bundle are + * automatically included so they do not need to be specified here. + * + * Our test bundles are using package import and export versions to keep + * these other logging bundles from getting mixed up with our test bundles. + */ + protected String[] getBundleLocations() { + return new String[] { + localMavenArtifact("org.springframework.osgi", + "aopalliance.osgi", "1.0-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", + "spring-context", "2.1-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", "spring-beans", + "2.1-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", + "spring-osgi-core", "1.0-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", "spring-aop", + "2.1-SNAPSHOT"), + localMavenArtifact("org.slf4j", "slf4j-nop", VERSION), + localMavenArtifact("org.slf4j", "slf4j-osgi-test-bundle", + VERSION) }; + } + + /** + * The superclass provides us access to the root bundle context via the + * 'getBundleContext' operation. Make sure it is not null. + */ + public void testOSGiStartedOk() { + BundleContext bundleContext = getBundleContext(); + assertNotNull(bundleContext); + + } + + /** + * Makes sure our bundles are in the OSGi runtime and their state is Active. + * + */ + public void testSlf4jNopBundleIntegration() { + Logger log = LoggerFactory.getLogger(NopBundleTest.class); + assertNotNull(log); + BundleContext context = getBundleContext(); + List symNames = new ArrayList(); + + Bundle[] bundles = context.getBundles(); + log.info("Loaded bundles:"); + for (int i = 0; i < bundles.length; i++) { + Bundle bundle = bundles[i]; + assertEquals("Bundle " + bundle.getSymbolicName() + + " is not active.", Bundle.ACTIVE, bundle.getState()); + symNames.add(bundle.getSymbolicName()); + if (bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR) != null) { + log.info("Symbolic Name:" + bundle.getSymbolicName() + + ", Activator:" + + bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR)); + } else { + log.info("Symbolic Name:" + bundle.getSymbolicName()); + } + } + + assertTrue(symNames.contains(SLF4J_NOP)); + assertTrue(symNames.contains(SLF4J_OSGI_TEST)); + + } + + public void testProbeService(){ + Logger log = LoggerFactory.getLogger(NopBundleTest.class); + log.debug("Testing probe"); + BundleContext context = getBundleContext(); + ServiceReference ref = context.getServiceReference( Probe.class.getName() ); + assertNotNull( "Service Reference is null", ref ); + Probe probe = ( Probe ) context.getService( ref ); + assertNotNull( "Cannot find the probe service", probe ); + + try { + probe.testCommonslogging(); + fail("Expected exception while testing commons logging."); + } catch (Throwable t){ + log.debug("Failed to execute the probe.testCommonsLogging. "+t); + + } + + context.ungetService( ref ); + + log.debug("Tested probe."); + } + +} Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/simple/test/SimpleBundleTest.java ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/java/org/slf4j/osgi/integration/simple/test/SimpleBundleTest.java Wed Feb 7 17:07:47 2007 @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2004-2005 SLF4J.ORG + * + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + * + */ + +package org.slf4j.osgi.integration.simple.test; + +import java.util.ArrayList; +import java.util.List; + +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.osgi.integration.IntegrationTestConstants; +import org.slf4j.osgi.integration.nop.test.NopBundleTest; +import org.slf4j.osgi.test.service.Probe; +import org.springframework.osgi.test.ConfigurableBundleCreatorTests; + +/** + * + * <code>SimpleBundleTest</code> starts up an OSGi environment (equinox, + * knopflerfish, or felix according to the profile selected) and installs the + * slf4j.osgi.test.bundle, the slf4j.simple bundle and the bundles they depend + * on. + * + * The test classes in this project will be turned into a virtual bundle which + * is also installed and the tests are then run inside the OSGi runtime. + * + * The tests have access to a BundleContext, which we use to test that all + * bundles have been started. + * + * + * @author John Conlon + */ +public class SimpleBundleTest extends ConfigurableBundleCreatorTests implements IntegrationTestConstants{ + + + + + /** + * The manifest to use for the "virtual bundle" created out of the test + * classes and resources in this project + * + * This is actually the boilerplate manifest with one additional + * import-package added. We should provide a simpler customization point for + * such use cases that doesn't require duplication of the entire manifest... + */ + protected String getManifestLocation() { + return "classpath:org/slf4j/osgi/integration/simple/test/MANIFEST.MF"; + } + + /** + * The location of the packaged OSGi bundles to be installed for this test. + * Values are Spring resource paths. The bundles we want to use are part of + * the same multi-project maven build as this project is. Hence we use the + * localMavenArtifact helper method to find the bundles produced by the + * package phase of the maven build (these tests will run after the + * packaging phase, in the integration-test phase). + * + * JUnit, commons-logging, spring-core and the spring OSGi test bundle are + * automatically included so they do not need to be specified here. + * + * Our test bundles are using package import and export versions to keep + * these other logging bundles from getting mixed up with our test bundles. + */ + protected String[] getBundleLocations() { + return new String[] { + localMavenArtifact("org.springframework.osgi", + "aopalliance.osgi", "1.0-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", + "spring-context", "2.1-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", "spring-beans", + "2.1-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", + "spring-osgi-core", "1.0-SNAPSHOT"), + localMavenArtifact("org.springframework.osgi", "spring-aop", + "2.1-SNAPSHOT"), + localMavenArtifact("org.slf4j", "slf4j-simple", VERSION), + localMavenArtifact("org.slf4j", "jcl104-over-slf4j", VERSION), + localMavenArtifact("org.slf4j", "slf4j-osgi-test-bundle", + VERSION) }; + } + + /** + * The superclass provides us access to the root bundle context via the + * 'getBundleContext' operation. Make sure it is not null. + */ + public void testOSGiStartedOk() { + BundleContext bundleContext = getBundleContext(); + assertNotNull(bundleContext); + + } + + /** + * Makes sure our bundles are in the OSGi runtime and their state is Active. + * + */ + public void testSlf4jNopBundles() { + Logger log = LoggerFactory.getLogger(SimpleBundleTest.class); + assertNotNull(log); + BundleContext context = getBundleContext(); + List symNames = new ArrayList(); + + Bundle[] bundles = context.getBundles(); + log.info("Loaded bundles:"); + for (int i = 0; i < bundles.length; i++) { + Bundle bundle = bundles[i]; + assertEquals("Bundle " + bundle.getSymbolicName() + + " is not active.", Bundle.ACTIVE, bundle.getState()); + symNames.add(bundle.getSymbolicName()); + if (bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR) != null) { + log.info("Symbolic Name:" + bundle.getSymbolicName() + + ", Activator:" + + bundle.getHeaders().get(Constants.BUNDLE_ACTIVATOR)); + } else { + log.info("Symbolic Name:" + bundle.getSymbolicName()); + } + } + + assertTrue(symNames.contains(SLF4J_SIMPLE)); + assertTrue(symNames.contains(SLF4J_OSGI_TEST)); + assertTrue(symNames.contains(SLF4J_JCL)); + + } + + public void testProbeService() { + Logger log = LoggerFactory.getLogger(NopBundleTest.class); + log.debug("Testing probe"); + BundleContext context = getBundleContext(); + ServiceReference ref = context.getServiceReference(Probe.class.getName()); + assertNotNull("Service Reference is null", ref); + Probe probe = null; + + probe = (Probe) context.getService(ref); + assertNotNull("Cannot find the probe service", probe); + + try { + probe.testCommonslogging(); + + } catch (Throwable t) { + fail("Failed to execute the probe.testCommonsLogging. "+t); + } + context.ungetService(ref); + } + +} Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/log4j.properties ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/log4j.properties Wed Feb 7 17:07:47 2007 @@ -0,0 +1,9 @@ +log4j.rootCategory=DEBUG,console + +# Console Appender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.target=System.out +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%-5p %l - %m%n + +log4j.logger.org.springframework.osgi=DEBUG \ No newline at end of file Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/log4j/test/MANIFEST.MF ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/log4j/test/MANIFEST.MF Wed Feb 7 17:07:47 2007 @@ -0,0 +1,15 @@ +Manifest-Version: 1.0 +Bundle-Name: simple-service-integration-tests +Bundle-SymbolicName: org.slf4j.osgi.integration.log4j.test +Bundle-Vendor: SLF4J ORG +Bundle-Activator: org.springframework.osgi.test.JUnitTestActivator +Import-Package: junit.framework, + org.osgi.framework;specification-version="1.3.0", + org.springframework.core.io;specification-version="2.1.0", + org.springframework.osgi.test, + org.springframework.osgi.test.runner, + org.slf4j, + org.slf4j.osgi.test.service + + + Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/nop/test/MANIFEST.MF ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/nop/test/MANIFEST.MF Wed Feb 7 17:07:47 2007 @@ -0,0 +1,15 @@ +Manifest-Version: 1.0 +Bundle-Name: simple-service-integration-tests +Bundle-SymbolicName: org.slf4j.osgi.integration.nop.test +Bundle-Vendor: SLF4J ORG +Bundle-Activator: org.springframework.osgi.test.JUnitTestActivator +Import-Package: junit.framework, + org.osgi.framework;specification-version="1.3.0", + org.springframework.core.io;specification-version="2.1.0", + org.springframework.osgi.test, + org.springframework.osgi.test.runner, + org.slf4j, + org.slf4j.osgi.test.service + + + Added: slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/simple/test/MANIFEST.MF ============================================================================== --- (empty file) +++ slf4j/trunk/slf4j-osgi-integration-test/src/test/resources/org/slf4j/osgi/integration/simple/test/MANIFEST.MF Wed Feb 7 17:07:47 2007 @@ -0,0 +1,15 @@ +Manifest-Version: 1.0 +Bundle-Name: simple-service-integration-tests +Bundle-SymbolicName: org.slf4j.osgi.integration.simple.test +Bundle-Vendor: SLF4J ORG +Bundle-Activator: org.springframework.osgi.test.JUnitTestActivator +Import-Package: junit.framework, + org.osgi.framework;specification-version="1.3.0", + org.springframework.core.io;specification-version="2.1.0", + org.springframework.osgi.test, + org.springframework.osgi.test.runner, + org.slf4j, + org.slf4j.osgi.test.service + + + _______________________________________________ dev mailing list [email protected] http://www.slf4j.org/mailman/listinfo/dev
