1
2
3
4
5
6
7
8
9
10
11 package psiprobe.tools.logging.logback;
12
13 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
14 import static org.junit.jupiter.api.Assertions.assertEquals;
15 import static org.junit.jupiter.api.Assertions.assertNull;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.when;
18
19 import ch.qos.logback.core.FileAppender;
20 import ch.qos.logback.core.OutputStreamAppender;
21 import ch.qos.logback.core.encoder.Encoder;
22 import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
23
24 import com.codebox.bean.JavaBeanTester;
25
26 import java.nio.charset.StandardCharsets;
27 import java.nio.file.Path;
28
29 import org.junit.jupiter.api.BeforeEach;
30 import org.junit.jupiter.api.Test;
31
32
33
34
35 class LogbackAppenderAccessorTest {
36
37 private LogbackAppenderAccessor accessor;
38 private LogbackLoggerAccessor loggerAccessor;
39
40 @BeforeEach
41 void setUp() {
42 accessor = new LogbackAppenderAccessor();
43 loggerAccessor = mock(LogbackLoggerAccessor.class);
44 accessor.setLoggerAccessor(loggerAccessor);
45 }
46
47 @Test
48 void testLoggerAccessor() {
49 assertEquals(loggerAccessor, accessor.getLoggerAccessor());
50 }
51
52 @Test
53 void testIsContext() {
54 when(loggerAccessor.isContext()).thenReturn(true);
55
56 assertEquals(true, accessor.isContext());
57 }
58
59 @Test
60 void testIsRoot() {
61 when(loggerAccessor.isRoot()).thenReturn(true);
62
63 assertEquals(true, accessor.isRoot());
64 }
65
66 @Test
67 void testGetName() {
68 when(loggerAccessor.getName()).thenReturn("my.logger");
69
70 assertEquals("my.logger", accessor.getName());
71 }
72
73 @Test
74 void testGetLogType() {
75 assertEquals("logback", accessor.getLogType());
76 }
77
78 @Test
79 void testGetIndex() {
80 Object target = mock(Object.class);
81
82 accessor.setTarget(target);
83
84
85
86 OutputStreamAppender<?> appender = new OutputStreamAppender<>();
87 appender.setName("testAppender");
88
89 accessor.setTarget(appender);
90
91 assertEquals("testAppender", accessor.getIndex());
92 }
93
94 @Test
95 void testGetIndexWhenNameIsNull() {
96 OutputStreamAppender<?> appender = new OutputStreamAppender<>();
97
98 accessor.setTarget(appender);
99
100 assertNull(accessor.getIndex());
101 }
102
103 @Test
104 void testGetFile() {
105 FileAppender<?> appender = new FileAppender<>();
106
107 Path expected = Path.of("logs").resolve("test.log");
108 appender.setFile(expected.toString());
109
110 accessor.setTarget(appender);
111
112 assertEquals(expected, accessor.getFile().toPath());
113 }
114
115 @Test
116 void testGetFileWhenFileIsNotConfigured() {
117 String originalCatalinaBase = System.getProperty("catalina.base");
118
119 try {
120 System.setProperty("catalina.base",
121 Path.of("target", "nonexistent-catalina-base").toString());
122
123 OutputStreamAppender<?> appender = new OutputStreamAppender<>();
124 appender.setName("testAppender");
125
126 accessor.setTarget(appender);
127
128 assertEquals(Path.of("stdout").toFile(), accessor.getFile());
129 } finally {
130 if (originalCatalinaBase == null) {
131 System.clearProperty("catalina.base");
132 } else {
133 System.setProperty("catalina.base", originalCatalinaBase);
134 }
135 }
136 }
137
138 @Test
139 void testGetEncoding() {
140 OutputStreamAppender appender = mock(OutputStreamAppender.class);
141 LayoutWrappingEncoder encoder = mock(LayoutWrappingEncoder.class);
142
143 when(appender.getEncoder()).thenReturn(encoder);
144 when(encoder.getCharset()).thenReturn(StandardCharsets.UTF_8);
145
146 accessor.setTarget(appender);
147
148 assertEquals("UTF-8", accessor.getEncoding());
149 }
150
151 @Test
152 void testGetEncodingWhenCharsetIsNull() {
153 OutputStreamAppender appender = mock(OutputStreamAppender.class);
154 LayoutWrappingEncoder encoder = mock(LayoutWrappingEncoder.class);
155
156 when(appender.getEncoder()).thenReturn(encoder);
157 when(encoder.getCharset()).thenReturn(null);
158
159 assertNull(accessor.getEncoding());
160 }
161
162 @Test
163 void testGetEncodingWhenEncoderIsNotLayoutWrappingEncoder() {
164 OutputStreamAppender appender = mock(OutputStreamAppender.class);
165 Encoder encoder = mock(Encoder.class);
166
167 when(appender.getEncoder()).thenReturn(encoder);
168
169 accessor.setTarget(appender);
170
171 assertNull(accessor.getEncoding());
172 }
173
174 @Test
175 void testGetEncodingWhenTargetIsNotOutputStreamAppender() {
176 accessor.setTarget(new Object());
177
178 assertNull(accessor.getEncoding());
179 }
180
181 @Test
182 void testGetLevel() {
183 when(loggerAccessor.getLevel()).thenReturn("INFO");
184
185 assertEquals("INFO", accessor.getLevel());
186 }
187
188 @Test
189 void testGetValidLevels() {
190 assertArrayEquals(new String[] {"OFF", "ERROR", "WARN", "INFO", "DEBUG", "TRACE", "ALL"},
191 accessor.getValidLevels());
192 }
193
194
195
196
197 @Test
198 void javabeanTester() {
199 JavaBeanTester.builder(LogbackAppenderAccessor.class).skip("level").test();
200 }
201
202 }