From b2b6a623efd853d5fd0faf835fc1f8bf8198f8a0 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Fri, 25 Sep 2020 00:09:23 +0200 Subject: [PATCH] Add more post-processing tests --- common/pom.xml | 2 +- .../postprocessing/AbstractPpTest.java | 9 +++ .../postprocessing/DeleteOriginalTest.java | 25 ++++++ .../postprocessing/MoveDirectoryTest.java | 55 ++++++++++++++ .../postprocessing/MoveSingleFileTest.java | 76 +++++++++++++++++++ master/pom.xml | 2 +- 6 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java create mode 100644 common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java create mode 100644 common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java diff --git a/common/pom.xml b/common/pom.xml index c4e22ca7..6713bf45 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -77,7 +77,7 @@ org.mockito - mockito-core + mockito-inline test diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java index adbd9aad..8f299c39 100644 --- a/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java +++ b/common/src/test/java/ctbrec/recorder/postprocessing/AbstractPpTest.java @@ -14,6 +14,7 @@ import java.time.Instant; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; +import org.mockito.MockedStatic; import ctbrec.Config; import ctbrec.Model; @@ -32,6 +33,8 @@ public abstract class AbstractPpTest { Instant now = Instant.now(); RecordingManager recordingManager; + MockedStatic configStatic; + @Before public void setup() throws IOException { baseDir = Files.createTempDirectory("ctbrec_test_"); @@ -50,12 +53,18 @@ public abstract class AbstractPpTest { @After public void teardown() throws IOException { FileUtils.deleteDirectory(baseDir.toFile()); + if (configStatic != null) { + configStatic.close(); + configStatic = null; + } } Config mockConfig() { Config config = mock(Config.class); when(config.getSettings()).thenReturn(mockSettings()); when(config.getModelNotes(any())).thenReturn("tag, foo, bar"); + configStatic = mockStatic(Config.class); + configStatic.when(Config::getInstance).thenReturn(config); return config; } diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java new file mode 100644 index 00000000..0a3e0b4f --- /dev/null +++ b/common/src/test/java/ctbrec/recorder/postprocessing/DeleteOriginalTest.java @@ -0,0 +1,25 @@ +package ctbrec.recorder.postprocessing; + +import java.io.IOException; + +import org.junit.Test; + +import ctbrec.Config; +import ctbrec.Recording; + +public class DeleteOriginalTest extends AbstractPpTest { + + @Test + public void testPostProcessWithSingleFile() throws IOException, InterruptedException { + Recording rec = new Recording(); + rec.setModel(mockModel()); + rec.setAbsoluteFile(original); + rec.setAbsoluteFile(postProcessed); + rec.setStartDate(now); + rec.setSingleFile(true); + + Config config = mockConfig(); + DeleteOriginal pp = new DeleteOriginal(); + pp.postprocess(rec, null, config); + } +} diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java new file mode 100644 index 00000000..47ea38ed --- /dev/null +++ b/common/src/test/java/ctbrec/recorder/postprocessing/MoveDirectoryTest.java @@ -0,0 +1,55 @@ +package ctbrec.recorder.postprocessing; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.Test; + +import ctbrec.Config; +import ctbrec.Model; +import ctbrec.Recording; + +public class MoveDirectoryTest extends AbstractPpTest { + + @Test + public void testOriginalFileReplacement() throws IOException { + Config config = mockConfig(); + Recording rec = new Recording(); + rec.setModel(mockModel()); + rec.setAbsoluteFile(originalDir); + rec.setStartDate(now); + rec.setSingleFile(false); + Move pp = new Move(); + pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); + pp.postprocess(rec, recordingManager, config); + + Matcher m = Pattern.compile(baseDir.toString() + "/Mockita/\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}/original").matcher(rec.getAbsoluteFile().getCanonicalPath()); + assertTrue(m.matches()); + assertEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile()); + assertNotEquals(rec.getAbsoluteFile(), original); + } + + @Test + public void absoluteFileShouldKeepBeingOriginalIfFilesDiffer() throws IOException { + Model model = mockModel(); + Recording rec = mock(Recording.class); + when(rec.getModel()).thenReturn(model); + when(rec.getAbsoluteFile()).thenReturn(originalDir); + when(rec.getPostProcessedFile()).thenReturn(postProcessedDir); + when(rec.getStartDate()).thenReturn(now); + doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); + + Files.createDirectories(postProcessedDir.toPath()); + Move pp = new Move(); + Config config = mockConfig(); + pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); + pp.postprocess(rec, recordingManager, config); + } +} diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java new file mode 100644 index 00000000..bb560a37 --- /dev/null +++ b/common/src/test/java/ctbrec/recorder/postprocessing/MoveSingleFileTest.java @@ -0,0 +1,76 @@ +package ctbrec.recorder.postprocessing; + +import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.io.File; +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.Test; + +import ctbrec.Config; +import ctbrec.Model; +import ctbrec.Recording; + +public class MoveSingleFileTest extends AbstractPpTest { + + @Test + public void testOriginalFileReplacement() throws IOException { + Config config = mockConfig(); + Recording rec = new Recording(); + rec.setModel(mockModel()); + rec.setAbsoluteFile(original); + rec.setStartDate(now); + rec.setSingleFile(true); + Move pp = new Move(); + pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); + pp.postprocess(rec, recordingManager, config); + + Matcher m = Pattern.compile(baseDir.toFile() + "/Mockita/\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}/original\\.ts").matcher(rec.getAbsoluteFile().toString()); + assertTrue(m.matches()); + assertEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile()); + assertNotEquals(rec.getAbsoluteFile(), original); + } + + @Test + public void testEarlyExit() throws IOException { + Model model = mockModel(); + Recording rec = mock(Recording.class); + when(rec.getModel()).thenReturn(model); + when(rec.getAbsoluteFile()).thenReturn(original); + when(rec.getPostProcessedFile()).thenReturn(original); + when(rec.getStartDate()).thenReturn(now); + doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); + Move pp = new Move(); + Config config = mockConfig(); + pp.getConfig().put(Move.PATH_TEMPLATE, original.getParentFile().getCanonicalPath()); + pp.postprocess(rec, recordingManager, config); + } + + @Test + public void absoluteFileShouldKeepBeingOriginalIfFilesDiffer() throws IOException { + Model model = mockModel(); + Recording rec = mock(Recording.class); + when(rec.getModel()).thenReturn(model); + when(rec.getAbsoluteFile()).thenReturn(original); + when(rec.getPostProcessedFile()).thenReturn(postProcessed); + when(rec.getStartDate()).thenReturn(now); + doThrow(new RuntimeException("Unexpected call of setAbsoluteFile")).when(rec).setAbsoluteFile(any()); + Move pp = new Move(); + Config config = mockConfig(); + pp.getConfig().put(Move.PATH_TEMPLATE, new File(baseDir.toFile(), Move.DEFAULT).getAbsolutePath()); + pp.postprocess(rec, recordingManager, config); + } + + @Test + public void testToString() { + Move pp = new Move(); + assertEquals("move", pp.toString()); + + pp.getConfig().put(Move.PATH_TEMPLATE, Move.DEFAULT); + assertEquals("move ["+Move.DEFAULT+"]", pp.toString()); + } +} diff --git a/master/pom.xml b/master/pom.xml index 68ef277c..c81fb52f 100644 --- a/master/pom.xml +++ b/master/pom.xml @@ -124,7 +124,7 @@ org.mockito - mockito-core + mockito-inline 3.5.11 test