You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2017/08/15 23:11:17 UTC

logging-log4j2 git commit: [LOG4J2-2013] SslSocketManager does not apply SSLContext on TCP reconnect. Add disabled test that shows the issue.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 2bf4ed22a -> f2ddaf93a


[LOG4J2-2013] SslSocketManager does not apply SSLContext on TCP
reconnect. Add disabled test that shows the issue.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f2ddaf93
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f2ddaf93
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f2ddaf93

Branch: refs/heads/master
Commit: f2ddaf93aeee3101cd95ba61d13c79bcec112b48
Parents: 2bf4ed2
Author: Gary Gregory <ga...@gmail.com>
Authored: Tue Aug 15 17:11:14 2017 -0600
Committer: Gary Gregory <ga...@gmail.com>
Committed: Tue Aug 15 17:11:14 2017 -0600

----------------------------------------------------------------------
 .../SecureSocketAppenderConnectReConnectIT.java | 117 +++++++++++++++++++
 1 file changed, 117 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f2ddaf93/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/net/SecureSocketAppenderConnectReConnectIT.java
----------------------------------------------------------------------
diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/net/SecureSocketAppenderConnectReConnectIT.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/net/SecureSocketAppenderConnectReConnectIT.java
new file mode 100644
index 0000000..97499b7
--- /dev/null
+++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/net/SecureSocketAppenderConnectReConnectIT.java
@@ -0,0 +1,117 @@
+/*
+ * 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.core.appender.net;
+
+import java.io.IOException;
+import java.net.Socket;
+
+import org.apache.logging.log4j.core.appender.SocketAppender;
+import org.apache.logging.log4j.core.layout.JsonLayout;
+import org.apache.logging.log4j.core.net.ssl.SslConfiguration;
+import org.apache.logging.log4j.core.net.ssl.SslConfigurationTest;
+import org.apache.logging.log4j.core.net.ssl.StoreConfigurationException;
+import org.apache.logging.log4j.server.SecureTcpSocketServer;
+import org.apache.logging.log4j.server.TcpSocketServer;
+import org.apache.logging.log4j.test.AvailablePortFinder;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * Tests that a Secure Socket Appender can reconnect to a server after it has been recycled.
+ * <p>
+ * LOG4J2-2013 SslSocketManager does not apply SSLContext on TCP reconnect.
+ * </p>
+ * <p>
+ * LOG4J2-1311 SocketAppender will lost first several logs after re-connection to log servers.
+ * </p>
+ * <p>
+ * See also LOG4J2-1934 JMS Appender does not know how to recover from a broken connection. See
+ * https://issues.apache.org/jira/browse/LOG4J2-1934
+ * </p>
+ * <p>
+ * This test class' single test method performs the following:
+ * </p>
+ * <ol>
+ * <li>Starts Apache Socket Server</li>
+ * <li>Starts a Socket Appender</li>
+ * <li>Logs an event OK</li>
+ * <li>Stops Apache Socket Server</li>
+ * <li>Starts Apache Socket Server</li>
+ * <li>Logs an event</li>
+ * </ol>
+ */
+public class SecureSocketAppenderConnectReConnectIT extends AbstractSocketAppenderReconnectIT {
+
+    private SslConfiguration sslConfiguration;
+
+    @Before
+    public void initServerSocketFactory() throws StoreConfigurationException {
+        sslConfiguration = SslConfigurationTest.createTestSslConfigurationResources();
+    }
+
+    @Test
+    @Ignore
+    public void testConnectReConnect() throws Exception {
+        port = AvailablePortFinder.getNextAvailable();
+        // Start server
+        server = TcpSocketServer.createJsonSocketServer(port);
+        startServer(200);
+        // Start appender
+        // @formatter:off
+        appender = SocketAppender.newBuilder()
+                .withPort(port)
+                .withReconnectDelayMillis(1000)
+                .withName("test")
+                .withLayout(JsonLayout.newBuilder().build())
+                .withSslConfiguration(sslConfiguration)
+                .build();
+        // @formatter:on
+        appender.start();
+        // Log message
+        appendEvent(appender);
+        // Stop server
+        shutdown();
+        // I should not be able to connect to the server now
+        try {
+            try (Socket socket = new Socket("localhost", port)) {
+                Assert.fail("The server socket should not be opened: " + socket);
+            }
+        } catch (final IOException e) {
+            // expected
+        }
+        // HACK START - Gary
+        // SANS HACK, the test passes, as somehow the socket in the appender is still valid
+        // On Windows 10, I did not try other OSs:
+        // HERE, I BREAKPOINT AND GO TO THE OS AND FORCE THE TCP CONNECTION TO CLOSE (TcpView.exe)), SUCH THAT
+        // INTERNALLY THE MANAGER GETS:
+        // java.net.SocketException: Connection reset by peer: socket write error
+        // HACK END
+        //
+        // Restart server on the SAME port
+        server = SecureTcpSocketServer.createJsonServer(port, sslConfiguration);
+        thread = startServer(0);
+        try (Socket socket = new Socket("localhost", port)) {
+            Assert.assertTrue(socket.isBound());
+            Assert.assertFalse(socket.isClosed());
+        }
+        // Logging again should cause the appender to reconnect
+        appendEvent(appender);
+    }
+
+}