| /* |
| * 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.serialization.impl.avro; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.io.InputStream; |
| import java.util.List; |
| import java.util.NavigableMap; |
| import java.util.TreeMap; |
| |
| import org.apache.sling.api.resource.Resource; |
| import org.apache.sling.api.resource.ResourceResolver; |
| import org.apache.sling.distribution.DistributionRequest; |
| import org.apache.sling.distribution.DistributionRequestType; |
| import org.apache.sling.distribution.SimpleDistributionRequest; |
| import org.apache.sling.distribution.packaging.DistributionPackage; |
| import org.apache.sling.distribution.packaging.DistributionPackageBuilder; |
| import org.apache.sling.distribution.packaging.impl.FileDistributionPackageBuilder; |
| import org.apache.sling.distribution.serialization.DistributionContentSerializer; |
| import org.apache.sling.distribution.serialization.DistributionExportFilter; |
| import org.apache.sling.distribution.serialization.DistributionExportOptions; |
| import org.apache.sling.testing.resourceresolver.MockHelper; |
| import org.apache.sling.testing.resourceresolver.MockResourceResolverFactory; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| /** |
| * Tests for {@link AvroContentSerializer} |
| */ |
| public class AvroContentSerializerTest { |
| |
| private ResourceResolver resourceResolver; |
| |
| @Before |
| public void setUp() throws Exception { |
| resourceResolver = new MockResourceResolverFactory().getResourceResolver(null); |
| MockHelper helper = MockHelper.create(resourceResolver).resource("/libs").p("prop", "value") |
| .resource("sub").p("sub", "hello") |
| .resource(".sameLevel") |
| .resource("/apps").p("foo", "baa"); |
| helper.commit(); |
| } |
| |
| @Test |
| public void testExtractDeep() throws Exception { |
| AvroContentSerializer avroContentSerializer = new AvroContentSerializer("avro"); |
| DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, true, "/libs"); |
| ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| NavigableMap<String, List<String>> nodeFilters = new TreeMap<String, List<String>>(); |
| NavigableMap<String, List<String>> propertyFilters = new TreeMap<String, List<String>>(); |
| try { |
| DistributionExportFilter filter = DistributionExportFilter.createFilter(request, nodeFilters, propertyFilters); |
| avroContentSerializer.exportToStream(resourceResolver, new DistributionExportOptions(request, filter), outputStream); |
| byte[] bytes = outputStream.toByteArray(); |
| assertNotNull(bytes); |
| assertTrue(bytes.length > 0); |
| } finally { |
| outputStream.close(); |
| } |
| } |
| |
| @Test |
| public void testExtractShallow() throws Exception { |
| AvroContentSerializer avroContentSerializer = new AvroContentSerializer("avro"); |
| DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/libs"); |
| ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| NavigableMap<String, List<String>> nodeFilters = new TreeMap<String, List<String>>(); |
| NavigableMap<String, List<String>> propertyFilters = new TreeMap<String, List<String>>(); |
| try { |
| DistributionExportFilter filter = DistributionExportFilter.createFilter(request, nodeFilters, propertyFilters); |
| avroContentSerializer.exportToStream(resourceResolver, new DistributionExportOptions(request, filter), outputStream); |
| byte[] bytes = outputStream.toByteArray(); |
| assertNotNull(bytes); |
| assertTrue(bytes.length > 0); |
| } finally { |
| outputStream.close(); |
| } |
| } |
| |
| @Test |
| public void testImport() throws Exception { |
| AvroContentSerializer avroContentSerializer = new AvroContentSerializer("avro"); |
| InputStream inputStream = getClass().getResourceAsStream("/avro/dp.avro"); |
| avroContentSerializer.importFromStream(resourceResolver, inputStream); |
| } |
| |
| @Test |
| public void testBuildAndInstallOnSingleDeepPath() throws Exception { |
| String type = "avro"; |
| DistributionContentSerializer contentSerializer = new AvroContentSerializer(type); |
| String tempFilesFolder = "target"; |
| String[] nodeFilters = new String[0]; |
| String[] propertyFilters = new String[0]; |
| DistributionPackageBuilder packageBuilder = new FileDistributionPackageBuilder(type, contentSerializer, |
| tempFilesFolder, null, nodeFilters, propertyFilters); |
| DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, true, "/libs"); |
| DistributionPackage distributionPackage = packageBuilder.createPackage(resourceResolver, request); |
| |
| Resource resource = resourceResolver.getResource("/libs/sub"); |
| resourceResolver.delete(resource); |
| resourceResolver.commit(); |
| |
| assertTrue(packageBuilder.installPackage(resourceResolver, distributionPackage)); |
| |
| assertNotNull(resourceResolver.getResource("/libs")); |
| assertNotNull(resourceResolver.getResource("/libs/sub")); |
| assertNotNull(resourceResolver.getResource("/libs/sameLevel")); |
| } |
| |
| @Test |
| public void testBuildAndInstallOnSingleShallowPath() throws Exception { |
| String type = "avro"; |
| DistributionContentSerializer contentSerializer = new AvroContentSerializer(type); |
| String tempFilesFolder = "target"; |
| String[] nodeFilters = new String[0]; |
| String[] propertyFilters = new String[0]; |
| DistributionPackageBuilder packageBuilder = new FileDistributionPackageBuilder(type, contentSerializer, |
| tempFilesFolder, null, nodeFilters, propertyFilters); |
| DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/libs/sub"); |
| DistributionPackage distributionPackage = packageBuilder.createPackage(resourceResolver, request); |
| |
| Resource resource = resourceResolver.getResource("/libs/sub"); |
| resourceResolver.delete(resource); |
| resourceResolver.commit(); |
| |
| assertTrue(packageBuilder.installPackage(resourceResolver, distributionPackage)); |
| |
| assertNotNull(resourceResolver.getResource("/libs")); |
| assertNotNull(resourceResolver.getResource("/libs/sub")); |
| assertNotNull(resourceResolver.getResource("/libs/sameLevel")); |
| } |
| |
| @Test |
| public void testBuildAndInstallOnMultipleShallowPaths() throws Exception { |
| String type = "avro"; |
| DistributionContentSerializer contentSerializer = new AvroContentSerializer(type); |
| String tempFilesFolder = "target"; |
| String[] nodeFilters = new String[0]; |
| String[] propertyFilters = new String[0]; |
| DistributionPackageBuilder packageBuilder = new FileDistributionPackageBuilder(type, contentSerializer, |
| tempFilesFolder, null, nodeFilters, propertyFilters); |
| DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/libs/sub", "/libs/sameLevel"); |
| DistributionPackage distributionPackage = packageBuilder.createPackage(resourceResolver, request); |
| |
| Resource resource = resourceResolver.getResource("/libs/sub"); |
| resourceResolver.delete(resource); |
| resource = resourceResolver.getResource("/libs/sameLevel"); |
| resourceResolver.delete(resource); |
| resourceResolver.commit(); |
| |
| assertTrue(packageBuilder.installPackage(resourceResolver, distributionPackage)); |
| |
| assertNotNull(resourceResolver.getResource("/libs")); |
| assertNotNull(resourceResolver.getResource("/libs/sub")); |
| assertNotNull(resourceResolver.getResource("/libs/sameLevel")); |
| } |
| } |