[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 <[email protected]> Authored: Thu Feb 1 17:49:03 2018 +0100 Committer: Christian Schneider <[email protected]> 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; + } }
