Bart Thierens created SLING-12413:
-------------------------------------

             Summary: OSGi mocks ranked service collections are not ordered 
consistently
                 Key: SLING-12413
                 URL: https://issues.apache.org/jira/browse/SLING-12413
             Project: Sling
          Issue Type: Bug
          Components: Testing
    Affects Versions: Testing OSGi Mock 3.5.0
            Reporter: Bart Thierens


The OSGi mocks rank services by service.ranking to simulate Felix workings, see 
[here|https://github.com/apache/sling-org-apache-sling-testing-osgi-mock/blame/2caaa14f5c38a54a0239f0f5550cd8a432307304/core/src/main/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtil.java#L710]
 

This works fine when you register the components before the calling/using 
component (=the one that holds the reference to the collection of other 
components) is registered itself.

The OSGiServiceUtil finds all matching services, sorts the collection of 
references and then proceeds to inject the actual impl's in that order.

However, if you register your calling component first - or you add more 
components after the calling component was already registered - they will just 
be added as-is to the collection. This is done 
[here|https://github.com/apache/sling-org-apache-sling-testing-osgi-mock/blame/2caaa14f5c38a54a0239f0f5550cd8a432307304/core/src/main/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtil.java#L863].
 In Felix this works correctly and the collection is always sorted correctly, 
even after late add's or remove's of references.

This causes inconsistent behaviour while testing.  See 
[this|https://github.com/senn/aemcontext-no-serviceranking-ordering/blob/incorrect-ordering-depending-on-injection-time/src/test/java/com/github/senn/services/InjectionTimeOrderingTest.java]
 test example I prepared.  It has 3 tests:
 * 1 one where the references are registered first - OK
 * 1 one where the calling service is registered first - 
{color:#FF0000}NOK{color}
 * 1 combination test - {color:#FF0000}NOK{color}

I know the OSGi spec does not really define the ordering but if you do it 'the 
Felix way' in once place, it should at least be consistent.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to