You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2015/08/25 12:36:36 UTC

svn commit: r1697645 - in /felix/sandbox/pderop/dependencymanager.ds: cnf/localrepo/ cnf/releaserepo/ org.apache.felix.dependencymanager.ds.itest/ org.apache.felix.dependencymanager.ds.itest/.settings/ org.apache.felix.dependencymanager.ds.itest/resour...

Author: pderop
Date: Tue Aug 25 10:36:36 2015
New Revision: 1697645

URL: http://svn.apache.org/r1697645
Log:
- Added an integration test which seems to reproduce the FELIX-4984 issue.
- Use java8 to build and test ds and ds.itest bundles.

Added:
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/resource/integration_test_FELIX_4984.xml   (with props)
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/A.java
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/B.java
Modified:
    felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml
    felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml.sha
    felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml
    felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml.sha
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.classpath
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.settings/org.eclipse.jdt.core.prefs
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/bnd.bnd
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.classpath
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.settings/org.eclipse.jdt.core.prefs
    felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/bnd.bnd

Modified: felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
Binary files - no diff available.

Modified: felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml.sha
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml.sha?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml.sha (original)
+++ felix/sandbox/pderop/dependencymanager.ds/cnf/localrepo/index.xml.sha Tue Aug 25 10:36:36 2015
@@ -1 +1 @@
-09508d85b244a8bc12c264912ea8c22b7a2cd08c6d69faad52bef65e8a878fd6
\ No newline at end of file
+2a8ebeeec6f4b6073630917f331500803f99bac52abb24ce957a629a3ab22395
\ No newline at end of file

Modified: felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
Binary files - no diff available.

