Skip to content

Commit

Permalink
testing extent reports retention in real e2e testbook tests
Browse files Browse the repository at this point in the history
  • Loading branch information
giulong committed Dec 20, 2023
1 parent bafa03a commit bba550d
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,75 +23,114 @@
@Slf4j
public class TestBookSessionListener implements LauncherSessionListener {

private final List<String> fakeExtentReportsDirectories = List.of("fakeExtentReport1", "fakeExtentReport2", "fakeExtentReport3");
private final List<String> fakeExtentReports = List.of("fakeExtentReport1.html", "fakeExtentReport2.html", "fakeExtentReport3.html");
private final List<String> fakeHtmlTestBooks = List.of("fakeTestBook1.html", "fakeTestBook2.html", "fakeTestBook3.html");
private final List<String> fakeTxtTestBooks = List.of("fakeTestBook1.txt", "fakeTestBook2.txt", "fakeTestBook3.txt");
private final FileUtils fileUtils = FileUtils.getInstance();
private final YamlUtils yamlUtils = YamlUtils.getInstance();
private Path extentReportsDirectory;
private Path htmlTestBooksDirectory;
private Path txtTestBooksDirectory;
private int extentTotalRetention;
private int txtTestBookTotalRetention;

@Override
@SneakyThrows
public void launcherSessionOpened(final LauncherSession session) {
final Configuration configuration = yamlUtils.readInternal("configuration.yaml", Configuration.class);
final Configuration.Extent extent = configuration.getExtent();
final FileTestBookReporter htmlTestBookReporter = getReporterFrom(configuration, HtmlTestBookReporter.class);
final FileTestBookReporter txtTestBookReporter = getReporterFrom(configuration, TxtTestBookReporter.class);

extentReportsDirectory = Path.of("target/spectrum/reports");
htmlTestBooksDirectory = Path.of(htmlTestBookReporter.getOutput()).getParent();
txtTestBooksDirectory = Path.of(txtTestBookReporter.getOutput()).getParent();

fileUtils.deleteDirectory(extentReportsDirectory);
fileUtils.deleteDirectory(htmlTestBooksDirectory);
fileUtils.deleteDirectory(txtTestBooksDirectory);
Files.createDirectories(extentReportsDirectory);
Files.createDirectories(htmlTestBooksDirectory);
Files.createDirectories(txtTestBooksDirectory);

extentTotalRetention = extent.getRetention().getTotal();
assertEquals(3, extentTotalRetention);
txtTestBookTotalRetention = txtTestBookReporter.getRetention().getTotal();
assertEquals(2, txtTestBookTotalRetention);

createTestBooks(fakeHtmlTestBooks, htmlTestBooksDirectory);
createTestBooks(fakeTxtTestBooks, txtTestBooksDirectory);
createDirectories(fakeExtentReportsDirectories, extentReportsDirectory);
createFiles(fakeExtentReports, extentReportsDirectory);
createFiles(fakeHtmlTestBooks, htmlTestBooksDirectory);
createFiles(fakeTxtTestBooks, txtTestBooksDirectory);
}

@Override
public void launcherSessionClosed(LauncherSession session) {
final List<File> remainingHtmlTestBooks = getRemainingTestBooksFrom(htmlTestBooksDirectory.toFile().listFiles(), "html");
final List<File> remainingExtentReportsDirectories = getRemainingDirectoriesFrom(extentReportsDirectory.toFile().listFiles());
final List<String> remainingExtentReportsDirectoriesNames = getNamesOf(remainingExtentReportsDirectories);
assertEquals(extentTotalRetention, remainingExtentReportsDirectories.size());
assertFalse(remainingExtentReportsDirectoriesNames.contains(fakeExtentReportsDirectories.get(0)), "The first extent report directory should have been deleted due to retention policies");

final List<File> remainingExtentReports = getRemainingFilesFrom(extentReportsDirectory.toFile().listFiles(), "html");
final List<String> remainingExtentReportsNames = getNamesOf(remainingExtentReports);
assertEquals(extentTotalRetention, remainingExtentReports.size());
assertFalse(remainingExtentReportsNames.contains(fakeExtentReports.get(0)), "The first extent report should have been deleted due to retention policies");

final List<File> remainingHtmlTestBooks = getRemainingFilesFrom(htmlTestBooksDirectory.toFile().listFiles(), "html");
assertTrue(getNamesOf(remainingHtmlTestBooks).containsAll(fakeHtmlTestBooks),
"Html reporter should have the default total retention of Integer.MAX_VALUE, so no one should be deleted");

final List<File> remainingTxtTestBooks = getRemainingTestBooksFrom(htmlTestBooksDirectory.toFile().listFiles(), "txt");
final List<File> remainingTxtTestBooks = getRemainingFilesFrom(htmlTestBooksDirectory.toFile().listFiles(), "txt");
final List<String> remainingTxtTestBooksNames = getNamesOf(remainingTxtTestBooks);
assertEquals(txtTestBookTotalRetention, remainingTxtTestBooks.size());
assertFalse(remainingTxtTestBooksNames.contains(fakeTxtTestBooks.get(0)), "The first txt testbook should have been deleted due to retention policies");
assertFalse(remainingTxtTestBooksNames.contains(fakeTxtTestBooks.get(1)), "The second txt testbook should have been deleted due to retention policies");

deleteTestBooks(fakeHtmlTestBooks, htmlTestBooksDirectory);
deleteTestBooks(fakeTxtTestBooks, txtTestBooksDirectory);
deleteDirectories(fakeExtentReportsDirectories, extentReportsDirectory);
deleteFiles(fakeExtentReports, extentReportsDirectory);
deleteFiles(fakeHtmlTestBooks, htmlTestBooksDirectory);
deleteFiles(fakeTxtTestBooks, txtTestBooksDirectory);
}

@SneakyThrows
private void createFiles(final List<String> fileNames, final Path directory) {
for (String fileName : fileNames) {
assertTrue(Files.createFile(directory.resolve(fileName)).toFile().exists());
Thread.sleep(10); // just to be sure files have different creation dates
}
}

@SneakyThrows
private void createTestBooks(final List<String> testBooks, final Path directory) {
for (String testBook : testBooks) {
assertTrue(Files.createFile(directory.resolve(testBook)).toFile().exists());
private void createDirectories(final List<String> directoryNames, final Path parentDirectory) {
for (String fileName : directoryNames) {
assertTrue(Files.createDirectories(parentDirectory.resolve(fileName)).toFile().exists());
Thread.sleep(10); // just to be sure files have different creation dates
}
}

private List<String> getNamesOf(final List<File> testBooks) {
return testBooks.stream().map(File::getName).toList();
private List<String> getNamesOf(final List<File> files) {
return files.stream().map(File::getName).toList();
}

private void deleteTestBooks(final List<String> testBooks, final Path directory) {
for (String testBook : testBooks) {
final File testBookFile = directory.resolve(testBook).toFile();
private void deleteFiles(final List<String> fileNames, final Path directory) {
for (String fileName : fileNames) {
final File file = directory.resolve(fileName).toFile();

if (testBookFile.exists()) {
testBookFile.deleteOnExit();
if (file.exists()) {
file.deleteOnExit();
}
}
}

private void deleteDirectories(final List<String> directoryNames, final Path parentDirectory) {
directoryNames
.stream()
.map(Path::of)
.map(parentDirectory::resolve)
.forEach(fileUtils::deleteDirectory);
}

private FileTestBookReporter getReporterFrom(final Configuration configuration, final Class<? extends FileTestBookReporter> clazz) {
return (FileTestBookReporter) configuration
.getTestBook()
Expand All @@ -102,12 +141,20 @@ private FileTestBookReporter getReporterFrom(final Configuration configuration,
.orElseThrow();
}

private List<File> getRemainingTestBooksFrom(final File[] files, final String extension) {
private List<File> getRemainingFilesFrom(final File[] files, final String extension) {
return Arrays
.stream(files)
.filter(file -> !file.isDirectory())
.filter(file -> file.getName().endsWith(extension))
.sorted(comparingLong(File::lastModified))
.toList();
}

private List<File> getRemainingDirectoriesFrom(final File[] files) {
return Arrays
.stream(files)
.filter(File::isDirectory)
.sorted(comparingLong(File::lastModified))
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,18 @@ public String removeExtensionFrom(final String fileName) {

@SneakyThrows
public void deleteDirectory(final Path directory) {
if (Files.exists(directory)) {
log.debug("About to delete directory '{}'", directory);

try (Stream<Path> files = Files.walk(directory)) {
files
.sorted(reverseOrder())
.map(Path::toFile)
.forEach(f -> log.trace("File '{}' deleted? {}", f, f.delete()));
}
if (!Files.exists(directory)) {
log.debug("Avoid deleting non-existing directory '{}'", directory);
return;
}

log.debug("About to delete directory '{}'", directory);

try (Stream<Path> files = Files.walk(directory)) {
files
.sorted(reverseOrder())
.map(Path::toFile)
.forEach(f -> log.trace("File '{}' deleted? {}", f, f.delete()));
}
}
}

0 comments on commit bba550d

Please sign in to comment.