1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.core.appender;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertFalse;
14 import static org.junit.Assert.assertTrue;
15
16 import java.io.File;
17 import java.util.List;
18 import java.util.Random;
19
20 import org.junit.Test;
21
22 import ch.qos.logback.core.AppenderBase;
23 import ch.qos.logback.core.Context;
24 import ch.qos.logback.core.ContextBase;
25 import ch.qos.logback.core.FileAppender;
26 import ch.qos.logback.core.layout.DummyLayout;
27 import ch.qos.logback.core.layout.NopLayout;
28 import ch.qos.logback.core.status.Status;
29 import ch.qos.logback.core.status.StatusManager;
30 import ch.qos.logback.core.util.Constants;
31 import ch.qos.logback.core.util.FileUtil;
32
33 public class FileAppenderTest extends AbstractAppenderTest<Object> {
34
35 int diff = new Random().nextInt(100);
36 Context context = new ContextBase();
37
38 protected AppenderBase<Object> getAppender() {
39 return new FileAppender<Object>();
40 }
41
42 protected AppenderBase<Object> getConfiguredAppender() {
43 FileAppender<Object> appender = new FileAppender<Object>();
44 appender.setLayout(new NopLayout<Object>());
45 appender.setFile("temp.log");
46 appender.setName("temp.log");
47 appender.setContext(context);
48 appender.start();
49 return appender;
50 }
51
52 @Test
53 public void smoke() {
54 String filename = Constants.OUTPUT_DIR_PREFIX + "temp.log";
55
56 FileAppender<Object> appender = new FileAppender<Object>();
57 appender.setLayout(new DummyLayout<Object>());
58 appender.setAppend(false);
59 appender.setFile(filename);
60 appender.setName("temp.log");
61 appender.setContext(context);
62 appender.start();
63 appender.doAppend(new Object());
64 appender.stop();
65
66 File file = new File(filename);
67 assertTrue(file.exists());
68 assertTrue("failed to delete " + file.getAbsolutePath(), file.delete());
69 }
70
71 @Test
72 public void testCreateParentFolders() {
73 String filename = Constants.OUTPUT_DIR_PREFIX + "/fat" + diff
74 + "/testing.txt";
75 File file = new File(filename);
76 FileAppender<Object> appender = new FileAppender<Object>();
77 appender.setLayout(new DummyLayout<Object>());
78 appender.setAppend(false);
79 appender.setFile(filename);
80 appender.setName("testCreateParentFolders");
81 appender.setContext(context);
82 appender.start();
83 appender.doAppend(new Object());
84 appender.stop();
85 assertFalse(FileUtil.mustCreateParentDirectories(file));
86 assertTrue(file.exists());
87
88
89 assertTrue("failed to delete " + file.getAbsolutePath(), file.delete());
90 File parent = file.getParentFile();
91 assertTrue("failed to delete " + parent.getAbsolutePath(), parent.delete());
92 }
93
94 @Test
95 public void testPrudentModeLogicalImplications() {
96 String filename = Constants.OUTPUT_DIR_PREFIX + diff + "testing.txt";
97 File file = new File(filename);
98 FileAppender<Object> appender = new FileAppender<Object>();
99 appender.setLayout(new DummyLayout<Object>());
100 appender.setFile(filename);
101 appender.setName("testPrudentMode");
102 appender.setContext(context);
103
104 appender.setAppend(false);
105 appender.setImmediateFlush(false);
106 appender.setBufferedIO(true);
107 appender.setPrudent(true);
108 appender.start();
109
110 assertTrue(appender.getImmediateFlush());
111 assertTrue(appender.isAppend());
112 assertFalse(appender.isBufferedIO());
113
114 StatusManager sm = context.getStatusManager();
115 assertEquals(Status.WARN, sm.getLevel());
116 List<Status> statusList = sm.getCopyOfStatusList();
117 assertTrue("Expecting status list size to be larger than 3, but was "
118 + statusList.size(), statusList.size() > 3);
119 String msg1 = statusList.get(1).getMessage();
120
121 assertTrue("Got message [" + msg1 + "]", msg1
122 .startsWith("Setting \"Append\" property"));
123
124 appender.doAppend(new Object());
125 appender.stop();
126 assertTrue(file.exists());
127 assertTrue("failed to delete " + file.getAbsolutePath(), file.delete());
128 }
129 }