Author: tommaso
Date: Tue Dec 16 16:48:14 2014
New Revision: 1646005
URL: http://svn.apache.org/r1646005
Log:
SLING-4252 - added config factory for repository importer
Added:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
(with props)
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterTest.java
(with props)
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java?rev=1646005&r1=1646004&r2=1646005&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/QueueDistributionAgentFactory.java
Tue Dec 16 16:48:14 2014
@@ -148,8 +148,6 @@ public class QueueDistributionAgentFacto
String serviceName =
PropertiesUtil.toString(config.get(SERVICE_NAME), null);
-
-
try {
DistributionQueueProvider queueProvider = new
JobHandlingDistributionQueueProvider(agentName, jobManager, savedContext);
DistributionQueueDispatchingStrategy dispatchingStrategy =
new SingleQueueDispatchingStrategy();
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java?rev=1646005&r1=1646004&r2=1646005&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
Tue Dec 16 16:48:14 2014
@@ -378,7 +378,6 @@ public class SimpleDistributionAgent imp
authenticationInfo.put(ResourceResolverFactory.SUBSERVICE,
subServiceName);
resourceResolver =
resourceResolverFactory.getServiceResourceResolver(authenticationInfo);
-
return resourceResolver;
}
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java?rev=1646005&r1=1646004&r2=1646005&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporter.java
Tue Dec 16 16:48:14 2014
@@ -46,20 +46,12 @@ public class LocalDistributionPackageImp
private final DistributionPackageBuilder packageBuilder;
- private final DistributionEventFactory distributionEventFactory;
-
-
- public LocalDistributionPackageImporter(DistributionPackageBuilder
packageBuilder,
- DistributionEventFactory
distributionEventFactory) {
+ public LocalDistributionPackageImporter(DistributionPackageBuilder
packageBuilder) {
if (packageBuilder == null) {
throw new IllegalArgumentException("A package builder is
required");
}
- if (distributionEventFactory == null) {
- throw new IllegalArgumentException("An event factory is required");
- }
- this.distributionEventFactory = distributionEventFactory;
this.packageBuilder = packageBuilder;
}
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java?rev=1646005&r1=1646004&r2=1646005&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterFactory.java
Tue Dec 16 16:48:14 2014
@@ -59,18 +59,13 @@ public class LocalDistributionPackageImp
@Property(name = "packageBuilder.target")
@Reference(name = "packageBuilder")
- DistributionPackageBuilder packageBuilder;
-
- @Reference
- DistributionEventFactory distributionEventFactory;
-
+ private DistributionPackageBuilder packageBuilder;
private DistributionPackageImporter importer;
@Activate
- public void activate(Map<String, Object> config) {
-
- importer = new LocalDistributionPackageImporter(packageBuilder,
distributionEventFactory);
+ public void activate() {
+ importer = new LocalDistributionPackageImporter(packageBuilder);
}
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java?rev=1646005&r1=1646004&r2=1646005&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RemoteDistributionPackageImporterFactory.java
Tue Dec 16 16:48:14 2014
@@ -80,15 +80,11 @@ public class RemoteDistributionPackageIm
)
public static final String ENDPOINTS_STRATEGY = "endpoints.strategy";
-
@Property(name = "transportSecretProvider.target")
@Reference(name = "transportSecretProvider")
- DistributionTransportSecretProvider distributionTransportSecretProvider;
- private DistributionPackageImporter importer;
-
- @Reference
- private DistributionComponentManager componentManager;
+ private DistributionTransportSecretProvider
distributionTransportSecretProvider;
+ private DistributionPackageImporter importer;
@Activate
protected void activate(Map<String, Object> config) {
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java?rev=1646005&r1=1646004&r2=1646005&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporter.java
Tue Dec 16 16:48:14 2014
@@ -18,25 +18,21 @@
*/
package org.apache.sling.distribution.packaging.impl.importer;
+import java.io.InputStream;
import javax.annotation.Nonnull;
import javax.jcr.Node;
import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
-import java.io.InputStream;
-import java.util.Dictionary;
-import java.util.Properties;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.Privilege;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.util.Text;
import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.distribution.event.DistributionEventType;
-import org.apache.sling.distribution.event.impl.DistributionEventFactory;
import org.apache.sling.distribution.packaging.DistributionPackage;
import
org.apache.sling.distribution.packaging.DistributionPackageImportException;
import org.apache.sling.distribution.packaging.DistributionPackageImporter;
-import
org.apache.sling.distribution.transport.DistributionTransportSecretProvider;
-import org.apache.sling.distribution.transport.impl.DistributionEndpoint;
import org.apache.sling.jcr.api.SlingRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,32 +43,30 @@ import org.slf4j.LoggerFactory;
*/
public class RepositoryDistributionPackageImporter implements
DistributionPackageImporter {
- static final String NAME = "repository";
-
- private static final String REPO_SCHEME = "repo";
-
private final Logger log = LoggerFactory.getLogger(getClass());
- private SlingRepository repository;
-
- private DistributionEventFactory distributionEventFactory;
-
- private DistributionTransportSecretProvider
distributionTransportSecretProvider;
-
- private String serviceName;
- private String path;
- private String privilege;
+ private final SlingRepository repository;
+ private final String serviceName;
+ private final String path;
+ private final String privilegeName;
+
+ public RepositoryDistributionPackageImporter(SlingRepository repository,
+ String serviceName, String
path,
+ String privilegeName) {
+ this.repository = repository;
+ this.serviceName = serviceName;
+ this.path = path;
+ this.privilegeName = privilegeName;
+ }
- public void deliverPackageToEndpoint(DistributionPackage
distributionPackage, DistributionEndpoint distributionEndpoint)
- throws Exception {
+ public void importPackage(@Nonnull ResourceResolver resourceResolver,
@Nonnull DistributionPackage distributionPackage) throws
DistributionPackageImportException {
Session session = null;
try {
- String path =
distributionEndpoint.getUri().toString().replace("repo:/", "");
session = authenticate();
int lastSlash = distributionPackage.getId().lastIndexOf('/');
String nodeName = Text.escape(lastSlash < 0 ?
distributionPackage.getId() : distributionPackage.getId().substring(lastSlash +
1));
- log.info("creating node {} in {}", distributionPackage.getId(),
nodeName);
+ log.debug("importing package {} in {}",
distributionPackage.getId(), nodeName);
if (session != null) {
Node addedNode = session.getNode(path).addNode(nodeName,
@@ -95,6 +89,8 @@ public class RepositoryDistributionPacka
} else {
throw new Exception("could not get a Session to deliver
package to the repository");
}
+ } catch (Exception e) {
+ throw new DistributionPackageImportException(e);
} finally {
if (session != null) {
session.logout();
@@ -102,24 +98,24 @@ public class RepositoryDistributionPacka
}
}
- public void importPackage(@Nonnull ResourceResolver resourceResolver,
@Nonnull DistributionPackage distributionPackage) throws
DistributionPackageImportException {
- // do nothing
- }
-
public DistributionPackage importStream(@Nonnull ResourceResolver
resourceResolver, @Nonnull InputStream stream) throws
DistributionPackageImportException {
throw new DistributionPackageImportException("not supported");
}
-
private Session authenticate() throws Exception {
Session session = repository.loginService(serviceName, null);
- if (!session.hasPermission(path, privilege)) {
- session.logout();
- throw new Exception("failed to access path " + path + " with
privilege " + privilege);
+ if (session != null) {
+ AccessControlManager accessControlManager =
session.getAccessControlManager();
+ Privilege privilege =
accessControlManager.privilegeFromName(privilegeName);
+
+ if (!accessControlManager.hasPrivileges(path, new
Privilege[]{privilege})) {
+ session.logout();
+ throw new Exception("failed to access path " + path + " with
privilege " + privilege);
+ }
}
- log.info("authenticated path {} with privilege {}", path, privilege);
+ log.debug("authenticated path {} with privilege {}", path,
privilegeName);
return session;
}
}
Added:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java?rev=1646005&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
(added)
+++
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
Tue Dec 16 16:48:14 2014
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.packaging.impl.importer;
+
+import java.io.InputStream;
+import java.util.Map;
+import javax.annotation.Nonnull;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.ConfigurationPolicy;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.commons.osgi.PropertiesUtil;
+import org.apache.sling.distribution.component.impl.DistributionComponentUtils;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+import
org.apache.sling.distribution.packaging.DistributionPackageImportException;
+import org.apache.sling.distribution.packaging.DistributionPackageImporter;
+import org.apache.sling.jcr.api.SlingRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Factory for {@link
org.apache.sling.distribution.packaging.impl.importer.RepositoryDistributionPackageImporter}s
+ */
+@Component(label = "Sling Distribution - Repository Package Importer Factory",
+ metatype = true,
+ configurationFactory = true,
+ specVersion = "1.1",
+ policy = ConfigurationPolicy.REQUIRE)
+@Service(DistributionPackageImporter.class)
+public class RepositoryDistributionPackageImporterFactory implements
DistributionPackageImporter {
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ /**
+ * name of this component.
+ */
+ @Property
+ private static final String NAME = DistributionComponentUtils.PN_NAME;
+
+ @Property(name = "service.name")
+ private static String SERVICE_NAME;
+
+ @Property(name = "path")
+ private static String PATH;
+
+ @Property(name = "privilege.name")
+ private static String PRIVILEGE_NAME;
+
+ @Reference
+ private SlingRepository repository;
+
+ private RepositoryDistributionPackageImporter importer;
+
+ @Activate
+ protected void activate(Map<String, Object> config) {
+
+ importer = new RepositoryDistributionPackageImporter(repository,
+ PropertiesUtil.toString(config.get(SERVICE_NAME), "admin"),
+ PropertiesUtil.toString(config.get(PATH),
"/var/distribution/import"),
+ PropertiesUtil.toString(config.get(PRIVILEGE_NAME),
"jcr:read"));
+ }
+
+ public void importPackage(@Nonnull ResourceResolver resourceResolver,
@Nonnull DistributionPackage distributionPackage) throws
DistributionPackageImportException {
+ importer.importPackage(resourceResolver, distributionPackage);
+
+ }
+
+ public DistributionPackage importStream(@Nonnull ResourceResolver
resourceResolver, @Nonnull InputStream stream) throws
DistributionPackageImportException {
+ return importer.importStream(resourceResolver, stream);
+ }
+}
Propchange:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java?rev=1646005&r1=1646004&r2=1646005&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
(original)
+++
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/LocalDistributionPackageImporterTest.java
Tue Dec 16 16:48:14 2014
@@ -34,8 +34,7 @@ public class LocalDistributionPackageImp
@Test
public void testDummyImport() throws Exception {
DistributionPackageBuilder packageBuilder =
mock(DistributionPackageBuilder.class);
- DistributionEventFactory eventFactory =
mock(DistributionEventFactory.class);
- LocalDistributionPackageImporter localdistributionPackageImporter =
new LocalDistributionPackageImporter(packageBuilder, eventFactory);
+ LocalDistributionPackageImporter localdistributionPackageImporter =
new LocalDistributionPackageImporter(packageBuilder);
ResourceResolver resourceResolver = mock(ResourceResolver.class);
DistributionPackage distributionPackage =
mock(DistributionPackage.class);
localdistributionPackageImporter.importPackage(resourceResolver,
distributionPackage);
Added:
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterTest.java?rev=1646005&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterTest.java
(added)
+++
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterTest.java
Tue Dec 16 16:48:14 2014
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.packaging.impl.importer;
+
+import java.io.InputStream;
+import javax.jcr.Node;
+import javax.jcr.Session;
+import javax.jcr.ValueFactory;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.Privilege;
+
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.distribution.packaging.DistributionPackage;
+import
org.apache.sling.distribution.packaging.DistributionPackageImportException;
+import org.apache.sling.jcr.api.SlingRepository;
+import org.junit.Test;
+
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * Testcase for {@link
org.apache.sling.distribution.packaging.impl.importer.RepositoryDistributionPackageImporter}
+ */
+public class RepositoryDistributionPackageImporterTest {
+
+ @Test
+ public void testImportPackageWithUnauthorizedServiceUser() throws
Exception {
+ try {
+ SlingRepository repository = mock(SlingRepository.class);
+ String serviceName = "admin";
+ String path = "/var/something";
+ String privilegeName = "jcr:read";
+ RepositoryDistributionPackageImporter
repositoryDistributionPackageImporter =
+ new RepositoryDistributionPackageImporter(repository,
serviceName, path, privilegeName);
+ ResourceResolver resourceResolver = mock(ResourceResolver.class);
+ DistributionPackage distributionPackage =
mock(DistributionPackage.class);
+ when(distributionPackage.getId()).thenReturn("someid");
+
repositoryDistributionPackageImporter.importPackage(resourceResolver,
distributionPackage);
+ fail("import cannot succeed if service is user is unable to obtain
a session");
+ } catch (DistributionPackageImportException e) {
+ // expected to fail
+ }
+ }
+
+ @Test
+ public void testImportPackageWithoutRequiredPrivileges() throws Exception {
+ try {
+ SlingRepository repository = mock(SlingRepository.class);
+ String serviceName = "admin";
+ Session session = mock(Session.class);
+ AccessControlManager acm = mock(AccessControlManager.class);
+ String privilegeName = "jcr:read";
+ Privilege privilege = mock(Privilege.class);
+ when(acm.privilegeFromName(privilegeName)).thenReturn(privilege);
+ when(session.getAccessControlManager()).thenReturn(acm);
+ when(repository.loginService(serviceName,
null)).thenReturn(session);
+ String path = "/var/something";
+ RepositoryDistributionPackageImporter
repositoryDistributionPackageImporter =
+ new RepositoryDistributionPackageImporter(repository,
serviceName, path, privilegeName);
+ ResourceResolver resourceResolver = mock(ResourceResolver.class);
+ DistributionPackage distributionPackage =
mock(DistributionPackage.class);
+ when(distributionPackage.getId()).thenReturn("someid");
+
repositoryDistributionPackageImporter.importPackage(resourceResolver,
distributionPackage);
+ fail("import cannot succeed if privileges are not sufficient");
+ } catch (DistributionPackageImportException e) {
+ // expected to fail
+ }
+ }
+
+ @Test
+ public void testImportPackageWithRequiredPrivileges() throws Exception {
+ SlingRepository repository = mock(SlingRepository.class);
+ String serviceName = "admin";
+ Session session = mock(Session.class);
+ ValueFactory vf = mock(ValueFactory.class);
+ when(session.getValueFactory()).thenReturn(vf);
+ AccessControlManager acm = mock(AccessControlManager.class);
+ String privilegeName = "jcr:read";
+ Privilege privilege = mock(Privilege.class);
+ String path = "/var/something";
+ Node rootNode = mock(Node.class);
+ Node createdNode = mock(Node.class);
+ Node jcrContentNode = mock(Node.class);
+ when(createdNode.addNode(JcrConstants.JCR_CONTENT,
NodeType.NT_RESOURCE)).thenReturn(jcrContentNode);
+ when(rootNode.addNode(any(String.class),
any(String.class))).thenReturn(createdNode);
+ when(session.getNode(path)).thenReturn(rootNode);
+ when(acm.hasPrivileges(path, new
Privilege[]{privilege})).thenReturn(true);
+ when(acm.privilegeFromName(privilegeName)).thenReturn(privilege);
+ when(session.getAccessControlManager()).thenReturn(acm);
+ when(repository.loginService(serviceName, null)).thenReturn(session);
+ RepositoryDistributionPackageImporter
repositoryDistributionPackageImporter =
+ new RepositoryDistributionPackageImporter(repository,
serviceName, path, privilegeName);
+ ResourceResolver resourceResolver = mock(ResourceResolver.class);
+ DistributionPackage distributionPackage =
mock(DistributionPackage.class);
+ when(distributionPackage.getId()).thenReturn("someid");
+
+ InputStream stream = mock(InputStream.class);
+ when(distributionPackage.createInputStream()).thenReturn(stream);
+ repositoryDistributionPackageImporter.importPackage(resourceResolver,
distributionPackage);
+ }
+}
Propchange:
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/packaging/impl/importer/RepositoryDistributionPackageImporterTest.java
------------------------------------------------------------------------------
svn:eol-style = native