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