Modified: felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml.sha
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml.sha?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml.sha (original)
+++ felix/sandbox/pderop/dependencymanager.ds/cnf/releaserepo/index.xml.sha Tue Aug 25 10:36:36 2015
@@ -1 +1 @@
-a6f4a564b3787f32f554f3f0194723c10ce3c28b37e2c1ce3ecf35a0a81eb3a8
\ No newline at end of file
+eb94b8048aa20ec498f20529c2cad6c489c7e2614041671131b3284b91b9b1da
\ No newline at end of file

Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.classpath
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.classpath?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
Binary files - no diff available.

Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.settings/org.eclipse.jdt.core.prefs?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.settings/org.eclipse.jdt.core.prefs (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/.settings/org.eclipse.jdt.core.prefs Tue Aug 25 10:36:36 2015
@@ -1,10 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/bnd.bnd?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/bnd.bnd (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/bnd.bnd Tue Aug 25 10:36:36 2015
@@ -4,7 +4,7 @@
 	osgi.enterprise;version=5.0,\
 	${junit},\
 	biz.aQute.bndlib;version=2.4
--runee: JavaSE-1.7
+-runee: JavaSE-1.8
 -runfw: org.apache.felix.framework;version=5.0.1
 -runsystempackages:  \
 	sun.reflect
@@ -27,7 +27,4 @@ Test-Cases:  \
 	biz.aQute.bndlib;version=2.4.0
 Include-Resource: resource=resource
 Export-Package:  \
-	org.apache.felix.scr.integration.*
-	
-javac.source:          1.7
-javac.target:          1.7
\ No newline at end of file
+	org.apache.felix.scr.integration.*
\ No newline at end of file

Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/resource/integration_test_FELIX_4984.xml
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/resource/integration_test_FELIX_4984.xml?rev=1697645&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/resource/integration_test_FELIX_4984.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java?rev=1697645&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java (added)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/Felix4984Test.java Tue Aug 25 10:36:36 2015
@@ -0,0 +1,94 @@
+package org.apache.felix.scr.integration;
+
+import org.apache.felix.scr.integration.components.felix4984.A;
+import org.apache.felix.scr.integration.components.felix4984.B;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.component.runtime.dto.ComponentConfigurationDTO;
+import org.osgi.service.log.LogService;
+
+import junit.framework.TestCase;
+
+public class Felix4984Test extends ComponentTestBase
+{
+    public Felix4984Test()
+    {
+        super("/resource/integration_test_FELIX_4984.xml", "felix4984");
+        ignoredWarnings = new String[] {
+          "\\[.*\\] Circular reference detected, getService returning null",
+          "FrameworkEvent: ERROR\\norg.osgi.framework.ServiceException: Service factory returned null.",
+          "FrameworkEvent: ERROR\\norg.osgi.framework.ServiceException: ServiceFactory.getService\\(\\) resulted in a cycle.",
+          "\\[.*\\] Cannot create component instance due to failure to bind reference b",
+          "\\[.*\\] Failed creating the component instance; see log for reason",
+          "\\[.*\\] Could not get service from ref \\[org.apache.felix.scr.integration.components.felix4984.A\\]",
+          "\\[.*\\] Could not get service from ref \\[org.apache.felix.scr.integration.components.felix4984.B\\]",
+          "running test iteration .*",
+          "A\\.setB(.*)"
+        };
+        //DS_LOGLEVEL = "debug";
+        //WRITE_LOGS_TO_FILE = true;
+    }
+
+    /**
+     * A > 1.1 > B > 0..n > A 
+     * This test validates that A is bound to one B instance. See FELIX-4984 for more informations.
+     */
+    @Test
+    public void test_A11_B0n_delayed_B_first_ABoundToAtMostOneB() throws Exception
+    {
+        Bundle bundle = findABBundle(bundleContext);
+        bundle.stop();
+        
+        for (int i = 0; i < 1000; i ++) {   
+            getLog().log(LogService.LOG_WARNING, "running test iteration #" + i + " ...");
+            bundle.start();
+
+            String componentNameA = "felix4984.A.1.1.dynamic";
+            ComponentConfigurationDTO componentA = findComponentConfigurationByName( componentNameA, ComponentConfigurationDTO.SATISFIED );
+
+            String componentNameB = "felix4984.B.0.n.dynamic";
+            final ComponentConfigurationDTO componentB = findComponentConfigurationByName( componentNameB, ComponentConfigurationDTO.SATISFIED);
+
+            ServiceReference[] serviceReferencesB = bundleContext.getServiceReferences( B.class.getName(), "(service.pid=" + componentNameB + ")" );
+            TestCase.assertEquals( 1, serviceReferencesB.length );
+            ServiceReference serviceReferenceB = serviceReferencesB[0];
+            Object serviceB = bundleContext.getService( serviceReferenceB );
+            assertNotNull( serviceB );
+
+            ServiceReference[] serviceReferencesA = bundleContext.getServiceReferences( A.class.getName(), "(service.pid=" + componentNameA + ")" );
+            TestCase.assertEquals( 1, serviceReferencesA.length );
+            ServiceReference serviceReferenceA = serviceReferencesA[0];
+            Object serviceA = bundleContext.getService( serviceReferenceA );
+            assertNotNull( serviceA );
+
+            A a = getServiceFromConfiguration(componentA, A.class);
+            assertABoundToOneB(a);
+
+            bundle.stop();
+            
+            for ( String message: log.foundWarnings() )
+            {
+                TestCase.fail( "unexpected warning or error logged: " + message );
+            }
+        }
+    }
+    
+    private Bundle findABBundle(BundleContext ctx) {
+        for (Bundle b : ctx.getBundles()) {
+            if (b.getSymbolicName().equals("simplecomponent")) {
+                return b;
+            }
+        }
+        throw new IllegalStateException("bundle \"simplecomponent\" not found");
+    }
+    
+    private void assertABoundToOneB(A a) {
+        if (a.getBs().size() != 1) {
+            getLog().log(LogService.LOG_WARNING, "detected problem ...");
+            a.dumpStackTracesWhenBWasBound();
+        }
+        assertEquals( 1, a.getBs().size());
+    }
+}

Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/A.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/A.java?rev=1697645&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/A.java (added)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/A.java Tue Aug 25 10:36:36 2015
@@ -0,0 +1,38 @@
+package org.apache.felix.scr.integration.components.felix4984;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.felix.scr.integration.ComponentTestBase;
+import org.osgi.service.log.LogService;
+
+public class A
+{
+    private List<B> bs = new ArrayList<B>();
+    private List<Exception> bsStackTraces = new ArrayList<>();
+
+    private void setB(B b)
+    {
+        ComponentTestBase.getLog().log(LogService.LOG_WARNING, "A.setB(" + b + ")");
+        bs.add( b );
+        bsStackTraces.add(new Exception());
+    }
+    
+    private void unsetB(B b)
+    {
+        bs.remove( b );
+        bsStackTraces.remove(bsStackTraces.size()-1);
+    }
+
+    public List<B> getBs()
+    {
+        return bs;
+    }
+    
+    public void dumpStackTracesWhenBWasBound() {
+        ComponentTestBase.getLog().log(LogService.LOG_WARNING, "Stack traces when B was bound:");
+        for (Exception e : bsStackTraces) {
+            ComponentTestBase.getLog().log(LogService.LOG_WARNING, "stack trace:", e);
+        }
+    }
+}

Added: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/B.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/B.java?rev=1697645&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/B.java (added)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds.itest/src/org/apache/felix/scr/integration/components/felix4984/B.java Tue Aug 25 10:36:36 2015
@@ -0,0 +1,24 @@
+package org.apache.felix.scr.integration.components.felix4984;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class B
+{
+    private List<A> as = new ArrayList<A>();
+
+    private void setA(A a)
+    {
+        as.add( a );
+    }
+
+    private void unsetA(A a)
+    {
+        as.remove( a );
+    }
+
+    public List<A> getAs()
+    {
+        return as;
+    }
+}

Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.classpath
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.classpath?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
Binary files - no diff available.

Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.settings/org.eclipse.jdt.core.prefs?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.settings/org.eclipse.jdt.core.prefs (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/.settings/org.eclipse.jdt.core.prefs Tue Aug 25 10:36:36 2015
@@ -1,14 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

Modified: felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/bnd.bnd
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/bnd.bnd?rev=1697645&r1=1697644&r2=1697645&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/bnd.bnd (original)
+++ felix/sandbox/pderop/dependencymanager.ds/org.apache.felix.dependencymanager.ds/bnd.bnd Tue Aug 25 10:36:36 2015
@@ -59,7 +59,4 @@ DynamicImport-Package: \
 Include-Resource: \
     @kxml2-2.2.2.jar!/org/kxml2/io/KXmlParser.class|org/xmlpull/v1/XmlPull**
 
-javac.source:          1.7
-javac.target:          1.7
-