Author: maarten
Date: Mon Sep 17 07:08:21 2007
New Revision: 576449
URL: http://svn.apache.org/viewvc?rev=576449&view=rev
Log:
added svn properties
Modified:
mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MDCInjectionFilterTest.java
(contents, props changed)
Modified:
mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MDCInjectionFilterTest.java
URL:
http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MDCInjectionFilterTest.java?rev=576449&r1=576448&r2=576449&view=diff
==============================================================================
---
mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MDCInjectionFilterTest.java
(original)
+++
mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MDCInjectionFilterTest.java
Mon Sep 17 07:08:21 2007
@@ -1,326 +1,326 @@
-package org.apache.mina.filter.logging;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.Level;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.DefaultIoFilterChainBuilder;
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.common.IoFilterAdapter;
-import org.apache.mina.common.IoHandlerAdapter;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolCodecFactory;
-import org.apache.mina.filter.codec.ProtocolCodecFilter;
-import org.apache.mina.filter.codec.ProtocolDecoder;
-import org.apache.mina.filter.codec.ProtocolDecoderAdapter;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.mina.filter.codec.ProtocolEncoder;
-import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.executor.ExecutorFilter;
-import org.apache.mina.filter.statistic.ProfilerTimerFilter;
-import org.apache.mina.transport.socket.nio.SocketAcceptor;
-import org.apache.mina.transport.socket.nio.SocketConnector;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Tests MDCInjectionFilter in variuos scenario's
- *
- * @author The Apache MINA Project ([EMAIL PROTECTED])
- * @version $Rev:448075 $, $Date:2006-09-20 05:26:53Z $
- */
-public class MDCInjectionFilterTest extends TestCase {
-
- private static Logger logger =
LoggerFactory.getLogger("MDCInjectionFilterTest");
- private static final int PORT = 7475;
- private static final int TIMEOUT = 5000;
-
- private MyAppender appender = new MyAppender();
- private SocketAcceptor acceptor;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- // uncomment next line if you want to see normal logging
- org.apache.log4j.Logger.getRootLogger().removeAllAppenders();
- org.apache.log4j.Logger.getRootLogger().setLevel(Level.DEBUG);
- org.apache.log4j.Logger.getRootLogger().addAppender(appender);
- acceptor = new SocketAcceptor();
- }
-
-
- @Override
- protected void tearDown() throws Exception {
- acceptor.unbind();
- super.tearDown();
- }
-
- public void testSimpleChain() throws IOException, InterruptedException {
- System.out.println("proc: " +
Runtime.getRuntime().availableProcessors());
- DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
- chain.addFirst("mdc-injector", new MDCInjectionFilter());
- chain.addLast("dummy", new DummyIoFilter());
- chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
- test(chain);
- }
-
- public void testExecutorFilterAtTheEnd() throws IOException,
InterruptedException {
- DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
- MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
- chain.addFirst("mdc-injector1", mdcInjectionFilter);
- chain.addLast("dummy", new DummyIoFilter());
- chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
- chain.addLast("executor" , new ExecutorFilter());
- chain.addLast("mdc-injector2", mdcInjectionFilter);
- test(chain);
- }
-
- public void testExecutorFilterAtBeginning() throws IOException,
InterruptedException {
- DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
- MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
- chain.addLast("executor" , new ExecutorFilter());
- chain.addLast("mdc-injector", mdcInjectionFilter);
- chain.addLast("dummy", new DummyIoFilter());
- chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
- test(chain);
- }
-
- public void testExecutorFilterBeforeProtocol() throws IOException,
InterruptedException {
- DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
- MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
- chain.addLast("executor" , new ExecutorFilter());
- chain.addLast("mdc-injector", mdcInjectionFilter);
- chain.addLast("dummy", new DummyIoFilter());
- chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
- test(chain);
- }
-
- public void testMultipleFilters() throws IOException, InterruptedException
{
- DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
- MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
- chain.addLast("executor" , new ExecutorFilter());
- chain.addLast("mdc-injector", mdcInjectionFilter);
- chain.addLast("profiler", new ProfilerTimerFilter());
- chain.addLast("dummy", new DummyIoFilter());
- chain.addLast("logger", new LoggingFilter());
- chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
- test(chain);
- }
-
-
- public void testTwoExecutorFilters() throws IOException,
InterruptedException {
- DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
- MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
- chain.addLast("executor1" , new ExecutorFilter());
- chain.addLast("mdc-injector1", mdcInjectionFilter);
- chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
- chain.addLast("dummy", new DummyIoFilter());
- chain.addLast("executor2" , new ExecutorFilter());
- chain.addLast("mdc-injector2", mdcInjectionFilter);
- test(chain);
- }
-
- private void test(DefaultIoFilterChainBuilder chain) throws IOException,
InterruptedException {
- // configure the server
- SimpleIoHandler simpleIoHandler = new SimpleIoHandler();
- acceptor.setHandler(simpleIoHandler);
- acceptor.setLocalAddress(new InetSocketAddress(PORT));
- acceptor.bind();
- acceptor.setFilterChainBuilder(chain);
- // create some clients
- SocketConnector connector = new SocketConnector();
- connector.setHandler(new IoHandlerAdapter());
- SocketAddress remoteAddressClients[] = new SocketAddress[2];
- remoteAddressClients[0] = connectAndWrite(connector,0);
- remoteAddressClients[1] = connectAndWrite(connector,1);
- // wait until Iohandler has received all events
- simpleIoHandler.messageSentLatch.await();
- simpleIoHandler.sessionIdleLatch.await();
- simpleIoHandler.sessionClosedLatch.await();
-
- // make a copy to prevent ConcurrentModificationException
- List<LoggingEvent> events = new
ArrayList<LoggingEvent>(appender.events);
-
- // verify that all logging events have correct MDC
- for (LoggingEvent event : events) {
- if (!ExecutorFilter.class.getName().equals(event.getLoggerName()))
{
- Object remoteAddress = event.getMDC("remoteAddress");
- assertNotNull(
- "MDC[remoteAddress] not set for [" + event.getMessage() +
"]",
- remoteAddress);
- assertNotNull(
- "MDC[remotePort] not set for [" + event.getMessage() + "]",
- event.getMDC("remotePort"));
- assertEquals(
- "every event should have MDC[IoHandlerClass]",
- SimpleIoHandler.class.getName(),
- event.getMDC("IoHandlerClass") );
- }
- }
- // asert we have received all expected logging events for each client
- for (int i = 0; i < remoteAddressClients.length; i++) {
- SocketAddress remoteAddressClient = remoteAddressClients[i];
- assertEventExists(events, "sessionCreated", remoteAddressClient,
null);
- assertEventExists(events, "sessionOpened", remoteAddressClient,
null);
- assertEventExists(events, "decode", remoteAddressClient, null);
- assertEventExists(events, "messageReceived", remoteAddressClient,
null);
- assertEventExists(events, "encode", remoteAddressClient, null);
- assertEventExists(events, "exceptionCaught", remoteAddressClient,
"user-" + i);
- assertEventExists(events, "messageSent", remoteAddressClient,
"user-" + i);
- assertEventExists(events, "sessionIdle", remoteAddressClient,
"user-" + i);
- assertEventExists(events, "sessionClosed", remoteAddressClient,
"user-" + i);
- assertEventExists(events, "sessionClosed", remoteAddressClient,
"user-" + i);
- assertEventExists(events, "DummyIoFilter.sessionOpened",
remoteAddressClient, "user-" + i);
- }
- }
-
- private SocketAddress connectAndWrite(SocketConnector connector, int
clientNr) {
- ConnectFuture connectFuture = connector.connect(new
InetSocketAddress("localhost",PORT));
- connectFuture.awaitUninterruptibly(TIMEOUT);
- ByteBuffer message = ByteBuffer.allocate(4).putInt(clientNr).flip();
- IoSession session = connectFuture.getSession();
- session.write(message).awaitUninterruptibly(TIMEOUT);
- return session.getLocalAddress();
- }
-
- private void assertEventExists(List<LoggingEvent> events,
- String message,
- SocketAddress address,
- String user) {
- InetSocketAddress remoteAddress = (InetSocketAddress) address;
- for (LoggingEvent event : events) {
- if (event.getMessage().equals(message) &&
- event.getMDC("remoteAddress").equals(remoteAddress.toString())
&&
-
event.getMDC("remoteIp").equals(remoteAddress.getAddress().getHostAddress()) &&
- event.getMDC("remotePort").equals(remoteAddress.getPort()+"")
) {
- if (user == null && event.getMDC("user") == null) {
- return;
- }
- if (user != null && user.equals(event.getMDC("user"))) {
- return;
- }
- return;
- }
- }
- fail("No LoggingEvent found from [" + remoteAddress +"] with message
[" + message + "]");
- }
-
- private static class SimpleIoHandler extends IoHandlerAdapter {
-
- CountDownLatch sessionIdleLatch = new CountDownLatch(2);
- CountDownLatch sessionClosedLatch = new CountDownLatch(2);
- CountDownLatch messageSentLatch = new CountDownLatch(2);
-
- @Override
- public void sessionCreated(IoSession session) throws Exception {
- logger.info("sessionCreated");
- session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 1);
- }
-
- @Override
- public void sessionOpened(IoSession session) throws Exception {
- logger.info("sessionOpened");
- }
-
- @Override
- public void sessionClosed(IoSession session) throws Exception {
- logger.info("sessionClosed");
- sessionClosedLatch.countDown();
- }
-
- @Override
- public void sessionIdle(IoSession session, IdleStatus status) throws
Exception {
- logger.info("sessionIdle");
- sessionIdleLatch.countDown();
- session.close();
- }
-
- @Override
- public void exceptionCaught(IoSession session, Throwable cause) throws
Exception {
- logger.info("exceptionCaught", cause);
- }
-
- @Override
- public void messageReceived(IoSession session, Object message) throws
Exception {
- logger.info("messageReceived");
- // adding a custom property to the context
- String user = "user-" + message;
- MDCInjectionFilter.setProperty(session, "user", user);
- logger.info("logged-in: " + user);
- session.write(message);
- throw new RuntimeException("just a test, forcing exceptionCaught");
- }
-
- @Override
- public void messageSent(IoSession session, Object message) throws
Exception {
- logger.info("messageSent");
- messageSentLatch.countDown();
- }
- }
-
- private static class DummyProtocolCodecFactory implements
ProtocolCodecFactory {
-
- public ProtocolEncoder getEncoder() throws Exception {
- return new ProtocolEncoderAdapter() {
- public void encode(IoSession session, Object message,
ProtocolEncoderOutput out) throws Exception {
- logger.info("encode");
- ByteBuffer buffer =
ByteBuffer.allocate(4).putInt(123).flip();
- out.write(buffer);
- }
- };
- }
-
- public ProtocolDecoder getDecoder() throws Exception {
- return new ProtocolDecoderAdapter() {
- public void decode(IoSession session, ByteBuffer in,
ProtocolDecoderOutput out) throws Exception {
- if (in.remaining() >= 4) {
- int value = in.getInt();
- logger.info("decode");
- out.write(value);
- }
- }
- };
- }
- }
-
- private static class MyAppender extends AppenderSkeleton {
-
- List<LoggingEvent> events = Collections.synchronizedList(new
ArrayList<LoggingEvent>());
-
- @Override
- protected void append(final LoggingEvent loggingEvent) {
- loggingEvent.getMDCCopy();
- events.add(loggingEvent);
- }
-
- @Override
- public boolean requiresLayout() {
- return false;
- }
-
- @Override
- public void close() {
- }
- }
-
- private static class DummyIoFilter extends IoFilterAdapter {
- @Override
- public void sessionOpened(NextFilter nextFilter, IoSession session)
throws Exception {
- logger.info("DummyIoFilter.sessionOpened");
- nextFilter.sessionOpened(session);
- }
- }
-
-}
+package org.apache.mina.filter.logging;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.Level;
+import org.apache.log4j.spi.LoggingEvent;
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.DefaultIoFilterChainBuilder;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoFilterAdapter;
+import org.apache.mina.common.IoHandlerAdapter;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderAdapter;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+import org.apache.mina.filter.executor.ExecutorFilter;
+import org.apache.mina.filter.statistic.ProfilerTimerFilter;
+import org.apache.mina.transport.socket.nio.SocketAcceptor;
+import org.apache.mina.transport.socket.nio.SocketConnector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Tests MDCInjectionFilter in variuos scenario's
+ *
+ * @author The Apache MINA Project ([EMAIL PROTECTED])
+ * @version $Rev$, $Date$
+ */
+public class MDCInjectionFilterTest extends TestCase {
+
+ private static Logger logger =
LoggerFactory.getLogger("MDCInjectionFilterTest");
+ private static final int PORT = 7475;
+ private static final int TIMEOUT = 5000;
+
+ private MyAppender appender = new MyAppender();
+ private SocketAcceptor acceptor;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ // uncomment next line if you want to see normal logging
+ org.apache.log4j.Logger.getRootLogger().removeAllAppenders();
+ org.apache.log4j.Logger.getRootLogger().setLevel(Level.DEBUG);
+ org.apache.log4j.Logger.getRootLogger().addAppender(appender);
+ acceptor = new SocketAcceptor();
+ }
+
+
+ @Override
+ protected void tearDown() throws Exception {
+ acceptor.unbind();
+ super.tearDown();
+ }
+
+ public void testSimpleChain() throws IOException, InterruptedException {
+ System.out.println("proc: " +
Runtime.getRuntime().availableProcessors());
+ DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
+ chain.addFirst("mdc-injector", new MDCInjectionFilter());
+ chain.addLast("dummy", new DummyIoFilter());
+ chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
+ test(chain);
+ }
+
+ public void testExecutorFilterAtTheEnd() throws IOException,
InterruptedException {
+ DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
+ MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
+ chain.addFirst("mdc-injector1", mdcInjectionFilter);
+ chain.addLast("dummy", new DummyIoFilter());
+ chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
+ chain.addLast("executor" , new ExecutorFilter());
+ chain.addLast("mdc-injector2", mdcInjectionFilter);
+ test(chain);
+ }
+
+ public void testExecutorFilterAtBeginning() throws IOException,
InterruptedException {
+ DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
+ MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
+ chain.addLast("executor" , new ExecutorFilter());
+ chain.addLast("mdc-injector", mdcInjectionFilter);
+ chain.addLast("dummy", new DummyIoFilter());
+ chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
+ test(chain);
+ }
+
+ public void testExecutorFilterBeforeProtocol() throws IOException,
InterruptedException {
+ DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
+ MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
+ chain.addLast("executor" , new ExecutorFilter());
+ chain.addLast("mdc-injector", mdcInjectionFilter);
+ chain.addLast("dummy", new DummyIoFilter());
+ chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
+ test(chain);
+ }
+
+ public void testMultipleFilters() throws IOException, InterruptedException
{
+ DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
+ MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
+ chain.addLast("executor" , new ExecutorFilter());
+ chain.addLast("mdc-injector", mdcInjectionFilter);
+ chain.addLast("profiler", new ProfilerTimerFilter());
+ chain.addLast("dummy", new DummyIoFilter());
+ chain.addLast("logger", new LoggingFilter());
+ chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
+ test(chain);
+ }
+
+
+ public void testTwoExecutorFilters() throws IOException,
InterruptedException {
+ DefaultIoFilterChainBuilder chain = new DefaultIoFilterChainBuilder();
+ MDCInjectionFilter mdcInjectionFilter = new MDCInjectionFilter();
+ chain.addLast("executor1" , new ExecutorFilter());
+ chain.addLast("mdc-injector1", mdcInjectionFilter);
+ chain.addLast("protocol", new ProtocolCodecFilter(new
DummyProtocolCodecFactory()));
+ chain.addLast("dummy", new DummyIoFilter());
+ chain.addLast("executor2" , new ExecutorFilter());
+ chain.addLast("mdc-injector2", mdcInjectionFilter);
+ test(chain);
+ }
+
+ private void test(DefaultIoFilterChainBuilder chain) throws IOException,
InterruptedException {
+ // configure the server
+ SimpleIoHandler simpleIoHandler = new SimpleIoHandler();
+ acceptor.setHandler(simpleIoHandler);
+ acceptor.setLocalAddress(new InetSocketAddress(PORT));
+ acceptor.bind();
+ acceptor.setFilterChainBuilder(chain);
+ // create some clients
+ SocketConnector connector = new SocketConnector();
+ connector.setHandler(new IoHandlerAdapter());
+ SocketAddress remoteAddressClients[] = new SocketAddress[2];
+ remoteAddressClients[0] = connectAndWrite(connector,0);
+ remoteAddressClients[1] = connectAndWrite(connector,1);
+ // wait until Iohandler has received all events
+ simpleIoHandler.messageSentLatch.await();
+ simpleIoHandler.sessionIdleLatch.await();
+ simpleIoHandler.sessionClosedLatch.await();
+
+ // make a copy to prevent ConcurrentModificationException
+ List<LoggingEvent> events = new
ArrayList<LoggingEvent>(appender.events);
+
+ // verify that all logging events have correct MDC
+ for (LoggingEvent event : events) {
+ if (!ExecutorFilter.class.getName().equals(event.getLoggerName()))
{
+ Object remoteAddress = event.getMDC("remoteAddress");
+ assertNotNull(
+ "MDC[remoteAddress] not set for [" + event.getMessage() +
"]",
+ remoteAddress);
+ assertNotNull(
+ "MDC[remotePort] not set for [" + event.getMessage() + "]",
+ event.getMDC("remotePort"));
+ assertEquals(
+ "every event should have MDC[IoHandlerClass]",
+ SimpleIoHandler.class.getName(),
+ event.getMDC("IoHandlerClass") );
+ }
+ }
+ // asert we have received all expected logging events for each client
+ for (int i = 0; i < remoteAddressClients.length; i++) {
+ SocketAddress remoteAddressClient = remoteAddressClients[i];
+ assertEventExists(events, "sessionCreated", remoteAddressClient,
null);
+ assertEventExists(events, "sessionOpened", remoteAddressClient,
null);
+ assertEventExists(events, "decode", remoteAddressClient, null);
+ assertEventExists(events, "messageReceived", remoteAddressClient,
null);
+ assertEventExists(events, "encode", remoteAddressClient, null);
+ assertEventExists(events, "exceptionCaught", remoteAddressClient,
"user-" + i);
+ assertEventExists(events, "messageSent", remoteAddressClient,
"user-" + i);
+ assertEventExists(events, "sessionIdle", remoteAddressClient,
"user-" + i);
+ assertEventExists(events, "sessionClosed", remoteAddressClient,
"user-" + i);
+ assertEventExists(events, "sessionClosed", remoteAddressClient,
"user-" + i);
+ assertEventExists(events, "DummyIoFilter.sessionOpened",
remoteAddressClient, "user-" + i);
+ }
+ }
+
+ private SocketAddress connectAndWrite(SocketConnector connector, int
clientNr) {
+ ConnectFuture connectFuture = connector.connect(new
InetSocketAddress("localhost",PORT));
+ connectFuture.awaitUninterruptibly(TIMEOUT);
+ ByteBuffer message = ByteBuffer.allocate(4).putInt(clientNr).flip();
+ IoSession session = connectFuture.getSession();
+ session.write(message).awaitUninterruptibly(TIMEOUT);
+ return session.getLocalAddress();
+ }
+
+ private void assertEventExists(List<LoggingEvent> events,
+ String message,
+ SocketAddress address,
+ String user) {
+ InetSocketAddress remoteAddress = (InetSocketAddress) address;
+ for (LoggingEvent event : events) {
+ if (event.getMessage().equals(message) &&
+ event.getMDC("remoteAddress").equals(remoteAddress.toString())
&&
+
event.getMDC("remoteIp").equals(remoteAddress.getAddress().getHostAddress()) &&
+ event.getMDC("remotePort").equals(remoteAddress.getPort()+"")
) {
+ if (user == null && event.getMDC("user") == null) {
+ return;
+ }
+ if (user != null && user.equals(event.getMDC("user"))) {
+ return;
+ }
+ return;
+ }
+ }
+ fail("No LoggingEvent found from [" + remoteAddress +"] with message
[" + message + "]");
+ }
+
+ private static class SimpleIoHandler extends IoHandlerAdapter {
+
+ CountDownLatch sessionIdleLatch = new CountDownLatch(2);
+ CountDownLatch sessionClosedLatch = new CountDownLatch(2);
+ CountDownLatch messageSentLatch = new CountDownLatch(2);
+
+ @Override
+ public void sessionCreated(IoSession session) throws Exception {
+ logger.info("sessionCreated");
+ session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 1);
+ }
+
+ @Override
+ public void sessionOpened(IoSession session) throws Exception {
+ logger.info("sessionOpened");
+ }
+
+ @Override
+ public void sessionClosed(IoSession session) throws Exception {
+ logger.info("sessionClosed");
+ sessionClosedLatch.countDown();
+ }
+
+ @Override
+ public void sessionIdle(IoSession session, IdleStatus status) throws
Exception {
+ logger.info("sessionIdle");
+ sessionIdleLatch.countDown();
+ session.close();
+ }
+
+ @Override
+ public void exceptionCaught(IoSession session, Throwable cause) throws
Exception {
+ logger.info("exceptionCaught", cause);
+ }
+
+ @Override
+ public void messageReceived(IoSession session, Object message) throws
Exception {
+ logger.info("messageReceived");
+ // adding a custom property to the context
+ String user = "user-" + message;
+ MDCInjectionFilter.setProperty(session, "user", user);
+ logger.info("logged-in: " + user);
+ session.write(message);
+ throw new RuntimeException("just a test, forcing exceptionCaught");
+ }
+
+ @Override
+ public void messageSent(IoSession session, Object message) throws
Exception {
+ logger.info("messageSent");
+ messageSentLatch.countDown();
+ }
+ }
+
+ private static class DummyProtocolCodecFactory implements
ProtocolCodecFactory {
+
+ public ProtocolEncoder getEncoder() throws Exception {
+ return new ProtocolEncoderAdapter() {
+ public void encode(IoSession session, Object message,
ProtocolEncoderOutput out) throws Exception {
+ logger.info("encode");
+ ByteBuffer buffer =
ByteBuffer.allocate(4).putInt(123).flip();
+ out.write(buffer);
+ }
+ };
+ }
+
+ public ProtocolDecoder getDecoder() throws Exception {
+ return new ProtocolDecoderAdapter() {
+ public void decode(IoSession session, ByteBuffer in,
ProtocolDecoderOutput out) throws Exception {
+ if (in.remaining() >= 4) {
+ int value = in.getInt();
+ logger.info("decode");
+ out.write(value);
+ }
+ }
+ };
+ }
+ }
+
+ private static class MyAppender extends AppenderSkeleton {
+
+ List<LoggingEvent> events = Collections.synchronizedList(new
ArrayList<LoggingEvent>());
+
+ @Override
+ protected void append(final LoggingEvent loggingEvent) {
+ loggingEvent.getMDCCopy();
+ events.add(loggingEvent);
+ }
+
+ @Override
+ public boolean requiresLayout() {
+ return false;
+ }
+
+ @Override
+ public void close() {
+ }
+ }
+
+ private static class DummyIoFilter extends IoFilterAdapter {
+ @Override
+ public void sessionOpened(NextFilter nextFilter, IoSession session)
throws Exception {
+ logger.info("DummyIoFilter.sessionOpened");
+ nextFilter.sessionOpened(session);
+ }
+ }
+
+}
Propchange:
mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MDCInjectionFilterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
mina/trunk/core/src/test/java/org/apache/mina/filter/logging/MDCInjectionFilterTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date