Add test case to show volatile list reference having incorrect order
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 d639f66..42d9c97 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
@@ -88,6 +88,46 @@
         assertEquals("D", bundleContext.getService(bundleContext.getServiceReference(String.class)));
     }
 
+    @Test
+    public void testVolatileCollectionReference() {
+        OsgiServiceUtilTest.RankedService rankedServiceTen = new OsgiServiceUtilTest.RankedServiceTen();
+        bundleContext.registerService(OsgiServiceUtilTest.RankedService.class.getName(), rankedServiceTen , null);
+        MockOsgi.activate(rankedServiceTen, bundleContext);
+
+        OsgiServiceUtilTest.RankedService rankedServiceFive = new OsgiServiceUtilTest.RankedServiceFive();
+        bundleContext.registerService(OsgiServiceUtilTest.RankedService.class.getName(), rankedServiceFive, null);
+        MockOsgi.activate(rankedServiceFive, bundleContext);
+
+        OsgiServiceUtilTest.Service6VolatileMultipleReferences service6VolatileMultipleReferences = new OsgiServiceUtilTest.Service6VolatileMultipleReferences();
+        bundleContext.registerService(OsgiServiceUtilTest.Service6VolatileMultipleReferences.class.getName(), service6VolatileMultipleReferences, null);
+        MockOsgi.injectServices(service6VolatileMultipleReferences, bundleContext);
+
+        assertEquals("Should get highest when getting one service", rankedServiceTen, bundleContext.getService(bundleContext.getServiceReference(OsgiServiceUtilTest.RankedService.class)));
+        assertEquals("Should have order from lowest to highest on sorted ranked services", "RankedServiceFive=5RankedServiceTen=10", getSortedRankedServices());
+        assertEquals("Should have order from lowest to highest on volatile reference list", "RankedServiceFive=5RankedServiceTen=10", service6VolatileMultipleReferences.getRanks());
+    }
+
+    private String getSortedRankedServices() {
+        ServiceReference<?>[] refs = null;
+        try {
+            refs = bundleContext.getServiceReferences(OsgiServiceUtilTest.RankedService.class.getName(), null);
+        }
+        catch (InvalidSyntaxException ise) {
+            fail("Unexpected InvalidSyntaxException");
+        }
+        assertNotNull("Expecting our service references", refs);
+        Arrays.sort(refs);
+
+        final StringBuilder sb = new StringBuilder();
+        for(ServiceReference<?> ref : refs) {
+            OsgiServiceUtilTest.RankedService rankedService = (OsgiServiceUtilTest.RankedService)bundleContext.getService(ref);
+            sb.append(rankedService.getClass().getSimpleName()).append("=").append(rankedService.getRanking());
+            bundleContext.ungetService(ref);
+        }
+
+        return sb.toString();
+    }
+
     private ServiceRegistration<?> registerStringServiceWithoutRanking(String serviceValue) {
         return bundleContext.registerService(String.class, serviceValue, new Hashtable<String, Object>());
     }
diff --git a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
index e5939b3..d25a6db 100644
--- a/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
+++ b/core/src/test/java/org/apache/sling/testing/mock/osgi/OsgiServiceUtilTest.java
@@ -624,5 +624,64 @@
     public static class ServiceFactory1 {
         
     }
-        
+
+    public interface RankedService {
+        int getRanking();
+    }
+
+    @Component(
+            properties = {
+                    "service.ranking:Integer=5"
+            }
+    )
+    public static class RankedServiceFive implements RankedService {
+
+        private int ranking;
+
+        @Activate
+        public void activate(Map<String, Object> properties) {
+            this.ranking = (Integer) properties.get("service.ranking");
+        }
+
+        @Override
+        public int getRanking() {
+            return ranking;
+        }
+    }
+
+    @Component(
+            properties = {
+                    "service.ranking:Integer=10"
+            }
+    )
+    public static class RankedServiceTen implements RankedService {
+
+        private int ranking;
+
+        @Activate
+        public void activate(Map<String, Object> properties) {
+            this.ranking = (Integer) properties.get("service.ranking");
+        }
+
+        @Override
+        public int getRanking() {
+            return ranking;
+        }
+    }
+
+    @Component(service = Service6VolatileMultipleReferences.class)
+    public static class Service6VolatileMultipleReferences {
+
+        @Reference
+        private volatile List<RankedService> rankedServices;
+
+        public String getRanks() {
+            StringBuilder builder = new StringBuilder();
+            for(RankedService rankedService : rankedServices) {
+                builder.append(rankedService.getClass().getSimpleName()).append("=").append(rankedService.getRanking());
+            }
+            return builder.toString();
+        }
+    }
+
 }
diff --git a/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml b/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
index 751c55f..c8e44f1 100644
--- a/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
+++ b/core/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
@@ -83,4 +83,25 @@
     </service>
     <property name="service.pid" value="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceFactory1"/>
   </scr:component>
+  <scr:component name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceFive" activate="activate">
+    <property name="service.ranking" type="Integer" value="5"/>
+    <service>
+      <provide interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedService"/>
+    </service>
+    <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceFive"/>
+  </scr:component>
+  <scr:component name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceTen" activate="activate">
+    <property name="service.ranking" type="Integer" value="10"/>
+    <service>
+      <provide interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedService"/>
+    </service>
+    <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedServiceTen"/>
+  </scr:component>
+  <scr:component name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service6VolatileMultipleReferences">
+    <service>
+      <provide interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service6VolatileMultipleReferences"/>
+    </service>
+    <reference name="rankedServices" cardinality="0..n" policy="dynamic" interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$RankedService" field="rankedServices" field-collection-type="service"/>
+    <implementation class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service6VolatileMultipleReferences"/>
+  </scr:component>
 </components>