This is an automated email from the ASF dual-hosted git repository. ffang pushed a commit to branch 3.3.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 40d04f5bba0110016044ca5eb39408b38db4cfb7 Author: Freeman Fang <[email protected]> AuthorDate: Thu Dec 3 14:22:22 2020 -0500 [CXF-8385]a test to verify http-undertow transport access log (cherry picked from commit 97b064dbcd33c59905be09fe6eb822e098e8d570) (cherry picked from commit f5545ab0263f21b7ebdabaad80c88d7d86e0406e) --- .../cxf/systest/http_undertow/LogHandler.java | 81 ++++++++++++++++++++++ .../http_undertow/UndertowBasicAuthTest.java | 8 +++ .../http_undertow/undertowBasicAuthServer.xml | 3 +- 3 files changed, 91 insertions(+), 1 deletion(-) diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/LogHandler.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/LogHandler.java new file mode 100644 index 0000000..509c95b --- /dev/null +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/LogHandler.java @@ -0,0 +1,81 @@ +/** + * 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.cxf.systest.http_undertow; + +import java.io.File; +import java.io.IOException; + +import org.apache.cxf.transport.http_undertow.CXFUndertowHttpHandler; +import org.xnio.OptionMap; +import org.xnio.Options; +import org.xnio.Xnio; +import org.xnio.XnioWorker; + +import io.undertow.Undertow; +import io.undertow.server.HttpHandler; +import io.undertow.server.HttpServerExchange; +import io.undertow.server.handlers.accesslog.AccessLogHandler; +import io.undertow.server.handlers.accesslog.AccessLogReceiver; +import io.undertow.server.handlers.accesslog.DefaultAccessLogReceiver; + +public class LogHandler implements CXFUndertowHttpHandler { + + private HttpHandler next; + private AccessLogHandler accessLogHandler; + + @Override + public void handleRequest(HttpServerExchange exchange) throws Exception { + + if (accessLogHandler == null) { + buildLogHandler(); + } + this.accessLogHandler.handleRequest(exchange); + } + + @Override + public void setNext(HttpHandler nextHandler) { + this.next = nextHandler; + + } + + private void buildLogHandler() { + HttpHandler handler = this.next; + XnioWorker xnioWorker = createWorker(this.getClass().getClassLoader()); + AccessLogReceiver logReceiver = DefaultAccessLogReceiver.builder().setLogWriteExecutor(xnioWorker) + .setOutputDirectory(new File("target").toPath()).setLogBaseName("request.") + .setLogNameSuffix("log").setRotate(true).build(); + this.accessLogHandler = new AccessLogHandler(handler, logReceiver, "combined", + AccessLogHandler.class.getClassLoader()); + + } + + public static XnioWorker createWorker(ClassLoader loader) { + try { + if (loader == null) { + loader = Undertow.class.getClassLoader(); + } + Xnio xnio = Xnio.getInstance(loader); + return xnio.createWorker(OptionMap.builder().set(Options.THREAD_DAEMON, true).getMap()); + } catch (IOException ignore) { + + return null; + } + } +} diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowBasicAuthTest.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowBasicAuthTest.java index 3b4c7fd..27e9c40 100644 --- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowBasicAuthTest.java +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowBasicAuthTest.java @@ -19,6 +19,7 @@ package org.apache.cxf.systest.http_undertow; +import java.io.File; import java.net.URL; import javax.xml.namespace.QName; @@ -77,6 +78,13 @@ public class UndertowBasicAuthTest extends AbstractClientServerTestBase { public void testBasicAuth() throws Exception { assertEquals("Hello Alice", greeter.greetMe("Alice")); } + + @org.junit.Test + public void testRequestLog() throws Exception { + assertEquals("Hello Log", greeter.greetMe("Log")); + File logFile = new File("target/request.log"); + assertTrue(logFile.exists()); + } @org.junit.Test public void testGetWSDL() throws Exception { diff --git a/systests/transport-undertow/src/test/resources/org/apache/cxf/systest/http_undertow/undertowBasicAuthServer.xml b/systests/transport-undertow/src/test/resources/org/apache/cxf/systest/http_undertow/undertowBasicAuthServer.xml index a30a944..dfe1ba2 100644 --- a/systests/transport-undertow/src/test/resources/org/apache/cxf/systest/http_undertow/undertowBasicAuthServer.xml +++ b/systests/transport-undertow/src/test/resources/org/apache/cxf/systest/http_undertow/undertowBasicAuthServer.xml @@ -26,7 +26,8 @@ <httpu:engine port="${testutil.ports.UndertowBasicAuthServer}"> <httpu:handlers> <bean class="org.apache.cxf.systest.http_undertow.UndertowBasicAuthHandler"/> + <bean class="org.apache.cxf.systest.http_undertow.LogHandler"/> </httpu:handlers> </httpu:engine> </httpu:engine-factory> -</beans> \ No newline at end of file +</beans>
