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


Reply via email to