1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.access.sift;
11
12 import static org.junit.Assert.assertEquals;
13
14 import java.net.HttpURLConnection;
15 import java.net.URL;
16 import java.util.ArrayList;
17 import java.util.List;
18
19 import org.junit.After;
20 import org.junit.Before;
21 import org.junit.Test;
22
23 import ch.qos.logback.access.jetty.RequestLogImpl;
24 import ch.qos.logback.access.spi.AccessEvent;
25 import ch.qos.logback.access.spi.Util;
26 import ch.qos.logback.core.read.ListAppender;
27 import ch.qos.logback.core.testUtil.RandomUtil;
28 import ch.qos.logback.core.util.StatusPrinter;
29
30 public class SiftingAppenderTest {
31 static final String PREFIX = "src/test/input/jetty/";
32 static int RANDOM_SERVER_PORT = RandomUtil.getRandomServerPort();
33
34 JettyFixture jettyFixture;
35 RequestLogImpl rli = new RequestLogImpl();
36
37 @Before
38 public void startServer() throws Exception {
39 jettyFixture = new JettyFixture(rli, RANDOM_SERVER_PORT);
40
41 }
42
43 @After
44 public void stopServer() throws Exception {
45 if (jettyFixture != null) {
46 jettyFixture.stop();
47 }
48 }
49
50 @Test
51 public void test() throws Exception {
52 rli.setFileName(PREFIX + "sifting.xml");
53 jettyFixture.start();
54
55
56 StatusPrinter.print(rli);
57 invokeServer("/");
58 invokeServer("/x");
59 invokeServer("/x");
60 invokeServer("/y");
61
62
63 SiftingAppender siftingAppender = (SiftingAppender) rli
64 .getAppender("SIFTING");
65 List<String> keyList = siftingAppender.getAppenderTracker().keyList();
66 assertEquals(3, keyList.size());
67
68 List<String> witnessList = new ArrayList<String>();
69 witnessList.add("NA");
70 witnessList.add("x");
71 witnessList.add("y");
72 assertEquals(witnessList, keyList);
73
74 long now = System.currentTimeMillis();
75 {
76 ListAppender<AccessEvent> listAppender = (ListAppender<AccessEvent>) siftingAppender
77 .getAppenderTracker().get("NA", now);
78 assertEquals(1, listAppender.list.size());
79 }
80
81 {
82 ListAppender<AccessEvent> listAppender = (ListAppender<AccessEvent>) siftingAppender
83 .getAppenderTracker().get("x", now);
84 assertEquals(2, listAppender.list.size());
85 }
86 {
87 ListAppender<AccessEvent> listAppender = (ListAppender<AccessEvent>) siftingAppender
88 .getAppenderTracker().get("y", now);
89 assertEquals(1, listAppender.list.size());
90 }
91 }
92
93 void invokeServer(String uri) throws Exception {
94 URL url = new URL("http://localhost:" + RANDOM_SERVER_PORT + uri);
95 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
96 connection.setDoInput(true);
97 Util.readToString(connection.getInputStream());
98 Thread.sleep(30);
99 }
100 }