You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2017/02/27 08:49:54 UTC

svn commit: r1784509 - in /sling/trunk/bundles/extensions/validation: api/src/main/java/org/apache/sling/validation/model/spi/ core/ core/src/main/java/org/apache/sling/validation/impl/ core/src/main/java/org/apache/sling/validation/impl/resourcemodel/...

Author: kwin
Date: Mon Feb 27 08:49:54 2017
New Revision: 1784509

URL: http://svn.apache.org/viewvc?rev=1784509&view=rev
Log:
SLING-6562 use service resource resolvers

Modified:
    sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/spi/ValidationModelProvider.java
    sling/trunk/bundles/extensions/validation/core/   (props changed)
    sling/trunk/bundles/extensions/validation/core/pom.xml
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
    sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImpl.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
    sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java

Modified: sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/spi/ValidationModelProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/spi/ValidationModelProvider.java?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/spi/ValidationModelProvider.java (original)
+++ sling/trunk/bundles/extensions/validation/api/src/main/java/org/apache/sling/validation/model/spi/ValidationModelProvider.java Mon Feb 27 08:49:54 2017
@@ -23,7 +23,6 @@ import java.util.Map;
 
 import javax.annotation.Nonnull;
 
-import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.validation.model.ValidationModel;
 import org.apache.sling.validation.spi.Validator;
 
@@ -44,15 +43,12 @@ public interface ValidationModelProvider
      * @param validatorsMap
      *            all known validators in a map (key=name of validator). Only one of those should be used in the
      *            returned validation models.
-     * @param resourceResolver
-     *            the resource resolver which should be used by the provider (if one is necessary).
      * @return a Collection of {@link ValidationModel}s. Never {@code null}, but might be empty collection in case no
      *         model for the given resource type could be found.
      * @throws IllegalStateException
      *             in case a validation model was found but it is invalid
      */
     @Nonnull Collection<ValidationModel> getModels(@Nonnull String relativeResourceType,
-            @Nonnull Map<String, Validator<?>> validatorsMap, @Nonnull ResourceResolver resourceResolver)
-            throws IllegalStateException;
+            @Nonnull Map<String, Validator<?>> validatorsMap) throws IllegalStateException;
 
 }

Propchange: sling/trunk/bundles/extensions/validation/core/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Feb 27 08:49:54 2017
@@ -11,4 +11,4 @@ maven-eclipse.xml
 felix-cache
 sling-crankstart
 derby.log
-
+sling

Modified: sling/trunk/bundles/extensions/validation/core/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/pom.xml?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/pom.xml (original)
+++ sling/trunk/bundles/extensions/validation/core/pom.xml Mon Feb 27 08:49:54 2017
@@ -96,6 +96,12 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.api</artifactId>
+            <version>2.5.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.validation.api</artifactId>
             <version>1.0.0-SNAPSHOT</version>
             <scope>provided</scope>
@@ -120,13 +126,6 @@
             <artifactId>osgi.core</artifactId>
             <scope>provided</scope>
         </dependency>
-       
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.api</artifactId>
-            <version>2.4.2</version>
-            <scope>provided</scope>
-        </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.serviceusermapper</artifactId>
@@ -215,7 +214,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-            <version>1.3.0</version>
+            <version>1.9.4</version>
             <scope>test</scope>
         </dependency>
         <dependency>

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationModelRetrieverImpl.java Mon Feb 27 08:49:54 2017
@@ -71,66 +71,56 @@ public class ValidationModelRetrieverImp
     @Nonnull Map<String, Validator<?>> validators = new ConcurrentHashMap<String, Validator<?>>();
 
     @Reference
-    private ResourceResolverFactory resourceResolverFactory;
-
-    @Reference
-    private ServiceUserMapped serviceUserMapped;
+    ResourceResolverFactory resourceResolverFactory;
 
     private static final Logger LOG = LoggerFactory.getLogger(ValidationModelRetrieverImpl.class);
 
+
     /*
      * (non-Javadoc)
      * 
      * @see org.apache.sling.validation.impl.ValidationModelRetriever#getModels(java.lang.String, java.lang.String)
      */
