aboutsummaryrefslogtreecommitdiffstats
path: root/logserver
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2019-05-22 12:07:27 +0000
committerArne Juul <arnej@yahoo-inc.com>2019-05-22 12:07:27 +0000
commit8506cbff394e213d9836b4d0f9e0c5f0463f57e7 (patch)
treef1d59a2a8547982bc48ccfbdc85b720b69a592b2 /logserver
parent9a0e3cbb75a37d452e6e48ee80ffa2fb896ceaf9 (diff)
add testcase for FilesArchived class
Diffstat (limited to 'logserver')
-rw-r--r--logserver/src/test/java/com/yahoo/logserver/handlers/archive/FilesArchivedTestCase.java126
1 files changed, 126 insertions, 0 deletions
diff --git a/logserver/src/test/java/com/yahoo/logserver/handlers/archive/FilesArchivedTestCase.java b/logserver/src/test/java/com/yahoo/logserver/handlers/archive/FilesArchivedTestCase.java
new file mode 100644
index 00000000000..c4f60e36d64
--- /dev/null
+++ b/logserver/src/test/java/com/yahoo/logserver/handlers/archive/FilesArchivedTestCase.java
@@ -0,0 +1,126 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.logserver.handlers.archive;
+
+import com.yahoo.io.IOUtils;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author Arne Juul
+ */
+public class FilesArchivedTestCase {
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ private void makeLogfile(File dir, String name, long hours) throws IOException {
+ File f = new File(dir, name);
+ f.getParentFile().mkdirs();
+ new FileWriter(f).write("foo bar baz\n");
+ long now = System.currentTimeMillis();
+ f.setLastModified(now - (hours * 3600 * 1000));
+ }
+
+ void checkExist(File dir, String name) {
+ assertTrue(new File(dir, name).isFile());
+ }
+ void checkNoExist(File dir, String name) {
+ assertFalse(new File(dir, name).isFile());
+ }
+
+ @Test
+ public void testMaintenance() throws java.io.IOException {
+ File tmpDir = temporaryFolder.newFolder();
+ try {
+ makeLogfile(tmpDir, "2018/11/20/13-0", 35*24);
+ makeLogfile(tmpDir, "2018/11/21/13-0", 34*24);
+ makeLogfile(tmpDir, "2018/12/28/13-0", 3*24);
+ makeLogfile(tmpDir, "2018/12/29/13-0", 2*24);
+ makeLogfile(tmpDir, "2018/12/30/13-0", 1*24);
+ makeLogfile(tmpDir, "2018/12/31/14-0", 3);
+ makeLogfile(tmpDir, "2018/12/31/16-0", 1);
+ makeLogfile(tmpDir, "2018/12/31/17-0", 0);
+ dumpFiles(tmpDir, "before archive maintenance");
+ FilesArchived a = new FilesArchived(tmpDir);
+ dumpFiles(tmpDir, "after archive maintenance");
+ checkExist(tmpDir, "2018/12/31/17-0");
+ checkExist(tmpDir, "2018/12/31/16-0");
+ checkExist(tmpDir, "2018/12/31/14-0.gz");
+ checkExist(tmpDir, "2018/12/28/13-0.gz");
+ checkExist(tmpDir, "2018/12/29/13-0.gz");
+ checkExist(tmpDir, "2018/12/30/13-0.gz");
+
+ checkNoExist(tmpDir, "2018/12/31/17-0.gz");
+ checkNoExist(tmpDir, "2018/12/31/16-0.gz");
+ checkNoExist(tmpDir, "2018/12/31/14-0");
+ checkNoExist(tmpDir, "2018/12/28/13-0");
+ checkNoExist(tmpDir, "2018/12/29/13-0");
+ checkNoExist(tmpDir, "2018/12/30/13-0");
+
+ checkNoExist(tmpDir, "2018/11/20/13-0");
+ checkNoExist(tmpDir, "2018/11/20/13-0.gz");
+ checkNoExist(tmpDir, "2018/11/21/13-0");
+ checkNoExist(tmpDir, "2018/11/21/13-0.gz");
+
+ makeLogfile(tmpDir, "2018/12/31/16-0", 3);
+ makeLogfile(tmpDir, "2018/12/31/17-0", 3);
+ makeLogfile(tmpDir, "2018/12/31/17-1", 1);
+ makeLogfile(tmpDir, "2018/12/31/17-2", 0);
+
+ dumpFiles(tmpDir, "before second archive maintenance");
+ a.maintenance();
+ dumpFiles(tmpDir, "after second archive maintenance");
+
+ checkExist(tmpDir, "2018/12/31/17-2");
+ checkExist(tmpDir, "2018/12/31/17-1");
+ checkExist(tmpDir, "2018/12/31/16-0.gz");
+ checkExist(tmpDir, "2018/12/31/17-0.gz");
+
+ checkNoExist(tmpDir, "2018/12/31/16-0");
+ checkNoExist(tmpDir, "2018/12/31/17-0");
+ } finally {
+ IOUtils.recursiveDeleteDir(tmpDir);
+ }
+ }
+
+ private void dumpFiles(File dir, String header) {
+ System.out.println(">>> " + header + " >>> :");
+ List<String> seen = scanDir(dir);
+ seen.sort(null);
+ for (String s : seen) {
+ System.err.println(" " + s);
+ }
+ System.out.println("<<< " + header + " <<<");
+ }
+
+ private static List<String> scanDir(File top) {
+ List<String> retval = new ArrayList<>();
+ String[] names = top.list();
+ if (names != null) {
+ for (String name : names) {
+ File sub = new File(top, name);
+ if (sub.isFile()) {
+ retval.add(sub.toString());
+ } else if (sub.isDirectory()) {
+ for (String subFile : scanDir(sub)) {
+ retval.add(subFile);
+ }
+ }
+ }
+ }
+ return retval;
+ }
+
+}