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)