This is an automated email from the ASF dual-hosted git repository. henrykuijpers pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
commit af99836b1b1b94ba1d164f2d2249f6a6f4cf6fc6 Author: Bart Thierens <[email protected]> AuthorDate: Thu Aug 22 18:34:24 2024 +0200 Add dedicated test for consistent ranked services sorting --- .../mock/osgi/MockServiceReferencesSortTest.java | 47 +++++++++++++++++++--- .../Service6VolatileMultipleReferences.java | 4 ++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java b/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java index 59bbe19..b3491b8 100644 --- a/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java +++ b/core/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java @@ -18,16 +18,13 @@ */ package org.apache.sling.testing.mock.osgi; -import java.util.Arrays; -import java.util.Hashtable; +import java.util.*; -import org.apache.sling.testing.mock.osgi.testsvc.osgiserviceutil.RankedService; -import org.apache.sling.testing.mock.osgi.testsvc.osgiserviceutil.RankedServiceFive; -import org.apache.sling.testing.mock.osgi.testsvc.osgiserviceutil.RankedServiceTen; -import org.apache.sling.testing.mock.osgi.testsvc.osgiserviceutil.Service6VolatileMultipleReferences; +import org.apache.sling.testing.mock.osgi.testsvc.osgiserviceutil.*; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.InvalidSyntaxException; @@ -122,6 +119,44 @@ public class MockServiceReferencesSortTest { service6VolatileMultipleReferences.getRanks()); } + @Test + public void testConsistentRankedServicesSorting() { + // random order of instantiation and registration + RankedService serviceRanking0 = Mockito.mock(RankedService.class); + bundleContext.registerService(RankedService.class, serviceRanking0, createServiceRankingDictionary(0)); + RankedService serviceRanking_5 = Mockito.mock(RankedService.class); + bundleContext.registerService(RankedService.class, serviceRanking_5, createServiceRankingDictionary(-5)); + RankedService serviceRanking5 = Mockito.mock(RankedService.class); + bundleContext.registerService(RankedService.class, serviceRanking5, createServiceRankingDictionary(5)); + + Service6VolatileMultipleReferences service = + MockOsgi.registerInjectActivateService(Service6VolatileMultipleReferences.class, bundleContext); + List<RankedService> referencedServices = service.getRankedServices(); + assertNotNull(referencedServices); + assertEquals(3, referencedServices.size()); + assertEquals(serviceRanking_5, referencedServices.get(0)); + assertEquals(serviceRanking0, referencedServices.get(1)); + assertEquals(serviceRanking5, referencedServices.get(2)); + + // register some more services + RankedService serviceRanking_999 = Mockito.mock(RankedService.class); + bundleContext.registerService(RankedService.class, serviceRanking_999, createServiceRankingDictionary(-999)); + RankedService serviceRanking1 = Mockito.mock(RankedService.class); + bundleContext.registerService(RankedService.class, serviceRanking1, createServiceRankingDictionary(1)); + + // check that the collection has been updated and sorted correctly + assertEquals(5, referencedServices.size()); + assertEquals(serviceRanking_999, referencedServices.get(0)); + assertEquals(serviceRanking_5, referencedServices.get(1)); + assertEquals(serviceRanking0, referencedServices.get(2)); + assertEquals(serviceRanking1, referencedServices.get(3)); + assertEquals(serviceRanking5, referencedServices.get(4)); + } + + private Dictionary<String, Object> createServiceRankingDictionary(int serviceRanking) { + return new Hashtable<>(Map.of(Constants.SERVICE_RANKING, serviceRanking)); + } + private String getSortedRankedServices() { ServiceReference<?>[] refs = null; try { diff --git a/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service6VolatileMultipleReferences.java b/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service6VolatileMultipleReferences.java index 63ba810..9dbc951 100644 --- a/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service6VolatileMultipleReferences.java +++ b/test-services/src/main/java/org/apache/sling/testing/mock/osgi/testsvc/osgiserviceutil/Service6VolatileMultipleReferences.java @@ -36,4 +36,8 @@ public class Service6VolatileMultipleReferences { } return builder.toString(); } + + public List<RankedService> getRankedServices() { + return this.rankedServices; + } }
