You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2011/11/28 11:05:21 UTC

svn commit: r1207050 - /aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java

Author: davidb
Date: Mon Nov 28 10:05:20 2011
New Revision: 1207050

URL: http://svn.apache.org/viewvc?rev=1207050&view=rev
Log:
Additional test for multiple service types and instances.

Modified:
    aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java

Modified: aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java?rev=1207050&r1=1207049&r2=1207050&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/test/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizerGenericCapabilityTest.java Mon Nov 28 10:05:20 2011
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
 
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -38,6 +39,9 @@ import org.apache.aries.spifly.impl1.MyS
 import org.apache.aries.spifly.impl2.MySPIImpl2a;
 import org.apache.aries.spifly.impl2.MySPIImpl2b;
 import org.apache.aries.spifly.impl3.MySPIImpl3;
+import org.apache.aries.spifly.impl4.MySPIImpl4a;
+import org.apache.aries.spifly.impl4.MySPIImpl4b;
+import org.apache.aries.spifly.impl4.MySPIImpl4c;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
 import org.junit.Test;
@@ -123,10 +127,7 @@ public class ProviderBundleTrackerCustom
 
         ProviderBundleTrackerCustomizer customizer = new ProviderBundleTrackerCustomizer(activator, spiBundle);
 
-        ServiceRegistration sreg = EasyMock.createMock(ServiceRegistration.class);
-        EasyMock.replay(sreg);
-
-        BundleContext implBC = mockSPIBundleContext4(sreg);
+        BundleContext implBC = mockSPIBundleContext4();
         Bundle implBundle =
             mockSPIBundle4(implBC, "osgi.spi.provider; effective:=active; service=org.apache.aries.mytest.MySPI; approval=global");
 
@@ -138,13 +139,49 @@ public class ProviderBundleTrackerCustom
     }
 
     @Test
-    public void testMultipleServiceInstances() throws Exception {
-        // TODO
+    public void testMultipleServiceInstancesAndTypes() throws Exception {
+        Bundle spiBundle = EasyMock.createMock(Bundle.class);
+        EasyMock.replay(spiBundle);
+
+        BaseActivator activator = new BaseActivator() {
+            @Override
+            public void start(BundleContext context) throws Exception {}
+        };
+
+        ProviderBundleTrackerCustomizer customizer = new ProviderBundleTrackerCustomizer(activator, spiBundle);
+
+        BundleContext implBC = mockSPIBundleContext4();
+        Bundle implBundle =
+            mockSPIBundle4(implBC, "osgi.spi.provider; effective:=active");
+
+        List<ServiceRegistration> registrations = customizer.addingBundle(implBundle, null);
+        assertEquals(3, registrations.size());
+
+        boolean foundA = false, foundB = false, foundC = false;
+        for (ServiceRegistration sreg : registrations) {
+            ServiceReference sref = sreg.getReference();
+            String objectClassName = sref.getProperty(Constants.OBJECTCLASS).toString();
+            String serviceImplClassName = sref.getProperty("serviceObject").getClass().getName();
+            if (MySPIImpl4a.class.getName().equals(serviceImplClassName)) {
+                assertEquals("org.apache.aries.mytest.MySPI", objectClassName);
+                foundA = true;
+            } else if (MySPIImpl4b.class.getName().equals(serviceImplClassName)) {
+                assertEquals("org.apache.aries.mytest.MySPI2", objectClassName);
+                foundB = true;
+            } else if (MySPIImpl4c.class.getName().equals(serviceImplClassName)) {
+                assertEquals("org.apache.aries.mytest.MySPI2", objectClassName);
+                foundC = true;
+            }
+        }
+
+        assertTrue(foundA);
+        assertTrue(foundB);
+        assertTrue(foundC);
     }
 
     @Test
-    public void testMultipleServiceTypes() throws Exception {
-        // TODO
+    public void testNoServiceRegistration() throws Exception {
+
     }
 
     @Test
@@ -272,7 +309,7 @@ public class ProviderBundleTrackerCustom
         return implBundle;
     }
 
-    private BundleContext mockSPIBundleContext4(ServiceRegistration sreg) {
+    private BundleContext mockSPIBundleContext4() {
         BundleContext implBC = EasyMock.createNiceMock(BundleContext.class);
 
         EasyMock.expect(implBC.
@@ -282,6 +319,7 @@ public class ProviderBundleTrackerCustom
                 @SuppressWarnings("unchecked")
                 public ServiceRegistration answer() throws Throwable {
                     final String className = (String) EasyMock.getCurrentArguments()[0];
+                    final Object serviceObject = EasyMock.getCurrentArguments()[1];
                     final Dictionary<String,?> registrationProps =
                             (Dictionary<String, ?>) EasyMock.getCurrentArguments()[2];
 
@@ -292,9 +330,12 @@ public class ProviderBundleTrackerCustom
                             Object prop = EasyMock.getCurrentArguments()[0];
                             if (Constants.OBJECTCLASS.equals(prop)) {
                                 return className;
+                            } else if ("serviceObject".equals(prop)) {
+                                // just used by the test to check the service object that was registered.
+                                return serviceObject;
                             } else {
                                 return registrationProps.get(prop);
-                        }
+                            }
                         }
                     }).anyTimes();
                     EasyMock.replay(sref);
@@ -304,7 +345,7 @@ public class ProviderBundleTrackerCustom
                     EasyMock.replay(sreg);
                     return sreg;
                 }
-            });
+            }).anyTimes();
 
         EasyMock.replay(implBC);
         return implBC;