You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ie...@apache.org on 2013/02/11 02:26:42 UTC

svn commit: r1444645 - /sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java

Author: ieb
Date: Mon Feb 11 01:26:42 2013
New Revision: 1444645

URL: http://svn.apache.org/r1444645
Log:
SLING-2725 Added initial coverage for mapping, needs more work to get real coverage.

Modified:
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java?rev=1444645&r1=1444644&r2=1444645&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java Mon Feb 11 01:26:42 2013
@@ -17,9 +17,11 @@
  */
 package org.apache.sling.resourceresolver.impl;
 
+import java.util.ArrayList;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -30,6 +32,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceProviderFactory;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.api.resource.ResourceUtil;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -38,6 +41,8 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.service.component.ComponentContext;
@@ -54,6 +59,8 @@ public class MockedResourceResolverImplT
 
     private static final Logger LOGGER = LoggerFactory.getLogger(MockedResourceResolverImplTest.class);
 
+    private static final List<Resource> EMPTY_RESOURCE_LIST = new ArrayList<Resource>();
+
     private ResourceResolverFactoryActivator activator;
 
     @Mock
@@ -86,6 +93,10 @@ public class MockedResourceResolverImplT
     @Mock
     private ResourceProvider factoryAdministrativeResourceProvider;
 
+    @Mock
+    private ResourceProvider mappingResourceProvider;
+
+
     public MockedResourceResolverImplTest() {
         MockitoAnnotations.initMocks(this);
     }
@@ -93,53 +104,27 @@ public class MockedResourceResolverImplT
     @Before
     public void before() throws LoginException {
         activator = new ResourceResolverFactoryActivator();
-        Dictionary<String, Object> properties = new Hashtable<String, Object>();
-        properties.put("resource.resolver.virtual", new String[] { "/:/" });
-        properties.put("resource.resolver.mapping", new String[] { "/:/",
-            "/content/:/", "/system/docroot/:/" });
-        properties.put("resource.resolver.allowDirect", true);
-        properties.put("resource.resolver.searchpath", new String[] { "/apps",
-            "/libs" });
-        properties.put("resource.resolver.manglenamespaces", true);
-        properties.put("resource.resolver.map.location", "/etc/map");
-        properties.put("resource.resolver.default.vanity.redirect.status", 302);
-        properties.put(
-            "resource.resolver.required.providers",
-            new String[] { "org.apache.sling.resourceresolver.impl.DummyTestProvider" });
-        properties.put(Constants.SERVICE_VENDOR, "Apache");
-        properties.put(Constants.SERVICE_DESCRIPTION, "Testing");
 
-        Mockito.when(componentContext.getProperties()).thenReturn(properties);
+        Mockito.when(componentContext.getProperties()).thenReturn(buildBundleProperties());
         Mockito.when(componentContext.getBundleContext()).thenReturn(
             bundleContext);
         activator.eventAdmin = eventAdmin;
 
-        // bind a ResourceProvider to satidy the pre-requirements
-        Map<String, Object> resourceProviderProperties = new HashMap<String, Object>();
-        resourceProviderProperties.put(Constants.SERVICE_PID,
-            "org.apache.sling.resourceresolver.impl.DummyTestProvider");
-        resourceProviderProperties.put(Constants.SERVICE_ID, 10L);
-        resourceProviderProperties.put(Constants.SERVICE_VENDOR, "Apache");
-        resourceProviderProperties.put(Constants.SERVICE_DESCRIPTION,
-            "Dummy Provider");
-        resourceProviderProperties.put(ResourceProvider.ROOTS,
-            new String[] { "/single" });
-
         activator.bindResourceProvider(resourceProvider,
-            resourceProviderProperties);
+            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.DummyTestProvider", 
+                10L, 
+                new String[] { "/single" }));
+        
+        // setup mapping resources at /etc/map to exercise vanity etc.
+        Resource etcMapResource = buildResource("/etc/map", buildMapIterable());
+        Mockito.when(mappingResourceProvider.getResource(Mockito.any(ResourceResolver.class), Mockito.eq("/etc/map"))).thenReturn(etcMapResource);
+        
+        activator.bindResourceProvider(mappingResourceProvider,
+            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.MapProvider",
+                11L,
+                new String[] { "/etc" }));
 
         // bind a ResourceProviderFactory to satidy the pre-requirements
-        Map<String, Object> resourceProviderFactoryProperties = new HashMap<String, Object>();
-        resourceProviderFactoryProperties.put(Constants.SERVICE_PID,
-            "org.apache.sling.resourceresolver.impl.DummyTestProviderFactory");
-        resourceProviderFactoryProperties.put(Constants.SERVICE_ID, 11L);
-        resourceProviderFactoryProperties.put(Constants.SERVICE_VENDOR,
-            "Apache");
-        resourceProviderFactoryProperties.put(Constants.SERVICE_DESCRIPTION,
-            "Dummy Provider Factor");
-        resourceProviderFactoryProperties.put(ResourceProvider.ROOTS,
-            new String[] { "/factory" });
-
         Mockito.when(resourceProviderFactory.getResourceProvider(null)).thenReturn(
             factoryResourceProvider);
         Mockito.when(
@@ -151,8 +136,11 @@ public class MockedResourceResolverImplT
         Mockito.when(
             resourceProviderFactory.getAdministrativeResourceProvider(Mockito.anyMap())).thenReturn(
             factoryAdministrativeResourceProvider);
+        
         activator.bindResourceProviderFactory(resourceProviderFactory,
-            resourceProviderFactoryProperties);
+            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.DummyTestProviderFactory",
+                12L,
+                new String[] { "/factory" } ));
 
         // activate the components.
         activator.activate(componentContext);
