You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2018/02/01 17:04:31 UTC
[2/5] aries-rsa git commit: [ARIES-1763] Change local discovery to
EndpointEventListener
[ARIES-1763] Change local discovery to EndpointEventListener
Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/60500a6f
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/60500a6f
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/60500a6f
Branch: refs/heads/master
Commit: 60500a6f99fc32cc962c36c15f41519ca130dde0
Parents: 835b8d7
Author: Christian Schneider <cs...@adobe.com>
Authored: Thu Feb 1 17:49:03 2018 +0100
Committer: Christian Schneider <cs...@adobe.com>
Committed: Thu Feb 1 17:49:03 2018 +0100
----------------------------------------------------------------------
.../aries/rsa/discovery/local/Activator.java | 16 +--
.../rsa/discovery/local/LocalDiscovery.java | 71 +++++------
.../rsa/discovery/local/LocalDiscoveryTest.java | 121 +++++++++----------
3 files changed, 99 insertions(+), 109 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/60500a6f/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/Activator.java
----------------------------------------------------------------------
diff --git a/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/Activator.java b/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/Activator.java
index b1d6cd3..3e9a187 100644
--- a/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/Activator.java
+++ b/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/Activator.java
@@ -21,11 +21,11 @@ package org.apache.aries.rsa.discovery.local;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
-import org.osgi.service.remoteserviceadmin.EndpointListener;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
import org.osgi.util.tracker.ServiceTracker;
public class Activator implements BundleActivator {
- private ServiceTracker<EndpointListener, EndpointListener> listenerTracker;
+ private ServiceTracker<EndpointEventListener, EndpointEventListener> listenerTracker;
private LocalDiscovery localDiscovery;
public void start(BundleContext context) {
@@ -41,23 +41,23 @@ public class Activator implements BundleActivator {
context.removeBundleListener(localDiscovery);
}
- private final class EPListenerTracker extends ServiceTracker<EndpointListener, EndpointListener> {
+ private final class EPListenerTracker extends ServiceTracker<EndpointEventListener, EndpointEventListener> {
private final LocalDiscovery localDiscovery;
private EPListenerTracker(BundleContext context, LocalDiscovery localDiscovery) {
- super(context, EndpointListener.class, null);
+ super(context, EndpointEventListener.class, null);
this.localDiscovery = localDiscovery;
}
@Override
- public EndpointListener addingService(ServiceReference<EndpointListener> reference) {
- EndpointListener service = super.addingService(reference);
+ public EndpointEventListener addingService(ServiceReference<EndpointEventListener> reference) {
+ EndpointEventListener service = super.addingService(reference);
localDiscovery.addListener(reference, service);
return service;
}
@Override
- public void modifiedService(ServiceReference<EndpointListener> reference, EndpointListener service) {
+ public void modifiedService(ServiceReference<EndpointEventListener> reference, EndpointEventListener service) {
super.modifiedService(reference, service);
localDiscovery.removeListener(service);
@@ -68,7 +68,7 @@ public class Activator implements BundleActivator {
}
@Override
- public void removedService(ServiceReference<EndpointListener> reference, EndpointListener service) {
+ public void removedService(ServiceReference<EndpointEventListener> reference, EndpointEventListener service) {
super.removedService(reference, service);
localDiscovery.removeListener(service);
}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/60500a6f/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/LocalDiscovery.java
----------------------------------------------------------------------
diff --git a/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/LocalDiscovery.java b/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/LocalDiscovery.java
index a1e8575..9f076f8 100644
--- a/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/LocalDiscovery.java
+++ b/discovery/local/src/main/java/org/apache/aries/rsa/discovery/local/LocalDiscovery.java
@@ -37,7 +37,8 @@ import org.osgi.framework.Filter;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
-import org.osgi.service.remoteserviceadmin.EndpointListener;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
public class LocalDiscovery implements BundleListener {
@@ -45,10 +46,10 @@ public class LocalDiscovery implements BundleListener {
// same interface name but different properties and takes care of itself with respect to concurrency
Map<EndpointDescription, Bundle> endpointDescriptions =
new ConcurrentHashMap<EndpointDescription, Bundle>();
- Map<EndpointListener, Collection<String>> listenerToFilters =
- new HashMap<EndpointListener, Collection<String>>();
- Map<String, Collection<EndpointListener>> filterToListeners =
- new HashMap<String, Collection<EndpointListener>>();
+ Map<EndpointEventListener, Collection<String>> listenerToFilters =
+ new HashMap<EndpointEventListener, Collection<String>>();
+ Map<String, Collection<EndpointEventListener>> filterToListeners =
+ new HashMap<String, Collection<EndpointEventListener>>();
EndpointDescriptionBundleParser bundleParser;
@@ -68,8 +69,8 @@ public class LocalDiscovery implements BundleListener {
}
}
- void addListener(ServiceReference<EndpointListener> endpointListenerRef, EndpointListener endpointListener) {
- List<String> filters = StringPlus.normalize(endpointListenerRef.getProperty(EndpointListener.ENDPOINT_LISTENER_SCOPE));
+ void addListener(ServiceReference<EndpointEventListener> endpointListenerRef, EndpointEventListener endpointListener) {
+ List<String> filters = StringPlus.normalize(endpointListenerRef.getProperty(EndpointEventListener.ENDPOINT_LISTENER_SCOPE));
if (filters.isEmpty()) {
return;
}
@@ -77,9 +78,9 @@ public class LocalDiscovery implements BundleListener {
synchronized (listenerToFilters) {
listenerToFilters.put(endpointListener, filters);
for (String filter : filters) {
- Collection<EndpointListener> listeners = filterToListeners.get(filter);
+ Collection<EndpointEventListener> listeners = filterToListeners.get(filter);
if (listeners == null) {
- listeners = new ArrayList<EndpointListener>();
+ listeners = new ArrayList<EndpointEventListener>();
filterToListeners.put(filter, listeners);
}
listeners.add(endpointListener);
@@ -95,7 +96,7 @@ public class LocalDiscovery implements BundleListener {
* itself to clean up any orphans. See Remote Service Admin spec 122.6.3
* @param endpointListener
*/
- void removeListener(EndpointListener endpointListener) {
+ void removeListener(EndpointEventListener endpointListener) {
synchronized (listenerToFilters) {
Collection<String> filters = listenerToFilters.remove(endpointListener);
if (filters == null) {
@@ -103,7 +104,7 @@ public class LocalDiscovery implements BundleListener {
}
for (String filter : filters) {
- Collection<EndpointListener> listeners = filterToListeners.get(filter);
+ Collection<EndpointEventListener> listeners = filterToListeners.get(filter);
if (listeners != null) {
listeners.remove(endpointListener);
if (listeners.isEmpty()) {
@@ -114,14 +115,14 @@ public class LocalDiscovery implements BundleListener {
}
}
- private Map<String, Collection<EndpointListener>> getMatchingListeners(EndpointDescription endpoint) {
+ private Map<String, Collection<EndpointEventListener>> getMatchingListeners(EndpointDescription endpoint) {
// return a copy of matched filters/listeners so that caller doesn't need to hold locks while triggering events
- Map<String, Collection<EndpointListener>> matched = new HashMap<String, Collection<EndpointListener>>();
+ Map<String, Collection<EndpointEventListener>> matched = new HashMap<String, Collection<EndpointEventListener>>();
synchronized (listenerToFilters) {
- for (Entry<String, Collection<EndpointListener>> entry : filterToListeners.entrySet()) {
+ for (Entry<String, Collection<EndpointEventListener>> entry : filterToListeners.entrySet()) {
String filter = entry.getKey();
if (LocalDiscovery.matchFilter(filter, endpoint)) {
- matched.put(filter, new ArrayList<EndpointListener>(entry.getValue()));
+ matched.put(filter, new ArrayList<EndpointEventListener>(entry.getValue()));
}
}
}
@@ -145,7 +146,8 @@ public class LocalDiscovery implements BundleListener {
List<EndpointDescription> endpoints = bundleParser.getAllEndpointDescriptions(bundle);
for (EndpointDescription endpoint : endpoints) {
endpointDescriptions.put(endpoint, bundle);
- addedEndpointDescription(endpoint);
+ EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+ triggerCallbacks(event);
}
}
@@ -154,46 +156,35 @@ public class LocalDiscovery implements BundleListener {
i.hasNext();) {
Entry<EndpointDescription, Bundle> entry = i.next();
if (bundle.equals(entry.getValue())) {
- removedEndpointDescription(entry.getKey());
+ EndpointEvent event = new EndpointEvent(EndpointEvent.REMOVED, entry.getKey());
+ triggerCallbacks(event);
i.remove();
}
}
}
- private void addedEndpointDescription(EndpointDescription endpoint) {
- triggerCallbacks(endpoint, true);
- }
-
- private void removedEndpointDescription(EndpointDescription endpoint) {
- triggerCallbacks(endpoint, false);
- }
-
- private void triggerCallbacks(EndpointDescription endpoint, boolean added) {
- for (Map.Entry<String, Collection<EndpointListener>> entry : getMatchingListeners(endpoint).entrySet()) {
+ private void triggerCallbacks(EndpointEvent event) {
+ EndpointDescription endpoint = event.getEndpoint();
+ for (Map.Entry<String, Collection<EndpointEventListener>> entry : getMatchingListeners(endpoint).entrySet()) {
String filter = entry.getKey();
- for (EndpointListener listener : entry.getValue()) {
- triggerCallbacks(listener, filter, endpoint, added);
+ for (EndpointEventListener listener : entry.getValue()) {
+ triggerCallbacks(listener, filter, event);
}
}
}
- private void triggerCallbacks(EndpointListener endpointListener, String filter,
- EndpointDescription endpoint, boolean added) {
- if (!LocalDiscovery.matchFilter(filter, endpoint)) {
+ private void triggerCallbacks(EndpointEventListener endpointListener, String filter, EndpointEvent event) {
+ if (!LocalDiscovery.matchFilter(filter, event.getEndpoint())) {
return;
}
-
- if (added) {
- endpointListener.endpointAdded(endpoint, filter);
- } else {
- endpointListener.endpointRemoved(endpoint, filter);
- }
+ endpointListener.endpointChanged(event, filter);
}
- private void triggerCallbacks(Collection<String> filters, EndpointListener endpointListener) {
+ private void triggerCallbacks(Collection<String> filters, EndpointEventListener endpointListener) {
for (String filter : filters) {
for (EndpointDescription endpoint : endpointDescriptions.keySet()) {
- triggerCallbacks(endpointListener, filter, endpoint, true);
+ EndpointEvent event = new EndpointEvent(EndpointEvent.ADDED, endpoint);
+ triggerCallbacks(endpointListener, filter, event);
}
}
}
http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/60500a6f/discovery/local/src/test/java/org/apache/aries/rsa/discovery/local/LocalDiscoveryTest.java
----------------------------------------------------------------------
diff --git a/discovery/local/src/test/java/org/apache/aries/rsa/discovery/local/LocalDiscoveryTest.java b/discovery/local/src/test/java/org/apache/aries/rsa/discovery/local/LocalDiscoveryTest.java
index f503236..42cd86b 100644
--- a/discovery/local/src/test/java/org/apache/aries/rsa/discovery/local/LocalDiscoveryTest.java
+++ b/discovery/local/src/test/java/org/apache/aries/rsa/discovery/local/LocalDiscoveryTest.java
@@ -39,7 +39,8 @@ import org.osgi.framework.Bundle;
import org.osgi.framework.BundleEvent;
import org.osgi.framework.ServiceReference;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
-import org.osgi.service.remoteserviceadmin.EndpointListener;
+import org.osgi.service.remoteserviceadmin.EndpointEvent;
+import org.osgi.service.remoteserviceadmin.EndpointEventListener;
public class LocalDiscoveryTest {
@@ -96,21 +97,10 @@ public class LocalDiscoveryTest {
ld.bundleChanged(be0);
assertEquals(0, ld.endpointDescriptions.size());
- // Create an EndpointListener
- final Map<String, Object> props = new Hashtable<String, Object>();
- props.put(EndpointListener.ENDPOINT_LISTENER_SCOPE, "(objectClass=*)");
- @SuppressWarnings("unchecked")
- ServiceReference<EndpointListener> sr = EasyMock.createMock(ServiceReference.class);
- EasyMock.expect(sr.getPropertyKeys()).andReturn(props.keySet().toArray(new String[] {})).anyTimes();
- EasyMock.expect(sr.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
- public Object answer() throws Throwable {
- return props.get(EasyMock.getCurrentArguments()[0]);
- }
- }).anyTimes();
- EasyMock.replay(sr);
+ ServiceReference<EndpointEventListener> sr = epListenerWithScope("(objectClass=*)");
- EndpointListener endpointListener = EasyMock.createMock(EndpointListener.class);
- endpointListener.endpointAdded((EndpointDescription) EasyMock.anyObject(), EasyMock.eq("(objectClass=*)"));
+ EndpointEventListener endpointListener = EasyMock.createMock(EndpointEventListener.class);
+ endpointListener.endpointChanged(EasyMock.anyObject(EndpointEvent.class), EasyMock.eq("(objectClass=*)"));
EasyMock.expectLastCall();
EasyMock.replay(endpointListener);
ld.addListener(sr, endpointListener);
@@ -127,7 +117,7 @@ public class LocalDiscoveryTest {
// Stop the bundle
EasyMock.reset(endpointListener);
- endpointListener.endpointRemoved((EndpointDescription) EasyMock.anyObject(), EasyMock.eq("(objectClass=*)"));
+ endpointListener.endpointChanged(EasyMock.anyObject(EndpointEvent.class), EasyMock.eq("(objectClass=*)"));
EasyMock.expectLastCall();
EasyMock.replay(endpointListener);
@@ -147,21 +137,10 @@ public class LocalDiscoveryTest {
ld.bundleChanged(event);
assertEquals(2, ld.endpointDescriptions.size());
- final Map<String, Object> props = new Hashtable<String, Object>();
- props.put(EndpointListener.ENDPOINT_LISTENER_SCOPE, new String[] {"(objectClass=org.example.ClassA)"});
- @SuppressWarnings("unchecked")
- ServiceReference<EndpointListener> sr = EasyMock.createMock(ServiceReference.class);
- EasyMock.expect(sr.getPropertyKeys()).andReturn(props.keySet().toArray(new String[] {})).anyTimes();
- EasyMock.expect(sr.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
- public Object answer() throws Throwable {
- return props.get(EasyMock.getCurrentArguments()[0]);
- }
- }).anyTimes();
-
- EasyMock.replay(sr);
+ ServiceReference<EndpointEventListener> sr = epListenerWithScope("(objectClass=org.example.ClassA)");
- EndpointListener el = EasyMock.createMock(EndpointListener.class);
- el.endpointAdded((EndpointDescription) EasyMock.anyObject(),
+ EndpointEventListener el = EasyMock.createMock(EndpointEventListener.class);
+ el.endpointChanged(EasyMock.anyObject(EndpointEvent.class),
EasyMock.eq("(objectClass=org.example.ClassA)"));
EasyMock.expectLastCall();
EasyMock.replay(el);
@@ -180,16 +159,16 @@ public class LocalDiscoveryTest {
// Modify the EndpointListener Service
// no need to reset the mock for this...
- props.put(EndpointListener.ENDPOINT_LISTENER_SCOPE,
- "(|(objectClass=org.example.ClassA)(objectClass=org.example.ClassB))");
+ ServiceReference<EndpointEventListener> sr2 = epListenerWithScope("(|(objectClass=org.example.ClassA)(objectClass=org.example.ClassB))");
EasyMock.reset(el);
final Set<String> actualEndpoints = new HashSet<String>();
- el.endpointAdded((EndpointDescription) EasyMock.anyObject(),
+ el.endpointChanged(EasyMock.anyObject(EndpointEvent.class),
EasyMock.eq("(|(objectClass=org.example.ClassA)(objectClass=org.example.ClassB))"));
EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
public Object answer() throws Throwable {
- EndpointDescription endpoint = (EndpointDescription) EasyMock.getCurrentArguments()[0];
+ EndpointEvent event = (EndpointEvent) EasyMock.getCurrentArguments()[0];
+ EndpointDescription endpoint = event.getEndpoint();
actualEndpoints.addAll(endpoint.getInterfaces());
return null;
}
@@ -197,7 +176,7 @@ public class LocalDiscoveryTest {
EasyMock.replay(el);
ld.removeListener(el);
- ld.addListener(sr, el);
+ ld.addListener(sr2, el);
assertEquals(1, ld.listenerToFilters.size());
assertEquals(Arrays.asList("(|(objectClass=org.example.ClassA)(objectClass=org.example.ClassB))"),
ld.listenerToFilters.get(el));
@@ -215,27 +194,14 @@ public class LocalDiscoveryTest {
assertEquals(0, ld.filterToListeners.size());
}
- private Bundle createBundle() {
- Bundle bundle = EasyMock.createMock(Bundle.class);
- EasyMock.expect(bundle.getState()).andReturn(Bundle.ACTIVE);
- Dictionary<String, String> headers = new Hashtable<String, String>();
- headers.put("Remote-Service", "OSGI-INF/rsa/ed4.xml");
- EasyMock.expect(bundle.getHeaders()).andReturn(headers);
- EasyMock.expect(bundle.findEntries("OSGI-INF/rsa", "ed4.xml", false))
- .andReturn(Collections.enumeration(
- Collections.singleton(getClass().getResource("/ed4.xml"))));
- EasyMock.replay(bundle);
- return bundle;
- }
-
@Test
public void testRegisterTracker() throws Exception {
LocalDiscovery ld = new LocalDiscovery();
final Map<String, Object> props = new Hashtable<String, Object>();
- props.put(EndpointListener.ENDPOINT_LISTENER_SCOPE, "(objectClass=Aaaa)");
+ props.put(EndpointEventListener.ENDPOINT_LISTENER_SCOPE, "(objectClass=Aaaa)");
@SuppressWarnings("unchecked")
- ServiceReference<EndpointListener> sr = EasyMock.createMock(ServiceReference.class);
+ ServiceReference<EndpointEventListener> sr = EasyMock.createMock(ServiceReference.class);
EasyMock.expect(sr.getPropertyKeys()).andReturn(props.keySet().toArray(new String[] {})).anyTimes();
EasyMock.expect(sr.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
public Object answer() throws Throwable {
@@ -244,7 +210,7 @@ public class LocalDiscoveryTest {
}).anyTimes();
EasyMock.replay(sr);
- EndpointListener endpointListener = EasyMock.createMock(EndpointListener.class);
+ EndpointEventListener endpointListener = EasyMock.createMock(EndpointEventListener.class);
EasyMock.replay(endpointListener);
assertEquals("Precondition failed", 0, ld.listenerToFilters.size());
@@ -258,7 +224,7 @@ public class LocalDiscoveryTest {
// Add another one with the same scope filter
@SuppressWarnings("unchecked")
- ServiceReference<EndpointListener> sr2 = EasyMock.createMock(ServiceReference.class);
+ ServiceReference<EndpointEventListener> sr2 = EasyMock.createMock(ServiceReference.class);
EasyMock.expect(sr2.getPropertyKeys()).andReturn(props.keySet().toArray(new String[] {})).anyTimes();
EasyMock.expect(sr2.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
public Object answer() throws Throwable {
@@ -267,7 +233,7 @@ public class LocalDiscoveryTest {
}).anyTimes();
EasyMock.replay(sr2);
- EndpointListener endpointListener2 = EasyMock.createMock(EndpointListener.class);
+ EndpointEventListener endpointListener2 = EasyMock.createMock(EndpointEventListener.class);
EasyMock.replay(endpointListener2);
ld.addListener(sr2, endpointListener2);
@@ -276,14 +242,14 @@ public class LocalDiscoveryTest {
assertEquals(Collections.singletonList("(objectClass=Aaaa)"), ld.listenerToFilters.get(endpointListener2));
assertEquals(1, ld.filterToListeners.size());
- List<EndpointListener> endpointListeners12 = Arrays.asList(endpointListener, endpointListener2);
+ List<EndpointEventListener> endpointListeners12 = Arrays.asList(endpointListener, endpointListener2);
assertEquals(endpointListeners12, ld.filterToListeners.get("(objectClass=Aaaa)"));
// Add another listener with a multi-value scope
final Map<String, Object> props2 = new Hashtable<String, Object>();
- props2.put(EndpointListener.ENDPOINT_LISTENER_SCOPE, Arrays.asList("(objectClass=X)", "(objectClass=Y)"));
+ props2.put(EndpointEventListener.ENDPOINT_LISTENER_SCOPE, Arrays.asList("(objectClass=X)", "(objectClass=Y)"));
@SuppressWarnings("unchecked")
- ServiceReference<EndpointListener> sr3 = EasyMock.createMock(ServiceReference.class);
+ ServiceReference<EndpointEventListener> sr3 = EasyMock.createMock(ServiceReference.class);
EasyMock.expect(sr3.getPropertyKeys()).andReturn(props2.keySet().toArray(new String[] {})).anyTimes();
EasyMock.expect(sr3.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
public Object answer() throws Throwable {
@@ -292,7 +258,7 @@ public class LocalDiscoveryTest {
}).anyTimes();
EasyMock.replay(sr3);
- EndpointListener endpointListener3 = EasyMock.createMock(EndpointListener.class);
+ EndpointEventListener endpointListener3 = EasyMock.createMock(EndpointEventListener.class);
EasyMock.replay(endpointListener3);
ld.addListener(sr3, endpointListener3);
@@ -311,17 +277,17 @@ public class LocalDiscoveryTest {
public void testClearTracker() throws Exception {
LocalDiscovery ld = new LocalDiscovery();
- EndpointListener endpointListener = EasyMock.createMock(EndpointListener.class);
+ EndpointEventListener endpointListener = EasyMock.createMock(EndpointEventListener.class);
ld.listenerToFilters.put(endpointListener,
new ArrayList<String>(Arrays.asList("(a=b)", "(objectClass=foo.bar.Bheuaark)")));
- ld.filterToListeners.put("(a=b)", new ArrayList<EndpointListener>(Arrays.asList(endpointListener)));
+ ld.filterToListeners.put("(a=b)", new ArrayList<EndpointEventListener>(Arrays.asList(endpointListener)));
ld.filterToListeners.put("(objectClass=foo.bar.Bheuaark)",
- new ArrayList<EndpointListener>(Arrays.asList(endpointListener)));
+ new ArrayList<EndpointEventListener>(Arrays.asList(endpointListener)));
assertEquals(1, ld.listenerToFilters.size());
assertEquals(2, ld.filterToListeners.size());
assertEquals(1, ld.filterToListeners.values().iterator().next().size());
- ld.removeListener(EasyMock.createMock(EndpointListener.class));
+ ld.removeListener(EasyMock.createMock(EndpointEventListener.class));
assertEquals(1, ld.listenerToFilters.size());
assertEquals(2, ld.filterToListeners.size());
assertEquals(1, ld.filterToListeners.values().iterator().next().size());
@@ -329,4 +295,37 @@ public class LocalDiscoveryTest {
assertEquals(0, ld.listenerToFilters.size());
assertEquals(0, ld.filterToListeners.size());
}
+
+ private ServiceReference<EndpointEventListener> epListenerWithScope(String scope) {
+ final Map<String, Object> props = new Hashtable<String, Object>();
+ props.put(EndpointEventListener.ENDPOINT_LISTENER_SCOPE, new String[] {scope});
+ return mockService(props);
+ }
+
+ private ServiceReference<EndpointEventListener> mockService(final Map<String, Object> props) {
+ @SuppressWarnings("unchecked")
+ ServiceReference<EndpointEventListener> sr = EasyMock.createMock(ServiceReference.class);
+ EasyMock.expect(sr.getPropertyKeys()).andReturn(props.keySet().toArray(new String[] {})).anyTimes();
+ EasyMock.expect(sr.getProperty((String) EasyMock.anyObject())).andAnswer(new IAnswer<Object>() {
+ public Object answer() throws Throwable {
+ return props.get(EasyMock.getCurrentArguments()[0]);
+ }
+ }).anyTimes();
+
+ EasyMock.replay(sr);
+ return sr;
+ }
+
+ private Bundle createBundle() {
+ Bundle bundle = EasyMock.createMock(Bundle.class);
+ EasyMock.expect(bundle.getState()).andReturn(Bundle.ACTIVE);
+ Dictionary<String, String> headers = new Hashtable<String, String>();
+ headers.put("Remote-Service", "OSGI-INF/rsa/ed4.xml");
+ EasyMock.expect(bundle.getHeaders()).andReturn(headers);
+ EasyMock.expect(bundle.findEntries("OSGI-INF/rsa", "ed4.xml", false))
+ .andReturn(Collections.enumeration(
+ Collections.singleton(getClass().getResource("/ed4.xml"))));
+ EasyMock.replay(bundle);
+ return bundle;
+ }
}