QPID-8426: [Broker-J] Add flag to clean-up resources
diff --git a/broker-core/src/test/java/org/apache/qpid/server/test/EmbeddedKdcResource.java b/broker-core/src/test/java/org/apache/qpid/server/test/EmbeddedKdcResource.java
index 8224189..10865c2 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/test/EmbeddedKdcResource.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/test/EmbeddedKdcResource.java
@@ -21,7 +21,7 @@
import java.io.File;
import java.io.IOException;
-import java.nio.file.FileSystems;
+import java.nio.file.FileAlreadyExistsException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -30,6 +30,7 @@
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.kerby.kerberos.kerb.KrbException;
import org.apache.kerby.kerberos.kerb.server.KdcConfigKey;
@@ -41,10 +42,12 @@
public class EmbeddedKdcResource extends ExternalResource
{
private static final Logger LOGGER = LoggerFactory.getLogger(EmbeddedKdcResource.class);
+ private static final AtomicInteger COUNTER = new AtomicInteger();
+ private static final boolean CLEAN_UP = Boolean.parseBoolean(System.getProperty("qpid.test.cleanUpKdcArtifacts", "true"));
private final SimpleKdcServer _simpleKdcServer;
private final String _realm;
private final List<File> _createdFiles = new ArrayList<>();
- private volatile File _kdcDirectory;
+ private volatile Path _kdcDirectory;
public EmbeddedKdcResource(final String host, final int port, final String serviceName, final String realm)
{
@@ -70,12 +73,17 @@
@Override
public void before() throws Exception
{
- final Path targetDir = FileSystems.getDefault().getPath("target");
- _kdcDirectory = Files.createTempDirectory(targetDir, "simple-kdc-").toFile();
- _simpleKdcServer.setWorkDir(_kdcDirectory);
+ final Path kdcDir = Paths.get("target", "simple-kdc-" + COUNTER.incrementAndGet());
+ createWorkDirectory(kdcDir);
+ _kdcDirectory = kdcDir;
+ _simpleKdcServer.setWorkDir(_kdcDirectory.toFile());
_simpleKdcServer.init();
_simpleKdcServer.start();
- LOGGER.info("SimpleKdcServer started on port {}, realm '{}'", getPort(), getRealm());
+ LOGGER.info("SimpleKdcServer started on port {}, realm '{}' with work dir '{}'", getPort(), getRealm(), _kdcDirectory);
+ if (!CLEAN_UP)
+ {
+ Files.copy(Paths.get(kdcDir.toString(), "krb5.conf"), Paths.get(kdcDir.toString(), "krb5.conf.copy"));
+ }
}
@Override
@@ -91,21 +99,11 @@
}
finally
{
- try
+ if (CLEAN_UP)
{
- delete(_kdcDirectory);
+ cleanUp();
}
- catch (IOException e)
- {
- LOGGER.warn("Failure to delete KDC directory", e);
- }
- for (File f: _createdFiles)
- {
- if (!f.delete())
- {
- LOGGER.warn("Failure to delete file {}", f.getAbsolutePath());
- }
- }
+
}
}
@@ -114,9 +112,9 @@
return _realm;
}
- private void delete(File f) throws IOException
+ private void delete(Path f) throws IOException
{
- Files.walkFileTree(f.toPath(),
+ Files.walkFileTree(f,
new SimpleFileVisitor<Path>()
{
@Override
@@ -172,4 +170,36 @@
}
}
+ private void createWorkDirectory(final Path kdcDir) throws IOException
+ {
+ try
+ {
+ Files.createDirectory(kdcDir);
+ }
+ catch (FileAlreadyExistsException e)
+ {
+ delete(kdcDir);
+ Files.createDirectory(kdcDir);
+ }
+ }
+
+
+ private void cleanUp()
+ {
+ try
+ {
+ delete(_kdcDirectory);
+ }
+ catch (IOException e)
+ {
+ LOGGER.warn("Failure to delete KDC directory", e);
+ }
+ for (File f: _createdFiles)
+ {
+ if (!f.delete())
+ {
+ LOGGER.warn("Failure to delete file {}", f.getAbsolutePath());
+ }
+ }
+ }
}