You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2021/02/26 16:46:35 UTC
[sling-org-apache-sling-feature-cpconverter] branch master updated:
SLING-10173 : Potential collision with tmp dir if run in parallel
This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git
The following commit(s) were added to refs/heads/master by this push:
new 0e97f05 SLING-10173 : Potential collision with tmp dir if run in parallel
0e97f05 is described below
commit 0e97f0583db86b5564c57500dcc3d97f3b269acb
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Fri Feb 26 17:45:39 2021 +0100
SLING-10173 : Potential collision with tmp dir if run in parallel
---
.../ContentPackage2FeatureModelConverter.java | 25 +++-
...ntentPackage2FeatureModelConverterLauncher.java | 159 ++++++++++++++-------
.../feature/cpconverter/cli/ShutDownHook.java | 98 -------------
.../handlers/AbstractContentPackageHandler.java | 5 +-
.../cpconverter/vltpkg/VaultPackageAssembler.java | 39 +++--
.../ContentPackage2FeatureModelConverterTest.java | 2 +-
.../vltpkg/VaultPackageAssemblerTest.java | 42 +++---
7 files changed, 174 insertions(+), 196 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index d9a3ef7..2485a7b 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -21,6 +21,7 @@ import static org.apache.sling.feature.cpconverter.vltpkg.VaultPackageUtils.dete
import static org.apache.sling.feature.cpconverter.vltpkg.VaultPackageUtils.getDependencies;
import java.io.File;
+import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -33,6 +34,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
+import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
import org.apache.jackrabbit.vault.packaging.CyclicDependencyException;
@@ -91,6 +93,8 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
private boolean dropContent = false;
+ private final File tmpDirectory;
+
public ContentPackage2FeatureModelConverter() {
this(false);
}
@@ -98,6 +102,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
public ContentPackage2FeatureModelConverter(boolean strictValidation) {
super(strictValidation);
this.recollectorVaultPackageScanner = new RecollectorVaultPackageScanner(this, this.packageManager, strictValidation, subContentPackages);
+ this.tmpDirectory = new File(new File ( System.getProperty("java.io.tmpdir") ), "cp2fm-converter_" + System.currentTimeMillis());
}
public @NotNull ContentPackage2FeatureModelConverter setEntryHandlersManager(@Nullable EntryHandlersManager handlersManager) {
@@ -156,6 +161,22 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
return this;
}
+ public File getTempDirectory() {
+ return this.tmpDirectory;
+ }
+
+ public void cleanup() {
+ if ( this.tmpDirectory.exists() ) {
+ logger.info( "Cleaning up tmp directory {}", this.tmpDirectory);
+
+ try {
+ FileUtils.deleteDirectory( this.tmpDirectory );
+ } catch (IOException e) {
+ logger.error( "Error Deleting {}", this.tmpDirectory );
+ }
+ }
+ }
+
public void convert(@NotNull File...contentPackages) throws Exception {
requireNonNull(contentPackages , "Null content-package(s) can not be converted.");
secondPass(firstPass(contentPackages));
@@ -201,7 +222,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
for (VaultPackage vaultPackage : orderedContentPackages) {
try {
emitter.startPackage(vaultPackage);
- mainPackageAssembler = VaultPackageAssembler.create(vaultPackage);
+ mainPackageAssembler = VaultPackageAssembler.create(this.getTempDirectory(), vaultPackage);
assemblers.add(mainPackageAssembler);
ArtifactId mvnPackageId = toArtifactId(vaultPackage);
@@ -283,7 +304,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
PackageId originalPackageId = vaultPackage.getId();
ArtifactId mvnPackageId = toArtifactId(vaultPackage);
- VaultPackageAssembler clonedPackage = VaultPackageAssembler.create(vaultPackage);
+ VaultPackageAssembler clonedPackage = VaultPackageAssembler.create(this.getTempDirectory(), vaultPackage);
// Please note: THIS IS A HACK to meet the new requirement without drastically change the original design
// temporary swap the main handler to collect stuff
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
index 94332af..34e7017 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
@@ -17,11 +17,15 @@
package org.apache.sling.feature.cpconverter.cli;
import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+import java.util.Formatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
+import org.apache.commons.io.FileUtils;
import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
import org.apache.sling.feature.cpconverter.accesscontrol.DefaultAclManager;
import org.apache.sling.feature.cpconverter.artifacts.DefaultArtifactsDeployer;
@@ -121,9 +125,7 @@ public final class ContentPackage2FeatureModelConverterLauncher implements Runna
//output the current tmp directory
logger.debug("Using tmp directory {}", System.getProperty("java.io.tmpdir"));
- // Add the Shutdown Hook to the Java virtual machine
- // in order to destroy all the allocated resources
- Runtime.getRuntime().addShutdownHook(new ShutDownHook(logger));
+ final long start = System.currentTimeMillis();
if (printVersion) {
printVersion(logger);
@@ -132,64 +134,119 @@ public final class ContentPackage2FeatureModelConverterLauncher implements Runna
logger.info(appName);
logger.info("");
+ boolean exitWithError = false;
+
try {
- DefaultFeaturesManager featuresManager = new DefaultFeaturesManager(mergeConfigurations,
- bundlesStartOrder,
- featureModelsOutputDirectory,
- artifactIdOverride,
- fmPrefix,
- properties);
- if (apiRegions != null)
- featuresManager.setAPIRegions(apiRegions);
-
- if (exportsToRegion != null)
- featuresManager.setExportToAPIRegion(exportsToRegion);
-
- Map<String, String> entryHandlerConfigsMap = new HashMap<>();
- if (entryHandlerConfigs != null) {
- for (String config : entryHandlerConfigs) {
- int idx = config.indexOf(':');
- if (idx != -1) {
- entryHandlerConfigsMap.put(config.substring(0, idx), config.substring(idx + 1));
+ try {
+ DefaultFeaturesManager featuresManager = new DefaultFeaturesManager(mergeConfigurations,
+ bundlesStartOrder,
+ featureModelsOutputDirectory,
+ artifactIdOverride,
+ fmPrefix,
+ properties);
+ if (apiRegions != null)
+ featuresManager.setAPIRegions(apiRegions);
+
+ if (exportsToRegion != null)
+ featuresManager.setExportToAPIRegion(exportsToRegion);
+
+ Map<String, String> entryHandlerConfigsMap = new HashMap<>();
+ if (entryHandlerConfigs != null) {
+ for (String config : entryHandlerConfigs) {
+ int idx = config.indexOf(':');
+ if (idx != -1) {
+ entryHandlerConfigsMap.put(config.substring(0, idx), config.substring(idx + 1));
+ }
}
}
- }
- ContentPackage2FeatureModelConverter converter = new ContentPackage2FeatureModelConverter(strictValidation)
- .setFeaturesManager(featuresManager)
- .setBundlesDeployer(new DefaultArtifactsDeployer(artifactsOutputDirectory))
- .setEntryHandlersManager(new DefaultEntryHandlersManager(entryHandlerConfigsMap))
- .setAclManager(new DefaultAclManager(enforcePrincipalBasedSupportedPath))
- .setEmitter(DefaultPackagesEventsEmitter.open(featureModelsOutputDirectory))
- .setFailOnMixedPackages(failOnMixedPackages)
- .setDropContent(true);
-
- if (filteringPatterns != null && filteringPatterns.length > 0) {
- RegexBasedResourceFilter filter = new RegexBasedResourceFilter();
-
- for (String filteringPattern : filteringPatterns) {
- filter.addFilteringPattern(filteringPattern);
- }
- converter.setResourceFilter(filter);
- }
+ ContentPackage2FeatureModelConverter converter = new ContentPackage2FeatureModelConverter(strictValidation)
+ .setFeaturesManager(featuresManager)
+ .setBundlesDeployer(new DefaultArtifactsDeployer(artifactsOutputDirectory))
+ .setEntryHandlersManager(new DefaultEntryHandlersManager(entryHandlerConfigsMap))
+ .setAclManager(new DefaultAclManager(enforcePrincipalBasedSupportedPath))
+ .setEmitter(DefaultPackagesEventsEmitter.open(featureModelsOutputDirectory))
+ .setFailOnMixedPackages(failOnMixedPackages)
+ .setDropContent(true);
- converter.convert(contentPackages);
+ try {
+ if (filteringPatterns != null && filteringPatterns.length > 0) {
+ RegexBasedResourceFilter filter = new RegexBasedResourceFilter();
- logger.info( "+-----------------------------------------------------+" );
- logger.info("{} SUCCESS", appName);
- } catch (Throwable t) {
- logger.info( "+-----------------------------------------------------+" );
- logger.info("{} FAILURE", appName);
- logger.info( "+-----------------------------------------------------+" );
+ for (String filteringPattern : filteringPatterns) {
+ filter.addFilteringPattern(filteringPattern);
+ }
- if (debug) {
- logger.error("Unable to convert content-package {}:", contentPackages, t);
+ converter.setResourceFilter(filter);
+ }
+
+ converter.convert(contentPackages);
+ } finally {
+ converter.cleanup();
+ }
+
+ logger.info( "+-----------------------------------------------------+" );
+ logger.info("{} SUCCESS", appName);
+ } catch (Throwable t) {
+ logger.info( "+-----------------------------------------------------+" );
+ logger.info("{} FAILURE", appName);
+ logger.info( "+-----------------------------------------------------+" );
+
+ if (debug) {
+ logger.error("Unable to convert content-package {}:", contentPackages, t);
+ } else {
+ logger.error("Unable to convert content-package {}: {}", contentPackages, t.getMessage());
+ }
+
+ logger.info( "+-----------------------------------------------------+" );
+
+ exitWithError = true;
+ }
+ } finally {
+ // format the uptime string
+ Formatter uptimeFormatter = new Formatter();
+ uptimeFormatter.format("Total time:");
+
+ long uptime = System.currentTimeMillis() - start;
+ if (uptime < 1000) {
+ uptimeFormatter.format(" %s millisecond%s", uptime, (uptime > 1 ? "s" : ""));
} else {
- logger.error("Unable to convert content-package {}: {}", contentPackages, t.getMessage());
+ long uptimeInSeconds = (uptime) / 1000;
+ final long hours = uptimeInSeconds / 3600;
+
+ if (hours > 0) {
+ uptimeFormatter.format(" %s hour%s", hours, (hours > 1 ? "s" : ""));
+ }
+
+ uptimeInSeconds = uptimeInSeconds - (hours * 3600);
+ final long minutes = uptimeInSeconds / 60;
+
+ if (minutes > 0) {
+ uptimeFormatter.format(" %s minute%s", minutes, (minutes > 1 ? "s" : ""));
+ }
+
+ uptimeInSeconds = uptimeInSeconds - (minutes * 60);
+
+ if (uptimeInSeconds > 0) {
+ uptimeFormatter.format(" %s second%s", uptimeInSeconds, (uptimeInSeconds > 1 ? "s" : ""));
+ }
}
+ logger.info(uptimeFormatter.toString());
+
+ uptimeFormatter.close();
+
+ logger.info("Finished at: {}", new Date());
+
+ final Runtime runtime = Runtime.getRuntime();
+ final int megaUnit = 1024 * 1024;
+
+ logger.info("Final Memory: {}M/{}M",
+ (runtime.totalMemory() - runtime.freeMemory()) / megaUnit,
+ runtime.totalMemory() / megaUnit);
+ logger.info("+-----------------------------------------------------+");
+ }
- logger.info( "+-----------------------------------------------------+" );
-
+ if ( exitWithError ) {
System.exit(1);
}
}
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/cli/ShutDownHook.java b/src/main/java/org/apache/sling/feature/cpconverter/cli/ShutDownHook.java
deleted file mode 100644
index 3f60e14..0000000
--- a/src/main/java/org/apache/sling/feature/cpconverter/cli/ShutDownHook.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * 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.feature.cpconverter.cli;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Date;
-import java.util.Formatter;
-
-import org.apache.commons.io.FileUtils;
-import org.jetbrains.annotations.NotNull;
-import org.slf4j.Logger;
-
-final class ShutDownHook extends Thread {
-
- private final long start = System.currentTimeMillis();
-
- private final Logger logger;
-
- public ShutDownHook(@NotNull Logger logger) {
- this.logger = logger;
- }
-
- @Override
- public void run() {
-
- cleanUp();
-
- // format the uptime string
- Formatter uptimeFormatter = new Formatter();
- uptimeFormatter.format("Total time:");
-
- long uptime = System.currentTimeMillis() - start;
- if (uptime < 1000) {
- uptimeFormatter.format(" %s millisecond%s", uptime, (uptime > 1 ? "s" : ""));
- } else {
- long uptimeInSeconds = (uptime) / 1000;
- final long hours = uptimeInSeconds / 3600;
-
- if (hours > 0) {
- uptimeFormatter.format(" %s hour%s", hours, (hours > 1 ? "s" : ""));
- }
-
- uptimeInSeconds = uptimeInSeconds - (hours * 3600);
- final long minutes = uptimeInSeconds / 60;
-
- if (minutes > 0) {
- uptimeFormatter.format(" %s minute%s", minutes, (minutes > 1 ? "s" : ""));
- }
-
- uptimeInSeconds = uptimeInSeconds - (minutes * 60);
-
- if (uptimeInSeconds > 0) {
- uptimeFormatter.format(" %s second%s", uptimeInSeconds, (uptimeInSeconds > 1 ? "s" : ""));
- }
- }
- logger.info(uptimeFormatter.toString());
-
- uptimeFormatter.close();
-
- logger.info("Finished at: {}", new Date());
-
- final Runtime runtime = Runtime.getRuntime();
- final int megaUnit = 1024 * 1024;
-
- logger.info("Final Memory: {}M/{}M",
- (runtime.totalMemory() - runtime.freeMemory()) / megaUnit,
- runtime.totalMemory() / megaUnit);
- logger.info("+-----------------------------------------------------+");
- }
-
- private void cleanUp(){
- File tmpDir = new File ( System.getProperty("java.io.tmpdir") );
- logger.info( "Cleaning up tmp directories {}, {}", tmpDir.getAbsolutePath() + "/sub-content-packages",
- tmpDir.getAbsolutePath() + "/synthetic-content-packages" );
-
- try {
- FileUtils.deleteDirectory( new File (tmpDir, "synthetic-content-packages") );
- FileUtils.deleteDirectory( new File(tmpDir, "sub-content-packages") );
- } catch (IOException e) {
- logger.error( "Error Deleting {}, {}", tmpDir + "sub-content-packages", tmpDir + "syntethic-content-packages" );
- }
- }
-}
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java
index d0d2a50..efd8ebf 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java
@@ -36,13 +36,10 @@ public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHa
private static final String SNAPSHOT_POSTFIX = "-SNAPSHOT";
- private final File temporaryDir = new File(System.getProperty("java.io.tmpdir"), "sub-content-packages");
-
private final Pattern EMBEDDED_PACKAGE_PATTERN = Pattern.compile("/jcr_root/apps/.+/install(?:\\\\.([^/]+))?/.+.zip");
public AbstractContentPackageHandler() {
super("/jcr_root/(?:etc/packages|apps/.+/install(?:\\.([^/]+))?)/.+.zip");
- temporaryDir.mkdirs();
}
@Override
@@ -50,6 +47,8 @@ public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHa
throws Exception {
logger.info("Processing sub-content package '{}'...", entry.getName());
+ final File temporaryDir = new File(converter.getTempDirectory(), "sub-content-packages");
+ temporaryDir.mkdirs();
File temporaryContentPackage = new File(temporaryDir, entry.getName());
if (entry.getName().contains(SNAPSHOT_POSTFIX) && temporaryContentPackage.exists()) {
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
index 90d6457..4991088 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
@@ -39,7 +39,6 @@ import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
-import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
@@ -65,28 +64,17 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter {
private static final String[] INCLUDE_RESOURCES = { PACKAGE_DEFINITION_XML, CONFIG_XML, SETTINGS_XML };
- private static final File TMP_DIR = new File(System.getProperty("java.io.tmpdir"), "synthetic-content-packages");
-
private static final Pattern OSGI_BUNDLE_PATTERN = Pattern.compile("(jcr_root)?/apps/[^/]+/install(\\.([^/]+))?/.+\\.jar");
- public static @NotNull VaultPackageAssembler create(@NotNull VaultPackage vaultPackage) {
- return create(vaultPackage, Objects.requireNonNull(vaultPackage.getMetaInf().getFilter()));
- }
-/*
- public static @NotNull File createSynthetic(@NotNull VaultPackage vaultPackage) throws Exception {
- DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
- PathFilterSet filterSet = new PathFilterSet();
- SyntheticPathFilter pathFilter = new SyntheticPathFilter();
- filterSet.addExclude(pathFilter);
- filterSet.setImportMode(ImportMode.MERGE);
- filter.add(filterSet);
- return create(vaultPackage, filter).createPackage();
+ public static @NotNull VaultPackageAssembler create(@NotNull File tempDir, @NotNull VaultPackage vaultPackage) {
+ return create(tempDir, vaultPackage, Objects.requireNonNull(vaultPackage.getMetaInf().getFilter()));
}
-*/
- private static @NotNull VaultPackageAssembler create(@NotNull VaultPackage vaultPackage, @NotNull WorkspaceFilter filter) {
+
+ private static @NotNull VaultPackageAssembler create(@NotNull File baseTempDir, @NotNull VaultPackage vaultPackage, @NotNull WorkspaceFilter filter) {
+ final File tempDir = new File(baseTempDir, "synthetic-content-packages_" + System.currentTimeMillis());
PackageId packageId = vaultPackage.getId();
String fileName = packageId.toString().replaceAll("/", "-").replaceAll(":", "-") + "-" + vaultPackage.getFile().getName();
- File storingDirectory = new File(TMP_DIR, fileName + "-deflated");
+ File storingDirectory = new File(tempDir, fileName + "-deflated");
if(storingDirectory.exists()) {
try {
FileUtils.deleteDirectory(storingDirectory);
@@ -126,7 +114,7 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter {
Set<Dependency> dependencies = getDependencies(vaultPackage);
- VaultPackageAssembler assembler = new VaultPackageAssembler(storingDirectory, properties, dependencies);
+ VaultPackageAssembler assembler = new VaultPackageAssembler(tempDir, storingDirectory, properties, dependencies);
assembler.mergeFilters(filter);
return assembler;
}
@@ -139,6 +127,12 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter {
private final Properties properties;
+ private final File tmpDir;
+
+ File getTempDir() {
+ return this.tmpDir;
+ }
+
@Override
public boolean matches(@NotNull String path) {
return true;
@@ -153,10 +147,11 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter {
/**
* This class can not be instantiated from outside
*/
- private VaultPackageAssembler(@NotNull File storingDirectory, @NotNull Properties properties, @NotNull Set<Dependency> dependencies) {
+ private VaultPackageAssembler(@NotNull File tempDir, @NotNull File storingDirectory, @NotNull Properties properties, @NotNull Set<Dependency> dependencies) {
this.storingDirectory = storingDirectory;
this.properties = properties;
this.dependencies = dependencies;
+ this.tmpDir = tempDir;
}
public @NotNull Properties getPackageProperties() {
@@ -226,7 +221,7 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter {
}
public @NotNull File createPackage() throws IOException {
- return createPackage(TMP_DIR);
+ return createPackage(this.tmpDir);
}
public @NotNull File createPackage(@NotNull File outputDirectory) throws IOException {
@@ -267,7 +262,7 @@ public class VaultPackageAssembler implements EntryHandler, FileFilter {
archiver.setIncludeEmptyDirs(true);
String destFileName = storingDirectory.getName().substring(0, storingDirectory.getName().lastIndexOf('-'));
- File destFile = new File(TMP_DIR, destFileName);
+ File destFile = new File(this.tmpDir, destFileName);
archiver.setDestFile(destFile);
archiver.addFileSet(new DefaultFileSet(storingDirectory));
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
index 1cfa29d..90855ab 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -100,7 +100,7 @@ public class ContentPackage2FeatureModelConverterTest {
@After
public void tearDowd() {
- converter = null;
+ converter.cleanup();
}
@Test
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
index 0f82f1a..a757177 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
@@ -20,6 +20,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
+import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.Collection;
@@ -30,6 +31,7 @@ import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.apache.jackrabbit.vault.packaging.impl.PackageManagerImpl;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -39,24 +41,32 @@ import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class VaultPackageAssemblerTest {
- private static final File TMP_DIR = new File(System.getProperty("java.io.tmpdir"), "synthetic-content-packages");
-
private File testDirectory;
- private final VaultPackageAssembler assembler;
+ private VaultPackageAssembler assembler;
private final String resourceLocation;
- public VaultPackageAssemblerTest(String resourceLocation, VaultPackageAssembler assembler) {
+ public VaultPackageAssemblerTest(String resourceLocation) {
this.resourceLocation = resourceLocation;
- this.assembler = assembler;
}
@Before
- public void setUp() {
- testDirectory = new File(System.getProperty("java.io.tmpdir"), getClass().getName() + '_' + System.currentTimeMillis());
+ public void setUp() throws IOException {
+ URL resource = VaultPackageAssemblerTest.class.getResource("../test-content-package.zip");
+ File file = FileUtils.toFile(resource);
+
+ VaultPackage vaultPackage = new PackageManagerImpl().open(file);
+
+ this.testDirectory = new File(System.getProperty("java.io.tmpdir"), getClass().getName() + '_' + System.currentTimeMillis());
+ this.assembler = VaultPackageAssembler.create(testDirectory, vaultPackage);
}
+ @After
+ public void tearDown() throws IOException {
+ FileUtils.deleteDirectory(this.testDirectory);
+ }
+
@Test
public void matchAll() {
assembler.matches(resourceLocation);
@@ -88,26 +98,20 @@ public class VaultPackageAssemblerTest {
File file = FileUtils.toFile(resource);
VaultPackage vaultPackage = new PackageManagerImpl().open(file);
- VaultPackageAssembler assembler = VaultPackageAssembler.create(vaultPackage);
+ VaultPackageAssembler assembler = VaultPackageAssembler.create(testDirectory, vaultPackage);
PackageId packageId = vaultPackage.getId();
String fileName = packageId.toString().replaceAll("/", "-").replaceAll(":", "-") + "-" + vaultPackage.getFile().getName();
- File storingDirectory = new File(TMP_DIR, fileName + "-deflated");
+ File storingDirectory = new File(assembler.getTempDir(), fileName + "-deflated");
assertTrue("Storing Directory for Vault Package does not exist", storingDirectory.exists());
}
@Parameters
public static Collection<Object[]> data() throws Exception {
- URL resource = VaultPackageAssemblerTest.class.getResource("../test-content-package.zip");
- File file = FileUtils.toFile(resource);
- VaultPackage vaultPackage = new PackageManagerImpl().open(file);
-
- VaultPackageAssembler assembler = VaultPackageAssembler.create(vaultPackage);
-
return Arrays.asList(new Object[][] {
- { null, assembler },
- { "/jcr_root/.content.xml", assembler },
- { "/jcr_root/asd/.content.xml", assembler },
- { "/jcr_root/asd/public/license.txt", assembler }
+ { null },
+ { "/jcr_root/.content.xml" },
+ { "/jcr_root/asd/.content.xml" },
+ { "/jcr_root/asd/public/license.txt" }
});
}