-    @Override
-    public @CheckForNull ValidationModel getModel(@Nonnull String resourceType, String resourcePath,
-            boolean considerResourceSuperTypeModels) {
-        try {
-            ResourceResolver resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
-            try {
-                return getModel(resourceType, resourcePath, considerResourceSuperTypeModels, resourceResolver);
-            } finally {
-                resourceResolver.close();
-            }
-        } catch (LoginException e) {
-            throw new IllegalStateException(
-                    "Could not retrieve models, because the administrative resource resolver could not be acquired", e);
-        }
-    }
-
     @CheckForNull
-    ValidationModel getModel(@Nonnull String resourceType, String resourcePath,
-            boolean considerResourceSuperTypeModels, @Nonnull ResourceResolver resourceResolver) {
+    public ValidationModel getModel(@Nonnull String resourceType, String resourcePath, boolean considerResourceSuperTypeModels) {
         // first get model for exactly the requested resource type
-        ValidationModel baseModel = getModel(resourceType, resourcePath, resourceResolver);
+        ValidationModel baseModel = getModel(resourceType, resourcePath);
         String currentResourceType = resourceType;
         if (considerResourceSuperTypeModels) {
             Collection<ValidationModel> modelsToMerge = new ArrayList<ValidationModel>();
-            while ((currentResourceType = resourceResolver.getParentResourceType(currentResourceType)) != null) {
-                ValidationModel modelToMerge = getModel(currentResourceType, resourcePath, resourceResolver);
-                if (modelToMerge != null) {
-                    if (baseModel == null) {
-                        baseModel = modelToMerge;
-                    } else {
-                        modelsToMerge.add(modelToMerge);
+            ResourceResolver resourceResolver = null;
+            try {
+                resourceResolver = resourceResolverFactory.getServiceResourceResolver(null);
+                while ((currentResourceType = resourceResolver.getParentResourceType(currentResourceType)) != null) {
+                    ValidationModel modelToMerge = getModel(currentResourceType, resourcePath);
+                    if (modelToMerge != null) {
+                        if (baseModel == null) {
+                            baseModel = modelToMerge;
+                        } else {
+                            modelsToMerge.add(modelToMerge);
+                        }
                     }
                 }
-            }
-            if (!modelsToMerge.isEmpty()) {
-                return new MergedValidationModel(baseModel, modelsToMerge.toArray(new ValidationModel[modelsToMerge
-                        .size()]));
+                if (!modelsToMerge.isEmpty()) {
+                    return new MergedValidationModel(baseModel, modelsToMerge.toArray(new ValidationModel[modelsToMerge
+                            .size()]));
+                }
+            } catch (LoginException e) {
+                throw new IllegalStateException("Could not get service resource resolver", e);
+            } finally {
+                if (resourceResolver != null) {
+                    resourceResolver.close();
+                }
             }
         }
         return baseModel;
     }
 
-    private @CheckForNull ValidationModel getModel(@Nonnull String resourceType, String resourcePath,
-            @Nonnull ResourceResolver resourceResolver) {
+    private @CheckForNull ValidationModel getModel(@Nonnull String resourceType, String resourcePath) {
         ValidationModel model = null;
         Trie<ValidationModel> modelsForResourceType = validationModelsCache.get(resourceType);
         if (modelsForResourceType == null) {
-            modelsForResourceType = fillTrieForResourceType(resourceType, resourceResolver);
+            modelsForResourceType = fillTrieForResourceType(resourceType);
         }
         model = modelsForResourceType.getElementForLongestMatchingKey(resourcePath).getValue();
         if (model == null && !modelsForResourceType.isEmpty()) {
@@ -140,8 +130,7 @@ public class ValidationModelRetrieverImp
         return model;
     }
 
-    private synchronized @Nonnull Trie<ValidationModel> fillTrieForResourceType(@Nonnull String resourceType,
-            @Nonnull ResourceResolver resourceResolver) {
+    private synchronized @Nonnull Trie<ValidationModel> fillTrieForResourceType(@Nonnull String resourceType) {
         Trie<ValidationModel> modelsForResourceType = validationModelsCache.get(resourceType);
         // use double-checked locking (http://en.wikipedia.org/wiki/Double-checked_locking)
         if (modelsForResourceType == null) {
@@ -152,7 +141,7 @@ public class ValidationModelRetrieverImp
             // fill trie with data from model providers (all models for the given resource type, independent of resource
             // path)
             for (ValidationModelProvider modelProvider : modelProviders) {
-                for (ValidationModel model : modelProvider.getModels(resourceType, validators, resourceResolver)) {
+                for (ValidationModel model : modelProvider.getModels(resourceType, validators)) {
                     for (String applicablePath : model.getApplicablePaths()) {
                         modelsForResourceType.insert(applicablePath, model);
                     }

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/ValidationServiceImpl.java Mon Feb 27 08:49:54 2017
@@ -36,6 +36,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
+import org.apache.sling.serviceusermapping.ServiceUserMapped;
 import org.apache.sling.validation.SlingValidationException;
 import org.apache.sling.validation.ValidationResult;
 import org.apache.sling.validation.ValidationService;
@@ -74,17 +75,19 @@ public class ValidationServiceImpl imple
     
     @Reference
     private ResourceResolverFactory rrf = null;
-    
+
+    @Reference
+    private ServiceUserMapped serviceUserMapped;
     
     @Activate
     public void activate(ValidationServiceConfiguration configuration) {
         this.configuration = configuration;
         ResourceResolver rr = null;
         try {
-            rr = rrf.getAdministrativeResourceResolver(null);
+            rr = rrf.getServiceResourceResolver(null);
             searchPaths = Arrays.asList(rr.getSearchPath());
         } catch (LoginException e) {
-            throw new IllegalStateException("Could not login as administrator to figure out search paths", e);
+            throw new IllegalStateException("Could not get service resource resolver to figure out search paths", e);
         } finally {
             if (rr != null) {
                 rr.close();

Modified: sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImpl.java?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImpl.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/main/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImpl.java Mon Feb 27 08:49:54 2017
@@ -85,7 +85,7 @@ public class ResourceValidationModelProv
     public static final String SEVERITY = "severity";
 
     @Reference
-    private ResourceResolverFactory rrf = null;
+    ResourceResolverFactory rrf = null;
 
     @Reference
     private ValidationModelCache cache;
@@ -107,7 +107,7 @@ public class ResourceValidationModelProv
         threadPool = tpm.get("Validation Service Thread Pool");
         ResourceResolver rr = null;
         try {
-            rr = rrf.getAdministrativeResourceResolver(null);
+            rr = rrf.getServiceResourceResolver(null);
             StringBuilder sb = new StringBuilder("(");
             String[] searchPaths = rr.getSearchPath();
             if (searchPaths.length > 1) {
@@ -171,43 +171,53 @@ public class ResourceValidationModelProv
      */
     @Override
     @Nonnull
-    public Collection<ValidationModel> getModels(@Nonnull String relativeResourceType, @Nonnull Map<String, Validator<?>> validatorsMap, @Nonnull ResourceResolver resourceResolver) {
+    public Collection<ValidationModel> getModels(@Nonnull String relativeResourceType, @Nonnull Map<String, Validator<?>> validatorsMap) {
         ValidationModelImpl vm;
         Collection<ValidationModel> validationModels = new ArrayList<ValidationModel>();
-        String[] searchPaths = resourceResolver.getSearchPath();
-        for (String searchPath : searchPaths) {
-            final String queryString = String.format(MODEL_XPATH_QUERY, searchPath, relativeResourceType);
-            Iterator<Resource> models = resourceResolver.findResources(queryString, "xpath");
-            while (models.hasNext()) {
-                Resource model = models.next();
-                LOG.debug("Found validation model resource {}.", model.getPath());
-                String jcrPath = model.getPath();
-                try {
-                    ValueMap validationModelProperties = model.adaptTo(ValueMap.class);
-                    String[] applicablePaths = PropertiesUtil.toStringArray(validationModelProperties.get(ResourceValidationModelProviderImpl.APPLICABLE_PATHS, String[].class));
-                    Resource r = model.getChild(ResourceValidationModelProviderImpl.PROPERTIES);
-                    List<ResourceProperty> resourceProperties = buildProperties(validatorsMap,r);
-                    List<ChildResource> children = buildChildren(model, model, validatorsMap);
-                    if (resourceProperties.isEmpty() && children.isEmpty()) {
-                        throw new IllegalArgumentException("Neither children nor properties set.");
-                    } else {
-                        vm = new ValidationModelImpl(resourceProperties, relativeResourceType,
-                                applicablePaths, children);
-                        validationModels.add(vm);
+        ResourceResolver resourceResolver = null;
+        try {
+            resourceResolver = rrf.getServiceResourceResolver(null);
+            String[] searchPaths = resourceResolver.getSearchPath();
+            for (String searchPath : searchPaths) {
+                final String queryString = String.format(MODEL_XPATH_QUERY, searchPath, relativeResourceType);
+                Iterator<Resource> models = resourceResolver.findResources(queryString, "xpath");
+                while (models.hasNext()) {
+                    Resource model = models.next();
+                    LOG.debug("Found validation model resource {}.", model.getPath());
+                    String jcrPath = model.getPath();
+                    try {
+                        ValueMap validationModelProperties = model.adaptTo(ValueMap.class);
+                        String[] applicablePaths = PropertiesUtil.toStringArray(validationModelProperties.get(ResourceValidationModelProviderImpl.APPLICABLE_PATHS, String[].class));
+                        Resource r = model.getChild(ResourceValidationModelProviderImpl.PROPERTIES);
+                        List<ResourceProperty> resourceProperties = buildProperties(validatorsMap,r);
+                        List<ChildResource> children = buildChildren(model, model, validatorsMap);
+                        if (resourceProperties.isEmpty() && children.isEmpty()) {
+                            throw new IllegalArgumentException("Neither children nor properties set.");
+                        } else {
+                            vm = new ValidationModelImpl(resourceProperties, relativeResourceType,
+                                    applicablePaths, children);
+                            validationModels.add(vm);
+                        }
+                    } catch (IllegalArgumentException e) {
+                        throw new IllegalStateException("Found invalid validation model in '" + jcrPath + "': "
+                                + e.getMessage(), e);
                     }
-                } catch (IllegalArgumentException e) {
-                    throw new IllegalStateException("Found invalid validation model in '" + jcrPath + "': "
-                            + e.getMessage(), e);
+                }
+                if (!validationModels.isEmpty()) {
+                    // do not continue to search in other search paths if some results were already found!
+                    // earlier search paths overlay lower search paths (/apps wins over /libs)
+                    // the applicable content paths do not matter here!
+                    break;
                 }
             }
-            if (!validationModels.isEmpty()) {
-                // do not continue to search in other search paths if some results were already found!
-                // earlier search paths overlay lower search paths (/apps wins over /libs)
-                // the applicable content paths do not matter here!
-                break;
+            return validationModels;
+        } catch (LoginException e) {
+            throw new IllegalStateException("Could not get service resource resolver", e);
+        } finally {
+            if (resourceResolver != null) {
+                resourceResolver.close();
             }
         }
-        return validationModels;
     }
     
     /**

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/it/tests/ValidationTestSupport.java Mon Feb 27 08:49:54 2017
@@ -67,11 +67,6 @@ public class ValidationTestSupport exten
             testBundle("bundle.filename"),
             mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.validation.api").versionAsInProject(),
             mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.validation.test-services").versionAsInProject(),
-            // TODO remove whitelist configuration once loginAdministrative is removed
-            factoryConfiguration("org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment")
-                .put("whitelist.bundles", new String[]{"org.apache.sling.validation.core"})
-                .put("whitelist.name", "sling-validation")
-                .asOption(),
             factoryConfiguration("org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended")
                 .put("user.mapping", new String[]{
                     "org.apache.sling.validation.core=sling-readall",

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/ValidationModelRetrieverImplTest.java Mon Feb 27 08:49:54 2017
@@ -29,7 +29,9 @@ import javax.annotation.Nonnull;
 
 import org.apache.commons.collections.MultiHashMap;
 import org.apache.commons.collections.MultiMap;
+import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.validation.impl.model.ResourcePropertyBuilder;
 import org.apache.sling.validation.impl.model.ValidationModelBuilder;
 import org.apache.sling.validation.impl.util.examplevalidators.DateValidator;
@@ -60,6 +62,8 @@ public class ValidationModelRetrieverImp
     
     @Mock
     private ResourceResolver resourceResolver;
+    @Mock
+    private ResourceResolverFactory resourceResolverFactory;
 
     /**
      * Test model provider which only provides models for all resource types in map applicablePathPerResourceType with their according applicablePath!
@@ -71,7 +75,7 @@ public class ValidationModelRetrieverImp
 
         @Override
         public @Nonnull Collection<ValidationModel> getModels(@Nonnull String relativeResourceType,
-                @Nonnull Map<String, Validator<?>> validatorsMap, @Nonnull ResourceResolver resourceResolver) {
+                @Nonnull Map<String, Validator<?>> validatorsMap) {
             // make sure the date validator is passed along
             Assert.assertThat(validatorsMap,
                     Matchers.<String, Validator<?>> hasEntry(DateValidator.class.getName(), dateValidator));
@@ -117,7 +121,7 @@ public class ValidationModelRetrieverImp
     }
 
     @Before
-    public void setup() {
+    public void setup() throws LoginException {
         dateValidator = new DateValidator();
         applicablePathPerResourceType = new MultiHashMap();
         validationModelRetriever = new ValidationModelRetrieverImpl();
@@ -127,6 +131,8 @@ public class ValidationModelRetrieverImp
         properties.put(Constants.SERVICE_ID, 1L);
         validationModelRetriever.addModelProvider(modelProvider, properties);
         validationModelRetriever.addValidator(dateValidator);
+        validationModelRetriever.resourceResolverFactory = resourceResolverFactory;
+        Mockito.when(resourceResolverFactory.getServiceResourceResolver(Mockito.anyObject())).thenReturn(resourceResolver);
     }
 
     @Test
@@ -136,7 +142,7 @@ public class ValidationModelRetrieverImp
         applicablePathPerResourceType.put("test/type", "/content/site1/subnode");
 
         ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1/subnode/test/somepage",
-                false, resourceResolver);
+                false);
         Assert.assertNotNull(model);
         Assert.assertThat(Arrays.asList(model.getApplicablePaths()), Matchers.contains("/content/site1/subnode/test"));
     }
@@ -147,7 +153,7 @@ public class ValidationModelRetrieverImp
         applicablePathPerResourceType.put("test/type", null);
         applicablePathPerResourceType.put("test/type", "/content/site1/subnode");
 
-        ValidationModel model = validationModelRetriever.getModel("test/type", null, false, resourceResolver);
+        ValidationModel model = validationModelRetriever.getModel("test/type", null, false);
         Assert.assertNotNull(model);
         Assert.assertThat(Arrays.asList(model.getApplicablePaths()), Matchers.contains(""));
     }
@@ -156,17 +162,17 @@ public class ValidationModelRetrieverImp
     public void testGetCachedModel() {
         applicablePathPerResourceType.put("test/type", "/content/site1");
         // call two times, the second time the counter must be the same (because provider is not called)
-        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", false, resourceResolver);
+        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", false);
         Assert.assertNotNull(model);
         Assert.assertEquals(1, modelProvider.counter);
-        model = validationModelRetriever.getModel("test/type", "/content/site1", false, resourceResolver);
+        model = validationModelRetriever.getModel("test/type", "/content/site1", false);
         Assert.assertNotNull(model);
         Assert.assertEquals(1, modelProvider.counter);
 
-        model = validationModelRetriever.getModel("invalid/type", "/content/site1", false, resourceResolver);
+        model = validationModelRetriever.getModel("invalid/type", "/content/site1", false);
         Assert.assertNull(model);
         Assert.assertEquals(2, modelProvider.counter);
-        model = validationModelRetriever.getModel("invalid/type", "/content/site1", false, resourceResolver);
+        model = validationModelRetriever.getModel("invalid/type", "/content/site1", false);
         Assert.assertNull(model);
         Assert.assertEquals(2, modelProvider.counter);
     }
@@ -174,11 +180,11 @@ public class ValidationModelRetrieverImp
     @Test
     public void testGetCachedInvalidation() {
         applicablePathPerResourceType.put("test/type", "/content/site1");
-        validationModelRetriever.getModel("test/type", "/content/site1", false, resourceResolver);
+        validationModelRetriever.getModel("test/type", "/content/site1", false);
         Assert.assertEquals(1, modelProvider.counter);
         validationModelRetriever.handleEvent(new Event(ValidationModelRetrieverImpl.CACHE_INVALIDATION_EVENT_TOPIC, (Dictionary<String, ?>) null));
         // after cache invalidation the provider is called again
-        validationModelRetriever.getModel("test/type", "/content/site1", false, resourceResolver);
+        validationModelRetriever.getModel("test/type", "/content/site1", false);
         Assert.assertEquals(2, modelProvider.counter);
     }
 
@@ -186,13 +192,13 @@ public class ValidationModelRetrieverImp
     public void testGetModelWithResourceInheritance() {
         // in case no super type is known, just return model
         applicablePathPerResourceType.put("test/type", "/content/site1");
-        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", true, resourceResolver);
+        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", true);
         Assert.assertNotNull(model);
         Assert.assertThat(model.getResourceProperties(), Matchers.contains(new ResourcePropertyNameMatcher("test/type")));
         // in case there is one super type make sure the merged model is returned!
         Mockito.when(resourceResolver.getParentResourceType("test/type")).thenReturn("test/supertype");
         applicablePathPerResourceType.put("test/supertype", "/content/site1");
-        model = validationModelRetriever.getModel("test/type", "/content/site1", true, resourceResolver);
+        model = validationModelRetriever.getModel("test/type", "/content/site1", true);
         Assert.assertNotNull(model);
         Assert.assertThat(model.getResourceProperties(), Matchers.containsInAnyOrder(new ResourcePropertyNameMatcher("test/type"), new ResourcePropertyNameMatcher("test/supertype")));
     }
@@ -200,20 +206,20 @@ public class ValidationModelRetrieverImp
     @Test
     public void testGetModelWithResourceInheritanceAndNoSuitableBaseModelFound() {
         // no model found for base type and no resource super type set
-        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", true, resourceResolver);
+        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", true);
         Assert.assertNull("Found model although no model has been specified", model);
         
         // set super super type
         Mockito.when(resourceResolver.getParentResourceType("test/type")).thenReturn("test/supertype");
         // no model found at all (neither base nor super type)
-        model = validationModelRetriever.getModel("test/type", "/content/site1", true, resourceResolver);
+        model = validationModelRetriever.getModel("test/type", "/content/site1", true);
         Assert.assertNull("Found model although no model has been specified (neither in base nor in super type)", model);
         
         validationModelRetriever.validationModelsCache.clear();
         
         // only supertype has model being set
         applicablePathPerResourceType.put("test/supertype", "/content/site1");
-        model = validationModelRetriever.getModel("test/type", "/content/site1", true, resourceResolver);
+        model = validationModelRetriever.getModel("test/type", "/content/site1", true);
         Assert.assertNotNull(model);
         Assert.assertThat(model.getResourceProperties(), Matchers.contains(new ResourcePropertyNameMatcher("test/supertype")));
     }
@@ -225,7 +231,7 @@ public class ValidationModelRetrieverImp
         Mockito.when(resourceResolver.getParentResourceType("test/supertype")).thenReturn("test/supersupertype");
         
         // only model found for base type
-        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", true, resourceResolver);
+        ValidationModel model = validationModelRetriever.getModel("test/type", "/content/site1", true);
         Assert.assertNotNull(model);
         Assert.assertThat(model.getResourceProperties(), Matchers.contains(new ResourcePropertyNameMatcher("test/type")));
     }

Modified: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java?rev=1784509&r1=1784508&r2=1784509&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java (original)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/resourcemodel/ResourceValidationModelProviderImplTest.java Mon Feb 27 08:49:54 2017
@@ -39,6 +39,7 @@ import org.apache.sling.api.resource.Mod
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.jcr.resource.JcrResourceConstants;
 import org.apache.sling.testing.mock.jcr.MockJcr;
@@ -62,7 +63,14 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
 
+@RunWith(MockitoJUnitRunner.class)
 public class ResourceValidationModelProviderImplTest {
 
     private final static class PrefixAndResourceType {
@@ -119,6 +127,8 @@ public class ResourceValidationModelProv
     private static Map<String, Object> primaryTypeUnstructuredMap;
     private ResourceValidationModelProviderImpl modelProvider;
     private ResourceResolver rr;
+    @Mock
+    private ResourceResolverFactory resourceResolverFactory;
     private MockQueryResultHandler prefixBasedResultHandler;
     private Map<PrefixAndResourceType, List<Node>> validatorModelNodesPerPrefixAndResourceType;
     private Map<String, Validator<?>> validatorMap;
@@ -181,6 +191,13 @@ public class ResourceValidationModelProv
             }
         };
         rr = context.resourceResolver();
+        modelProvider.rrf = resourceResolverFactory;
+        // create a wrapper resource resolver, which cannot be closed (as the SlingContext will take care of that)
+        ResourceResolver nonClosableResourceResolverWrapper = Mockito.spy(rr);
+        // intercept all close calls
+        Mockito.doNothing().when(nonClosableResourceResolverWrapper).close();
+        // always use the context's resource resolver (because we never commit)
+        Mockito.when(resourceResolverFactory.getServiceResourceResolver(Mockito.anyObject())).thenReturn(nonClosableResourceResolverWrapper);
         MockJcr.addQueryResultHandler(rr.adaptTo(Session.class), prefixBasedResultHandler);
 
         validatorModelNodesPerPrefixAndResourceType = new HashMap<PrefixAndResourceType, List<Node>>();
@@ -214,7 +231,7 @@ public class ResourceValidationModelProv
         createValidationModelResource(rr, libsValidatorsRoot.getPath(), "testValidationModel2", model2);
 
         // check that both models are returned
-        Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap, rr);
+        Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap);
         Assert.assertThat(models, Matchers.containsInAnyOrder(model1, model2));
     }
 
@@ -230,7 +247,7 @@ public class ResourceValidationModelProv
             createValidationModelResource(rr, contentValidatorsRoot.getPath(), "testValidationModel1", model1);
 
             // check that no model is found
-            Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap, rr);
+            Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap);
             Assert.assertThat("Model was placed outside resource resolver search path but still found", models, Matchers.empty());
         } finally {
             rr.delete(contentValidatorsRoot);
@@ -252,7 +269,7 @@ public class ResourceValidationModelProv
         createValidationModelResource(rr, libsValidatorsRoot.getPath(), "testValidationModel1", model1);
 
         // compare both models
-        Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap, rr);
+        Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap);
         Assert.assertThat(models, Matchers.contains(model1));
     }
 
@@ -268,7 +285,7 @@ public class ResourceValidationModelProv
         createValidationModelResource(rr, appsValidatorsRoot.getPath(), "testValidationModel1", model2);
 
         // only the apps model should be returned
-        Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap, rr);
+        Collection<ValidationModel> models = modelProvider.getModels("sling/validation/test", validatorMap);
         Assert.assertThat(models, Matchers.contains(model2));
     }
 
@@ -280,7 +297,7 @@ public class ResourceValidationModelProv
 
         // clear validator map to make the referenced validator unknown
         validatorMap.clear();
-        modelProvider.getModels("sling/validation/test", validatorMap, rr);
+        modelProvider.getModels("sling/validation/test", validatorMap);
     }
     
     @Test(expected = IllegalStateException.class)
@@ -292,7 +309,7 @@ public class ResourceValidationModelProv
         
         createValidationModelResource(rr, libsValidatorsRoot.getPath(), "testValidationModel1", model1);
 
-        modelProvider.getModels("sling/validation/test", validatorMap, rr);
+        modelProvider.getModels("sling/validation/test", validatorMap);
     }
 
     private Resource createValidationModelResource(ResourceResolver rr, String root, String name, ValidationModel model)