From 36c65db639848a52fd46e1a75c6103aa37f7d1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20J=C3=A4ckle?= Date: Thu, 30 Nov 2023 12:55:10 +0100 Subject: [PATCH] fixed unit tests relying on old SLF4J "Binder" mechanism MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Jäckle --- .../logging/CapturingMdcAdapterObserver.java | 5 ++ .../DefaultAutoCloseableSlf4jLoggerTest.java | 7 +++ .../pekko/logging/DefaultDittoLoggerTest.java | 7 +++ .../logging/ImmutableDittoLoggerTest.java | 7 +++ .../org/slf4j/impl/ObservableMdcAdapter.java | 30 ++++++++++ .../java/org/slf4j/impl/StaticMDCBinder.java | 45 -------------- .../slf4j/impl/StaticMDCServiceProvider.java | 60 +++++++++++++++++++ 7 files changed, 116 insertions(+), 45 deletions(-) delete mode 100644 internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCBinder.java create mode 100644 internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCServiceProvider.java diff --git a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/CapturingMdcAdapterObserver.java b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/CapturingMdcAdapterObserver.java index d1b71de867b..9eefb8e8698 100644 --- a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/CapturingMdcAdapterObserver.java +++ b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/CapturingMdcAdapterObserver.java @@ -45,6 +45,11 @@ public void onPut(final String key, final String value) { allPutEntries.add(entry(key, value)); } + @Override + public void onPushByKey(final String key, final String value) { + super.onPushByKey(key, value); + } + @Override public void onRemove(final String key) { allRemovedKeys.add(key); diff --git a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultAutoCloseableSlf4jLoggerTest.java b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultAutoCloseableSlf4jLoggerTest.java index d8e4e6f8461..057fa33ff43 100644 --- a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultAutoCloseableSlf4jLoggerTest.java +++ b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultAutoCloseableSlf4jLoggerTest.java @@ -19,6 +19,7 @@ import org.assertj.core.api.JUnitSoftAssertions; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; @@ -28,6 +29,7 @@ import org.mockito.junit.MockitoJUnitRunner; import org.slf4j.Logger; import org.slf4j.impl.ObservableMdcAdapter; +import org.slf4j.impl.StaticMDCServiceProvider; /** * Unit test for {@link DefaultAutoCloseableSlf4jLogger}. @@ -49,6 +51,11 @@ public final class DefaultAutoCloseableSlf4jLoggerTest { private CapturingMdcAdapterObserver mdcObserver; + @BeforeClass + public static void configureProvider() { + System.setProperty("slf4j.provider", StaticMDCServiceProvider.class.getName()); + } + @Before public void setUp() { mdcObserver = new CapturingMdcAdapterObserver(); diff --git a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultDittoLoggerTest.java b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultDittoLoggerTest.java index 1895f336ddd..2e4741690c6 100644 --- a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultDittoLoggerTest.java +++ b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/DefaultDittoLoggerTest.java @@ -19,6 +19,7 @@ import org.assertj.core.api.JUnitSoftAssertions; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; @@ -28,6 +29,7 @@ import org.mockito.junit.MockitoJUnitRunner; import org.slf4j.Logger; import org.slf4j.impl.ObservableMdcAdapter; +import org.slf4j.impl.StaticMDCServiceProvider; /** * Unit test for {@link DefaultDittoLogger}. @@ -49,6 +51,11 @@ public final class DefaultDittoLoggerTest { private CapturingMdcAdapterObserver mdcObserver; + @BeforeClass + public static void configureProvider() { + System.setProperty("slf4j.provider", StaticMDCServiceProvider.class.getName()); + } + @Before public void setUp() { mdcObserver = new CapturingMdcAdapterObserver(); diff --git a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/ImmutableDittoLoggerTest.java b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/ImmutableDittoLoggerTest.java index 653772f3223..b8307340ed6 100644 --- a/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/ImmutableDittoLoggerTest.java +++ b/internal/utils/pekko/src/test/java/org/eclipse/ditto/internal/utils/pekko/logging/ImmutableDittoLoggerTest.java @@ -27,6 +27,7 @@ import org.assertj.core.data.MapEntry; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; @@ -37,6 +38,7 @@ import org.mockito.junit.MockitoJUnitRunner; import org.slf4j.Logger; import org.slf4j.impl.ObservableMdcAdapter; +import org.slf4j.impl.StaticMDCServiceProvider; /** * Unit test for {@link ImmutableDittoLogger}. @@ -58,6 +60,11 @@ public final class ImmutableDittoLoggerTest { private CapturingMdcAdapterObserver mdcObserver; + @BeforeClass + public static void configureProvider() { + System.setProperty("slf4j.provider", StaticMDCServiceProvider.class.getName()); + } + @Before public void setUp() { mdcObserver = new CapturingMdcAdapterObserver(); diff --git a/internal/utils/pekko/src/test/java/org/slf4j/impl/ObservableMdcAdapter.java b/internal/utils/pekko/src/test/java/org/slf4j/impl/ObservableMdcAdapter.java index 30acc384dcf..182b2f48906 100644 --- a/internal/utils/pekko/src/test/java/org/slf4j/impl/ObservableMdcAdapter.java +++ b/internal/utils/pekko/src/test/java/org/slf4j/impl/ObservableMdcAdapter.java @@ -104,21 +104,25 @@ public void setContextMap(final Map contextMap) { @Override public void pushByKey(final String key, final String value) { + notifyAllObservers(observer -> observer.onPushByKey(key, value)); basicMdcAdapter.pushByKey(key, value); } @Override public String popByKey(final String key) { + notifyAllObservers(observer -> observer.onPopByKey(key)); return basicMdcAdapter.popByKey(key); } @Override public Deque getCopyOfDequeByKey(final String key) { + notifyAllObservers(observer -> observer.onGetCopyOfDequeByKey(key)); return basicMdcAdapter.getCopyOfDequeByKey(key); } @Override public void clearDequeByKey(final String key) { + notifyAllObservers(observer -> observer.onClearDequeByKey(key)); basicMdcAdapter.clearDequeByKey(key); } @@ -142,6 +146,13 @@ public interface MdcAdapterObserver { void onSetContextMap(Map contextMap); + void onPushByKey(String key, String value); + + void onPopByKey(String key); + + void onGetCopyOfDequeByKey(String key); + + void onClearDequeByKey(String key); } /** @@ -187,6 +198,25 @@ public void onSetContextMap(final Map contextMap) { // Does nothing by default. } + @Override + public void onPushByKey(final String key, final String value) { + // Does nothing by default. + } + + @Override + public void onPopByKey(final String key) { + // Does nothing by default. + } + + @Override + public void onGetCopyOfDequeByKey(final String key) { + // Does nothing by default. + } + + @Override + public void onClearDequeByKey(final String key) { + // Does nothing by default. + } } } diff --git a/internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCBinder.java b/internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCBinder.java deleted file mode 100644 index e3849563670..00000000000 --- a/internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCBinder.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2020 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.slf4j.impl; - -import javax.annotation.concurrent.Immutable; - -import org.slf4j.spi.MDCAdapter; - -/** - * The purpose of this class is to use {@link ObservableMdcAdapter} as MDC adapter for logging. - * - * @since 1.3.0 - */ -@Immutable -public final class StaticMDCBinder { - - private static final StaticMDCBinder INSTANCE = new StaticMDCBinder(); - - private StaticMDCBinder() { - super(); - } - - public static StaticMDCBinder getSingleton() { - return INSTANCE; - } - - public MDCAdapter getMDCA() { - return ObservableMdcAdapter.getInstance(); - } - - public String getMDCAdapterClassStr() { - return ObservableMdcAdapter.class.getName(); - } - -} diff --git a/internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCServiceProvider.java b/internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCServiceProvider.java new file mode 100644 index 00000000000..f0c2330bc85 --- /dev/null +++ b/internal/utils/pekko/src/test/java/org/slf4j/impl/StaticMDCServiceProvider.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.slf4j.impl; + +import javax.annotation.concurrent.Immutable; + +import org.slf4j.ILoggerFactory; +import org.slf4j.IMarkerFactory; +import org.slf4j.helpers.BasicMarkerFactory; +import org.slf4j.helpers.NOPLoggerFactory; +import org.slf4j.helpers.NOP_FallbackServiceProvider; +import org.slf4j.spi.MDCAdapter; +import org.slf4j.spi.SLF4JServiceProvider; + +/** + * The purpose of this class is to use {@link ObservableMdcAdapter} as MDC adapter for logging. + * + * @since 1.3.0 + */ +@Immutable +public final class StaticMDCServiceProvider implements SLF4JServiceProvider { + + private final ILoggerFactory loggerFactory = new NOPLoggerFactory(); + private final IMarkerFactory markerFactory = new BasicMarkerFactory(); + + @Override + public ILoggerFactory getLoggerFactory() { + return loggerFactory; + } + + @Override + public IMarkerFactory getMarkerFactory() { + return markerFactory; + } + + @Override + public MDCAdapter getMDCAdapter() { + return ObservableMdcAdapter.getInstance(); + } + + @Override + public String getRequestedApiVersion() { + return NOP_FallbackServiceProvider.REQUESTED_API_VERSION; + } + + @Override + public void initialize() { + // already initialized + } +}