@@ -180,9 +168,75 @@ public class MockedResourceResolverImplT
         resourceResolverFactory = (ResourceResolverFactoryImpl) rrf;
     }
 
+    private Iterable<Resource> buildMapIterable() {
+        List<Resource> mappingResources = new ArrayList<Resource>();
+        mappingResources.add(buildResource("/etc/map/m1", EMPTY_RESOURCE_LIST));
+        mappingResources.add(buildResource("/etc/map/m2", EMPTY_RESOURCE_LIST));
+        mappingResources.add(buildResource("/etc/map/m3", EMPTY_RESOURCE_LIST));
+        return mappingResources;
+    }
+
+    private Resource buildResource(String fullpath, Iterable<Resource> children) {
+        Resource resource = Mockito.mock(Resource.class);
+        Mockito.when(resource.getName()).thenReturn(getName(fullpath));
+        Mockito.when(resource.getPath()).thenReturn(fullpath);
+        ResourceMetadata resourceMetadata = new ResourceMetadata();
+        Mockito.when(resource.getResourceMetadata()).thenReturn(resourceMetadata);
+        Mockito.when(resource.listChildren()).thenReturn(children.iterator());
+        return resource;
+    }
+        
+
+    private String getName(String fullpath) {
+        int n = fullpath.lastIndexOf("/");
+        return fullpath.substring(n);
+    }
+
+    private Map<String, Object> buildResourceProviderProperties(String servicePID, long serviceID, String[] roots) {
+        Map<String, Object> resourceProviderProperties = new HashMap<String, Object>();
+        resourceProviderProperties.put(Constants.SERVICE_PID, servicePID);
+        resourceProviderProperties.put(Constants.SERVICE_ID, serviceID);
+        resourceProviderProperties.put(Constants.SERVICE_VENDOR, "Apache");
+        resourceProviderProperties.put(Constants.SERVICE_DESCRIPTION,
+            "Dummy Provider");
+        resourceProviderProperties.put(ResourceProvider.ROOTS, roots);
+        return resourceProviderProperties;
+    }
+
+    private Dictionary<String, Object> buildBundleProperties() {
+        Dictionary<String, Object> properties = new Hashtable<String, Object>();
+        properties.put("resource.resolver.virtual", new String[] { "/:/" });
+        properties.put("resource.resolver.mapping", new String[] { "/:/",
+            "/content/:/", "/system/docroot/:/" });
+        properties.put("resource.resolver.allowDirect", true);
+        properties.put("resource.resolver.searchpath", new String[] { "/apps",
+            "/libs" });
+        properties.put("resource.resolver.manglenamespaces", true);
+        properties.put("resource.resolver.map.location", "/etc/map");
+        properties.put("resource.resolver.default.vanity.redirect.status", 302);
+        properties.put(
+            "resource.resolver.required.providers",
+            new String[] { "org.apache.sling.resourceresolver.impl.DummyTestProvider" });
+        properties.put(Constants.SERVICE_VENDOR, "Apache");
+        properties.put(Constants.SERVICE_DESCRIPTION, "Testing");
+        return properties;
+    }
+
     @After
     public void after() {
-
+        activator.unbindResourceProvider(resourceProvider, 
+            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.DummyTestProvider", 
+                                            10L, 
+                                            new String[] { "/single" }));
+        activator.unbindResourceProvider(mappingResourceProvider,
+            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.MapProvider",
+                                            11L,
+                                            new String[] { "/etc" }));
+        activator.bindResourceProviderFactory(resourceProviderFactory,
+            buildResourceProviderProperties("org.apache.sling.resourceresolver.impl.DummyTestProviderFactory",
+                                            12L,
+                                            new String[] { "/factory" } ));
+        
     }
 
     @Test
@@ -208,9 +262,7 @@ public class MockedResourceResolverImplT
     public void testGetResource() throws LoginException {
         ResourceResolver resourceResolver = resourceResolverFactory.getResourceResolver(null);
         Assert.assertNotNull(resourceResolver);
-        Resource singleResource = Mockito.mock(Resource.class);
-        ResourceMetadata singleResourceMetadata = new ResourceMetadata();
-        Mockito.when(singleResource.getResourceMetadata()).thenReturn(singleResourceMetadata);
+        Resource singleResource = buildResource("/sling/test", EMPTY_RESOURCE_LIST);
         Mockito.when(
             resourceProvider.getResource(Mockito.any(ResourceResolver.class),
                 Mockito.eq("/single/test"))).thenReturn(singleResource);
@@ -221,15 +273,13 @@ public class MockedResourceResolverImplT
     public void testGetFactoryResource() throws LoginException {
         ResourceResolver resourceResolver = resourceResolverFactory.getResourceResolver(null);
         Assert.assertNotNull(resourceResolver);
-        Resource factoryResource = Mockito.mock(Resource.class);
-        ResourceMetadata factoryResourceMetadata = new ResourceMetadata();
+        Resource factoryResource = buildResource("/factory/test", EMPTY_RESOURCE_LIST);
         Mockito.when(
             factoryResourceProvider.getResource(
                 Mockito.any(ResourceResolver.class),
                 Mockito.eq("/factory/test"))).thenReturn(factoryResource);
-        Mockito.when(factoryResource.getResourceMetadata()).thenReturn(factoryResourceMetadata);
         Resource resource = resourceResolver.getResource("/factory/test");
         Assert.assertEquals(factoryResource,resource);
-
     }
+    
 }