Skip to content

Commit cb718e0

Browse files
author
penalvej
committed
clean output directory before first test case is processed
1 parent 5dc185e commit cb718e0

3 files changed

Lines changed: 42 additions & 0 deletions

File tree

allure-java-commons/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ description = "Allure Java Commons"
66

77
dependencies {
88
api("org.slf4j:slf4j-api")
9+
api("commons-io:commons-io")
910
api(project(":allure-model"))
1011
compileOnly("org.aspectj:aspectjrt")
1112
internal("com.fasterxml.jackson.core:jackson-databind")

allure-java-commons/src/main/java/io/qameta/allure/FileSystemResultsWriter.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919
import io.qameta.allure.internal.Allure2ModelJackson;
2020
import io.qameta.allure.model.TestResult;
2121
import io.qameta.allure.model.TestResultContainer;
22+
import org.apache.commons.io.FileUtils;
2223

2324
import java.io.IOException;
2425
import java.io.InputStream;
2526
import java.nio.file.Files;
2627
import java.nio.file.Path;
2728
import java.util.Objects;
2829
import java.util.UUID;
30+
import java.util.concurrent.atomic.AtomicBoolean;
2931

3032
/**
3133
* @author charlie (Dmitry Baev).
@@ -36,6 +38,8 @@ public class FileSystemResultsWriter implements AllureResultsWriter {
3638

3739
private final ObjectMapper mapper;
3840

41+
private final AtomicBoolean isOutputCleaned = new AtomicBoolean(false);
42+
3943
public FileSystemResultsWriter(final Path outputDirectory) {
4044
this.outputDirectory = outputDirectory;
4145
this.mapper = Allure2ModelJackson.createMapper();
@@ -46,6 +50,7 @@ public void write(final TestResult testResult) {
4650
final String testResultName = Objects.isNull(testResult.getUuid())
4751
? generateTestResultName()
4852
: generateTestResultName(testResult.getUuid());
53+
cleanDirectoriesIfNeeded(outputDirectory);
4954
createDirectories(outputDirectory);
5055
final Path file = outputDirectory.resolve(testResultName);
5156
try {
@@ -60,6 +65,7 @@ public void write(final TestResultContainer testResultContainer) {
6065
final String testResultContainerName = Objects.isNull(testResultContainer.getUuid())
6166
? generateTestResultContainerName()
6267
: generateTestResultContainerName(testResultContainer.getUuid());
68+
cleanDirectoriesIfNeeded(outputDirectory);
6369
createDirectories(outputDirectory);
6470
final Path file = outputDirectory.resolve(testResultContainerName);
6571
try {
@@ -71,6 +77,7 @@ public void write(final TestResultContainer testResultContainer) {
7177

7278
@Override
7379
public void write(final String source, final InputStream attachment) {
80+
cleanDirectoriesIfNeeded(outputDirectory);
7481
createDirectories(outputDirectory);
7582
final Path file = outputDirectory.resolve(source);
7683
try (InputStream is = attachment) {
@@ -80,6 +87,17 @@ public void write(final String source, final InputStream attachment) {
8087
}
8188
}
8289

90+
private void cleanDirectoriesIfNeeded(final Path directory) {
91+
if (isOutputCleaned.compareAndSet(false, true)) {
92+
try {
93+
FileUtils.deleteDirectory(directory.toFile());
94+
} catch (IOException e) {
95+
throw new AllureResultsWriteException("Could not clean Allure results directory", e);
96+
}
97+
}
98+
99+
}
100+
83101
private void createDirectories(final Path directory) {
84102
try {
85103
Files.createDirectories(directory);

allure-java-commons/src/test/java/io/qameta/allure/FileSystemResultsWriterTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.junit.jupiter.api.Test;
2020
import org.junit.jupiter.api.io.TempDir;
2121

22+
import java.io.File;
23+
import java.io.IOException;
2224
import java.nio.file.Path;
2325
import java.util.UUID;
2426

@@ -53,4 +55,25 @@ void shouldWriteTestResult(@TempDir final Path folder) {
5355
assertThat(folder.resolve(fileName))
5456
.isRegularFile();
5557
}
58+
59+
@Test
60+
void shouldCleanResultsDirectoryBeforeFirstTestResult(@TempDir final Path folder) throws IOException {
61+
final String existingFileName = "existing-file.json";
62+
final File existingFile = new File(folder.toFile(), existingFileName);
63+
existingFile.createNewFile();
64+
65+
assertThat(folder).isDirectory();
66+
assertThat(folder.resolve(existingFile.getName())).isRegularFile();
67+
68+
FileSystemResultsWriter writer = new FileSystemResultsWriter(folder);
69+
final String uuid = UUID.randomUUID().toString();
70+
final TestResult testResult = current().nextObject(TestResult.class, "steps").setUuid(uuid);
71+
writer.write(testResult);
72+
73+
final String fileName = generateTestResultName(uuid);
74+
assertThat(folder).isDirectory();
75+
assertThat(folder.resolve(fileName)).isRegularFile();
76+
assertThat(folder.resolve(existingFileName)).doesNotExist();
77+
}
78+
5679
}

0 commit comments

Comments
 (0)