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-tracer.git


The following commit(s) were added to refs/heads/master by this push:
     new 91f6345  SLING-13200 : Update log tracer to slf4j 2.x / logback 1.5.x
91f6345 is described below

commit 91f63450741b9608edbf1f0535952394d8b8f941
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue May 12 17:04:11 2026 +0200

    SLING-13200 : Update log tracer to slf4j 2.x / logback 1.5.x
---
 pom.xml                                            |  4 +-
 .../sling/tracer/internal/LogTracerTest.java       | 64 ++++++++++++++--------
 .../tracer/internal/TracerLogServletTest.java      | 22 +++++++-
 3 files changed, 65 insertions(+), 25 deletions(-)

diff --git a/pom.xml b/pom.xml
index 22969f9..02edb4d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,13 +53,13 @@
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
-            <version>1.7.32</version>
+            <version>2.0.17</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
-            <version>1.2.10</version>
+            <version>1.5.32</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java 
b/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
index e77e715..dcbffea 100644
--- a/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
@@ -32,8 +32,11 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.lang.reflect.Field;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.LoggerContext;
@@ -44,6 +47,7 @@ import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestProgressTracker;
+import org.apache.sling.testing.mock.osgi.MockBundle;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
 import org.apache.sling.testing.mock.osgi.junit.OsgiContextCallback;
@@ -63,7 +67,11 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -104,8 +112,8 @@ public class LogTracerTest {
 
     @Test
     public void enableTracerLogServlet() throws Exception {
-        LogTracer tracer = context.registerInjectActivateService(
-                new LogTracer(), ImmutableMap.<String, Object>of("enabled", 
"true", "servletEnabled", "true"));
+        LogTracer tracer = activateLogTracerWithServlet(
+                ImmutableMap.<String, Object>of("enabled", "true", 
"servletEnabled", "true"));
         assertEquals(2, context.getServices(Filter.class, null).length);
         assertNotNull(context.getService(Servlet.class));
 
@@ -121,16 +129,14 @@ public class LogTracerTest {
 
     @Test
     public void enableTracerLogServletWithConfig() throws Exception {
-        LogTracer tracer = context.registerInjectActivateService(
-                new LogTracer(),
-                ImmutableMap.<String, Object>builder()
-                        .put("enabled", "true")
-                        .put("servletEnabled", "true")
-                        .put("recordingCacheSizeInMB", "17")
-                        .put("recordingCacheDurationInSecs", "100")
-                        .put("recordingCompressionEnabled", "false")
-                        .put("gzipResponse", "true")
-                        .build());
+        activateLogTracerWithServlet(ImmutableMap.<String, Object>builder()
+                .put("enabled", "true")
+                .put("servletEnabled", "true")
+                .put("recordingCacheSizeInMB", "17")
+                .put("recordingCacheDurationInSecs", "100")
+                .put("recordingCompressionEnabled", "false")
+                .put("gzipResponse", "true")
+                .build());
         assertEquals(2, context.getServices(Filter.class, null).length);
         assertNotNull(context.getService(Servlet.class));
 
@@ -143,14 +149,12 @@ public class LogTracerTest {
 
     @Test
     public void enableTracerLogServletWithConfigGzip() throws Exception {
-        LogTracer tracer = context.registerInjectActivateService(
-                new LogTracer(),
-                ImmutableMap.<String, Object>builder()
-                        .put("enabled", "true")
-                        .put("servletEnabled", "true")
-                        .put("recordingCompressionEnabled", "true")
-                        .put("gzipResponse", "true")
-                        .build());
+        activateLogTracerWithServlet(ImmutableMap.<String, Object>builder()
+                .put("enabled", "true")
+                .put("servletEnabled", "true")
+                .put("recordingCompressionEnabled", "true")
+                .put("gzipResponse", "true")
+                .build());
         assertEquals(2, context.getServices(Filter.class, null).length);
         assertNotNull(context.getService(Servlet.class));
 
@@ -361,8 +365,24 @@ public class LogTracerTest {
     }
 
     private void activateTracerAndServlet() {
-        context.registerInjectActivateService(
-                new LogTracer(), ImmutableMap.<String, Object>of("enabled", 
"true", "servletEnabled", "true"));
+        activateLogTracerWithServlet(ImmutableMap.<String, 
Object>of("enabled", "true", "servletEnabled", "true"));
+    }
+
+    @SuppressWarnings("unchecked")
+    private LogTracer activateLogTracerWithServlet(Map<String, Object> props) {
+        // Felix WebConsole 4.9.10 calls Bundle.findEntries() during 
activate(), which
+        // MockBundle does not implement. Create a spy that stubs 
findEntries() and inject
+        // it into MockBundleContext via reflection so getBundle() returns the 
stub.
+        MockBundle bundleSpy = spy((MockBundle) 
context.bundleContext().getBundle());
+        
doReturn(Collections.emptyEnumeration()).when(bundleSpy).findEntries(anyString(),
 anyString(), anyBoolean());
+        try {
+            Field bundleField = 
context.bundleContext().getClass().getDeclaredField("bundle");
+            bundleField.setAccessible(true);
+            bundleField.set(context.bundleContext(), bundleSpy);
+        } catch (NoSuchFieldException | IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+        return (LogTracer) context.registerInjectActivateService(new 
LogTracer(), props);
     }
 
     private FilterChain prepareChain(FilterChain end) throws 
InvalidSyntaxException {
diff --git 
a/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java 
b/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java
index 2bc0ef2..240bfd5 100644
--- a/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java
+++ b/src/test/java/org/apache/sling/tracer/internal/TracerLogServletTest.java
@@ -31,6 +31,9 @@ import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.Collections;
+import java.util.Dictionary;
+import java.util.Hashtable;
 import java.util.zip.GZIPInputStream;
 
 import org.apache.commons.io.IOUtils;
@@ -43,13 +46,20 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 
 import static org.apache.sling.tracer.internal.TestUtil.createTracker;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -157,8 +167,18 @@ public class TracerLogServletTest {
         verify(response).setHeader("Content-Encoding", "gzip");
     }
 
+    @SuppressWarnings("unchecked")
     private TracerLogServlet newLogServlet() {
-        return new TracerLogServlet(context.bundleContext(), 50, 60 * 15, 
true, true);
+        Bundle mockBundle = mock(Bundle.class);
+        when(mockBundle.findEntries(anyString(), anyString(), 
anyBoolean())).thenReturn(Collections.emptyEnumeration());
+        when(mockBundle.getHeaders()).thenReturn(new Hashtable<>());
+
+        BundleContext mockBc = mock(BundleContext.class);
+        when(mockBc.getBundle()).thenReturn(mockBundle);
+        when(mockBc.registerService(anyString(), any(), any(Dictionary.class)))
+                .thenReturn(mock(ServiceRegistration.class));
+
+        return new TracerLogServlet(mockBc, 50, 60 * 15, true, true);
     }
 
     @Test

Reply via email to