This is an automated email from the ASF dual-hosted git repository.
cschneider pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-journal.git
The following commit(s) were added to refs/heads/master by this push:
new 6c458d2 GRANITE-26607 - Add unit test for ContentPackageExtractor
6c458d2 is described below
commit 6c458d2fa193e92fe9169b1f2b3184a19d23ae85
Author: Christian Schneider <[email protected]>
AuthorDate: Mon Aug 5 11:28:22 2019 +0200
GRANITE-26607 - Add unit test for ContentPackageExtractor
---
.../impl/subscriber/ContentPackageExtractor.java | 2 +
.../subscriber/ContentPackageExtractorTest.java | 159 +++++++++++++++++++++
2 files changed, 161 insertions(+)
diff --git
a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/ContentPackageExtractor.java
b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/ContentPackageExtractor.java
index 571fae5..916431e 100644
---
a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/ContentPackageExtractor.java
+++
b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/ContentPackageExtractor.java
@@ -68,6 +68,8 @@ public class ContentPackageExtractor {
if (isContentPackage(path, node)) {
installPackage(path, node);
}
+ } else {
+ log.warn("Imported node does not exist. Skipping.", path);
}
} catch (RepositoryException e) {
log.warn("Error trying check if {} contains a content package
to extract.", path, e);
diff --git
a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/ContentPackageExtractorTest.java
b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/ContentPackageExtractorTest.java
new file mode 100644
index 0000000..0868cc8
--- /dev/null
+++
b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/ContentPackageExtractorTest.java
@@ -0,0 +1,159 @@
+/*
+ * 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.journal.impl.subscriber;
+
+import static java.util.Collections.singletonList;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
+
+import org.apache.jackrabbit.vault.fs.io.ImportOptions;
+import org.apache.jackrabbit.vault.packaging.JcrPackage;
+import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
+import org.apache.jackrabbit.vault.packaging.Packaging;
+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.testing.mock.osgi.MockOsgi;
+import org.apache.sling.testing.mock.sling.MockSling;
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.osgi.framework.BundleContext;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ContentPackageExtractorTest {
+
+ @Mock
+ private Packaging packaging;
+
+ @Mock
+ private JcrPackageManager packageManager;
+
+ @Mock
+ private JcrPackage pkg;
+
+ private ResourceResolver resourceResolver;
+
+ @Before
+ public void before() throws RepositoryException {
+ BundleContext context = MockOsgi.newBundleContext();
+ resourceResolver =
MockSling.newResourceResolver(ResourceResolverType.JCR_MOCK, context);
+ when(packaging.getPackageManager(Mockito.any(Session.class)))
+ .thenReturn(packageManager);
+ when(packageManager.open(Mockito.any(Node.class))).thenReturn(pkg);
+ }
+
+ @Test
+ public void testNotPackagePath() throws Exception {
+ Resource root = resourceResolver.getResource("/");
+ Resource node = createNode(root, "other", NodeType.NT_FILE);
+
+ ContentPackageExtractor extractor = new
ContentPackageExtractor(packaging, PackageHandling.Extract);
+ extractor.handle(resourceResolver, singletonList(node.getPath()));
+
+ verify(pkg, Mockito.never()).extract(Mockito.any(ImportOptions.class));
+ }
+
+ @Test
+ public void testNotFileNode() throws Exception {
+ Resource packages = createEtcPackages();
+ Resource node = createNode(packages, "mypackage",
NodeType.NT_UNSTRUCTURED);
+
+ ContentPackageExtractor extractor = new
ContentPackageExtractor(packaging, PackageHandling.Extract);
+ extractor.handle(resourceResolver, singletonList(node.getPath()));
+
+ verify(pkg, Mockito.never()).extract(Mockito.any(ImportOptions.class));
+ }
+
+
+ @Test
+ public void testNodeExtractNonExistantNode() throws Exception {
+ Resource packages = createEtcPackages();
+
+ ContentPackageExtractor extractor = new
ContentPackageExtractor(packaging, PackageHandling.Extract);
+
+ // Should log a warning but not any exception
+ extractor.handle(resourceResolver, singletonList(packages.getPath() +
"/invalid"));
+ }
+
+ @Test
+ public void testOff() throws Exception {
+ Resource node = createImportedPackage();
+
+ ContentPackageExtractor extractor = new
ContentPackageExtractor(packaging, PackageHandling.Off);
+ extractor.handle(resourceResolver, singletonList(node.getPath()));
+
+ verify(pkg, Mockito.never()).extract(Mockito.any(ImportOptions.class));
+ verify(pkg, Mockito.never()).install(Mockito.any(ImportOptions.class));
+ }
+
+ @Test
+ public void testExtract() throws Exception {
+ Resource node = createImportedPackage();
+
+ ContentPackageExtractor extractor = new
ContentPackageExtractor(packaging, PackageHandling.Extract);
+ extractor.handle(resourceResolver, singletonList(node.getPath()));
+
+ verify(pkg).extract(Mockito.any(ImportOptions.class));
+ }
+
+ @Test
+ public void testInstall() throws Exception {
+ Resource node = createImportedPackage();
+
+ ContentPackageExtractor extractor = new
ContentPackageExtractor(packaging, PackageHandling.Install);
+ extractor.handle(resourceResolver, singletonList(node.getPath()));
+
+ verify(pkg).install(Mockito.any(ImportOptions.class));
+ }
+
+
+ private Resource createImportedPackage() throws PersistenceException {
+ Resource packages = createEtcPackages();
+ Resource node1 = createNode(packages, "my_packages",
NodeType.NT_UNSTRUCTURED);
+ Resource node = createNode(node1, "test-1.zip", NodeType.NT_FILE);
+ return node;
+ }
+
+ private Resource createNode(Resource parent, String name, String nodeType)
throws PersistenceException {
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.put("jcr:primaryType", nodeType);
+ return resourceResolver.create(parent, name, props);
+ }
+
+ private Resource createEtcPackages() throws PersistenceException {
+ Map<String, Object> props = new HashMap<String, Object>();
+ Resource root = resourceResolver.getResource("/");
+ Resource etc = resourceResolver.create(root, "etc", props);
+ return resourceResolver.create(etc, "packages", props);
+ }
+
+}
\ No newline at end of file