You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dj...@apache.org on 2012/09/05 23:49:24 UTC
svn commit: r1381404 - in
/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration:
ComponentConcurrencyTest.java ComponentTestBase.java
Author: djencks
Date: Wed Sep 5 21:49:24 2012
New Revision: 1381404
URL: http://svn.apache.org/viewvc?rev=1381404&view=rev
Log:
FELIX-3645 fix concurrency test to allow expected logged errors. Provide logging for all itests
Modified:
felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentConcurrencyTest.java
felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentConcurrencyTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentConcurrencyTest.java?rev=1381404&r1=1381403&r2=1381404&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentConcurrencyTest.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentConcurrencyTest.java Wed Sep 5 21:49:24 2012
@@ -26,6 +26,7 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.Hashtable;
+import java.util.Iterator;
import javax.inject.Inject;
@@ -50,7 +51,7 @@ public class ComponentConcurrencyTest ex
static
{
// uncomment to enable debugging of this test class
- // paxRunnerVmOption = DEBUG_VM_OPTION;
+// paxRunnerVmOption = DEBUG_VM_OPTION;
descriptorFile = "/integration_test_component_concurrency.xml";
}
@@ -68,91 +69,34 @@ public class ComponentConcurrencyTest ex
}
}
- // Used to ignore logs displayed by the framework from stdout.
- // (the log service will log it because it listen to fwk error
- // events ...).
- static class NullStdout extends PrintStream
- {
- NullStdout()
- {
- super(new OutputStream()
- {
- @Override
- public void write(int b) throws IOException
- {
- }
- });
- }
- }
-
- public static class Log implements LogListener
- {
- private volatile boolean _foundWarnings;
- private final static PrintStream _out =
- new PrintStream(new BufferedOutputStream(new FileOutputStream(FileDescriptor.err), 128));
-
- public void logged(LogEntry entry)
- {
- if (entry.getLevel() <= 2)
- {
- _foundWarnings = true;
- }
- StringWriter sw = new StringWriter();
- sw.append("D=");
- sw.append(new Date(entry.getTime()).toString());
- sw.append(", T=" + Thread.currentThread().getName());
- sw.append(": ");
- sw.append(entry.getMessage());
- if (entry.getException() != null)
- {
- sw.append(System.getProperty("line.separator"));
- PrintWriter pw = new PrintWriter(sw);
- entry.getException().printStackTrace(pw);
- }
- _out.println(sw.toString());
- }
-
- boolean foundWarnings()
- {
- return _foundWarnings;
- }
- }
-
@Test
public void test_concurrent_component_activation_using_componentFactories()
{
- final PrintStream out = System.out;
- final PrintStream err = System.err;
- System.setOut(new NullStdout());
- System.setErr(new NullStdout());
-
- try
- {
- Log log = new Log();
- ServiceReference sr = bundleContext.getServiceReference(LogReaderService.class.getName());
- TestCase.assertNotNull(sr);
- LogReaderService logReader = (LogReaderService) bundleContext.getService(sr);
- TestCase.assertNotNull(logReader);
- logReader.addLogListener(log);
-
- final Component AFactory =
- findComponentByName("org.apache.felix.scr.integration.components.concurrency.AFactory");
- TestCase.assertNotNull(AFactory);
- AFactory.enable();
-
- final Component CFactory =
- findComponentByName("org.apache.felix.scr.integration.components.concurrency.CFactory");
- TestCase.assertNotNull(CFactory);
- CFactory.enable();
- delay(30);
- TestCase.assertFalse(log.foundWarnings());
- }
- finally
- {
- System.setOut(out);
- System.setErr(err);
+ final Component AFactory =
+ findComponentByName( "org.apache.felix.scr.integration.components.concurrency.AFactory" );
+ TestCase.assertNotNull( AFactory );
+ AFactory.enable();
+
+ final Component CFactory =
+ findComponentByName( "org.apache.felix.scr.integration.components.concurrency.CFactory" );
+ TestCase.assertNotNull( CFactory );
+ CFactory.enable();
+
+ delay( 30 );
+ for ( Iterator it = log.foundWarnings().iterator(); it.hasNext();)
+ {
+ LogEntry entry = ( LogEntry ) it.next();
+ String message = entry.getMessage();
+ if ( message.contains( "FrameworkEvent ERROR" ) ||
+ message.contains( "Could not get service from ref" ) ||
+ message.contains( "Failed creating the component instance; see log for reason" ) ||
+ message.contains( "Cannot create component instance due to failure to bind reference" ))
+ {
+ continue;
+ }
+ TestCase.fail( "unexpected warning or error logged: " + message );
}
}
}
Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java?rev=1381404&r1=1381403&r2=1381404&view=diff
==============================================================================
--- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java (original)
+++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java Wed Sep 5 21:49:24 2012
@@ -27,16 +27,25 @@ import static org.ops4j.pax.exam.CoreOpt
import static org.ops4j.pax.tinybundles.core.TinyBundles.bundle;
import static org.ops4j.pax.tinybundles.core.TinyBundles.withBnd;
+import java.io.BufferedOutputStream;
import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.Date;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Iterator;
+import java.util.List;
import java.util.TreeSet;
import javax.inject.Inject;
@@ -58,7 +67,11 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.log.LogEntry;
+import org.osgi.service.log.LogListener;
+import org.osgi.service.log.LogReaderService;
import org.osgi.util.tracker.ServiceTracker;
@@ -95,6 +108,9 @@ public abstract class ComponentTestBase
protected static String descriptorFile = "/integration_test_simple_components.xml";
protected static boolean NONSTANDARD_COMPONENT_FACTORY_BEHAVIOR = false;
+ private PrintStream out;
+ private PrintStream err;
+ protected Log log;
static
{
@@ -124,12 +140,13 @@ public abstract class ComponentTestBase
final Option[] base = options(
provision(
CoreOptions.bundle( bundleFile.toURI().toString() ),
+ mavenBundle( "org.apache.felix", "org.apache.felix.log", "1.0.1" ),
mavenBundle( "org.ops4j.pax.tinybundles", "tinybundles", "1.0.0" ),
- mavenBundle( "org.apache.felix", "org.apache.felix.configadmin", "1.0.10" ),
- mavenBundle( "org.apache.felix", "org.apache.felix.log", "1.0.1" )
+ mavenBundle( "org.apache.felix", "org.apache.felix.configadmin", "1.0.10" )
),
junitBundles(),
- systemProperty( "ds.factory.enabled" ).value( Boolean.toString( NONSTANDARD_COMPONENT_FACTORY_BEHAVIOR ) )
+ systemProperty( "ds.factory.enabled" ).value( Boolean.toString( NONSTANDARD_COMPONENT_FACTORY_BEHAVIOR ) ),
+ systemProperty( "ds.loglevel" ).value( "debug" )
);
final Option vmOption = ( paxRunnerVmOption != null ) ? CoreOptions.vmOption( paxRunnerVmOption ) : null;
@@ -140,6 +157,18 @@ public abstract class ComponentTestBase
@Before
public void setUp() throws BundleException
{
+ out = System.out;
+ err = System.err;
+ System.setOut(new NullStdout());
+ System.setErr( new NullStdout() );
+
+ log = new Log();
+ ServiceReference sr = bundleContext.getServiceReference(LogReaderService.class.getName());
+ TestCase.assertNotNull(sr);
+ LogReaderService logReader = (LogReaderService) bundleContext.getService(sr);
+ TestCase.assertNotNull(logReader);
+ logReader.addLogListener( log );
+
scrTracker = new ServiceTracker( bundleContext, "org.apache.felix.scr.ScrService", null );
scrTracker.open();
configAdminTracker = new ServiceTracker( bundleContext, "org.osgi.service.cm.ConfigurationAdmin", null );
@@ -163,6 +192,8 @@ public abstract class ComponentTestBase
configAdminTracker = null;
scrTracker.close();
scrTracker = null;
+ System.setOut(out);
+ System.setErr(err);
}
@@ -546,4 +577,56 @@ public abstract class ComponentTestBase
}
}
+ // Used to ignore logs displayed by the framework from stdout.
+ // (the log service will log it because it listen to fwk error
+ // events ...).
+ static class NullStdout extends PrintStream
+ {
+ NullStdout()
+ {
+ super(new OutputStream()
+ {
+ @Override
+ public void write(int b) throws IOException
+ {
+ }
+ });
+ }
+ }
+
+ public static class Log implements LogListener
+ {
+ private final List m_warnings = Collections.synchronizedList( new ArrayList() );//<LogEntry>
+ private final static PrintStream _out =
+ new PrintStream(new BufferedOutputStream(new FileOutputStream( FileDescriptor.err), 128));
+
+ public void logged(LogEntry entry)
+ {
+ if (entry.getLevel() <= 2)
+ {
+ m_warnings.add( entry );
+ }
+ StringWriter sw = new StringWriter();
+ sw.append( "log level: " + entry.getLevel() );
+ sw.append(" D=");
+ sw.append(new Date(entry.getTime()).toString());
+ sw.append(", T=" + Thread.currentThread().getName());
+ sw.append(": ");
+ sw.append(entry.getMessage());
+ if (entry.getException() != null)
+ {
+ sw.append(System.getProperty("line.separator"));
+ PrintWriter pw = new PrintWriter(sw);
+ entry.getException().printStackTrace(pw);
+ }
+ _out.println(sw.toString());
+ }
+
+ List foundWarnings()
+ {
+ return m_warnings;
+ }
+ }
+
+
}