From 4167b222ba36bb16aa343ce671af650dc08e5890 Mon Sep 17 00:00:00 2001
From: 0xb00bface <0xboobface@gmail.com>
Date: Tue, 22 Sep 2020 14:58:20 +0200
Subject: [PATCH] Add test for Rename post-processor
---
common/pom.xml | 5 +
...AbstractPlaceholderAwarePostProcessor.java | 5 +-
.../postprocessing/RenameSingleFileTest.java | 127 ++++++++++++++++++
master/pom.xml | 18 +++
4 files changed, 152 insertions(+), 3 deletions(-)
create mode 100644 common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java
diff --git a/common/pom.xml b/common/pom.xml
index 541444dc..c4e22ca7 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -75,6 +75,11 @@
junit
test
+
+ org.mockito
+ mockito-core
+ test
+
javax.xml.bind
jaxb-api
diff --git a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java
index b790a724..545f795f 100644
--- a/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java
+++ b/common/src/main/java/ctbrec/recorder/postprocessing/AbstractPlaceholderAwarePostProcessor.java
@@ -14,8 +14,7 @@ import ctbrec.Recording;
public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPostProcessor {
- @SuppressWarnings("unused")
- private String[] placeHolders = {
+ public static final String[] PLACE_HOLDERS = {
"${modelName}",
"${modelDisplayName}",
"${modelSanitizedName}",
@@ -59,7 +58,7 @@ public abstract class AbstractPlaceholderAwarePostProcessor extends AbstractPost
}
private String replaceDateTime(Recording rec, String filename, String placeHolder, ZoneId zone) {
- String pattern = "yyyy-mm-dd_HH-mm-ss";
+ String pattern = "yyyy-MM-dd_HH-mm-ss";
Matcher m = Pattern.compile("\\$\\{" + placeHolder + "(?:\\((.*?)\\))?\\}").matcher(filename);
if (m.find()) {
String p = m.group(1);
diff --git a/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java
new file mode 100644
index 00000000..64399ad4
--- /dev/null
+++ b/common/src/test/java/ctbrec/recorder/postprocessing/RenameSingleFileTest.java
@@ -0,0 +1,127 @@
+package ctbrec.recorder.postprocessing;
+
+import static java.nio.charset.StandardCharsets.*;
+import static java.nio.file.StandardOpenOption.*;
+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.nio.file.Path;
+import java.time.Instant;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import ctbrec.Config;
+import ctbrec.Model;
+import ctbrec.Recording;
+import ctbrec.Settings;
+import ctbrec.sites.Site;
+import ctbrec.sites.chaturbate.Chaturbate;
+
+public class RenameSingleFileTest {
+
+ private Path baseDir;
+ private Path recDir;
+ private File original;
+ private File postProcessed;
+ private Instant now = Instant.now();
+
+ @Before
+ public void setup() throws IOException {
+ baseDir = Files.createTempDirectory("ctbrec_test_");
+ recDir = baseDir.resolve("recordings");
+ original = new File(recDir.toFile(), "original.ts");
+ postProcessed = new File(recDir.toFile(), "postProcessed.ts");
+ Files.createDirectories(original.getParentFile().toPath());
+ Files.write(original.toPath(), "foobar".getBytes(UTF_8), CREATE_NEW, WRITE, TRUNCATE_EXISTING);
+ Files.write(postProcessed.toPath(), "foobar".getBytes(UTF_8), CREATE_NEW, WRITE, TRUNCATE_EXISTING);
+ }
+
+ @After
+ public void teardown() throws IOException {
+ FileUtils.deleteDirectory(baseDir.toFile());
+ }
+
+ @Test
+ public void testOriginalFileReplacement() throws IOException {
+ Config config = mockConfig();
+
+ Recording rec = new Recording();
+ rec.setModel(mockModel());
+ rec.setAbsoluteFile(original);
+ rec.setStartDate(now);
+ Rename pp = new Rename();
+ pp.postprocess(rec, config);
+
+ Matcher m = Pattern.compile("Mockita_\\d{4}-\\d{2}-\\d{2}_\\d{2}-\\d{2}-\\d{2}\\.ts").matcher(rec.getAbsoluteFile().getName());
+ assertTrue(m.matches());
+ assertEquals(rec.getAbsoluteFile(), rec.getPostProcessedFile());
+ assertNotEquals(rec.getAbsoluteFile(), original);
+ }
+
+ @Test
+ public void testEarlyExit() throws IOException {
+ Config config = mockConfig();
+ 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());
+ Rename pp = new Rename();
+ pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, "original.ts");
+ pp.postprocess(rec, config);
+ }
+
+ @Test
+ public void absoluteFileShouldKeepBeingOriginalIfFilesDiffer() throws IOException {
+ Config config = mockConfig();
+ 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());
+ Rename pp = new Rename();
+ pp.postprocess(rec, config);
+ }
+
+ @Test
+ public void testToString() {
+ Rename pp = new Rename();
+ assertEquals("rename", pp.toString());
+
+ pp.getConfig().put(Rename.FILE_NAME_TEMPLATE, Rename.DEFAULT);
+ assertEquals("rename [${modelSanitizedName}_${localDateTime}.${fileSuffix}]", pp.toString());
+ }
+
+ Config mockConfig() {
+ Config config = mock(Config.class);
+ when(config.getSettings()).thenReturn(mockSettings());
+ when(config.getModelNotes(any())).thenReturn("tag, foo, bar");
+ return config;
+ }
+
+ Model mockModel() {
+ Site site = new Chaturbate();
+ Model model = site.createModel("Mockita");
+ model.setDisplayName("Mockita Boobilicious");
+ return model;
+ }
+
+ Settings mockSettings() {
+ Settings settings = new Settings();
+ settings.recordingsDir = recDir.toString();
+ return settings;
+ }
+}
diff --git a/master/pom.xml b/master/pom.xml
index f55c7825..68ef277c 100644
--- a/master/pom.xml
+++ b/master/pom.xml
@@ -26,6 +26,14 @@
maven-assembly-plugin
3.1.0
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+ true
+
+
@@ -114,6 +122,12 @@
4.12
test
+
+ org.mockito
+ mockito-core
+ 3.5.11
+ test
+
org.eclipse.jetty
jetty-server
@@ -126,4 +140,8 @@
+
+
+
+