1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.classic.net;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertTrue;
14
15 import org.junit.After;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.slf4j.LoggerFactory;
19
20 import ch.qos.logback.classic.Logger;
21 import ch.qos.logback.classic.LoggerContext;
22 import ch.qos.logback.classic.TestConstants;
23 import ch.qos.logback.classic.joran.JoranConfigurator;
24 import ch.qos.logback.classic.net.mock.MockSyslogServer;
25 import ch.qos.logback.core.joran.spi.JoranException;
26 import ch.qos.logback.core.net.SyslogConstants;
27 import ch.qos.logback.core.testUtil.RandomUtil;
28
29 public class SyslogAppenderTest {
30
31 @Before
32 public void setUp() throws Exception {
33 }
34
35 @After
36 public void tearDown() throws Exception {
37 }
38
39 @Test
40 public void basic() throws InterruptedException {
41 int port = RandomUtil.getRandomServerPort();
42
43 MockSyslogServer mockServer = new MockSyslogServer(1, port);
44 mockServer.start();
45
46 Thread.sleep(100);
47
48 LoggerContext lc = new LoggerContext();
49 lc.setName("test");
50 SyslogAppender sa = new SyslogAppender();
51 sa.setContext(lc);
52 sa.setSyslogHost("localhost");
53 sa.setFacility("MAIL");
54 sa.setPort(port);
55 sa.setSuffixPattern("[%thread] %logger %msg");
56 sa.start();
57 assertTrue(sa.isStarted());
58
59 String loggerName = this.getClass().getName();
60 Logger logger = lc.getLogger(loggerName);
61 logger.addAppender(sa);
62 String logMsg = "hello";
63 logger.debug(logMsg);
64
65
66
67 mockServer.join(8000);
68 assertTrue(mockServer.isFinished());
69 assertEquals(1, mockServer.getMessageList().size());
70 String msg = mockServer.getMessageList().get(0);
71
72 String threadName = Thread.currentThread().getName();
73
74 String expected = "<"
75 + (SyslogConstants.LOG_MAIL + SyslogConstants.DEBUG_SEVERITY) + ">";
76 assertTrue(msg.startsWith(expected));
77
78 String first = "<\\d{2}>\\w{3} \\d{2} \\d{2}(:\\d{2}){2} [\\w.]* ";
79 assertTrue(msg.matches(first + "\\[" + threadName + "\\] " + loggerName
80 + " " + logMsg));
81
82 }
83
84 @Test
85 public void tException() throws InterruptedException {
86 int port = RandomUtil.getRandomServerPort();
87
88 MockSyslogServer mockServer = new MockSyslogServer(21, port);
89 mockServer.start();
90
91 Thread.sleep(100);
92
93 LoggerContext lc = new LoggerContext();
94 lc.setName("test");
95 SyslogAppender sa = new SyslogAppender();
96 sa.setContext(lc);
97 sa.setSyslogHost("localhost");
98 sa.setFacility("MAIL");
99 sa.setPort(port);
100 sa.setSuffixPattern("[%thread] %logger %msg");
101 sa.start();
102 assertTrue(sa.isStarted());
103
104 String loggerName = this.getClass().getName();
105 Logger logger = lc.getLogger(loggerName);
106 logger.addAppender(sa);
107 String logMsg = "hello";
108 String exMsg = "just testing";
109 Exception ex = new Exception(exMsg);
110 logger.debug(logMsg, ex);
111
112
113
114
115 mockServer.join(8000);
116 assertTrue(mockServer.isFinished());
117
118
119 assertEquals(21, mockServer.getMessageList().size());
120
121
122
123
124
125 String msg = mockServer.getMessageList().get(0);
126 String expected = "<"
127 + (SyslogConstants.LOG_MAIL + SyslogConstants.DEBUG_SEVERITY) + ">";
128 assertTrue(msg.startsWith(expected));
129
130 String expectedPrefix = "<\\d{2}>\\w{3} \\d{2} \\d{2}(:\\d{2}){2} [\\w.]* ";
131 String threadName = Thread.currentThread().getName();
132 String expectedResult = expectedPrefix + "\\[" + threadName + "\\] "
133 + loggerName + " " + logMsg;
134 assertTrue(msg.matches(expectedResult));
135 }
136
137 @Test
138 public void LBCLASSIC_50() throws JoranException {
139
140 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
141
142 JoranConfigurator configurator = new JoranConfigurator();
143 configurator.setContext(lc);
144 lc.reset();
145 configurator.doConfigure(TestConstants.JORAN_ONPUT_PREFIX
146 + "/syslog_LBCLASSIC_50.xml");
147
148 org.slf4j.Logger logger = LoggerFactory.getLogger(this.getClass());
149 logger.info("hello");
150 }
151 }