FELIX-4293 test for location changed event with null properties. Be sure to run with -PcaR5,felix
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1536059 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java b/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java
index c2f97b8..3bc3081 100644
--- a/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java
@@ -35,6 +35,7 @@
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.ComponentConstants;
import org.osgi.service.component.ComponentException;
import org.osgi.service.component.ComponentFactory;
@@ -55,7 +56,6 @@
// paxRunnerVmOption = DEBUG_VM_OPTION;
}
-
@Test
public void test_component_factory() throws InvalidSyntaxException
{
@@ -624,5 +624,48 @@
s2.drop();
s1.drop();
}
+
+ @Test
+ public void test_component_factory_set_bundle_location_null() throws Exception
+ {
+ final String componentfactory = "factory.component.reference.targetfilter";
+ final Component component = findComponentByName( componentfactory );
+
+ TestCase.assertNotNull( component );
+ TestCase.assertFalse( component.isDefaultEnabled() );
+
+ TestCase.assertEquals( Component.STATE_DISABLED, component.getState() );
+ TestCase.assertNull( SimpleComponent.INSTANCE );
+
+ component.enable();
+ delay();
+
+ SimpleServiceImpl s1 = SimpleServiceImpl.create(bundleContext, "service1");
+
+ ConfigurationAdmin ca = getConfigurationAdmin();
+ org.osgi.service.cm.Configuration config = ca.getConfiguration( componentfactory, null );
+ config.setBundleLocation( null );
+ delay();
+ if ( isAtLeastR5() )
+ {
+ //check that ConfigurationSupport got a Location changed event and set the bundle location
+ TestCase.assertNotNull( config.getBundleLocation() );
+ }
+ // supply configuration now and ensure active
+ configure( componentfactory );
+ delay();
+
+ TestCase.assertEquals( Component.STATE_FACTORY, component.getState() );
+ TestCase.assertNull( SimpleComponent.INSTANCE );
+
+ final ServiceReference[] refs = bundleContext.getServiceReferences( ComponentFactory.class.getName(), "("
+ + ComponentConstants.COMPONENT_FACTORY + "=" + componentfactory + ")" );
+ TestCase.assertNotNull( refs );
+ TestCase.assertEquals( 1, refs.length );
+ final ComponentFactory factory = ( ComponentFactory ) bundleContext.getService( refs[0] );
+ TestCase.assertNotNull( factory );
+
+ s1.drop();
+ }
}
diff --git a/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java b/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
index 8e86855..72c6f05 100644
--- a/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
+++ b/scr/src/test/java/org/apache/felix/scr/integration/ComponentTestBase.java
@@ -39,6 +39,7 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -583,6 +584,23 @@
}
}
}
+
+ protected boolean isAtLeastR5()
+ {
+ try
+ {
+ Method m = org.osgi.service.cm.Configuration.class.getDeclaredMethod( "getChangeCount");
+ return true;
+ }
+ catch ( SecurityException e )
+ {
+ throw new RuntimeException(e);
+ }
+ catch ( NoSuchMethodException e )
+ {
+ return false;
+ }
+ }
private String toStateString( int state )
{