/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2015, QOS.ch. All rights reserved. * * This program and the accompanying materials are dual-licensed under * either the terms of the Eclipse Public License v1.0 as published by * the Eclipse Foundation * * or (per the licensee's choosing) * * under the terms of the GNU Lesser General Public License version 2.1 * as published by the Free Software Foundation. */ package ch.qos.logback.access.sift; import static org.junit.Assert.assertEquals; import java.net.HttpURLConnection; import java.net.URL; import java.util.LinkedHashSet; import java.util.Set; import ch.qos.logback.access.jetty.JettyFixtureBase; import org.junit.After; import org.junit.Before; import org.junit.Test; import ch.qos.logback.access.jetty.RequestLogImpl; import ch.qos.logback.access.spi.IAccessEvent; import ch.qos.logback.access.spi.Util; import ch.qos.logback.core.read.ListAppender; import ch.qos.logback.core.testUtil.RandomUtil; import ch.qos.logback.core.util.StatusPrinter; public class SiftingAppenderTest { static final String PREFIX = "src/test/input/jetty/"; static int RANDOM_SERVER_PORT = RandomUtil.getRandomServerPort(); JettyFixtureBase jettyFixture; RequestLogImpl rli = new RequestLogImpl(); @Before public void startServer() throws Exception { jettyFixture = new JettyFixtureBase(rli, RANDOM_SERVER_PORT); } @After public void stopServer() throws Exception { if (jettyFixture != null) { jettyFixture.stop(); } } @Test public void invokingDifferentPathShouldBeSiftedAccordingly() throws Exception { rli.setFileName(PREFIX + "sifting.xml"); jettyFixture.start(); invokeServer("/"); invokeServer("/x"); invokeServer("/x"); invokeServer("/y"); StatusPrinter.print(rli); SiftingAppender siftingAppender = (SiftingAppender) rli.getAppender("SIFTING"); Set<String> keySet = siftingAppender.getAppenderTracker().allKeys(); assertEquals(3, keySet.size()); Set<String> witnessSet = new LinkedHashSet<String>(); witnessSet.add("NA"); witnessSet.add("x"); witnessSet.add("y"); assertEquals(witnessSet, keySet); check(siftingAppender, "NA", 1); check(siftingAppender, "x", 2); check(siftingAppender, "y", 1); } private void check(SiftingAppender siftingAppender, String key, int expectedCount) { ListAppender<IAccessEvent> listAppender = (ListAppender<IAccessEvent>) siftingAppender.getAppenderTracker().find(key); assertEquals(expectedCount, listAppender.list.size()); } void invokeServer(String uri) throws Exception { URL url = new URL("http://localhost:" + RANDOM_SERVER_PORT + uri); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); Util.readToString(connection.getInputStream()); Thread.sleep(10); } }