http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/AbstractSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/AbstractSocketServerTest.java index 0000000,0000000..dfc44ea new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/AbstractSocketServerTest.java @@@ -1,0 -1,0 +1,237 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.IOException; ++import java.io.Serializable; ++import java.util.Arrays; ++import java.util.List; ++import java.util.Map; ++ ++import org.apache.logging.log4j.Level; ++import org.apache.logging.log4j.core.Appender; ++import org.apache.logging.log4j.core.Filter; ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LogEvent; ++import org.apache.logging.log4j.core.Logger; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.appender.AppenderLoggingException; ++import org.apache.logging.log4j.core.appender.ConsoleAppender; ++import org.apache.logging.log4j.core.appender.SocketAppender; ++import org.apache.logging.log4j.core.layout.JsonLayout; ++import org.apache.logging.log4j.core.layout.PatternLayout; ++import org.apache.logging.log4j.core.layout.XmlLayout; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.apache.logging.log4j.test.AvailablePortFinder; ++import org.apache.logging.log4j.test.appender.ListAppender; ++import org.junit.After; ++import org.junit.Ignore; ++import org.junit.Test; ++ ++import static org.junit.Assert.*; ++ ++/** ++ * ++ */ ++public abstract class AbstractSocketServerTest { ++ ++ protected static Thread thread; ++ ++ private static final String MESSAGE = "This is test message"; ++ ++ private static final String MESSAGE_2 = "This is test message 2"; ++ ++ private static final String MESSAGE_WITH_SPECIAL_CHARS = "{This}\n[is]\"n\"a\"\r\ntrue:\n\ttest,\nmessage"; ++ ++ static final int PORT_NUM = AvailablePortFinder.getNextAvailable(); ++ ++ static final int PORT = PORT_NUM; ++ ++ private final LoggerContext ctx = LoggerContext.getContext(false); ++ ++ private final boolean expectLengthException; ++ ++ protected final int port; ++ ++ protected final Protocol protocol; ++ ++ private final Logger rootLogger = ctx.getLogger(AbstractSocketServerTest.class.getSimpleName()); ++ ++ protected AbstractSocketServerTest(final Protocol protocol, final int port, final boolean expectLengthException) { ++ this.protocol = protocol; ++ this.port = port; ++ this.expectLengthException = expectLengthException; ++ } ++ ++ protected Layout<String> createJsonLayout() { ++ // @formatter: off ++ return JsonLayout.newBuilder() ++ .setLocationInfo(true) ++ .setProperties(true) ++ .setPropertiesAsList(false) ++ .setComplete(false) ++ .setCompact(false) ++ .setEventEol(false) ++ .setIncludeStacktrace(true) ++ .build(); ++ // @formatter: on ++ ++ //return JsonLayout.createLayout(null, true, true, false, false, false, false, null, null, null, true); ++ } ++ ++ protected abstract Layout<? extends Serializable> createLayout(); ++ ++ protected Layout<? extends Serializable> createSerializedLayout() { ++ return null; ++ } ++ ++ protected Layout<String> createXmlLayout() { ++ return XmlLayout.createLayout(true, true, false, false, null, true); ++ } ++ ++ @After ++ public void tearDown() { ++ final Map<String, Appender> map = rootLogger.getAppenders(); ++ for (final Map.Entry<String, Appender> entry : map.entrySet()) { ++ final Appender appender = entry.getValue(); ++ rootLogger.removeAppender(appender); ++ appender.stop(); ++ } ++ } ++ ++ @Test ++ @Ignore("Broken test?") ++ public void test1000ShortMessages() throws Exception { ++ testServer(1000); ++ } ++ ++ @Test ++ @Ignore("Broken test?") ++ public void test100ShortMessages() throws Exception { ++ testServer(100); ++ } ++ ++ @Test ++ public void test10ShortMessages() throws Exception { ++ testServer(10); ++ } ++ ++ @Test ++ public void test1ShortMessages() throws Exception { ++ testServer(1); ++ } ++ ++ @Test ++ public void test2ShortMessages() throws Exception { ++ testServer(2); ++ } ++ ++ @Test ++ public void test64KBMessages() throws Exception { ++ final char[] a64K = new char[1024 * 64]; ++ Arrays.fill(a64K, 'a'); ++ final String m1 = new String(a64K); ++ final String m2 = MESSAGE_2 + m1; ++ if (expectLengthException) { ++ try { ++ testServer(m1, m2); ++ } catch (final AppenderLoggingException are) { ++ assertTrue("", are.getCause() != null && are.getCause() instanceof IOException); ++ // Failure expected. ++ } ++ } else { ++ testServer(m1, m2); ++ } ++ } ++ ++ ++ @Test ++ public void testMessagesWithSpecialChars() throws Exception { ++ testServer(MESSAGE_WITH_SPECIAL_CHARS); ++ } ++ ++ ++ private void testServer(final int size) throws Exception { ++ final String[] messages = new String[size]; ++ for (int i = 0; i < messages.length; i++) { ++ messages[i] = MESSAGE + " " + i; ++ } ++ testServer(messages); ++ } ++ ++ protected void testServer(final String... messages) throws Exception { ++ final Filter socketFilter = new ThreadNameFilter(Filter.Result.NEUTRAL, Filter.Result.DENY); ++ final Filter serverFilter = new ThreadNameFilter(Filter.Result.DENY, Filter.Result.NEUTRAL); ++ final Layout<? extends Serializable> socketLayout = createLayout(); ++ final SocketAppender socketAppender = createSocketAppender(socketFilter, socketLayout); ++ socketAppender.start(); ++ final ListAppender listAppender = new ListAppender("Events", serverFilter, null, false, false); ++ listAppender.start(); ++ final PatternLayout layout = PatternLayout.newBuilder().withPattern("%m %ex%n").build(); ++ final ConsoleAppender console = ConsoleAppender.createDefaultAppenderForLayout(layout); ++ final Logger serverLogger = ctx.getLogger(this.getClass().getName()); ++ serverLogger.addAppender(console); ++ serverLogger.setAdditive(false); ++ ++ // set appender on root and set level to debug ++ rootLogger.addAppender(socketAppender); ++ rootLogger.addAppender(listAppender); ++ rootLogger.setAdditive(false); ++ rootLogger.setLevel(Level.DEBUG); ++ for (final String message : messages) { ++ rootLogger.debug(message); ++ } ++ final int MAX_TRIES = 400; ++ for (int i = 0; i < MAX_TRIES; i++) { ++ if (listAppender.getEvents().size() < messages.length) { ++ try { ++ // Let the server-side read the messages. ++ Thread.sleep(50); ++ } catch (final Exception e) { ++ e.printStackTrace(); ++ } ++ } else { ++ break; ++ } ++ } ++ final List<LogEvent> events = listAppender.getEvents(); ++ assertNotNull("No event retrieved", events); ++ assertEquals("Incorrect number of events received", messages.length, events.size()); ++ for (int i = 0; i < messages.length; i++) { ++ assertTrue("Incorrect event", events.get(i).getMessage().getFormattedMessage().equals(messages[i])); ++ } ++ } ++ ++ protected SocketAppender createSocketAppender(final Filter socketFilter, ++ final Layout<? extends Serializable> socketLayout) { ++ // @formatter:off ++ return SocketAppender.newBuilder() ++ .withProtocol(this.protocol) ++ .withHost("localhost") ++ .withPort(this.port) ++ .withReconnectDelayMillis(-1) ++ .withName("test") ++ .withImmediateFlush(true) ++ .withImmediateFail(false) ++ .withIgnoreExceptions(false) ++ .withLayout(socketLayout) ++ .withFilter(socketFilter) ++ .build(); ++ // @formatter:on ++ } ++ ++}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/SslXmlSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/SslXmlSocketServerTest.java index 0000000,0000000..1a51244 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/SslXmlSocketServerTest.java @@@ -1,0 -1,0 +1,104 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.IOException; ++import java.io.InputStream; ++import java.io.Serializable; ++import java.nio.charset.Charset; ++ ++import org.apache.logging.log4j.core.Filter; ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.appender.SocketAppender; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration; ++import org.apache.logging.log4j.core.net.ssl.SslConfiguration; ++import org.apache.logging.log4j.core.net.ssl.StoreConfigurationException; ++import org.apache.logging.log4j.core.net.ssl.TestConstants; ++import org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; ++ ++public class SslXmlSocketServerTest extends AbstractSocketServerTest { ++ ++ private static TcpSocketServer<InputStream> server; ++ ++ private static SslConfiguration sslConfiguration; ++ ++ private static void initServerSocketFactory() throws StoreConfigurationException { ++ final KeyStoreConfiguration ksc = new KeyStoreConfiguration(TestConstants.KEYSTORE_FILE, ++ TestConstants.KEYSTORE_PWD, TestConstants.KEYSTORE_TYPE, null); ++ final TrustStoreConfiguration tsc = new TrustStoreConfiguration(TestConstants.TRUSTSTORE_FILE, ++ TestConstants.TRUSTSTORE_PWD, null, null); ++ sslConfiguration = SslConfiguration.createSSLConfiguration(null, ksc, tsc); ++ } ++ ++ @Override ++ protected SocketAppender createSocketAppender(final Filter socketFilter, ++ final Layout<? extends Serializable> socketLayout) { ++ // @formatter:off ++ return SocketAppender.newBuilder() ++ .withProtocol(this.protocol) ++ .withHost("localhost") ++ .withPort(this.port) ++ .withReconnectDelayMillis(-1) ++ .withName("test") ++ .withImmediateFlush(true) ++ .withImmediateFail(false) ++ .withIgnoreExceptions(false) ++ .withLayout(socketLayout) ++ .withFilter(socketFilter) ++ .withSslConfiguration(sslConfiguration) ++ .build(); ++ // @formatter:on ++ } ++ ++ @BeforeClass ++ public static void setupClass() throws Exception { ++ (LoggerContext.getContext(false)).reconfigure(); ++ initServerSocketFactory(); ++ // Use a large buffer just to test the code, the UDP test uses a tiny buffer ++ server = new SecureTcpSocketServer<>(PORT_NUM, new XmlInputStreamLogEventBridge(1024 * 100, ++ Charset.defaultCharset()), sslConfiguration); ++ thread = server.startNewThread(); ++ } ++ ++ @AfterClass ++ public static void tearDownClass() { ++ try { ++ server.shutdown(); ++ } catch (final IOException e) { ++ e.printStackTrace(); ++ } ++ try { ++ thread.join(); ++ } catch (final InterruptedException e) { ++ // ignore ++ } ++ } ++ ++ public SslXmlSocketServerTest() { ++ super(Protocol.SSL, PORT, false); ++ } ++ ++ @Override ++ protected Layout<String> createLayout() { ++ return super.createXmlLayout(); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/TcpJsonSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/TcpJsonSocketServerTest.java index 0000000,0000000..f12c908 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/TcpJsonSocketServerTest.java @@@ -1,0 -1,0 +1,62 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.IOException; ++import java.io.InputStream; ++ ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; ++ ++public class TcpJsonSocketServerTest extends AbstractSocketServerTest { ++ ++ private static TcpSocketServer<InputStream> server; ++ ++ @BeforeClass ++ public static void setupClass() throws Exception { ++ (LoggerContext.getContext(false)).reconfigure(); ++ server = TcpSocketServer.createJsonSocketServer(PORT_NUM); ++ thread = server.startNewThread(); ++ } ++ ++ @AfterClass ++ public static void tearDownClass() { ++ try { ++ server.shutdown(); ++ } catch (final IOException e) { ++ e.printStackTrace(); ++ } ++ try { ++ thread.join(); ++ } catch (final InterruptedException e) { ++ // ignore ++ } ++ } ++ ++ public TcpJsonSocketServerTest() { ++ super(Protocol.TCP, PORT, false); ++ } ++ ++ @Override ++ protected Layout<String> createLayout() { ++ return super.createJsonLayout(); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/TcpSerializedSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/TcpSerializedSocketServerTest.java index 0000000,0000000..275af20 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/TcpSerializedSocketServerTest.java @@@ -1,0 -1,0 +1,63 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.IOException; ++import java.io.ObjectInputStream; ++import java.io.Serializable; ++ ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; ++ ++public class TcpSerializedSocketServerTest extends AbstractSocketServerTest { ++ ++ private static TcpSocketServer<ObjectInputStream> server; ++ ++ @BeforeClass ++ public static void setupClass() throws Exception { ++ (LoggerContext.getContext(false)).reconfigure(); ++ server = TcpSocketServer.createSerializedSocketServer(PORT_NUM); ++ thread = server.startNewThread(); ++ } ++ ++ @AfterClass ++ public static void tearDownClass() { ++ try { ++ server.shutdown(); ++ } catch (final IOException e) { ++ e.printStackTrace(); ++ } ++ try { ++ thread.join(); ++ } catch (final InterruptedException e) { ++ // ignore ++ } ++ } ++ ++ public TcpSerializedSocketServerTest() { ++ super(Protocol.TCP, PORT, false); ++ } ++ ++ @Override ++ protected Layout<? extends Serializable> createLayout() { ++ return super.createSerializedLayout(); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/TcpXmlSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/TcpXmlSocketServerTest.java index 0000000,0000000..2b2cfd7 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/TcpXmlSocketServerTest.java @@@ -1,0 -1,0 +1,65 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.IOException; ++import java.io.InputStream; ++import java.nio.charset.Charset; ++ ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; ++ ++public class TcpXmlSocketServerTest extends AbstractSocketServerTest { ++ ++ private static TcpSocketServer<InputStream> server; ++ ++ @BeforeClass ++ public static void setupClass() throws Exception { ++ (LoggerContext.getContext(false)).reconfigure(); ++ // Use a large buffer just to test the code, the UDP test uses a tiny buffer ++ server = new TcpSocketServer<>(PORT_NUM, new XmlInputStreamLogEventBridge(1024 * 100, ++ Charset.defaultCharset())); ++ thread = server.startNewThread(); ++ } ++ ++ @AfterClass ++ public static void tearDownClass() { ++ try { ++ server.shutdown(); ++ } catch (final IOException e) { ++ e.printStackTrace(); ++ } ++ try { ++ thread.join(); ++ } catch (final InterruptedException e) { ++ // ignore ++ } ++ } ++ ++ public TcpXmlSocketServerTest() { ++ super(Protocol.TCP, PORT, false); ++ } ++ ++ @Override ++ protected Layout<String> createLayout() { ++ return super.createXmlLayout(); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadIdFilter.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadIdFilter.java index 0000000,0000000..d98e3f4 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadIdFilter.java @@@ -1,0 -1,0 +1,40 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++ ++package org.apache.logging.log4j.server; ++ ++import org.apache.logging.log4j.core.Filter; ++import org.apache.logging.log4j.core.LogEvent; ++import org.apache.logging.log4j.core.filter.AbstractFilter; ++ ++/** ++ * TODO Should use thread ID cache? ++ * @since 2.6 ++ */ ++public class ThreadIdFilter extends AbstractFilter { ++ ++ private static final long serialVersionUID = 1L; ++ ++ public ThreadIdFilter(final Result onMatch, final Result onMismatch) { ++ super(onMatch, onMismatch); ++ } ++ ++ @Override ++ public Filter.Result filter(final LogEvent event) { ++ return event.getThreadId() == Thread.currentThread().getId() ? onMatch : onMismatch; ++ } ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadNameFilter.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadNameFilter.java index 0000000,0000000..4204ac1 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadNameFilter.java @@@ -1,0 -1,0 +1,39 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++ ++package org.apache.logging.log4j.server; ++ ++import org.apache.logging.log4j.core.Filter; ++import org.apache.logging.log4j.core.LogEvent; ++import org.apache.logging.log4j.core.filter.AbstractFilter; ++ ++/** ++ * TODO Should use thread name cache? ++ */ ++public class ThreadNameFilter extends AbstractFilter { ++ ++ private static final long serialVersionUID = 1L; ++ ++ public ThreadNameFilter(final Result onMatch, final Result onMismatch) { ++ super(onMatch, onMismatch); ++ } ++ ++ @Override ++ public Filter.Result filter(final LogEvent event) { ++ return event.getThreadName().equals(Thread.currentThread().getName()) ? onMatch : onMismatch; ++ } ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadPriorityFilter.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadPriorityFilter.java index 0000000,0000000..6074f86 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/ThreadPriorityFilter.java @@@ -1,0 -1,0 +1,40 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++ ++package org.apache.logging.log4j.server; ++ ++import org.apache.logging.log4j.core.Filter; ++import org.apache.logging.log4j.core.LogEvent; ++import org.apache.logging.log4j.core.filter.AbstractFilter; ++ ++/** ++ * TODO Should use thread priority cache? ++ * @since 2.6 ++ */ ++public class ThreadPriorityFilter extends AbstractFilter { ++ ++ private static final long serialVersionUID = 1L; ++ ++ public ThreadPriorityFilter(final Result onMatch, final Result onMismatch) { ++ super(onMatch, onMismatch); ++ } ++ ++ @Override ++ public Filter.Result filter(final LogEvent event) { ++ return event.getThreadPriority() == Thread.currentThread().getPriority() ? onMatch : onMismatch; ++ } ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/UdpJsonSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/UdpJsonSocketServerTest.java index 0000000,0000000..7bd36f9 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/UdpJsonSocketServerTest.java @@@ -1,0 -1,0 +1,58 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.InputStream; ++import java.io.Serializable; ++ ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; ++ ++public class UdpJsonSocketServerTest extends AbstractSocketServerTest { ++ ++ private static UdpSocketServer<InputStream> server; ++ ++ @BeforeClass ++ public static void setupClass() throws Exception { ++ (LoggerContext.getContext(false)).reconfigure(); ++ server = UdpSocketServer.createJsonSocketServer(PORT_NUM); ++ thread = server.startNewThread(); ++ } ++ ++ @AfterClass ++ public static void tearDownClass() { ++ server.shutdown(); ++ try { ++ thread.join(); ++ } catch (final InterruptedException e) { ++ // ignore ++ } ++ } ++ ++ public UdpJsonSocketServerTest() { ++ super(Protocol.UDP, PORT, true); ++ } ++ ++ @Override ++ protected Layout<? extends Serializable> createLayout() { ++ return super.createJsonLayout(); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/UdpSerializedSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/UdpSerializedSocketServerTest.java index 0000000,0000000..9c806af new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/UdpSerializedSocketServerTest.java @@@ -1,0 -1,0 +1,60 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.ObjectInputStream; ++import java.io.Serializable; ++ ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; ++import org.junit.Ignore; ++ ++@Ignore ++public class UdpSerializedSocketServerTest extends AbstractSocketServerTest { ++ ++ private static UdpSocketServer<ObjectInputStream> server; ++ ++ @BeforeClass ++ public static void setupClass() throws Exception { ++ (LoggerContext.getContext(false)).reconfigure(); ++ server = UdpSocketServer.createSerializedSocketServer(PORT_NUM); ++ thread = server.startNewThread(); ++ } ++ ++ @AfterClass ++ public static void tearDownClass() { ++ server.shutdown(); ++ try { ++ thread.join(); ++ } catch (final InterruptedException e) { ++ // ignore ++ } ++ } ++ ++ public UdpSerializedSocketServerTest() { ++ super(Protocol.UDP, PORT, true); ++ } ++ ++ @Override ++ protected Layout<? extends Serializable> createLayout() { ++ return super.createSerializedLayout(); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/java/org/apache/logging/log4j/server/UdpXmlSocketServerTest.java ---------------------------------------------------------------------- diff --cc log4j-server/src/test/java/org/apache/logging/log4j/server/UdpXmlSocketServerTest.java index 0000000,0000000..0299312 new file mode 100644 --- /dev/null +++ b/log4j-server/src/test/java/org/apache/logging/log4j/server/UdpXmlSocketServerTest.java @@@ -1,0 -1,0 +1,61 @@@ ++/* ++ * Licensed to the Apache Software Foundation (ASF) under one or more ++ * contributor license agreements. See the NOTICE file distributed with ++ * this work for additional information regarding copyright ownership. ++ * The ASF licenses this file to You under the Apache license, Version 2.0 ++ * (the "License"); you may not use this file except in compliance with ++ * the License. You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the license for the specific language governing permissions and ++ * limitations under the license. ++ */ ++package org.apache.logging.log4j.server; ++ ++import java.io.InputStream; ++import java.io.Serializable; ++import java.nio.charset.Charset; ++ ++import org.apache.logging.log4j.core.Layout; ++import org.apache.logging.log4j.core.LoggerContext; ++import org.apache.logging.log4j.core.net.Protocol; ++import org.junit.AfterClass; ++import org.junit.BeforeClass; ++ ++public class UdpXmlSocketServerTest extends AbstractSocketServerTest { ++ ++ private static UdpSocketServer<InputStream> server; ++ ++ @BeforeClass ++ public static void setupClass() throws Exception { ++ (LoggerContext.getContext(false)).reconfigure(); ++ // Use a tiny buffer just to test the code, the TCP test uses a large buffer ++ server = new UdpSocketServer<>(PORT_NUM, new XmlInputStreamLogEventBridge(100, ++ Charset.defaultCharset())); ++ thread = server.startNewThread(); ++ } ++ ++ @AfterClass ++ public static void tearDownClass() { ++ server.shutdown(); ++ try { ++ thread.join(); ++ } catch (final InterruptedException e) { ++ // ignore ++ } ++ } ++ ++ public UdpXmlSocketServerTest() { ++ super(Protocol.UDP, PORT, true); ++ } ++ ++ @Override ++ protected Layout<? extends Serializable> createLayout() { ++ return super.createXmlLayout(); ++ } ++ ++} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/resources/org/apache/logging/log4j/core/net/ssl/client.log4j2-keystore.jks ---------------------------------------------------------------------- diff --cc log4j-server/src/test/resources/org/apache/logging/log4j/core/net/ssl/client.log4j2-keystore.jks index 0000000,0000000..36f11b6 new file mode 100644 Binary files differ http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b77b7d03/log4j-server/src/test/resources/org/apache/logging/log4j/core/net/ssl/truststore.jks ---------------------------------------------------------------------- diff --cc log4j-server/src/test/resources/org/apache/logging/log4j/core/net/ssl/truststore.jks index 0000000,0000000..0e6aaf2 new file mode 100644 Binary files differ
