diff --git a/config/gif-recording.properties b/config/gif-recording.properties index 210c59083..c39b34994 100644 --- a/config/gif-recording.properties +++ b/config/gif-recording.properties @@ -20,6 +20,11 @@ gif.tempFolderToStoreRecording = target/gifs/ # If false: the gif recordings do not get deleted after being added to the allure report gif.deleteRecordingsAfterAddingToAllureReport = true +# Will control if temp video recordings will be deleted. Doesn't delete the recording from the report but clears the temp directory. +# If true: all video recordings in the temp directory get deleted (after adding the necessary recordings to the report) +# If false: the video recordings don't get deleted +gif.deleteTempRecordings = false + # If true: all gif recordings are added to the allure report # If false: only gif recordings of failed tests are added to the allure report gif.appendAllRecordingsToAllureReport = true diff --git a/config/video-recording.properties b/config/video-recording.properties index 2f8573c90..1fa16de33 100644 --- a/config/video-recording.properties +++ b/config/video-recording.properties @@ -20,6 +20,11 @@ video.tempFolderToStoreRecording = target/videos/ # If false: the video recordings don't get deleted after being added to the allure report video.deleteRecordingsAfterAddingToAllureReport = true +# Will control if temp video recordings will be deleted. Doesn't delete the recording from the report but clears the temp directory. +# If true: all video recordings in the temp directory get deleted (after adding the necessary recordings to the report) +# If false: the video recordings don't get deleted +video.deleteTempRecordings = false + # If true: all video recordings are added to the allure report # If false: only video recordings of failed tests are added to the allure report video.appendAllRecordingsToAllureReport = true @@ -37,4 +42,4 @@ video.format = mp4 video.ffmpegBinaryPath = ffmpeg # Defines the path where the logfile is saved -video.ffmpegLogFile = target/ffmpeg_output_msg.txt \ No newline at end of file +video.ffmpegLogFile = target/ffmpeg_output_msg.txt diff --git a/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java b/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java index 5f72d5e7b..c82ec8086 100644 --- a/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java +++ b/src/main/java/com/xceptance/neodymium/common/recording/TakeScreenshotsThread.java @@ -153,6 +153,7 @@ public synchronized void run() writer.stop(); try { + File tempRecording = new File(fileName); if (recordingConfigurations.appendAllRecordingsToAllureReport() || testFailed) { @@ -161,9 +162,15 @@ public synchronized void run() if (recordingConfigurations.deleteRecordingsAfterAddingToAllureReport()) { - new File(fileName).delete(); + tempRecording.delete(); } } + + // delete the file when configured and only if it wasn't deleted already + if (recordingConfigurations.deleteTempRecordings() && tempRecording.exists()) + { + tempRecording.delete(); + } } catch (IOException e) { diff --git a/src/main/java/com/xceptance/neodymium/common/recording/config/GifRecordingConfigurations.java b/src/main/java/com/xceptance/neodymium/common/recording/config/GifRecordingConfigurations.java index 9df72da94..7bae4fb97 100644 --- a/src/main/java/com/xceptance/neodymium/common/recording/config/GifRecordingConfigurations.java +++ b/src/main/java/com/xceptance/neodymium/common/recording/config/GifRecordingConfigurations.java @@ -40,6 +40,11 @@ public interface GifRecordingConfigurations extends RecordingConfigurations @DefaultValue("true") public boolean deleteRecordingsAfterAddingToAllureReport(); + @Override + @Key("gif.deleteTempRecordings") + @DefaultValue("true") + public boolean deleteTempRecordings(); + @Override @Key("gif.appendAllRecordingsToAllureReport") @DefaultValue("true") diff --git a/src/main/java/com/xceptance/neodymium/common/recording/config/RecordingConfigurations.java b/src/main/java/com/xceptance/neodymium/common/recording/config/RecordingConfigurations.java index 85e87aa68..6be0fe112 100644 --- a/src/main/java/com/xceptance/neodymium/common/recording/config/RecordingConfigurations.java +++ b/src/main/java/com/xceptance/neodymium/common/recording/config/RecordingConfigurations.java @@ -22,6 +22,8 @@ public abstract interface RecordingConfigurations extends Mutable public boolean deleteRecordingsAfterAddingToAllureReport(); + public boolean deleteTempRecordings(); + public boolean appendAllRecordingsToAllureReport(); public double imageQuality(); diff --git a/src/main/java/com/xceptance/neodymium/common/recording/config/VideoRecordingConfigurations.java b/src/main/java/com/xceptance/neodymium/common/recording/config/VideoRecordingConfigurations.java index c387ab441..3fc1406d5 100644 --- a/src/main/java/com/xceptance/neodymium/common/recording/config/VideoRecordingConfigurations.java +++ b/src/main/java/com/xceptance/neodymium/common/recording/config/VideoRecordingConfigurations.java @@ -40,6 +40,11 @@ public interface VideoRecordingConfigurations extends RecordingConfigurations @DefaultValue("true") public boolean deleteRecordingsAfterAddingToAllureReport(); + @Override + @Key("video.deleteTempRecordings") + @DefaultValue("true") + public boolean deleteTempRecordings(); + @Override @Key("video.appendAllRecordingsToAllureReport") @DefaultValue("true") diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/recording/AbstractRecordingDeletionTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/recording/AbstractRecordingDeletionTest.java new file mode 100644 index 000000000..e74a71444 --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/recording/AbstractRecordingDeletionTest.java @@ -0,0 +1,70 @@ +package com.xceptance.neodymium.junit4.tests.recording; + +import com.codeborne.selenide.Selenide; +import com.xceptance.neodymium.common.browser.Browser; +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.RecordingConfigurations; +import com.xceptance.neodymium.junit4.NeodymiumRunner; +import com.xceptance.neodymium.junit4.tests.NeodymiumTest; +import org.aeonbits.owner.ConfigFactory; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Browser("Chrome_headless") +@RunWith(NeodymiumRunner.class) +public abstract class AbstractRecordingDeletionTest extends NeodymiumTest +{ + protected static String uuid; + + public static Class configurationsClass; + + private boolean isGif; + + protected AbstractRecordingDeletionTest(boolean isGif) + { + this.isGif = isGif; + } + + public static void beforeClass(String format, boolean filmAutomatically) + { + FilmTestExecution.clearThreadContexts(); + + Map properties1 = new HashMap<>(); + properties1.put(format + ".filmAutomatically", Boolean.toString(filmAutomatically)); + properties1.put(format + ".enableFilming", "true"); + properties1.put(format + ".deleteRecordingsAfterAddingToAllureReport", "false"); + properties1.put(format + ".deleteTempRecordings", "true"); + + final String fileLocation = "config/temp-" + format + "-" + filmAutomatically + ".properties"; + File tempConfigFile1 = new File("./" + fileLocation); + + writeMapToPropertiesFile(properties1, tempConfigFile1); + ConfigFactory.setProperty(FilmTestExecution.TEMPORARY_CONFIG_FILE_PROPERTY_NAME, "file:" + fileLocation); + tempFiles.add(tempConfigFile1); + } + + @Test + public void test() + { + List uuids = isGif ? FilmTestExecution.getNamesOfAllCurrentGifRecordings() : FilmTestExecution.getNamesOfAllCurrentVideoRecordings(); + Assert.assertEquals(1, uuids.size()); + uuid = uuids.get(0); + Selenide.open("https://www.xceptance.com/en/"); + Selenide.sleep(FilmTestExecution.getContext(configurationsClass).oneImagePerMilliseconds()); + } + + @AfterClass + public static void assertRecordingFileWasDeleted() + { + File recordingFile = new File(FilmTestExecution.getContext(configurationsClass).tempFolderToStoreRecording() + uuid + "." + + FilmTestExecution.getContext(configurationsClass).format()); + Assert.assertFalse("the recording file wasn't deleted", recordingFile.exists()); + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/recording/config/DeleteGifRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/recording/config/DeleteGifRecordingTest.java new file mode 100644 index 000000000..727e5fb12 --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/recording/config/DeleteGifRecordingTest.java @@ -0,0 +1,20 @@ +package com.xceptance.neodymium.junit4.tests.recording.config; + +import com.xceptance.neodymium.common.recording.config.GifRecordingConfigurations; +import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingDeletionTest; +import org.junit.BeforeClass; + +public class DeleteGifRecordingTest extends AbstractRecordingDeletionTest +{ + public DeleteGifRecordingTest() + { + super(true); + } + + @BeforeClass + public static void form() + { + beforeClass("gif", true); + configurationsClass = GifRecordingConfigurations.class; + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit4/tests/recording/config/DeleteVideoRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit4/tests/recording/config/DeleteVideoRecordingTest.java new file mode 100644 index 000000000..2c22b7cdf --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit4/tests/recording/config/DeleteVideoRecordingTest.java @@ -0,0 +1,43 @@ +package com.xceptance.neodymium.junit4.tests.recording.config; + +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; +import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingDeletionTest; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; + +import java.io.File; + +public class DeleteVideoRecordingTest extends AbstractRecordingDeletionTest +{ + public DeleteVideoRecordingTest() + { + super(false); + } + + @BeforeClass + public static void form() + { + beforeClass("video", true); + configurationsClass = VideoRecordingConfigurations.class; + } + + /* + @Override + @Test + public void test() + { + super.test(); + } + */ + + @AfterClass + public static void assertLogFileExists() + { + File logFile = new File(FilmTestExecution.getContextVideo().ffmpegLogFile()); + Assert.assertTrue("the logfile for the automatic video recording test exists", logFile.exists()); + logFile.delete(); + Assert.assertFalse("the logfile for the automatic video recording test wasn't deleted", logFile.exists()); + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/AbstractRecordingDeletionTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/AbstractRecordingDeletionTest.java new file mode 100644 index 000000000..a8216fcbf --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/AbstractRecordingDeletionTest.java @@ -0,0 +1,69 @@ +package com.xceptance.neodymium.junit5.tests.recording; + +import com.codeborne.selenide.Selenide; +import com.xceptance.neodymium.common.browser.Browser; +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.RecordingConfigurations; +import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit5.tests.AbstractNeodymiumTest; +import org.aeonbits.owner.ConfigFactory; +import org.junit.Assert; +import org.junit.jupiter.api.AfterAll; + +import java.io.File; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Browser("Chrome_headless") +public abstract class AbstractRecordingDeletionTest extends AbstractNeodymiumTest +{ + protected static String uuid; + + public static Class configurationsClass; + + private boolean isGif; + + protected AbstractRecordingDeletionTest(boolean isGif) + { + this.isGif = isGif; + } + + public static void beforeClass(String format, boolean filmAutomatically) + { + FilmTestExecution.clearThreadContexts(); + + Map properties1 = new HashMap<>(); + properties1.put(format + ".filmAutomatically", Boolean.toString(filmAutomatically)); + properties1.put(format + ".enableFilming", "true"); + properties1.put(format + ".deleteRecordingsAfterAddingToAllureReport", "false"); + properties1.put(format + ".deleteTempRecordings", "true"); + + final String fileLocation = "config/temp-" + format + "-" + filmAutomatically + ".properties"; + File tempConfigFile1 = new File("./" + fileLocation); + + writeMapToPropertiesFile(properties1, tempConfigFile1); + + ConfigFactory.setProperty(FilmTestExecution.TEMPORARY_CONFIG_FILE_PROPERTY_NAME, "file:" + fileLocation); + + tempFiles.add(tempConfigFile1); + } + + @NeodymiumTest + public void test() + { + List uuids = isGif ? FilmTestExecution.getNamesOfAllCurrentGifRecordings() : FilmTestExecution.getNamesOfAllCurrentVideoRecordings(); + Assert.assertEquals(1, uuids.size()); + uuid = uuids.get(0); + Selenide.open("https://www.xceptance.com/en/"); + Selenide.sleep(FilmTestExecution.getContext(configurationsClass).oneImagePerMilliseconds()); + } + + @AfterAll + public static void assertRecordingFileWasDeleted() + { + File recordingFile = new File(FilmTestExecution.getContext(configurationsClass).tempFolderToStoreRecording() + uuid + "." + + FilmTestExecution.getContext(configurationsClass).format()); + Assert.assertFalse("the recording file wasn't deleted", recordingFile.exists()); + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticGifRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticGifRecordingTest.java index cf19121a2..20b22a90f 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticGifRecordingTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticGifRecordingTest.java @@ -1,9 +1,8 @@ package com.xceptance.neodymium.junit5.tests.recording.automatic; -import org.junit.jupiter.api.BeforeAll; - import com.xceptance.neodymium.common.recording.config.GifRecordingConfigurations; -import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingTest; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingTest; +import org.junit.jupiter.api.BeforeAll; public class AutomaticGifRecordingTest extends AbstractRecordingTest { diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticVideoRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticVideoRecordingTest.java index f503ef172..8d2a1d2ed 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticVideoRecordingTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/automatic/AutomaticVideoRecordingTest.java @@ -1,16 +1,15 @@ package com.xceptance.neodymium.junit5.tests.recording.automatic; -import java.io.File; -import java.io.IOException; - +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; +import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingTest; import org.junit.Assert; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; -import com.xceptance.neodymium.common.recording.FilmTestExecution; -import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; -import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingTest; -import com.xceptance.neodymium.junit5.NeodymiumTest; +import java.io.File; +import java.io.IOException; public class AutomaticVideoRecordingTest extends AbstractRecordingTest { diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticGifRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticGifRecordingTest.java index 36c18d15e..4477a9f50 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticGifRecordingTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticGifRecordingTest.java @@ -1,9 +1,8 @@ package com.xceptance.neodymium.junit5.tests.recording.config; -import org.junit.jupiter.api.BeforeAll; - import com.xceptance.neodymium.common.recording.config.GifRecordingConfigurations; -import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingTest; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingTest; +import org.junit.jupiter.api.BeforeAll; public class AutomaticGifRecordingTest extends AbstractRecordingTest { diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticVideoRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticVideoRecordingTest.java index 3fdcbe4d7..d47bb0a40 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticVideoRecordingTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/AutomaticVideoRecordingTest.java @@ -1,14 +1,13 @@ package com.xceptance.neodymium.junit5.tests.recording.config; -import java.io.File; - +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingTest; import org.junit.Assert; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; -import com.xceptance.neodymium.common.recording.FilmTestExecution; -import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; -import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingTest; +import java.io.File; public class AutomaticVideoRecordingTest extends AbstractRecordingTest { diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/DeleteGifRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/DeleteGifRecordingTest.java new file mode 100644 index 000000000..8dbcbff24 --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/DeleteGifRecordingTest.java @@ -0,0 +1,28 @@ +package com.xceptance.neodymium.junit5.tests.recording.config; + +import com.xceptance.neodymium.common.recording.config.GifRecordingConfigurations; +import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingDeletionTest; +import org.junit.jupiter.api.BeforeAll; + +public class DeleteGifRecordingTest extends AbstractRecordingDeletionTest +{ + public DeleteGifRecordingTest() + { + super(true); + } + + @BeforeAll + public static void form() + { + beforeClass("gif", true); + configurationsClass = GifRecordingConfigurations.class; + } + + @Override + @NeodymiumTest + public void test() + { + super.test(); + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/DeleteVideoRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/DeleteVideoRecordingTest.java new file mode 100644 index 000000000..49d45f667 --- /dev/null +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/config/DeleteVideoRecordingTest.java @@ -0,0 +1,42 @@ +package com.xceptance.neodymium.junit5.tests.recording.config; + +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; +import com.xceptance.neodymium.junit5.NeodymiumTest; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingDeletionTest; +import org.junit.Assert; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; + +import java.io.File; + +public class DeleteVideoRecordingTest extends AbstractRecordingDeletionTest +{ + public DeleteVideoRecordingTest() + { + super(false); + } + + @BeforeAll + public static void form() + { + beforeClass("video", true); + configurationsClass = VideoRecordingConfigurations.class; + } + + @Override + @NeodymiumTest + public void test() + { + super.test(); + } + + @AfterAll + public static void assertLogFileExists() + { + File logFile = new File(FilmTestExecution.getContextVideo().ffmpegLogFile()); + Assert.assertTrue("the logfile for the automatic video recording test exists", logFile.exists()); + logFile.delete(); + Assert.assertFalse("the logfile for the automatic video recording test wasn't deleted", logFile.exists()); + } +} diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualGifRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualGifRecordingTest.java index c601f9fef..9cc82fe0b 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualGifRecordingTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualGifRecordingTest.java @@ -1,14 +1,13 @@ package com.xceptance.neodymium.junit5.tests.recording.manual; -import java.util.UUID; - +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.GifRecordingConfigurations; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingTest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import com.xceptance.neodymium.common.recording.FilmTestExecution; -import com.xceptance.neodymium.common.recording.config.GifRecordingConfigurations; -import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingTest; +import java.util.UUID; public class ManualGifRecordingTest extends AbstractRecordingTest { diff --git a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualVideoRecordingTest.java b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualVideoRecordingTest.java index 1bd6a3438..6d330a69c 100644 --- a/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualVideoRecordingTest.java +++ b/src/test/java/com/xceptance/neodymium/junit5/tests/recording/manual/ManualVideoRecordingTest.java @@ -1,17 +1,16 @@ package com.xceptance.neodymium.junit5.tests.recording.manual; -import java.io.File; -import java.util.UUID; - +import com.xceptance.neodymium.common.recording.FilmTestExecution; +import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; +import com.xceptance.neodymium.junit5.tests.recording.AbstractRecordingTest; import org.junit.Assert; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import com.xceptance.neodymium.common.recording.FilmTestExecution; -import com.xceptance.neodymium.common.recording.config.VideoRecordingConfigurations; -import com.xceptance.neodymium.junit4.tests.recording.AbstractRecordingTest; +import java.io.File; +import java.util.UUID; public class ManualVideoRecordingTest extends AbstractRecordingTest {