You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/04/29 18:54:39 UTC
svn commit: r1741665 - in /sling/trunk/testing/mocks/osgi-mock: ./
src/main/java/org/apache/sling/testing/mock/osgi/
src/test/java/org/apache/sling/testing/mock/osgi/
src/test/java/org/apache/sling/testing/mock/osgi/context/
Author: sseifert
Date: Fri Apr 29 16:54:38 2016
New Revision: 1741665
URL: http://svn.apache.org/viewvc?rev=1741665&view=rev
Log:
SLING-5667 MockBundleContext.getServiceReference(...) does not return service reference with highest ranking
Modified:
sling/trunk/testing/mocks/osgi-mock/pom.xml
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockEventAdmin.java
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java
Modified: sling/trunk/testing/mocks/osgi-mock/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/pom.xml?rev=1741665&r1=1741664&r2=1741665&view=diff
==============================================================================
--- sling/trunk/testing/mocks/osgi-mock/pom.xml (original)
+++ sling/trunk/testing/mocks/osgi-mock/pom.xml Fri Apr 29 16:54:38 2016
@@ -59,7 +59,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.osgi</artifactId>
- <version>2.2.0</version>
+ <version>2.4.0</version>
<scope>compile</scope>
</dependency>
Modified: sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockEventAdmin.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockEventAdmin.java?rev=1741665&r1=1741664&r2=1741665&view=diff
==============================================================================
--- sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockEventAdmin.java (original)
+++ sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockEventAdmin.java Fri Apr 29 16:54:38 2016
@@ -33,6 +33,7 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.commons.osgi.Order;
import org.apache.sling.commons.osgi.ServiceUtil;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.event.Event;
@@ -106,13 +107,13 @@ public final class MockEventAdmin implem
protected void bindEventHandler(EventHandler eventHandler, Map<String, Object> props) {
synchronized (eventHandlers) {
- eventHandlers.put(ServiceUtil.getComparableForServiceRanking(props), new EventHandlerItem(eventHandler, props));
+ eventHandlers.put(ServiceUtil.getComparableForServiceRanking(props, Order.DESCENDING), new EventHandlerItem(eventHandler, props));
}
}
protected void unbindEventHandler(EventHandler eventHandler, Map<String, Object> props) {
synchronized (eventHandlers) {
- eventHandlers.remove(ServiceUtil.getComparableForServiceRanking(props));
+ eventHandlers.remove(ServiceUtil.getComparableForServiceRanking(props, Order.DESCENDING));
}
}
Modified: sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java?rev=1741665&r1=1741664&r2=1741665&view=diff
==============================================================================
--- sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java (original)
+++ sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/MockServiceReference.java Fri Apr 29 16:54:38 2016
@@ -22,6 +22,7 @@ import java.util.Collections;
import java.util.Dictionary;
import java.util.Map;
+import org.apache.sling.commons.osgi.Order;
import org.apache.sling.commons.osgi.ServiceUtil;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
@@ -44,7 +45,7 @@ class MockServiceReference<T> implements
private Comparable<Object> buildComparable() {
Map<String,Object> props = MapUtil.toMap(serviceRegistration.getProperties());
- return ServiceUtil.getComparableForServiceRanking(props);
+ return ServiceUtil.getComparableForServiceRanking(props, Order.DESCENDING);
}
@Override
Modified: sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java?rev=1741665&r1=1741664&r2=1741665&view=diff
==============================================================================
--- sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java (original)
+++ sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockBundleContextTest.java Fri Apr 29 16:54:38 2016
@@ -73,15 +73,15 @@ public class MockBundleContextTest {
@Test
public void testServiceRegistration() throws InvalidSyntaxException {
// prepare test services
- String[] clazzes2 = new String[] { String.class.getName(), Integer.class.getName() };
- Object service2 = new Object();
+ String[] clazzes1 = new String[] { String.class.getName(), Integer.class.getName() };
+ Object service1 = new Object();
Dictionary<String, Object> properties2 = getServiceProperties(null);
- ServiceRegistration reg2 = bundleContext.registerService(clazzes2, service2, properties2);
+ ServiceRegistration reg1 = bundleContext.registerService(clazzes1, service1, properties2);
- String clazz1 = String.class.getName();
- Object service1 = new Object();
+ String clazz2 = String.class.getName();
+ Object service2 = new Object();
Dictionary<String, Object> properties1 = getServiceProperties(null);
- ServiceRegistration reg1 = bundleContext.registerService(clazz1, service1, properties1);
+ ServiceRegistration reg2 = bundleContext.registerService(clazz2, service2, properties1);
String clazz3 = Integer.class.getName();
Object service3 = new Object();
@@ -93,7 +93,7 @@ public class MockBundleContextTest {
assertSame(reg1.getReference(), refString);
ServiceReference<?> refInteger = bundleContext.getServiceReference(Integer.class.getName());
- assertSame(reg3.getReference(), refInteger);
+ assertSame(reg1.getReference(), refInteger);
ServiceReference<?>[] refsString = bundleContext.getServiceReferences(String.class.getName(), null);
assertEquals(2, refsString.length);
@@ -106,8 +106,8 @@ public class MockBundleContextTest {
ServiceReference<?>[] refsInteger = bundleContext.getServiceReferences(Integer.class.getName(), null);
assertEquals(2, refsInteger.length);
- assertSame(reg3.getReference(), refsInteger[0]);
- assertSame(reg2.getReference(), refsInteger[1]);
+ assertSame(reg1.getReference(), refsInteger[0]);
+ assertSame(reg3.getReference(), refsInteger[1]);
ServiceReference<?>[] allRefsString = bundleContext.getAllServiceReferences(String.class.getName(), null);
assertArrayEquals(refsString, allRefsString);
@@ -115,7 +115,7 @@ public class MockBundleContextTest {
// test get services
assertSame(service1, bundleContext.getService(refsString[0]));
assertSame(service2, bundleContext.getService(refsString[1]));
- assertSame(service3, bundleContext.getService(refInteger));
+ assertSame(service1, bundleContext.getService(refInteger));
// unget does nothing
bundleContext.ungetService(refsString[0]);
Modified: sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java?rev=1741665&r1=1741664&r2=1741665&view=diff
==============================================================================
--- sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java (original)
+++ sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/MockServiceReferencesSortTest.java Fri Apr 29 16:54:38 2016
@@ -22,10 +22,8 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
-import java.util.List;
import org.junit.After;
import org.junit.Before;
@@ -52,33 +50,61 @@ public class MockServiceReferencesSortTe
}
@Test
- public void testServicesOrder() {
- assertEquals("12345", getSortedServicesString(bundleContext));
+ public void testAllWithRanking() {
+ registerStringServiceWithRanking("A", 3);
+ registerStringServiceWithRanking("B", 5);
+ registerStringServiceWithRanking("C", 4);
+ registerStringServiceWithRanking("D", 1);
+ registerStringServiceWithRanking("E", 2);
+
+ assertEquals("BCAED", getSortedServicesString());
+ assertEquals("B", bundleContext.getService(bundleContext.getServiceReference(String.class)));
+ }
+
+ @Test
+ public void testAllWithoutRanking() {
+ registerStringServiceWithoutRanking("A");
+ registerStringServiceWithoutRanking("B");
+ registerStringServiceWithoutRanking("C");
+ registerStringServiceWithoutRanking("D");
+ registerStringServiceWithoutRanking("E");
+
+ assertEquals("ABCDE", getSortedServicesString());
+ assertEquals("A", bundleContext.getService(bundleContext.getServiceReference(String.class)));
+ }
+
+ @Test
+ public void testMixed() {
+ registerStringServiceWithoutRanking("A");
+ registerStringServiceWithRanking("B", 5);
+ registerStringServiceWithoutRanking("C");
+ registerStringServiceWithRanking("D", 10);
+ registerStringServiceWithoutRanking("E");
+
+ assertEquals("DBACE", getSortedServicesString());
+ assertEquals("D", bundleContext.getService(bundleContext.getServiceReference(String.class)));
+ }
+
+ private ServiceRegistration<?> registerStringServiceWithoutRanking(String serviceValue) {
+ return bundleContext.registerService(String.class, serviceValue, new Hashtable<String, Object>());
}
- private static ServiceRegistration<?> registerStringService(BundleContext ctx, int index) {
+ private ServiceRegistration<?> registerStringServiceWithRanking(String serviceValue, int index) {
final Hashtable<String, Object> props = new Hashtable<String, Object>();
props.put(Constants.SERVICE_RANKING, new Integer(index));
- return ctx.registerService(String.class.getName(), String.valueOf(index), props);
+ return bundleContext.registerService(String.class, serviceValue, props);
}
/** Register services with a specific ranking, sort their references and
* return their concatenated toString() values.
* Use to test service references sorting.
*/
- private static String getSortedServicesString(BundleContext ctx) {
- final List<ServiceRegistration<?>> toCleanup = new ArrayList<ServiceRegistration<?>>();
-
- toCleanup.add(registerStringService(ctx, 3));
- toCleanup.add(registerStringService(ctx, 5));
- toCleanup.add(registerStringService(ctx, 4));
- toCleanup.add(registerStringService(ctx, 1));
- toCleanup.add(registerStringService(ctx, 2));
-
- ServiceReference<?> [] refs = null;
+ private String getSortedServicesString() {
+ ServiceReference<?>[] refs = null;
try {
- refs = ctx.getServiceReferences(String.class.getName(), null);
- } catch(InvalidSyntaxException ise) {
+ refs = bundleContext.getServiceReferences(String.class.getName(), null);
+ }
+ catch(InvalidSyntaxException ise) {
fail("Unexpected InvalidSyntaxException");
}
assertNotNull("Expecting our service references", refs);
@@ -86,12 +112,8 @@ public class MockServiceReferencesSortTe
final StringBuilder sb = new StringBuilder();
for(ServiceReference<?> ref : refs) {
- sb.append(ctx.getService(ref).toString());
- ctx.ungetService(ref);
- }
-
- for(ServiceRegistration<?> reg : toCleanup) {
- reg.unregister();
+ sb.append(bundleContext.getService(ref).toString());
+ bundleContext.ungetService(ref);
}
return sb.toString();
Modified: sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java?rev=1741665&r1=1741664&r2=1741665&view=diff
==============================================================================
--- sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java (original)
+++ sling/trunk/testing/mocks/osgi-mock/src/test/java/org/apache/sling/testing/mock/osgi/context/OsgiContextImplTest.java Fri Apr 29 16:54:38 2016
@@ -87,11 +87,13 @@ public class OsgiContextImplTest {
context.registerService(Set.class, myService1);
Set<String> myService2 = new HashSet<String>();
context.registerService(Set.class, myService2);
+
+ assertSame(myService1, context.getService(Set.class));
- // expected: descending order because ordering descending by service id
+ // expected: ascending order because ordering ascending by service ID
Set[] serviceResults = context.getServices(Set.class, null);
- assertSame(myService1, serviceResults[1]);
- assertSame(myService2, serviceResults[0]);
+ assertSame(myService1, serviceResults[0]);
+ assertSame(myService2, serviceResults[1]);
}
@Test