This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-junit-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 5bdf5f7  SLING-13183 : Remove TestLogServlet and dependency on 
outdated logback
5bdf5f7 is described below

commit 5bdf5f778a78bf430f6033c3a5cb6d14258884f3
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Apr 28 08:41:48 2026 +0200

    SLING-13183 : Remove TestLogServlet and dependency on outdated logback
---
 .../sling/junit/impl/servlet/TestLogServlet.java   | 295 ---------------------
 1 file changed, 295 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/junit/impl/servlet/TestLogServlet.java 
b/src/main/java/org/apache/sling/junit/impl/servlet/TestLogServlet.java
deleted file mode 100644
index 38e3ca8..0000000
--- a/src/main/java/org/apache/sling/junit/impl/servlet/TestLogServlet.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * 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.sling.junit.impl.servlet;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Hashtable;
-import java.util.Map;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.junit.runner.Description;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.http.HttpService;
-import org.osgi.service.http.NamespaceException;
-import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
-
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.PatternLayout;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.Layout;
-import ch.qos.logback.core.read.CyclicBufferAppender;
-
-@Component(
-        immediate=true,
-        property = {
-                TestLogServlet.SERVLET_PATH_NAME + "=/system/sling/testlog",
-                TestLogServlet.LOG_BUFFER_SIZE + ":Integer=" + 
TestLogServlet.DEFAULT_SIZE,
-                TestLogServlet.PROP_MSG_PATTERN + "=" + 
TestLogServlet.DEFAULT_PATTERN
-        }
-)
-public class TestLogServlet extends HttpServlet {
-    private final Logger log = LoggerFactory.getLogger(getClass());
-
-    //These name should be kept in sync with
-    // org.apache.sling.testing.tools.junit.RemoteLogDumper
-    // org.apache.sling.testing.clients.interceptors.TestDescriptionInterceptor
-    public static final String TEST_NAME = "X-Sling-TestName";
-    public static final String TEST_CLASS = "X-Sling-TestClass";
-
-    public static final String SERVLET_PATH_NAME = "servlet.path";
-
-    public static final int DEFAULT_SIZE = 1000;
-    public static final String LOG_BUFFER_SIZE = "log.buffer.size";
-
-    public static final String DEFAULT_PATTERN = "%d{dd.MM.yyyy HH:mm:ss.SSS} 
*%level* [%thread] %logger %msg%n";
-    public static final String PROP_MSG_PATTERN = "logPattern";
-
-    /** Non-null if we are registered with HttpService */
-    private String servletPath;
-
-    @Reference
-    private HttpService httpService;
-
-    private CyclicBufferAppender<ILoggingEvent> appender;
-
-    private Layout<ILoggingEvent> layout;
-
-    private ServiceRegistration filter;
-
-    private volatile Description currentTest;
-
-    private final Object appenderLock = new Object();
-
-    @Activate
-    protected void activate(BundleContext ctx, Map<String, ?> config) throws 
Exception {
-        registerServlet(config);
-        registerAppender(config);
-        registerFilter(ctx);
-        createLayout(config);
-    }
-
-    @Deactivate
-    protected void deactivate() throws Exception {
-        deregisterFilter();
-        deregisterServlet();
-        deregisterAppender();
-        stopLayout();
-    }
-
-    public void testRunStarted(Description description) {
-        if (description != null && !description.equals(currentTest)){
-            currentTest = description;
-            resetAppender();
-            log.info("Starting test execution ======[{}]======", description);
-        }
-    }
-
-    @Override
-    protected void doGet(HttpServletRequest request, HttpServletResponse 
response)
-            throws ServletException, IOException {
-        final PrintWriter pw = response.getWriter();
-        final String className = request.getParameter(TEST_CLASS);
-        final String testName = request.getParameter(TEST_NAME);
-
-        //If className and testName explicitly specified check if the logs
-        //are being collected for expected test
-        if (className != null && testName != null){
-            Description expected = 
Description.createTestDescription(className, testName);
-
-            if (!expected.equals(currentTest)){
-                pw.printf("Test name mismatch : Current test [%s], Expected 
test [%s]%n", currentTest, expected);
-                return;
-            }
-        }
-
-        //Detach the appender so that we can extract its content safely
-        rootLogger().detachAppender(appender);
-        try {
-            for (int i = 0; i < appender.getLength(); i++) {
-                pw.print(layout.doLayout(appender.get(i)));
-            }
-            resetAppender();
-        } finally {
-            rootLogger().addAppender(appender);
-        }
-    }
-
-    private void resetAppender() {
-        synchronized (appenderLock) {
-            if (appender.isStarted()) {
-                appender.reset();
-            }
-        }
-    }
-
-    private void registerAppender(Map<String, ?> config) {
-        synchronized (appenderLock) {
-            int size = PropertiesUtil.toInteger(config.get(LOG_BUFFER_SIZE), 
DEFAULT_SIZE);
-            appender = new CyclicBufferAppender<ILoggingEvent>();
-            appender.setMaxSize(size);
-            appender.setContext(getContext());
-            appender.setName("TestLogCollector");
-            appender.start();
-            rootLogger().addAppender(appender);
-        }
-    }
-
-    private void deregisterAppender() {
-        if (appender != null) {
-            synchronized (appenderLock) {
-                rootLogger().detachAppender(appender);
-                appender.stop();
-                appender = null;
-            }
-        }
-    }
-
-    private void createLayout(Map<String, ?> config) {
-        String pattern = PropertiesUtil.toString(config.get(PROP_MSG_PATTERN), 
DEFAULT_PATTERN);
-        PatternLayout pl = new PatternLayout();
-        pl.setPattern(pattern);
-        pl.setOutputPatternAsHeader(false);
-        pl.setContext(getContext());
-        pl.start();
-
-        layout = pl;
-    }
-
-    private void stopLayout() {
-        if (layout != null){
-            layout.stop();
-        }
-    }
-
-    private void registerServlet(Map<String, ?> config) throws 
ServletException, NamespaceException {
-        servletPath = getServletPath(config);
-        if(servletPath == null) {
-            log.info("Servlet path is null, not registering with HttpService");
-        } else {
-            httpService.registerServlet(servletPath, this, null, null);
-            log.info("Servlet registered at {}", servletPath);
-        }
-    }
-
-    private void deregisterServlet() {
-        if(servletPath != null) {
-            httpService.unregister(servletPath);
-            log.info("Servlet unregistered from path {}", servletPath);
-        }
-        servletPath = null;
-    }
-
-    private void registerFilter(BundleContext ctx) {
-        Hashtable<String, Object> props = new Hashtable<String, Object>();
-        props.put(Constants.SERVICE_DESCRIPTION, "Filter to extract testName 
from request headers");
-        props.put(Constants.SERVICE_VENDOR, 
ctx.getBundle().getHeaders().get(Constants.BUNDLE_VENDOR));
-
-        props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, "/");
-        props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT,
-                "(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + 
"=*)");
-        filter = ctx.registerService(Filter.class.getName(), new 
TestNameLoggingFilter(), props);
-    }
-
-    private void deregisterFilter() {
-        if (filter != null) {
-            filter.unregister();
-        }
-    }
-
-    private class TestNameLoggingFilter implements Filter {
-
-        public void init(FilterConfig filterConfig) throws ServletException {
-
-        }
-
-        public void doFilter(ServletRequest request, ServletResponse response,
-                             FilterChain chain) throws IOException, 
ServletException {
-
-            final HttpServletRequest httpRequest = (HttpServletRequest) 
request;
-            final String className = httpRequest.getHeader(TEST_CLASS);
-            final String testName = httpRequest.getHeader(TEST_NAME);
-
-            if (className == null || testName == null) {
-                chain.doFilter(request, response);
-                return;
-            }
-
-            try {
-                MDC.put(TEST_NAME, testName);
-                MDC.put(TEST_CLASS, className);
-
-                testRunStarted(Description.createTestDescription(className, 
testName));
-
-                chain.doFilter(request, response);
-            } finally {
-
-                MDC.remove(TEST_NAME);
-                MDC.remove(TEST_CLASS);
-            }
-
-        }
-
-        public void destroy() {
-
-        }
-    }
-
-    //~------------------------------------------------< utility >
-
-    /**
-     * Return the path at which to mount this servlet, or null
-     * if it must not be mounted.
-     */
-    private static String getServletPath(Map<String, ?> config) {
-        String result = (String)config.get(SERVLET_PATH_NAME);
-        if(result != null && result.trim().length() == 0) {
-            result = null;
-        }
-        return result;
-    }
-
-    private static LoggerContext getContext(){
-        return (LoggerContext) LoggerFactory.getILoggerFactory();
-    }
-
-    private static ch.qos.logback.classic.Logger rootLogger() {
-        return 
getContext().getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
-    }
-}

Reply via email to