You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2018/11/16 17:42:45 UTC
[geode] branch develop updated: Revert GEODE-2644 because offline
diskstore commands generate info level logs
This is an automated email from the ASF dual-hosted git repository.
klund pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 743c925 Revert GEODE-2644 because offline diskstore commands generate info level logs
743c925 is described below
commit 743c925efa608719aca1ee6249d3c8ee3901905c
Author: Kirk Lund <kl...@apache.org>
AuthorDate: Fri Nov 16 09:33:45 2018 -0800
Revert GEODE-2644 because offline diskstore commands generate info level logs
GFSH forks the offline diskstore commands in a JVM using log4j2-cli.xml
which sets the log level to WARN. However, the forked JVM creates a
Cache which then starts generating info level statements to STDOUT.
Revert "GEODE-2644: Remove log level from MonitorQueryUnderContentionBenchmark"
This reverts commit 6691d310e1263966991e584f712156d919dabecf.
Revert "GEODE-2644: Update session state caching dependencies for logging"
This reverts commit 688f58a4a75cc1297faa1dda201b971346c3a9fe.
Revert "GEODE-5637: Fix flaky SingleHopClientExecutorWithLoggingIntegrationTest"
This reverts commit 0a8f3dffa1ebaa618fafecc15bbc92ba8ba83696.
Revert "GEODE-2644: Make LogWriterAppender optional and support log4j2.xml"
This reverts commit 591f3f7840ce38c6100bff2040f396ad2469175e.
Revert "GEODE-2644: Expand DistributedSystemMXBean tests"
This reverts commit cd2bba13e2fb7e79f7634053a6c612050b328e11.
Revert "GEODE-2644: Make AlertAppender optional and support log4j2.xml"
This reverts commit 02c3cae1d38098259ff6aa4635c6e74f795bdc50.
Revert "GEODE-2644: Add LogConfig and StatisticsConfig for logging"
This reverts commit a77c94b349b3ed7fc873fc29f6852f9936843790.
Revert "GEODE-2644: Add AlertingTest JUnit Category"
This reverts commit 731cd2a7d35b086d34f8bbcb94a83c40739ae8ee.
Revert "GEODE-2644: Add LogFileAssert and LogLevelAssert assertions"
This reverts commit 5e61da5301469cdbd71ac186573f56c38e9a6cf0.
Revert "GEODE-2644: Cleanup logging related files"
This reverts commit 763e4177f201eff9b140654e6858152a1a184b8c.
Revert "GEODE-2644: Define interfaces for new Log4j2 Appenders"
This reverts commit efd8a14027195b6dae1dd3e4d53a33696ed318bb.
---
extensions/geode-modules-assembly/build.gradle | 1 -
.../release/session/bin/modify_war | 1 -
.../apache/geode/session/tests/TomcatInstall.java | 4 +-
.../GfshStartLocatorLogAcceptanceTest.java | 36 +-
.../org/apache/geode/annotations/TestingOnly.java | 2 +-
.../alerting/AlertingServiceDistributedTest.java | 399 -----
...rtingServiceWithoutListenerDistributedTest.java | 217 ---
.../LoggingWithReconnectDistributedTest.java | 210 ---
.../management/DistributedSystemDUnitTest.java | 575 +++++++
.../DistributedSystemMXBeanDistributedTest.java | 202 ---
...butedSystemMXBeanWithAlertsDistributedTest.java | 495 ------
...stemMXBeanWithNotificationsDistributedTest.java | 243 ---
.../DeprecatedAgentLauncherIntegrationTest.java | 11 +-
...opClientExecutorWithLoggingIntegrationTest.java | 36 +-
.../LocatorLauncherIntegrationTestCase.java | 2 +-
.../internal/InternalLocatorIntegrationTest.java | 76 +
.../gms/messenger/JGroupsMessengerJUnitTest.java | 9 +-
.../AlertListenerRegistrationIntegrationTest.java | 183 ---
.../AlertingServiceWithClusterIntegrationTest.java | 274 ----
.../AlertingServiceWithLonerIntegrationTest.java | 89 --
.../logging/BannerLoggingIntegrationTest.java | 129 --
...st.java => CacheLogRollingIntegrationTest.java} | 33 +-
.../logging/ConfigurationInfoIntegrationTest.java | 42 -
.../logging/ConfigurationIntegrationTest.java | 133 --
.../DistributedSystemLogFileIntegrationTest.java | 1152 ++++++++++++++
.../logging/LocatorLogFileIntegrationTest.java | 123 ++
.../LogLevelChangesWithCacheIntegrationTest.java | 150 --
...hangesWithDistributedSystemIntegrationTest.java | 167 --
.../logging/LogServiceIntegrationTest.java | 236 +++
...oggingWithDistributedSystemIntegrationTest.java | 1597 --------------------
.../logging/LoggingWithLocatorIntegrationTest.java | 207 ---
.../LoggingWithLocatorLauncherIntegrationTest.java | 65 -
.../LoggingWithServerLauncherIntegrationTest.java | 65 -
.../ManagerLogWriterFactoryIntegrationTest.java | 152 --
.../logging/MergeLogFilesIntegrationTest.java | 2 +-
.../geode/internal/logging/NonBlankStrings.java | 27 -
...StartupConfigurationLoggingIntegrationTest.java | 159 --
...stemOutRuleAndSystemErrRuleIntegrationTest.java | 98 --
.../log4j/AlertAppenderIntegrationTest.java | 261 ----
.../BothLogWriterAppendersIntegrationTest.java | 180 ---
.../CacheWithDefaultAppendersIntegrationTest.java | 96 --
...gurationWithLogLevelChangesIntegrationTest.java | 226 ---
...penderWithLoggerContextRuleIntegrationTest.java | 70 +-
...leAppenderWithSystemOutRuleIntegrationTest.java | 182 +++
...a => CustomConfigWithCacheIntegrationTest.java} | 30 +-
...CustomConfigWithLogServiceIntegrationTest.java} | 32 +-
...mWithBothLogWriterAppendersIntegrationTest.java | 203 ---
...edSystemWithLogLevelChangesIntegrationTest.java | 207 ---
.../logging/log4j/FastLoggerIntegrationTest.java | 411 +++--
...FastLoggerWithDefaultConfigIntegrationTest.java | 53 +-
...reVerboseMarkerFilterAcceptIntegrationTest.java | 26 +-
...fireVerboseMarkerFilterDenyIntegrationTest.java | 26 +-
.../log4j/GeodeConsoleAppenderIntegrationTest.java | 210 ---
...odeConsoleAppenderWithCacheIntegrationTest.java | 168 --
...leAppenderWithSystemOutRuleIntegrationTest.java | 98 --
...deVerboseMarkerFilterAcceptIntegrationTest.java | 26 +-
...eodeVerboseMarkerFilterDenyIntegrationTest.java | 26 +-
.../log4j/LogWriterAppenderIntegrationTest.java | 341 +++--
...LogWriterAppenderWithLimitsIntegrationTest.java | 147 --
...AppenderWithMemberNameInXmlIntegrationTest.java | 148 --
.../SecurityLogWriterAppenderIntegrationTest.java | 136 --
.../DistributedSystemMXBeanIntegrationTest.java | 93 +-
.../MemberMXBeanShowLogIntegrationTest.java | 186 ---
.../ChangeLogLevelFunctionIntegrationTest.java | 164 --
...ntExecutorWithLoggingIntegrationTest_log4j2.xml | 38 -
.../apache/geode/codeAnalysis/excludedClasses.txt | 9 +-
.../log4j/AlertAppenderIntegrationTest_log4j2.xml | 36 -
...othLogWriterAppendersIntegrationTest_log4j2.xml | 44 -
...onWithLogLevelChangesIntegrationTest_log4j2.xml | 38 -
...WithLoggerContextRuleIntegrationTest_log4j2.xml | 26 +-
...derWithSystemOutRuleIntegrationTest_log4j2.xml} | 19 +-
...ustomConfigWithCacheIntegrationTest_log4j2.xml} | 2 +-
...ConfigWithLogServiceIntegrationTest_log4j2.xml} | 2 +-
...othLogWriterAppendersIntegrationTest_log4j2.xml | 44 -
...emWithLogLevelChangesIntegrationTest_log4j2.xml | 38 -
...oseMarkerFilterAcceptIntegrationTest_log4j2.xml | 2 +-
...rboseMarkerFilterDenyIntegrationTest_log4j2.xml | 2 +-
.../GeodeConsoleAppenderIntegrationTest_log4j2.xml | 38 -
...nderWithSystemOutRuleIntegrationTest_log4j2.xml | 38 -
...oseMarkerFilterAcceptIntegrationTest_log4j2.xml | 2 +-
...rboseMarkerFilterDenyIntegrationTest_log4j2.xml | 2 +-
.../LogWriterAppenderIntegrationTest_log4j2.xml | 38 -
...terAppenderWithLimitsIntegrationTest_log4j2.xml | 38 -
...erWithMemberNameInXmlIntegrationTest_log4j2.xml | 38 -
...rityLogWriterAppenderIntegrationTest_log4j2.xml | 39 -
.../MonitorQueryUnderContentionBenchmark.java | 8 +
.../logging/log4j/CacheLoggingBenchmark.java | 116 --
.../logging/log4j/LogWriterAppenderBenchmark.java | 124 --
.../admin/internal/AdminDistributedSystemImpl.java | 27 +-
.../internal/DistributedSystemConfigImpl.java | 46 -
.../apache/geode/admin/jmx/internal/AgentImpl.java | 111 +-
.../internal/AbstractDistributionConfig.java | 5 -
.../internal/ClusterDistributionManager.java | 21 +-
.../distributed/internal/DistributionConfig.java | 11 +-
.../distributed/internal/DistributionManager.java | 8 +-
.../internal/InternalDistributedSystem.java | 151 +-
.../distributed/internal/InternalLocator.java | 107 +-
.../internal/LonerDistributionManager.java | 7 -
.../internal/RuntimeDistributionConfigImpl.java | 12 +-
.../distributed/internal/direct/DirectChannel.java | 5 +-
.../membership/gms/messenger/JGroupsMessenger.java | 5 +-
.../membership/gms/mgr/GMSMembershipManager.java | 2 +-
.../java/org/apache/geode/internal/Banner.java | 94 +-
.../apache/geode/internal/DistributionLocator.java | 1 +
.../apache/geode/internal/VersionDescription.java | 37 +-
.../remote/AdminConsoleDisconnectMessage.java | 31 +-
.../internal/admin/remote/AdminConsoleMessage.java | 21 +-
.../admin/remote/AlertLevelChangeMessage.java | 12 +-
.../admin/remote/AlertListenerMessage.java | 44 -
.../internal/admin/remote/TailLogResponse.java | 38 +-
.../apache/geode/internal/alerting/AlertLevel.java | 53 -
.../alerting/AlertListenerMessageFactory.java | 50 -
.../geode/internal/alerting/AlertMessaging.java | 100 --
.../geode/internal/alerting/AlertingAction.java | 38 -
.../geode/internal/alerting/AlertingProvider.java | 31 -
.../alerting/AlertingProviderRegistry.java | 80 -
.../geode/internal/alerting/AlertingService.java | 57 -
.../geode/internal/alerting/AlertingSession.java | 107 --
.../internal/alerting/AlertingSessionListener.java | 27 -
.../alerting/AlertingSessionListeners.java | 78 -
.../internal/alerting/NullAlertingProvider.java | 50 -
.../internal/alerting/NullAlertingService.java | 45 -
.../geode/internal/logging/Configuration.java | 237 ---
.../geode/internal/logging/ConfigurationInfo.java | 56 -
.../geode/internal/logging/DateFormatter.java | 15 +-
.../geode/internal/logging/GemFireFormatter.java | 37 +-
.../geode/internal/logging/GemFireHandler.java | 24 +-
.../geode/internal/logging/InternalLogWriter.java | 2 +
.../geode/internal/logging/LocalLogWriter.java | 4 +-
.../apache/geode/internal/logging/LogConfig.java | 57 +-
.../geode/internal/logging/LogConfigListener.java | 23 -
.../geode/internal/logging/LogConfigSupplier.java | 35 +-
.../org/apache/geode/internal/logging/LogFile.java | 49 -
.../geode/internal/logging/LogFileParser.java | 164 +-
.../geode/internal/logging/LogMessageRegex.java | 106 --
.../apache/geode/internal/logging/LogService.java | 249 ++-
.../geode/internal/logging/LogWriterFactory.java | 81 +-
.../geode/internal/logging/LogWriterImpl.java | 16 +-
.../geode/internal/logging/LogWriterLevel.java | 40 +-
.../geode/internal/logging/LoggingSession.java | 119 --
.../internal/logging/LoggingSessionListener.java | 58 -
.../internal/logging/LoggingSessionListeners.java | 100 --
.../geode/internal/logging/LoggingThread.java | 7 +-
.../internal/logging/LoggingThreadFactory.java | 14 +-
.../geode/internal/logging/LoggingThreadGroup.java | 83 +-
.../logging/LoggingUncaughtExceptionHandler.java | 36 +-
.../geode/internal/logging/ManagerLogWriter.java | 55 +-
.../internal/logging/ManagerLogWriterFactory.java | 176 ---
.../geode/internal/logging/MergeLogFiles.java | 222 +--
.../apache/geode/internal/logging/NullLogFile.java | 53 -
.../geode/internal/logging/NullLogWriter.java | 58 -
.../geode/internal/logging/NullLoggingSession.java | 47 -
.../geode/internal/logging/NullProviderAgent.java | 45 -
.../geode/internal/logging/ProviderAgent.java | 39 -
.../geode/internal/logging/PureLogWriter.java | 9 +-
.../geode/internal/logging/SecurityLogConfig.java | 32 +-
.../geode/internal/logging/SecurityLogWriter.java | 12 +-
.../internal/logging/SecurityManagerLogWriter.java | 15 +-
.../geode/internal/logging/SessionContext.java | 48 -
.../apache/geode/internal/logging/SortLogFile.java | 59 +-
.../internal/logging/StandardErrorPrinter.java | 6 +-
.../internal/logging/StandardOutputPrinter.java | 6 +-
.../internal/logging/log4j/AlertAppender.java | 474 +++---
.../geode/internal/logging/log4j/AlertLevel.java | 61 +
.../logging/log4j/AlertLevelConverter.java | 88 --
.../internal/logging/log4j/AlertListener.java | 66 -
.../geode/internal/logging/log4j/Configurator.java | 186 +++
.../internal/logging/log4j/DebuggableAppender.java | 28 -
.../logging/log4j/GeodeConsoleAppender.java | 305 ----
.../geode/internal/logging/log4j/Log4jAgent.java | 294 ----
.../geode/internal/logging/log4j/LogLevel.java | 162 +-
.../internal/logging/log4j/LogWriterAppender.java | 441 ++----
.../internal/logging/log4j/LogWriterAppenders.java | 293 ++++
.../logging/log4j/LogWriterLevelConverter.java | 97 --
.../internal/logging/log4j/LogWriterLogger.java | 23 +-
.../logging/log4j/MemberNamePatternConverter.java | 64 -
.../internal/logging/log4j/MemberNameSupplier.java | 32 -
.../internal/logging/log4j/PausableAppender.java | 26 -
.../log4j/message/GemFireParameterizedMessage.java | 15 +-
.../GemFireParameterizedMessageFactory.java | 4 +-
.../security/IntegratedSecurityService.java | 4 +-
.../security/shiro/SecurityManagerProvider.java | 4 +-
.../internal/statistics/GemFireStatSampler.java | 7 +-
.../geode/internal/statistics/HostStatSampler.java | 20 -
.../internal/statistics/StatArchiveHandler.java | 21 +-
.../statistics/StatArchiveHandlerConfig.java | 16 +-
.../internal/statistics/StatisticsConfig.java | 52 -
.../org/apache/geode/internal/tcp/Connection.java | 4 +-
.../apache/geode/internal/tcp/ConnectionTable.java | 22 +-
.../org/apache/geode/internal/tcp/TCPConduit.java | 4 +-
.../management/internal/ManagerStartupMessage.java | 4 +-
.../internal/beans/MemberMBeanBridge.java | 9 +-
.../cli/commands/DiskStoreCommandsUtils.java | 3 +-
.../cli/functions/ChangeLogLevelFunction.java | 28 +-
geode-core/src/main/resources/log4j2-cli.xml | 2 +-
geode-core/src/main/resources/log4j2.xml | 18 +-
.../geode/internal/logging/log4j/log4j2-legacy.xml | 2 +-
.../sanctioned-geode-core-serializables.txt | 1 +
.../internal/DistributedSystemConfigImplTest.java | 57 -
.../java/org/apache/geode/internal/BannerTest.java | 59 -
.../geode/internal/alerting/AlertLevelTest.java | 113 --
.../alerting/AlertListenerMessageFactoryTest.java | 68 -
.../internal/alerting/AlertMessagingTest.java | 108 --
.../internal/alerting/AlertingActionTest.java | 54 -
.../alerting/AlertingProviderRegistryTest.java | 94 --
.../internal/alerting/AlertingServiceTest.java | 75 -
.../alerting/NullAlertingProviderTest.java | 48 -
.../geode/internal/logging/ConfigurationTest.java | 382 -----
...essageRegexMatchesStartupConfigurationTest.java | 227 ---
.../internal/logging/LogMessageRegexTest.java | 242 ---
.../geode/internal/logging/LogServiceTest.java | 129 +-
.../geode/internal/logging/LogWriterImplTest.java | 3 -
.../geode/internal/logging/LogWriterLevelTest.java | 73 +-
.../geode/internal/logging/LoggingSessionTest.java | 219 ---
.../internal/logging/LoggingThreadFactoryTest.java | 6 -
.../geode/internal/logging/LoggingThreadTest.java | 7 -
.../LoggingUncaughtExceptionHandlerTest.java | 7 +-
.../internal/logging/ManagerLogWriterTest.java | 41 -
.../geode/internal/logging/SortLogFileTest.java | 2 +-
.../internal/logging/log4j/AlertAppenderTest.java | 314 ++--
.../logging/log4j/AlertLevelConverterTest.java | 144 --
.../internal/logging/log4j/AlertLevelTest.java | 137 ++
.../internal/logging/log4j/FastLoggerTest.java | 2 +-
.../log4j/HexThreadIdPatternConverterTest.java | 4 -
.../geode/internal/logging/log4j/LogLevelTest.java | 183 ++-
.../logging/log4j/LogWriterLevelConverterTest.java | 132 --
.../log4j/MemberNamePatternConverterTest.java | 57 -
.../org/apache/geode/test/golden/log4j2-test.xml | 2 +-
.../tomcat_installing_the_module.html.md.erb | 1 -
.../apache/geode/management/MXBeanAwaitility.java | 0
.../apache/geode/test/dunit/LogWriterUtils.java | 4 +-
.../geode/test/dunit/standalone/DUnitLauncher.java | 9 +-
.../logging/LogServiceIntegrationTestSupport.java | 21 +-
.../internal/logging/TestLogWriterFactory.java | 5 +-
.../apache/geode/test/assertj/LogFileAssert.java | 33 -
.../apache/geode/test/assertj/LogLevelAssert.java | 33 -
.../assertj/internal/AbstractLogFileAssert.java | 206 ---
.../assertj/internal/AbstractLogLevelAssert.java | 46 -
.../assertj/internal/ShouldBeLessSpecificThan.java | 37 -
.../geode/test/junit/categories/AlertingTest.java | 21 -
.../accessible/AccessibleTemporaryFolder.java | 35 -
.../apache/geode/test/process/ProcessWrapper.java | 2 +-
.../security/LogNoPasswordIntegrationTest.java} | 2 +-
243 files changed, 5724 insertions(+), 16735 deletions(-)
diff --git a/extensions/geode-modules-assembly/build.gradle b/extensions/geode-modules-assembly/build.gradle
index fb3ad0a..c55d161 100644
--- a/extensions/geode-modules-assembly/build.gradle
+++ b/extensions/geode-modules-assembly/build.gradle
@@ -210,7 +210,6 @@ task distAppServer(type: Zip, dependsOn: [':extensions:geode-modules-session:jar
filter(ReplaceTokens, tokens:['TX_VERSION': project.'javax.transaction-api.version'])
filter(ReplaceTokens, tokens:['JGROUPS_VERSION': project.'jgroups.version'])
filter(ReplaceTokens, tokens:['SHIRO_VERSION': project.'shiro.version'])
- filter(ReplaceTokens, tokens:['COMMONS_IO_VERSION': project.'commons-io.version'])
filter(ReplaceTokens, tokens:['COMMONS_LANG_VERSION': project.'commons-lang3.version'])
filter(ReplaceTokens, tokens:['COMMONS_VALIDATOR_VERSION': project.'commons-validator.version'])
}
diff --git a/extensions/geode-modules-assembly/release/session/bin/modify_war b/extensions/geode-modules-assembly/release/session/bin/modify_war
index e74b088..f7acc11 100755
--- a/extensions/geode-modules-assembly/release/session/bin/modify_war
+++ b/extensions/geode-modules-assembly/release/session/bin/modify_war
@@ -268,7 +268,6 @@ OTHER_JARS=(${GEODE}/lib/geode-core-${VERSION}.jar \
${GEODE}/lib/fastutil-@FASTUTIL_VERSION@.jar \
${GEODE}/lib/javax.transaction-api-@TX_VERSION@.jar \
${GEODE}/lib/jgroups-@JGROUPS_VERSION@.jar \
- ${GEODE}/lib/commons-io-@COMMONS_IO_VERSION@.jar \
${GEODE}/lib/commons-lang3-@COMMONS_LANG_VERSION@.jar \
${GEODE}/lib/shiro-core-@SHIRO_VERSION@.jar \
${GEODE}/lib/commons-validator-@COMMONS_VALIDATOR_VERSION@.jar \
diff --git a/geode-assembly/geode-assembly-test/src/main/java/org/apache/geode/session/tests/TomcatInstall.java b/geode-assembly/geode-assembly-test/src/main/java/org/apache/geode/session/tests/TomcatInstall.java
index 8da6540..c351d29 100644
--- a/geode-assembly/geode-assembly-test/src/main/java/org/apache/geode/session/tests/TomcatInstall.java
+++ b/geode-assembly/geode-assembly-test/src/main/java/org/apache/geode/session/tests/TomcatInstall.java
@@ -91,8 +91,8 @@ public class TomcatInstall extends ContainerInstall {
}
private static final String[] tomcatRequiredJars =
- {"antlr", "commons-io", "commons-lang", "commons-validator", "fastutil", "geode-core",
- "javax.transaction-api", "jgroups", "log4j-api", "log4j-core", "log4j-jul", "shiro-core"};
+ {"antlr", "commons-lang", "fastutil", "geode-core", "javax.transaction-api", "jgroups",
+ "log4j-api", "log4j-core", "log4j-jul", "shiro-core", "commons-validator"};
private final TomcatVersion version;
diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/GfshStartLocatorLogAcceptanceTest.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/GfshStartLocatorLogAcceptanceTest.java
index 4d85ab9..01a47c9 100644
--- a/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/GfshStartLocatorLogAcceptanceTest.java
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/cli/commands/GfshStartLocatorLogAcceptanceTest.java
@@ -14,46 +14,46 @@
*/
package org.apache.geode.management.internal.cli.commands;
-import static org.apache.geode.internal.logging.Configuration.STARTUP_CONFIGURATION;
+import static org.assertj.core.api.Assertions.assertThat;
import java.io.File;
+import java.nio.charset.StandardCharsets;
-import org.junit.Before;
+import com.google.common.io.Files;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.apache.geode.internal.Banner;
-import org.apache.geode.test.assertj.LogFileAssert;
import org.apache.geode.test.junit.categories.GfshTest;
import org.apache.geode.test.junit.categories.LoggingTest;
import org.apache.geode.test.junit.rules.gfsh.GfshExecution;
import org.apache.geode.test.junit.rules.gfsh.GfshRule;
import org.apache.geode.test.junit.rules.gfsh.GfshScript;
-@Category({LoggingTest.class, GfshTest.class})
+@Category({GfshTest.class, LoggingTest.class})
public class GfshStartLocatorLogAcceptanceTest {
- private File logFile;
-
@Rule
public GfshRule gfshRule = new GfshRule();
- @Before
- public void setUp() {
- GfshExecution gfshExecution = GfshScript.of("start locator").execute(gfshRule);
- File[] files = gfshExecution.getWorkingDir().listFiles();
- String logName = files[0].getAbsolutePath() + "/" + files[0].getName() + ".log";
- logFile = new File(logName);
+ @Test
+ public void bannerOnlyLogsOnce() throws Exception {
+ final String banner = "Licensed to the Apache Software Foundation (ASF)";
+ String lines = getExecutionLogs();
+ assertThat(lines.indexOf(banner)).isEqualTo(lines.lastIndexOf(banner));
}
@Test
- public void bannerIsLoggedOnlyOnce() {
- LogFileAssert.assertThat(logFile).containsOnlyOnce(Banner.BannerHeader.displayValues());
+ public void startupConfigsOnlyLogsOnce() throws Exception {
+ final String startupConfigs = "### GemFire Properties using default values ###";
+ String lines = getExecutionLogs();
+ assertThat(lines.indexOf(startupConfigs)).isEqualTo(lines.lastIndexOf(startupConfigs));
}
- @Test
- public void startupConfigIsLoggedOnlyOnce() {
- LogFileAssert.assertThat(logFile).containsOnlyOnce(STARTUP_CONFIGURATION);
+ private String getExecutionLogs() throws Exception {
+ GfshExecution gfshExecution = GfshScript.of("start locator").execute(gfshRule);
+ File[] files = gfshExecution.getWorkingDir().listFiles();
+ String logName = files[0].getAbsolutePath() + "/" + files[0].getName() + ".log";
+ return Files.readLines(new File(logName), StandardCharsets.UTF_8).toString();
}
}
diff --git a/geode-common/src/main/java/org/apache/geode/annotations/TestingOnly.java b/geode-common/src/main/java/org/apache/geode/annotations/TestingOnly.java
index da89816..f2a21a1 100644
--- a/geode-common/src/main/java/org/apache/geode/annotations/TestingOnly.java
+++ b/geode-common/src/main/java/org/apache/geode/annotations/TestingOnly.java
@@ -20,7 +20,7 @@ import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Documented
-@Target({ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD})
+@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
public @interface TestingOnly {
/** Optional description */
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/alerting/AlertingServiceDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/alerting/AlertingServiceDistributedTest.java
deleted file mode 100644
index 7fe2058..0000000
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/alerting/AlertingServiceDistributedTest.java
+++ /dev/null
@@ -1,399 +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.geode.internal.alerting;
-
-import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
-import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_START;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.addListener;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.removeListener;
-import static org.apache.geode.internal.alerting.AlertLevel.NONE;
-import static org.apache.geode.internal.alerting.AlertLevel.SEVERE;
-import static org.apache.geode.management.JMXNotificationType.SYSTEM_ALERT;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.getDistributedSystemName;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.mbeanServer;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
-import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
-import static org.apache.geode.test.dunit.VM.getController;
-import static org.apache.geode.test.dunit.VM.getVM;
-import static org.apache.geode.test.dunit.VM.toArray;
-import static org.apache.geode.test.dunit.standalone.DUnitLauncher.getDistributedSystemProperties;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.isA;
-import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import java.io.Serializable;
-import java.util.Properties;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.JMX;
-import javax.management.Notification;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.mockito.ArgumentCaptor;
-
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.admin.remote.AlertListenerMessage;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.DistributedSystemMXBean;
-import org.apache.geode.management.internal.AlertDetails;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.rules.DistributedRule;
-import org.apache.geode.test.junit.categories.AlertingTest;
-import org.apache.geode.test.junit.categories.ManagementTest;
-import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
-
-/**
- * Distributed tests for {@link AlertingService} with {@link DistributedSystemMXBean} in the
- * JMX Manager.
- */
-@Category({AlertingTest.class, ManagementTest.class})
-public class AlertingServiceDistributedTest implements Serializable {
-
- private static final long TIMEOUT = getTimeout().getValueInMS();
- private static final NotificationFilter SYSTEM_ALERT_FILTER =
- notification -> notification.getType().equals(SYSTEM_ALERT);
-
- private static InternalCache cache;
- private static Logger logger;
-
- private static AlertListenerMessage.Listener messageListener;
- private static DistributedSystemMXBean distributedSystemMXBean;
- private static NotificationListener notificationListener;
- private static AlertingService alertingService;
-
- private DistributedMember managerMember;
-
- private String alertMessage;
- private String exceptionMessage;
-
- private String managerName;
- private String memberName;
-
- private VM managerVM;
- private VM memberVM;
-
- @Rule
- public DistributedRule distributedRule = new DistributedRule();
-
- @Rule
- public SerializableTestName testName = new SerializableTestName();
-
- @Before
- public void setUp() throws Exception {
- alertMessage = "Alerting in " + testName.getMethodName();
- exceptionMessage = "Exception in " + testName.getMethodName();
-
- managerName = "Manager in " + testName.getMethodName();
- memberName = "Member in " + testName.getMethodName();
-
- managerVM = getVM(0);
- memberVM = getController();
-
- managerMember = managerVM.invoke(() -> createManager());
- memberVM.invoke(() -> createMember());
-
- addIgnoredException(alertMessage);
- addIgnoredException(exceptionMessage);
- }
-
- @After
- public void tearDown() {
- for (VM vm : toArray(managerVM, memberVM)) {
- vm.invoke(() -> {
- removeListener(messageListener);
- cache.close();
- cache = null;
- logger = null;
- messageListener = null;
- distributedSystemMXBean = null;
- notificationListener = null;
- alertingService = null;
- });
- }
- }
-
- @Test
- public void distributedSystemMXBeanExists() {
- managerVM.invoke(() -> {
- assertThat(distributedSystemMXBean).isNotNull();
- });
- }
-
- @Test
- public void distributedSystemMXBeanIsRegistered() {
- managerVM.invoke(() -> {
- assertThat(mbeanServer.isRegistered(getDistributedSystemName())).isTrue();
- });
- }
-
- @Test
- public void listenerReceivesAlertFromRemoteMember() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureNotification()).isNotNull();
- });
- }
-
- @Test
- public void listenerReceivesAlertFromLocalMember() {
- managerVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureNotification().getMessage()).isEqualTo(alertMessage);
- });
- }
-
- @Test
- public void notificationMessageFromRemoteMemberIsAlertMessage() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureNotification().getMessage()).isEqualTo(alertMessage);
- });
- }
-
- @Test
- public void notificationMessageFromLocalMemberIsAlertMessage() {
- managerVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureNotification().getMessage()).isEqualTo(alertMessage);
- });
- }
-
- @Test
- public void alertListenerMessageIsStillReceivedAfterRemoveListener() {
- managerVM.invoke(() -> getPlatformMBeanServer()
- .removeNotificationListener(getDistributedSystemName(), notificationListener));
-
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- verify(messageListener, timeout(TIMEOUT)).received(isA(AlertListenerMessage.class));
- });
- }
-
- @Test
- public void alertListenerMessageIsNotReceivedForLevelNone() {
- changeAlertLevel(NONE);
-
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> verifyNoMoreInteractions(messageListener));
- }
-
- @Test
- public void alertListenerMessageIsNotReceivedForLevelsLowerThanAlertLevel() {
- memberVM.invoke(() -> {
- logger.warn(alertMessage);
- logger.error(alertMessage);
- });
-
- managerVM.invoke(() -> verifyNoMoreInteractions(messageListener));
- }
-
- @Test
- public void alertDetailsIsCreatedByAlertMessage() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails()).isNotNull().isInstanceOf(AlertDetails.class);
- });
- }
-
- @Test
- public void alertDetailsAlertLevelMatchesLogLevel() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getAlertLevel()).isEqualTo(SEVERE.intLevel());
- });
- }
-
- @Test
- public void alertDetailsMessageMatchesAlertMessage() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getMsg()).isEqualTo(alertMessage);
- });
- }
-
- @Test
- public void alertDetailsSenderIsNullForLocalAlert() {
- managerVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getSender()).isNull();
- });
- }
-
- @Test
- public void alertDetailsSourceContainsThreadName() {
- String threadName = memberVM.invoke(() -> {
- logger.fatal(alertMessage);
- return Thread.currentThread().getName();
- });
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getSource()).contains(threadName);
- });
- }
-
- @Test
- public void alertDetailsConnectionNameMatchesMemberName() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getConnectionName()).isEqualTo(memberName);
- });
- }
-
- @Test
- public void alertDetailsExceptionTextIsEmptyByDefault() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getExceptionText()).isEqualTo("");
- });
- }
-
- @Test
- public void alertDetailsExceptionTextMatchesExceptionMessage() {
- memberVM.invoke(() -> logger.fatal(alertMessage, new Exception(exceptionMessage)));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getExceptionText()).contains(exceptionMessage);
- });
- }
-
- @Test
- public void alertDetailsThreadNameMatchesLoggingThreadName() {
- String threadName = memberVM.invoke(() -> {
- logger.fatal(alertMessage);
- return Thread.currentThread().getName();
- });
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getThreadName()).isEqualTo(threadName);
- });
- }
-
- @Test
- public void alertDetailsThreadIdMatchesLoggingThreadId() {
- long threadId = memberVM.invoke(() -> {
- logger.fatal(alertMessage);
- return Thread.currentThread().getId();
- });
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getTid()).isEqualTo(threadId);
- });
- }
-
- @Test
- public void alertDetailsMessageTimeIsNotNull() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> {
- assertThat(captureAlertDetails().getMsgTime()).isNotNull();
- });
- }
-
- private DistributedMember createManager() throws InstanceNotFoundException {
- messageListener = spy(AlertListenerMessage.Listener.class);
- addListener(messageListener);
-
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, managerName);
- config.setProperty(JMX_MANAGER, "true");
- config.setProperty(JMX_MANAGER_START, "true");
- config.setProperty(JMX_MANAGER_PORT, "0");
- config.setProperty(HTTP_SERVICE_PORT, "0");
-
- cache = (InternalCache) new CacheFactory(config).create();
- alertingService = cache.getInternalDistributedSystem().getAlertingService();
- logger = LogService.getLogger();
-
- distributedSystemMXBean = JMX.newMXBeanProxy(getPlatformMBeanServer(),
- getDistributedSystemName(), DistributedSystemMXBean.class);
-
- notificationListener = spy(NotificationListener.class);
- getPlatformMBeanServer().addNotificationListener(getDistributedSystemName(),
- notificationListener, SYSTEM_ALERT_FILTER, null);
-
- return cache.getDistributedSystem().getDistributedMember();
- }
-
- private void createMember() {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, memberName);
- config.setProperty(JMX_MANAGER, "false");
-
- cache = (InternalCache) new CacheFactory(config).create();
- alertingService = cache.getInternalDistributedSystem().getAlertingService();
- logger = LogService.getLogger();
-
- await().until(() -> alertingService.hasAlertListener(managerMember, SEVERE));
- }
-
- private void changeAlertLevel(AlertLevel alertLevel) {
- managerVM.invoke(() -> {
- distributedSystemMXBean.changeAlertLevel(alertLevel.name());
- });
-
- memberVM.invoke(() -> {
- if (alertLevel == NONE) {
- await().until(() -> !alertingService.hasAlertListener(managerMember, alertLevel));
- } else {
- await().until(() -> alertingService.hasAlertListener(managerMember, alertLevel));
- }
- });
- }
-
- private Notification captureNotification() {
- ArgumentCaptor<Notification> notificationCaptor = ArgumentCaptor.forClass(Notification.class);
- verify(notificationListener, timeout(TIMEOUT)).handleNotification(notificationCaptor.capture(),
- isNull());
- return notificationCaptor.getValue();
- }
-
- private AlertDetails captureAlertDetails() {
- ArgumentCaptor<AlertDetails> alertDetailsCaptor = ArgumentCaptor.forClass(AlertDetails.class);
- verify(messageListener, timeout(TIMEOUT)).created(alertDetailsCaptor.capture());
- return alertDetailsCaptor.getValue();
- }
-}
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/alerting/AlertingServiceWithoutListenerDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/alerting/AlertingServiceWithoutListenerDistributedTest.java
deleted file mode 100644
index c2bf009..0000000
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/alerting/AlertingServiceWithoutListenerDistributedTest.java
+++ /dev/null
@@ -1,217 +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.geode.internal.alerting;
-
-import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
-import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_START;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.addListener;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.removeListener;
-import static org.apache.geode.internal.alerting.AlertLevel.NONE;
-import static org.apache.geode.internal.alerting.AlertLevel.SEVERE;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.getDistributedSystemName;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.mbeanServer;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
-import static org.apache.geode.test.dunit.VM.getController;
-import static org.apache.geode.test.dunit.VM.getVM;
-import static org.apache.geode.test.dunit.VM.toArray;
-import static org.apache.geode.test.dunit.standalone.DUnitLauncher.getDistributedSystemProperties;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import java.io.Serializable;
-import java.util.Properties;
-
-import javax.management.JMX;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.admin.remote.AlertListenerMessage;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.DistributedSystemMXBean;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.rules.DistributedRule;
-import org.apache.geode.test.junit.categories.AlertingTest;
-import org.apache.geode.test.junit.categories.ManagementTest;
-import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
-
-/**
- * Distributed tests for {@link AlertingService} with {@link DistributedSystemMXBean} in the
- * JMX Manager without any {@code NotificationListener}s.
- */
-@Category({AlertingTest.class, ManagementTest.class})
-public class AlertingServiceWithoutListenerDistributedTest implements Serializable {
-
- private static InternalCache cache;
- private static Logger logger;
-
- private static AlertListenerMessage.Listener messageListener;
- private static DistributedSystemMXBean distributedSystemMXBean;
- private static AlertingService alertingService;
-
- private DistributedMember managerMember;
-
- private String alertMessage;
-
- private String managerName;
- private String memberName;
-
- private VM managerVM;
- private VM memberVM;
-
- @Rule
- public DistributedRule distributedRule = new DistributedRule();
-
- @Rule
- public SerializableTestName testName = new SerializableTestName();
-
- @Before
- public void setUp() throws Exception {
- alertMessage = "Alerting in " + testName.getMethodName();
-
- managerName = "Manager in " + testName.getMethodName();
- memberName = "Member in " + testName.getMethodName();
-
- managerVM = getVM(0);
- memberVM = getController();
-
- managerMember = managerVM.invoke(() -> createManager());
- memberVM.invoke(() -> createMember());
-
- addIgnoredException(alertMessage);
- }
-
- @After
- public void tearDown() {
- for (VM vm : toArray(managerVM, memberVM)) {
- vm.invoke(() -> {
- removeListener(messageListener);
- cache.close();
- cache = null;
- logger = null;
- messageListener = null;
- distributedSystemMXBean = null;
- alertingService = null;
- });
- }
- }
-
- @Test
- public void distributedSystemMXBeanExists() {
- managerVM.invoke(() -> {
- assertThat(distributedSystemMXBean).isNotNull();
- });
- }
-
- @Test
- public void distributedSystemMXBeanIsRegistered() {
- managerVM.invoke(() -> {
- assertThat(mbeanServer.isRegistered(getDistributedSystemName())).isTrue();
- });
- }
-
- @Test
- public void alertListenerIsRegisteredForManager() {
- memberVM.invoke(() -> {
- assertThat(alertingService.hasAlertListener(managerMember, SEVERE)).isTrue();
- });
- }
-
- @Test
- public void alertMessageIsReceivedByManager() {
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> verifyNoMoreInteractions(messageListener));
- }
-
- @Test
- public void alertListenerMessageIsNotReceivedByManagerForLevelNone() {
- changeAlertLevel(NONE);
-
- memberVM.invoke(() -> logger.fatal(alertMessage));
-
- managerVM.invoke(() -> verifyNoMoreInteractions(messageListener));
- }
-
- @Test
- public void alertListenerMessageIsNotReceivedByManagerForLevelsLowerThanAlertLevel() {
- memberVM.invoke(() -> {
- logger.warn(alertMessage);
- logger.error(alertMessage);
- });
-
- managerVM.invoke(() -> verifyNoMoreInteractions(messageListener));
- }
-
- private DistributedMember createManager() {
- messageListener = spy(AlertListenerMessage.Listener.class);
- addListener(messageListener);
-
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, managerName);
- config.setProperty(JMX_MANAGER, "true");
- config.setProperty(JMX_MANAGER_START, "true");
- config.setProperty(JMX_MANAGER_PORT, "0");
- config.setProperty(HTTP_SERVICE_PORT, "0");
-
- cache = (InternalCache) new CacheFactory(config).create();
- alertingService = cache.getInternalDistributedSystem().getAlertingService();
- logger = LogService.getLogger();
-
- distributedSystemMXBean = JMX.newMXBeanProxy(getPlatformMBeanServer(),
- getDistributedSystemName(), DistributedSystemMXBean.class);
-
- return cache.getDistributedSystem().getDistributedMember();
- }
-
- private void createMember() {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, memberName);
- config.setProperty(JMX_MANAGER, "false");
-
- cache = (InternalCache) new CacheFactory(config).create();
- alertingService = cache.getInternalDistributedSystem().getAlertingService();
- logger = LogService.getLogger();
-
- await().until(() -> alertingService.hasAlertListener(managerMember, SEVERE));
- }
-
- private void changeAlertLevel(AlertLevel alertLevel) {
- managerVM.invoke(() -> {
- distributedSystemMXBean.changeAlertLevel(alertLevel.name());
- });
-
- memberVM.invoke(() -> {
- if (alertLevel == NONE) {
- await().until(() -> !alertingService.hasAlertListener(managerMember, alertLevel));
- } else {
- await().until(() -> alertingService.hasAlertListener(managerMember, alertLevel));
- }
- });
- }
-}
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/logging/LoggingWithReconnectDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/logging/LoggingWithReconnectDistributedTest.java
deleted file mode 100644
index 4734bba..0000000
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/logging/LoggingWithReconnectDistributedTest.java
+++ /dev/null
@@ -1,210 +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.geode.internal.logging;
-
-import static java.lang.System.lineSeparator;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.apache.geode.distributed.ConfigurationProperties.DISABLE_AUTO_RECONNECT;
-import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.MAX_WAIT_TIME_RECONNECT;
-import static org.apache.geode.distributed.ConfigurationProperties.MEMBER_TIMEOUT;
-import static org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper.getMembershipManager;
-import static org.apache.geode.internal.Banner.BannerHeader.displayValues;
-import static org.apache.geode.internal.logging.Configuration.STARTUP_CONFIGURATION;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
-import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
-import static org.apache.geode.test.dunit.VM.getController;
-import static org.apache.geode.test.dunit.VM.getVM;
-import static org.apache.geode.test.dunit.VM.toArray;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Arrays;
-
-import org.apache.commons.lang3.StringUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.ForcedDisconnectException;
-import org.apache.geode.distributed.LocatorLauncher;
-import org.apache.geode.distributed.ServerLauncher;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.rules.DistributedRule;
-import org.apache.geode.test.junit.categories.LoggingTest;
-import org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder;
-import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
-
-/**
- * Distributed tests for logging during reconnect.
- */
-@Category(LoggingTest.class)
-public class LoggingWithReconnectDistributedTest implements Serializable {
-
- private static final long TIMEOUT = getTimeout().getValueInMS();
-
- private static LocatorLauncher locatorLauncher;
- private static ServerLauncher serverLauncher;
-
- private static InternalDistributedSystem system;
-
- private VM locatorVM;
- private VM server1VM;
- private VM server2VM;
-
- private String locatorName;
- private String server1Name;
- private String server2Name;
-
- private File locatorDir;
- private File server1Dir;
- private File server2Dir;
-
- @Rule
- public DistributedRule distributedRule = new DistributedRule();
-
- @Rule
- public SerializableTemporaryFolder temporaryFolder = new SerializableTemporaryFolder();
-
- @Rule
- public SerializableTestName testName = new SerializableTestName();
-
- @Before
- public void setUp() throws Exception {
- locatorName = "locator-" + testName.getMethodName();
- server1Name = "server-" + testName.getMethodName() + "-1";
- server2Name = "server-" + testName.getMethodName() + "-2";
-
- locatorVM = getVM(0);
- server1VM = getVM(1);
- server2VM = getController();
-
- locatorDir = temporaryFolder.newFolder(locatorName);
- server1Dir = temporaryFolder.newFolder(server1Name);
- server2Dir = temporaryFolder.newFolder(server2Name);
-
- int locatorPort = locatorVM.invoke(() -> createLocator());
-
- server1VM.invoke(() -> createServer(server1Name, server1Dir, locatorPort));
- server2VM.invoke(() -> createServer(server2Name, server2Dir, locatorPort));
-
- addIgnoredException(ForcedDisconnectException.class);
- addIgnoredException("Possible loss of quorum");
- }
-
- @After
- public void tearDown() {
- locatorVM.invoke(() -> {
- locatorLauncher.stop();
- locatorLauncher = null;
- system = null;
- });
-
- for (VM vm : toArray(server1VM, server2VM)) {
- vm.invoke(() -> {
- serverLauncher.stop();
- serverLauncher = null;
- system = null;
- });
- }
- }
-
- @Test
- public void logFileContainsBannerOnlyOnce() {
- locatorVM.invoke(() -> {
- assertThat(system.getDistributionManager().getDistributionManagerIds()).hasSize(3);
- });
-
- server2VM.invoke(() -> {
- GMSMembershipManager membershipManager = (GMSMembershipManager) getMembershipManager(system);
- membershipManager.forceDisconnect("Forcing disconnect in " + testName.getMethodName());
-
- await().until(() -> system.isReconnecting());
- system.waitUntilReconnected(TIMEOUT, MILLISECONDS);
- assertThat(system.getReconnectedSystem()).isNotSameAs(system);
- });
-
- locatorVM.invoke(() -> {
- assertThat(system.getDistributionManager().getDistributionManagerIds()).hasSize(3);
- });
-
- server2VM.invoke(() -> {
- File[] files = server2Dir.listFiles((dir, name) -> name.endsWith(".log"));
- assertThat(files).as(expectedOneLogFile(files)).hasSize(1);
-
- File logFile = files[0];
- assertThat(logFile).exists();
-
- // Banner must be logged only once
- LogFileAssert.assertThat(logFile).containsOnlyOnce(displayValues());
-
- // Startup Config must be logged only once
- String[] startupConfiguration = StringUtils
- .split(STARTUP_CONFIGURATION + system.getConfig().toLoggerString(), lineSeparator());
-
- LogFileAssert.assertThat(logFile).containsOnlyOnce(startupConfiguration);
- });
- }
-
- private String expectedOneLogFile(File[] files) {
- return "Expecting directory:" + lineSeparator() + " " + server2Dir.getAbsolutePath()
- + lineSeparator() + "to contain only one log file:" + lineSeparator() + " " + server2Name
- + ".log" + lineSeparator() + "but found multiple log files:" + lineSeparator() + " "
- + Arrays.asList(files);
- }
-
- private int createLocator() {
- LocatorLauncher.Builder builder = new LocatorLauncher.Builder();
- builder.setMemberName(locatorName);
- builder.setWorkingDirectory(locatorDir.getAbsolutePath());
- builder.setPort(0);
- builder.set(DISABLE_AUTO_RECONNECT, "false");
- builder.set(ENABLE_CLUSTER_CONFIGURATION, "false");
- builder.set(MAX_WAIT_TIME_RECONNECT, "1000");
- builder.set(MEMBER_TIMEOUT, "2000");
-
- locatorLauncher = builder.build();
- locatorLauncher.start();
-
- system = (InternalDistributedSystem) locatorLauncher.getCache().getDistributedSystem();
-
- return locatorLauncher.getPort();
- }
-
- private void createServer(String serverName, File serverDir, int locatorPort) {
- ServerLauncher.Builder builder = new ServerLauncher.Builder();
- builder.setMemberName(serverName);
- builder.setWorkingDirectory(serverDir.getAbsolutePath());
- builder.setServerPort(0);
- builder.set(LOCATORS, "localHost[" + locatorPort + "]");
- builder.set(DISABLE_AUTO_RECONNECT, "false");
- builder.set(ENABLE_CLUSTER_CONFIGURATION, "false");
- builder.set(MAX_WAIT_TIME_RECONNECT, "1000");
- builder.set(MEMBER_TIMEOUT, "2000");
-
- serverLauncher = builder.build();
- serverLauncher.start();
-
- system = (InternalDistributedSystem) serverLauncher.getCache().getDistributedSystem();
- }
-}
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemDUnitTest.java
new file mode 100644
index 0000000..8fae2ea
--- /dev/null
+++ b/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemDUnitTest.java
@@ -0,0 +1,575 @@
+/*
+ * 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.geode.management;
+
+import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
+import static org.apache.geode.management.internal.MBeanJMXAdapter.getDistributedSystemName;
+import static org.apache.geode.management.internal.MBeanJMXAdapter.getMemberMBeanName;
+import static org.apache.geode.management.internal.MBeanJMXAdapter.getMemberNameOrId;
+import static org.apache.geode.test.dunit.Host.getHost;
+import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
+import static org.apache.geode.test.dunit.Invoke.invokeInEveryVM;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.ListenerNotFoundException;
+import javax.management.Notification;
+import javax.management.NotificationBroadcasterSupport;
+import javax.management.NotificationFilter;
+import javax.management.NotificationListener;
+import javax.management.ObjectName;
+
+import org.apache.logging.log4j.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.internal.admin.Alert;
+import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.logging.log4j.AlertAppender;
+import org.apache.geode.management.internal.AlertDetails;
+import org.apache.geode.management.internal.ManagementConstants;
+import org.apache.geode.management.internal.NotificationHub;
+import org.apache.geode.management.internal.NotificationHub.NotificationHubListener;
+import org.apache.geode.management.internal.SystemManagementService;
+import org.apache.geode.management.internal.beans.MemberMBean;
+import org.apache.geode.management.internal.beans.SequenceNumber;
+import org.apache.geode.test.awaitility.GeodeAwaitility;
+import org.apache.geode.test.dunit.IgnoredException;
+import org.apache.geode.test.dunit.VM;
+
+/**
+ * DistributedSystemMXBean tests:
+ *
+ * <p>
+ * a) For all the notifications
+ * <ul>
+ * <li>i) gemfire.distributedsystem.member.joined
+ * <li>ii) gemfire.distributedsystem.member.left
+ * <li>iii) gemfire.distributedsystem.member.suspect
+ * <li>iv) All notifications emitted by member mbeans
+ * <li>v) Alerts
+ * </ul>
+ *
+ * <p>
+ * b) Concurrently modify proxy list by removing member and accessing the distributed system MBean
+ *
+ * <p>
+ * c) Aggregate Operations like shutDownAll
+ *
+ * <p>
+ * d) Member level operations like fetchJVMMetrics()
+ *
+ * <p>
+ * e ) Statistics
+ *
+ * <p>
+ * TODO: break up the large tests into smaller tests
+ */
+@SuppressWarnings("serial,unused")
+public class DistributedSystemDUnitTest implements Serializable {
+
+ private static final Logger logger = LogService.getLogger();
+
+ private static final String WARNING_LEVEL_MESSAGE = "Warning Level Alert Message";
+ private static final String SEVERE_LEVEL_MESSAGE = "Severe Level Alert Message";
+
+ private static volatile List<Notification> notifications;
+ private static volatile Map<ObjectName, NotificationListener> notificationListenerMap;
+
+ @Manager
+ private VM managerVM;
+
+ @Member
+ private VM[] memberVMs;
+
+ @Rule
+ public ManagementTestRule managementTestRule = ManagementTestRule.builder().build();
+
+ @Before
+ public void before() throws Exception {
+ notifications = Collections.synchronizedList(new ArrayList<>());
+ notificationListenerMap = Collections.synchronizedMap(new HashMap<>());
+ invokeInEveryVM(() -> notifications = Collections.synchronizedList(new ArrayList<>()));
+ invokeInEveryVM(() -> notificationListenerMap = Collections.synchronizedMap(new HashMap<>()));
+ }
+
+ @After
+ public void after() {
+ resetAlertCounts(managerVM);
+
+ notifications = null;
+ notificationListenerMap = null;
+ invokeInEveryVM(() -> notifications = null);
+ invokeInEveryVM(() -> notificationListenerMap = null);
+ }
+
+ /**
+ * Tests each and every operations that is defined on the MemberMXBean
+ */
+ @Test
+ public void testDistributedSystemAggregate() {
+ managementTestRule.createManager(managerVM);
+ addNotificationListener(managerVM);
+
+ for (VM memberVM : memberVMs) {
+ managementTestRule.createMember(memberVM);
+ }
+
+ verifyDistributedSystemMXBean(managerVM);
+ }
+
+ /**
+ * Tests each and every operations that is defined on the MemberMXBean
+ */
+ @Test
+ public void testAlertManagedNodeFirst() {
+ for (VM memberVM : memberVMs) {
+ managementTestRule.createMember(memberVM);
+ generateWarningAlert(memberVM);
+ generateSevereAlert(memberVM);
+ }
+
+ managementTestRule.createManager(managerVM);
+ addAlertListener(managerVM);
+ verifyAlertCount(managerVM, 0, 0);
+
+ DistributedMember managerDistributedMember =
+ managementTestRule.getDistributedMember(managerVM);
+
+ // Before we start we need to ensure that the initial (implicit) SEVERE alert has propagated
+ // everywhere.
+ for (VM memberVM : memberVMs) {
+ verifyAlertAppender(memberVM, managerDistributedMember, Alert.SEVERE);
+ }
+
+ setAlertLevel(managerVM, AlertDetails.getAlertLevelAsString(Alert.WARNING));
+
+ for (VM memberVM : memberVMs) {
+ verifyAlertAppender(memberVM, managerDistributedMember, Alert.WARNING);
+ generateWarningAlert(memberVM);
+ generateSevereAlert(memberVM);
+ }
+
+ verifyAlertCount(managerVM, 3, 3);
+ resetAlertCounts(managerVM);
+
+ setAlertLevel(managerVM, AlertDetails.getAlertLevelAsString(Alert.SEVERE));
+
+ for (VM memberVM : memberVMs) {
+ verifyAlertAppender(memberVM, managerDistributedMember, Alert.SEVERE);
+ generateWarningAlert(memberVM);
+ generateSevereAlert(memberVM);
+ }
+
+ verifyAlertCount(managerVM, 3, 0);
+ }
+
+ /**
+ * Tests each and every operations that is defined on the MemberMXBean
+ */
+ @Test
+ public void testShutdownAll() {
+ VM memberVM1 = getHost(0).getVM(0);
+ VM memberVM2 = getHost(0).getVM(1);
+ VM memberVM3 = getHost(0).getVM(2);
+
+ VM managerVM = getHost(0).getVM(3);
+
+ // managerVM Node is created first
+ managementTestRule.createManager(managerVM);
+
+ managementTestRule.createMember(memberVM1);
+ managementTestRule.createMember(memberVM2);
+ managementTestRule.createMember(memberVM3);
+
+ shutDownAll(managerVM);
+ }
+
+ @Test
+ public void testNavigationAPIS() {
+ managementTestRule.createManager(managerVM);
+
+ for (VM memberVM : memberVMs) {
+ managementTestRule.createMember(memberVM);
+ }
+
+ verifyFetchMemberObjectName(managerVM, memberVMs.length + 1);
+ }
+
+ @Test
+ public void testNotificationHub() {
+ managementTestRule.createMembers();
+ managementTestRule.createManagers();
+
+ class NotificationHubTestListener implements NotificationListener {
+
+ @Override
+ public synchronized void handleNotification(Notification notification, Object handback) {
+ logger.info("Notification received {}", notification);
+ notifications.add(notification);
+ }
+ }
+
+ managerVM.invoke("addListenerToMemberMXBean", () -> {
+ ManagementService service = managementTestRule.getManagementService();
+ DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
+
+ GeodeAwaitility.await().untilAsserted(
+ () -> assertThat(distributedSystemMXBean.listMemberObjectNames()).hasSize(5));
+
+ for (ObjectName objectName : distributedSystemMXBean.listMemberObjectNames()) {
+ NotificationHubTestListener listener = new NotificationHubTestListener();
+ getPlatformMBeanServer().addNotificationListener(objectName, listener, null, null);
+ notificationListenerMap.put(objectName, listener);
+ }
+ });
+
+ // Check in all VMS
+
+ for (VM memberVM : memberVMs) {
+ memberVM.invoke("checkNotificationHubListenerCount", () -> {
+ SystemManagementService service = managementTestRule.getSystemManagementService();
+ NotificationHub notificationHub = service.getNotificationHub();
+ Map<ObjectName, NotificationHubListener> listenerMap =
+ notificationHub.getListenerObjectMap();
+ assertThat(listenerMap.keySet()).hasSize(1);
+
+ ObjectName memberMBeanName =
+ getMemberMBeanName(managementTestRule.getDistributedMember());
+ NotificationHubListener listener = listenerMap.get(memberMBeanName);
+
+ /*
+ * Counter of listener should be 2 . One for default Listener which is added for each member
+ * mbean by distributed system mbean One for the added listener in test
+ */
+ assertThat(listener.getNumCounter()).isEqualTo(2);
+
+ // Raise some notifications
+
+ NotificationBroadcasterSupport notifier = (MemberMBean) service.getMemberMXBean();
+ String memberSource = getMemberNameOrId(managementTestRule.getDistributedMember());
+
+ // Only a dummy notification , no actual region is created
+ Notification notification = new Notification(JMXNotificationType.REGION_CREATED,
+ memberSource, SequenceNumber.next(), System.currentTimeMillis(),
+ ManagementConstants.REGION_CREATED_PREFIX + "/test");
+ notifier.sendNotification(notification);
+ });
+ }
+
+ managerVM.invoke("checkNotificationsAndRemoveListeners", () -> {
+ GeodeAwaitility.await().untilAsserted(() -> assertThat(notifications).hasSize(3));
+
+ notifications.clear();
+
+ for (ObjectName objectName : notificationListenerMap.keySet()) {
+ NotificationListener listener = notificationListenerMap.get(objectName);
+ getPlatformMBeanServer().removeNotificationListener(objectName, listener);
+ }
+ });
+
+ // Check in all VMS again
+
+ for (VM memberVM : memberVMs) {
+ memberVM.invoke("checkNotificationHubListenerCountAgain", () -> {
+ SystemManagementService service = managementTestRule.getSystemManagementService();
+ NotificationHub hub = service.getNotificationHub();
+ Map<ObjectName, NotificationHubListener> listenerObjectMap = hub.getListenerObjectMap();
+ assertThat(listenerObjectMap.keySet().size()).isEqualTo(1);
+
+ ObjectName memberMBeanName =
+ getMemberMBeanName(managementTestRule.getDistributedMember());
+ NotificationHubListener listener = listenerObjectMap.get(memberMBeanName);
+
+ /*
+ * Counter of listener should be 1 for the default Listener which is added for each member
+ * mbean by distributed system mbean.
+ */
+ assertThat(listener.getNumCounter()).isEqualTo(1);
+ });
+ }
+
+ managerVM.invoke("removeListenerFromMemberMXBean", () -> {
+ ManagementService service = managementTestRule.getManagementService();
+ DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
+
+ GeodeAwaitility.await().untilAsserted(
+ () -> assertThat(distributedSystemMXBean.listMemberObjectNames()).hasSize(5));
+
+ for (ObjectName objectName : distributedSystemMXBean.listMemberObjectNames()) {
+ NotificationHubTestListener listener = new NotificationHubTestListener();
+ try {
+ getPlatformMBeanServer().removeNotificationListener(objectName, listener); // because new
+ // instance!!
+ } catch (ListenerNotFoundException e) {
+ // TODO: [old] apparently there is never a notification listener on any these mbeans at
+ // this point [fix this]
+ // fix this test so it doesn't hit these unexpected exceptions -- getLogWriter().error(e);
+ }
+ }
+ });
+
+ for (VM memberVM : memberVMs) {
+ memberVM.invoke("verifyNotificationHubListenersWereRemoved", () -> {
+ SystemManagementService service = managementTestRule.getSystemManagementService();
+ NotificationHub notificationHub = service.getNotificationHub();
+ notificationHub.cleanUpListeners();
+ assertThat(notificationHub.getListenerObjectMap()).isEmpty();
+
+ for (ObjectName objectName : notificationListenerMap.keySet()) {
+ NotificationListener listener = notificationListenerMap.get(objectName);
+ assertThatThrownBy(
+ () -> getPlatformMBeanServer().removeNotificationListener(objectName, listener))
+ .isExactlyInstanceOf(ListenerNotFoundException.class);
+ }
+ });
+ }
+ }
+
+ /**
+ * Tests each and every operations that is defined on the MemberMXBean
+ */
+ @Test
+ public void testAlert() {
+ managementTestRule.createManager(managerVM);
+ addAlertListener(managerVM);
+ resetAlertCounts(managerVM);
+
+ DistributedMember managerDistributedMember =
+ managementTestRule.getDistributedMember(managerVM);
+
+ generateWarningAlert(managerVM);
+ generateSevereAlert(managerVM);
+ verifyAlertCount(managerVM, 1, 0);
+ resetAlertCounts(managerVM);
+
+ for (VM memberVM : memberVMs) {
+ managementTestRule.createMember(memberVM);
+
+ verifyAlertAppender(memberVM, managerDistributedMember, Alert.SEVERE);
+
+ generateWarningAlert(memberVM);
+ generateSevereAlert(memberVM);
+ }
+
+ verifyAlertCount(managerVM, 3, 0);
+ resetAlertCounts(managerVM);
+ setAlertLevel(managerVM, AlertDetails.getAlertLevelAsString(Alert.WARNING));
+
+ for (VM memberVM : memberVMs) {
+ verifyAlertAppender(memberVM, managerDistributedMember, Alert.WARNING);
+ generateWarningAlert(memberVM);
+ generateSevereAlert(memberVM);
+ }
+
+ verifyAlertCount(managerVM, 3, 3);
+
+ resetAlertCounts(managerVM);
+
+ setAlertLevel(managerVM, AlertDetails.getAlertLevelAsString(Alert.OFF));
+
+ for (VM memberVM : memberVMs) {
+ verifyAlertAppender(memberVM, managerDistributedMember, Alert.OFF);
+ generateWarningAlert(memberVM);
+ generateSevereAlert(memberVM);
+ }
+
+ verifyAlertCount(managerVM, 0, 0);
+ }
+
+ private void verifyAlertAppender(final VM memberVM, final DistributedMember member,
+ final int alertLevel) {
+ memberVM.invoke("verifyAlertAppender",
+ () -> GeodeAwaitility.await().untilAsserted(
+ () -> assertThat(AlertAppender.getInstance().hasAlertListener(member, alertLevel))
+ .isTrue()));
+ }
+
+ private void verifyAlertCount(final VM managerVM, final int expectedSevereAlertCount,
+ final int expectedWarningAlertCount) {
+ managerVM.invoke("verifyAlertCount", () -> {
+ AlertNotificationListener listener = AlertNotificationListener.getInstance();
+
+ GeodeAwaitility.await().untilAsserted(
+ () -> assertThat(listener.getSevereAlertCount()).isEqualTo(expectedSevereAlertCount));
+ GeodeAwaitility.await().untilAsserted(
+ () -> assertThat(listener.getWarningAlertCount()).isEqualTo(expectedWarningAlertCount));
+ });
+ }
+
+ private void setAlertLevel(final VM managerVM, final String alertLevel) {
+ managerVM.invoke("setAlertLevel", () -> {
+ ManagementService service = managementTestRule.getManagementService();
+ DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
+ distributedSystemMXBean.changeAlertLevel(alertLevel);
+ });
+ }
+
+ private void generateWarningAlert(final VM anyVM) {
+ anyVM.invoke("generateWarningAlert", () -> {
+ IgnoredException ignoredException = addIgnoredException(WARNING_LEVEL_MESSAGE);
+ logger.warn(WARNING_LEVEL_MESSAGE);
+ ignoredException.remove();
+ });
+ }
+
+ private void resetAlertCounts(final VM managerVM) {
+ managerVM.invoke("resetAlertCounts", () -> {
+ AlertNotificationListener listener = AlertNotificationListener.getInstance();
+ listener.resetCount();
+ });
+ }
+
+ private void generateSevereAlert(final VM anyVM) {
+ anyVM.invoke("generateSevereAlert", () -> {
+ IgnoredException ignoredException = addIgnoredException(SEVERE_LEVEL_MESSAGE);
+ logger.fatal(SEVERE_LEVEL_MESSAGE);
+ ignoredException.remove();
+ });
+ }
+
+ private void addAlertListener(final VM managerVM) {
+ managerVM.invoke("addAlertListener", () -> {
+ AlertNotificationListener listener = AlertNotificationListener.getInstance();
+ listener.resetCount();
+
+ NotificationFilter notificationFilter = (Notification notification) -> notification.getType()
+ .equals(JMXNotificationType.SYSTEM_ALERT);
+
+ getPlatformMBeanServer().addNotificationListener(getDistributedSystemName(), listener,
+ notificationFilter, null);
+ });
+ }
+
+ /**
+ * Check aggregate related functions and attributes
+ */
+ private void verifyDistributedSystemMXBean(final VM managerVM) {
+ managerVM.invoke("verifyDistributedSystemMXBean", () -> {
+ ManagementService service = managementTestRule.getManagementService();
+ DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
+
+ GeodeAwaitility.await()
+ .untilAsserted(() -> assertThat(distributedSystemMXBean.getMemberCount()).isEqualTo(5));
+
+ Set<DistributedMember> otherMemberSet = managementTestRule.getOtherNormalMembers();
+ for (DistributedMember member : otherMemberSet) {
+ // TODO: create some assertions (this used to just print JVMMetrics and OSMetrics)
+ }
+ });
+ }
+
+ private void addNotificationListener(final VM managerVM) {
+ managerVM.invoke("addNotificationListener", () -> {
+ ManagementService service = managementTestRule.getManagementService();
+ DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
+ assertThat(distributedSystemMXBean).isNotNull();
+
+ DistributedSystemNotificationListener listener = new DistributedSystemNotificationListener();
+ getPlatformMBeanServer().addNotificationListener(getDistributedSystemName(), listener, null,
+ null);
+ });
+ }
+
+ private void shutDownAll(final VM managerVM) {
+ managerVM.invoke("shutDownAll", () -> {
+ ManagementService service = managementTestRule.getManagementService();
+ DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
+ distributedSystemMXBean.shutDownAllMembers();
+
+ GeodeAwaitility.await().untilAsserted(
+ () -> assertThat(managementTestRule.getOtherNormalMembers()).hasSize(0));
+ });
+ }
+
+ private void verifyFetchMemberObjectName(final VM managerVM, final int memberCount) {
+ managerVM.invoke("verifyFetchMemberObjectName", () -> {
+ ManagementService service = managementTestRule.getManagementService();
+ DistributedSystemMXBean distributedSystemMXBean = service.getDistributedSystemMXBean();
+
+ GeodeAwaitility.await().untilAsserted(
+ () -> assertThat(distributedSystemMXBean.listMemberObjectNames()).hasSize(memberCount));
+
+ String memberId = managementTestRule.getDistributedMember().getId();
+ ObjectName thisMemberName = getMemberMBeanName(memberId);
+ ObjectName memberName = distributedSystemMXBean.fetchMemberObjectName(memberId);
+ assertThat(memberName).isEqualTo(thisMemberName);
+ });
+ }
+
+ private static class DistributedSystemNotificationListener implements NotificationListener {
+
+ @Override
+ public void handleNotification(final Notification notification, final Object handback) {
+ assertThat(notification).isNotNull();
+ }
+ }
+
+ private static class AlertNotificationListener implements NotificationListener {
+
+ private static AlertNotificationListener listener = new AlertNotificationListener();
+
+ private int warningAlertCount = 0;
+
+ private int severeAlertCount = 0;
+
+ static AlertNotificationListener getInstance() { // TODO: get rid of singleton
+ return listener;
+ }
+
+ @Override
+ public synchronized void handleNotification(final Notification notification,
+ final Object handback) {
+ assertThat(notification).isNotNull();
+
+ Map<String, String> notificationUserData = (Map<String, String>) notification.getUserData();
+
+ if (notificationUserData.get(JMXNotificationUserData.ALERT_LEVEL)
+ .equalsIgnoreCase("warning")) {
+ assertThat(notification.getMessage()).isEqualTo(WARNING_LEVEL_MESSAGE);
+ warningAlertCount++;
+ }
+ if (notificationUserData.get(JMXNotificationUserData.ALERT_LEVEL)
+ .equalsIgnoreCase("severe")) {
+ assertThat(notification.getMessage()).isEqualTo(SEVERE_LEVEL_MESSAGE);
+ severeAlertCount++;
+ }
+ }
+
+ void resetCount() {
+ warningAlertCount = 0;
+ severeAlertCount = 0;
+ }
+
+ int getWarningAlertCount() {
+ return warningAlertCount;
+ }
+
+ int getSevereAlertCount() {
+ return severeAlertCount;
+ }
+ }
+}
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanDistributedTest.java
deleted file mode 100644
index 21d99bf..0000000
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanDistributedTest.java
+++ /dev/null
@@ -1,202 +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.geode.management;
-
-import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_START;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.getMemberMBeanName;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.dunit.VM.getVM;
-import static org.apache.geode.test.dunit.VM.toArray;
-import static org.apache.geode.test.dunit.standalone.DUnitLauncher.getDistributedSystemProperties;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.Serializable;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.management.ObjectName;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.management.internal.SystemManagementService;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.rules.DistributedRule;
-import org.apache.geode.test.dunit.rules.SharedErrorCollector;
-import org.apache.geode.test.junit.categories.ManagementTest;
-
-/**
- * Distributed tests for {@link DistributedSystemMXBean} notifications.
- *
- * <pre>
- * a) Concurrently modify proxy list by removing member and accessing the distributed system MBean
- * b) Aggregate Operations like shutDownAll
- * c) Member level operations like fetchJVMMetrics()
- * d ) Statistics
- * </pre>
- */
-@Category(ManagementTest.class)
-@SuppressWarnings("serial")
-public class DistributedSystemMXBeanDistributedTest implements Serializable {
-
- private static final String MANAGER_NAME = "managerVM";
- private static final String MEMBER_NAME = "memberVM-";
-
- private static InternalCache cache;
- private static InternalDistributedMember distributedMember;
- private static SystemManagementService managementService;
- private static DistributedSystemMXBean distributedSystemMXBean;
-
- private VM managerVM;
- private VM memberVM1;
- private VM memberVM2;
- private VM memberVM3;
-
- @Rule
- public DistributedRule distributedRule = new DistributedRule();
-
- @Rule
- public SharedErrorCollector errorCollector = new SharedErrorCollector();
-
- @Before
- public void setUp() throws Exception {
- managerVM = getVM(0);
- memberVM1 = getVM(1);
- memberVM2 = getVM(2);
- memberVM3 = getVM(3);
-
- managerVM.invoke(() -> createManager());
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> createMember(memberVM.getId()));
- }
- }
-
- @After
- public void tearDown() throws Exception {
- for (VM vm : toArray(managerVM, memberVM1, memberVM2, memberVM3)) {
- vm.invoke(() -> {
- if (cache != null) {
- cache.close();
- }
- cache = null;
- distributedMember = null;
- managementService = null;
- distributedSystemMXBean = null;
- });
- }
- }
-
- @Test
- public void getMemberCount() {
- // 1 manager, 3 members, 1 dunit locator
- managerVM.invoke(() -> {
- await()
- .untilAsserted(() -> assertThat(distributedSystemMXBean.getMemberCount()).isEqualTo(5));
- });
- }
-
- @Test
- public void showJVMMetrics() {
- managerVM.invoke(() -> {
- await().until(() -> distributedSystemMXBean.getMemberCount() == 5);
-
- for (DistributedMember member : getOtherNormalMembers()) {
- assertThat(distributedSystemMXBean.showJVMMetrics(member.getName())).isNotNull();
- }
- });
- }
-
- @Test
- public void showOSMetrics() {
- managerVM.invoke(() -> {
- await().until(() -> distributedSystemMXBean.getMemberCount() == 5);
-
- Set<InternalDistributedMember> otherMembers = getOtherNormalMembers();
- for (DistributedMember member : otherMembers) {
- assertThat(distributedSystemMXBean.showOSMetrics(member.getName())).isNotNull();
- }
- });
- }
-
- @Test
- public void shutDownAllMembers() {
- managerVM.invoke(() -> {
- distributedSystemMXBean.shutDownAllMembers();
-
- await().untilAsserted(() -> assertThat(getOtherNormalMembers()).hasSize(0));
- });
- }
-
- @Test
- public void listMemberObjectNames() {
- managerVM.invoke(() -> {
- await().untilAsserted(
- () -> assertThat(distributedSystemMXBean.listMemberObjectNames()).hasSize(4));
- });
- }
-
- @Test
- public void fetchMemberObjectName() {
- managerVM.invoke(() -> {
- String memberName = distributedMember.getName();
-
- await().until(() -> distributedSystemMXBean.fetchMemberObjectName(memberName) != null);
-
- ObjectName memberMXBeanName = distributedSystemMXBean.fetchMemberObjectName(memberName);
- assertThat(memberMXBeanName).isEqualTo(getMemberMBeanName(memberName));
- });
- }
-
- private void createManager() {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, MANAGER_NAME);
- config.setProperty(JMX_MANAGER, "true");
- config.setProperty(JMX_MANAGER_START, "true");
- config.setProperty(JMX_MANAGER_PORT, "0");
- config.setProperty(HTTP_SERVICE_PORT, "0");
-
- cache = (InternalCache) new CacheFactory(config).create();
- distributedMember = cache.getDistributionManager().getId();
- managementService = (SystemManagementService) ManagementService.getManagementService(cache);
-
- distributedSystemMXBean = managementService.getDistributedSystemMXBean();
- }
-
- private void createMember(int vmId) {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, MEMBER_NAME + vmId);
- config.setProperty(JMX_MANAGER, "false");
-
- cache = (InternalCache) new CacheFactory(config).create();
- distributedMember = cache.getDistributionManager().getId();
- managementService = (SystemManagementService) ManagementService.getManagementService(cache);
- }
-
- private Set<InternalDistributedMember> getOtherNormalMembers() {
- return cache.getDistributionManager().getOtherNormalDistributionManagerIds();
- }
-}
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithAlertsDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithAlertsDistributedTest.java
deleted file mode 100644
index 67478b6..0000000
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithAlertsDistributedTest.java
+++ /dev/null
@@ -1,495 +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.geode.management;
-
-import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
-import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_START;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.internal.alerting.AlertLevel.ERROR;
-import static org.apache.geode.internal.alerting.AlertLevel.NONE;
-import static org.apache.geode.internal.alerting.AlertLevel.SEVERE;
-import static org.apache.geode.internal.alerting.AlertLevel.WARNING;
-import static org.apache.geode.management.JMXNotificationType.SYSTEM_ALERT;
-import static org.apache.geode.management.JMXNotificationUserData.ALERT_LEVEL;
-import static org.apache.geode.management.ManagementService.getManagementService;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.getDistributedSystemName;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
-import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
-import static org.apache.geode.test.dunit.VM.getVM;
-import static org.apache.geode.test.dunit.VM.toArray;
-import static org.apache.geode.test.dunit.standalone.DUnitLauncher.getDistributedSystemProperties;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.Notification;
-import javax.management.NotificationFilter;
-import javax.management.NotificationListener;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.mockito.ArgumentCaptor;
-
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.alerting.AlertLevel;
-import org.apache.geode.internal.alerting.AlertingService;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.test.dunit.IgnoredException;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.rules.DistributedRule;
-import org.apache.geode.test.dunit.rules.SharedErrorCollector;
-import org.apache.geode.test.junit.categories.AlertingTest;
-import org.apache.geode.test.junit.categories.ManagementTest;
-import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
-
-/**
- * Distributed tests for {@link DistributedSystemMXBean} with alerts. Extracted from
- * {@link DistributedSystemMXBeanDistributedTest}.
- */
-@Category({ManagementTest.class, AlertingTest.class})
-@SuppressWarnings("serial")
-public class DistributedSystemMXBeanWithAlertsDistributedTest implements Serializable {
-
- private static final Logger logger = LogService.getLogger();
-
- private static final String MANAGER_NAME = "managerVM";
- private static final String MEMBER_NAME = "memberVM-";
- private static final long TIMEOUT = getTimeout().getValueInMS();
- private static final NotificationFilter SYSTEM_ALERT_FILTER =
- notification -> notification.getType().equals(SYSTEM_ALERT);
-
- private static InternalCache cache;
- private static AlertingService alertingService;
- private static NotificationListener notificationListener;
- private static DistributedSystemMXBean distributedSystemMXBean;
-
- private DistributedMember managerMember;
-
- private String warningLevelMessage;
- private String errorLevelMessage;
- private String severeLevelMessage;
-
- private Alert warningAlert;
- private Alert errorAlert;
- private Alert severeAlert;
-
- private VM managerVM;
- private VM memberVM1;
- private VM memberVM2;
- private VM memberVM3;
-
- @Rule
- public DistributedRule distributedRule = new DistributedRule();
-
- @Rule
- public SerializableTestName testName = new SerializableTestName();
-
- @Rule
- public SharedErrorCollector errorCollector = new SharedErrorCollector();
-
- @Before
- public void setUp() throws Exception {
- warningLevelMessage = WARNING.name() + " level alert in " + testName.getMethodName();
- errorLevelMessage = ERROR.name() + " level alert in " + testName.getMethodName();
- severeLevelMessage = SEVERE.name() + " level alert in " + testName.getMethodName();
-
- warningAlert = new Alert(WARNING, warningLevelMessage);
- errorAlert = new Alert(ERROR, errorLevelMessage);
- severeAlert = new Alert(SEVERE, severeLevelMessage);
-
- managerVM = getVM(0);
- memberVM1 = getVM(1);
- memberVM2 = getVM(2);
- memberVM3 = getVM(3);
-
- managerMember = managerVM.invoke(() -> createManager());
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- createMember(memberVM);
- });
- }
- }
-
- @After
- public void tearDown() throws Exception {
- for (VM vm : toArray(managerVM, memberVM1, memberVM2, memberVM3)) {
- vm.invoke(() -> {
- if (cache != null) {
- cache.close();
- }
- cache = null;
- alertingService = null;
- notificationListener = null;
- distributedSystemMXBean = null;
- });
- }
- }
-
- @Test
- public void managerAddsAlertListenerToEachMember() {
- // default AlertLevel is SEVERE
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- await().untilAsserted(
- () -> assertThat(alertingService.hasAlertListener(managerMember, SEVERE)).isTrue());
- });
- }
- }
-
- @Test
- public void managerReceivesRemoteAlertAtAlertLevel() {
- memberVM1.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
-
- managerVM.invoke(() -> {
- assertThat(captureAlert()).isEqualTo(severeAlert);
- });
- }
-
- @Test
- public void managerDoesNotReceiveRemoteAlertBelowAlertLevel() {
- memberVM1.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(warningLevelMessage)) {
- logger.warn(warningLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(errorLevelMessage)) {
- logger.error(errorLevelMessage);
- }
- });
-
- managerVM.invoke(() -> {
- verifyZeroInteractions(notificationListener);
- });
- }
-
- @Test
- public void managerReceivesRemoteAlertAboveAlertLevel() {
- changeAlertLevel(WARNING);
-
- memberVM1.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(errorLevelMessage)) {
- logger.error(errorLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
-
- managerVM.invoke(() -> {
- assertThat(captureAllAlerts(2)).contains(errorAlert, severeAlert);
- });
- }
-
- @Test
- public void managerReceivesLocalAlertAtAlertLevel() {
- managerVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
-
- managerVM.invoke(() -> {
- assertThat(captureAlert()).isEqualTo(severeAlert);
- });
- }
-
- @Test
- public void managerDoesNotReceiveLocalAlertBelowAlertLevel() {
- managerVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(warningLevelMessage)) {
- logger.warn(warningLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(errorLevelMessage)) {
- logger.error(errorLevelMessage);
- }
- });
-
- managerVM.invoke(() -> {
- verifyZeroInteractions(notificationListener);
- });
- }
-
- /**
- * Fails due to GEODE-5923: JMX manager only receives local Alerts at the default AlertLevel
- *
- * <p>
- * The JMX manager's local AlertListener for itself remains stuck at {@code SEVERE} even after
- * invoking {@link DistributedSystemMXBean#changeAlertLevel(String)}.
- */
- @Test
- @Ignore("GEODE-5923")
- public void managerReceivesLocalAlertAboveAlertLevel() {
- changeAlertLevel(WARNING);
-
- managerVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(errorLevelMessage)) {
- logger.error(errorLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
-
- managerVM.invoke(() -> {
- assertThat(captureAllAlerts(2)).contains(errorAlert, severeAlert);
- });
- }
-
- @Test
- public void managerReceivesAlertsFromAllMembers() {
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
- }
-
- managerVM.invoke(() -> {
- assertThat(captureAllAlerts(3)).contains(severeAlert, severeAlert, severeAlert);
- });
- }
-
- @Test
- public void managerReceivesAlertsFromAllMembersAtAlertLevelAndAbove() {
- changeAlertLevel(WARNING);
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(warningLevelMessage)) {
- logger.warn(warningLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(errorLevelMessage)) {
- logger.error(errorLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
- }
-
- managerVM.invoke(() -> {
- assertThat(captureAllAlerts(9)).contains(warningAlert, warningAlert, warningAlert, errorAlert,
- errorAlert, errorAlert, severeAlert, severeAlert, severeAlert);
- });
- }
-
- @Test
- public void managerDoesNotReceiveAlertsAtAlertLevelNone() {
- changeAlertLevel(NONE);
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(warningLevelMessage)) {
- logger.warn(warningLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(errorLevelMessage)) {
- logger.error(errorLevelMessage);
- }
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
- }
-
- managerVM.invoke(() -> {
- verifyZeroInteractions(notificationListener);
- });
- }
-
- @Test
- public void managerMissesAnyAlertsBeforeItStarts() {
- // close managerVM so we can recreate it AFTER generating alerts in memberVMs
- managerVM.invoke(() -> cache.close());
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
- }
-
- managerVM.invoke(() -> createManager());
-
- managerMember = managerVM.invoke(() -> cache.getDistributionManager().getId());
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- await().until(() -> alertingService.hasAlertListener(managerMember, SEVERE));
- });
- }
-
- // managerVM should have missed the alerts from BEFORE it started
-
- managerVM.invoke(() -> {
- verifyZeroInteractions(notificationListener);
- });
-
- // managerVM should now receive any new alerts though
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- try (IgnoredException ie = addIgnoredException(severeLevelMessage)) {
- logger.fatal(severeLevelMessage);
- }
- });
- }
-
- managerVM.invoke(() -> {
- assertThat(captureAllAlerts(3)).contains(severeAlert, severeAlert, severeAlert);
- });
- }
-
- private DistributedMember createManager() throws InstanceNotFoundException {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, MANAGER_NAME);
- config.setProperty(JMX_MANAGER, "true");
- config.setProperty(JMX_MANAGER_START, "true");
- config.setProperty(JMX_MANAGER_PORT, "0");
- config.setProperty(HTTP_SERVICE_PORT, "0");
-
- cache = (InternalCache) new CacheFactory(config).create();
- alertingService = cache.getInternalDistributedSystem().getAlertingService();
-
- notificationListener = spy(NotificationListener.class);
- getPlatformMBeanServer().addNotificationListener(getDistributedSystemName(),
- notificationListener, SYSTEM_ALERT_FILTER, null);
-
- distributedSystemMXBean = getManagementService(cache).getDistributedSystemMXBean();
-
- return cache.getDistributionManager().getId();
- }
-
- private void createMember(VM memberVM) {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, MEMBER_NAME + memberVM.getId());
- config.setProperty(JMX_MANAGER, "false");
-
- cache = (InternalCache) new CacheFactory(config).create();
- alertingService = cache.getInternalDistributedSystem().getAlertingService();
-
- await().until(() -> alertingService.hasAlertListener(managerMember, SEVERE));
- }
-
- private void changeAlertLevel(AlertLevel alertLevel) {
- managerVM.invoke(() -> {
- distributedSystemMXBean.changeAlertLevel(alertLevel.name());
- });
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- if (alertLevel == NONE) {
- await().until(() -> !alertingService.hasAlertListener(managerMember, alertLevel));
- } else {
- await().until(() -> alertingService.hasAlertListener(managerMember, alertLevel));
- }
- });
- }
- }
-
- private Notification captureNotification() {
- ArgumentCaptor<Notification> captor = ArgumentCaptor.forClass(Notification.class);
- verify(notificationListener, timeout(TIMEOUT)).handleNotification(captor.capture(), isNull());
- return captor.getValue();
- }
-
- private List<Notification> captureAllNotifications(int count) {
- ArgumentCaptor<Notification> captor = ArgumentCaptor.forClass(Notification.class);
- verify(notificationListener, timeout(TIMEOUT).times(count)).handleNotification(captor.capture(),
- isNull());
- return captor.getAllValues();
- }
-
- private Alert captureAlert() {
- Notification notification = captureNotification();
- return new Alert(getAlertLevel(notification), notification.getMessage());
- }
-
- private List<Alert> captureAllAlerts(int count) {
- List<Alert> alerts = new ArrayList<>();
- for (Notification notification : captureAllNotifications(count)) {
- alerts.add(new Alert(getAlertLevel(notification), notification.getMessage()));
- }
- return alerts;
- }
-
- private static AlertLevel getAlertLevel(Notification notification) {
- return AlertLevel.valueOf(getUserData(notification).get(ALERT_LEVEL).toUpperCase());
- }
-
- private static Map<String, String> getUserData(Notification notification) {
- return (Map<String, String>) notification.getUserData();
- }
-
- /**
- * Simple struct with {@link AlertLevel} and {@code String} message with {@code equals}
- * implemented to compare both fields.
- */
- private static class Alert implements Serializable {
-
- private final AlertLevel level;
- private final String message;
-
- Alert(AlertLevel level, String message) {
- this.level = level;
- this.message = message;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null || getClass() != obj.getClass()) {
- return false;
- }
- Alert alert = (Alert) obj;
- return level == alert.level && Objects.equals(message, alert.message);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(level, message);
- }
- }
-}
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithNotificationsDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithNotificationsDistributedTest.java
deleted file mode 100644
index b7a581a..0000000
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithNotificationsDistributedTest.java
+++ /dev/null
@@ -1,243 +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.geode.management;
-
-import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
-import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_START;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.management.JMXNotificationType.REGION_CREATED;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.getMemberMBeanName;
-import static org.apache.geode.management.internal.MBeanJMXAdapter.getMemberNameOrId;
-import static org.apache.geode.management.internal.ManagementConstants.REGION_CREATED_PREFIX;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
-import static org.apache.geode.test.dunit.VM.getVM;
-import static org.apache.geode.test.dunit.VM.toArray;
-import static org.apache.geode.test.dunit.standalone.DUnitLauncher.getDistributedSystemProperties;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.isA;
-import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-
-import java.io.Serializable;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.management.Notification;
-import javax.management.NotificationBroadcasterSupport;
-import javax.management.NotificationListener;
-import javax.management.ObjectName;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.management.internal.NotificationHub;
-import org.apache.geode.management.internal.NotificationHub.NotificationHubListener;
-import org.apache.geode.management.internal.SystemManagementService;
-import org.apache.geode.management.internal.beans.MemberMBean;
-import org.apache.geode.management.internal.beans.SequenceNumber;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.rules.DistributedRule;
-import org.apache.geode.test.dunit.rules.SharedErrorCollector;
-import org.apache.geode.test.junit.categories.ManagementTest;
-
-/**
- * Distributed tests for {@link DistributedSystemMXBean} notifications. Extracted from
- * {@link DistributedSystemMXBeanDistributedTest}.
- *
- * <p>
- * TODO: test all notifications emitted by DistributedSystemMXBean:
- *
- * <pre>
- * a) gemfire.distributedsystem.member.joined
- * b) gemfire.distributedsystem.member.left
- * c) gemfire.distributedsystem.member.suspect
- * d) All notifications emitted by MemberMXBeans
- * </pre>
- */
-@Category(ManagementTest.class)
-@SuppressWarnings("serial")
-public class DistributedSystemMXBeanWithNotificationsDistributedTest implements Serializable {
-
- private static final long TIMEOUT = getTimeout().getValueInMS();
- private static final String MANAGER_NAME = "managerVM";
- private static final String MEMBER_NAME = "memberVM-";
-
- /** One NotificationListener is added for the DistributedSystemMXBean in Manager VM. */
- private static final int ONE_LISTENER_FOR_MANAGER = 1;
-
- /** One NotificationListener is added for spying by the test. */
- private static final int ONE_LISTENER_FOR_SPYING = 1;
-
- /** Three Member VMs, one Manager VM and one DUnit Locator VM. */
- private static final int CLUSTER_SIZE = 5;
-
- /** Three Member VMs. */
- private static final int THREE_MEMBERS = 3;
-
- private static InternalCache cache;
- private static InternalDistributedMember distributedMember;
- private static SystemManagementService managementService;
- private static NotificationListener notificationListener;
- private static DistributedSystemMXBean distributedSystemMXBean;
-
- private VM managerVM;
- private VM memberVM1;
- private VM memberVM2;
- private VM memberVM3;
-
- @Rule
- public DistributedRule distributedRule = new DistributedRule();
-
- @Rule
- public SharedErrorCollector errorCollector = new SharedErrorCollector();
-
- @Before
- public void setUp() throws Exception {
- managerVM = getVM(0);
- memberVM1 = getVM(1);
- memberVM2 = getVM(2);
- memberVM3 = getVM(3);
-
- managerVM.invoke(() -> createManager());
-
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> createMember(memberVM.getId()));
- }
- }
-
- @After
- public void tearDown() throws Exception {
- for (VM vm : toArray(managerVM, memberVM1, memberVM2, memberVM3)) {
- vm.invoke(() -> {
- if (cache != null) {
- cache.close();
- }
- cache = null;
- distributedMember = null;
- managementService = null;
- distributedSystemMXBean = null;
- });
- }
- }
-
- @Test
- public void testNotificationHub() {
- // add spy notificationListener to each MemberMXBean in cluster
- managerVM.invoke(() -> {
- // wait until Manager VM has MemberMXBean for each node in cluster
- await().untilAsserted(
- () -> assertThat(distributedSystemMXBean.listMemberObjectNames()).hasSize(CLUSTER_SIZE));
-
- for (ObjectName objectName : distributedSystemMXBean.listMemberObjectNames()) {
- getPlatformMBeanServer().addNotificationListener(objectName, notificationListener, null,
- null);
- }
- });
-
- // verify each Member VM has one spy listener in addition to one for DistributedSystemMXBean
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- Map<ObjectName, NotificationHubListener> listenerObjectMap =
- managementService.getNotificationHub().getListenerObjectMap();
- NotificationHubListener hubListener =
- listenerObjectMap.get(getMemberMBeanName(distributedMember));
-
- assertThat(hubListener.getNumCounter())
- .isEqualTo(ONE_LISTENER_FOR_SPYING + ONE_LISTENER_FOR_MANAGER);
- });
- }
-
- // send a dummy notification from each Member VM (no actual region is created)
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- Notification notification =
- new Notification(REGION_CREATED, getMemberNameOrId(distributedMember),
- SequenceNumber.next(), System.currentTimeMillis(), REGION_CREATED_PREFIX + "/test");
- NotificationBroadcasterSupport notifier = (MemberMBean) managementService.getMemberMXBean();
- notifier.sendNotification(notification);
- });
- }
-
- // remove spy notificationListener from each MemberMXBean in cluster
- managerVM.invoke(() -> {
- verify(notificationListener, timeout(TIMEOUT).times(THREE_MEMBERS))
- .handleNotification(isA(Notification.class), isNull());
-
- for (ObjectName objectName : distributedSystemMXBean.listMemberObjectNames()) {
- getPlatformMBeanServer().removeNotificationListener(objectName, notificationListener);
- }
- });
-
- // verify each Member VM has just one listener for DistributedSystemMXBean
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- Map<ObjectName, NotificationHubListener> listenerObjectMap =
- managementService.getNotificationHub().getListenerObjectMap();
- NotificationHubListener hubListener =
- listenerObjectMap.get(getMemberMBeanName(distributedMember));
-
- assertThat(hubListener.getNumCounter()).isEqualTo(ONE_LISTENER_FOR_MANAGER);
- });
- }
-
- // verify NotificationHub#cleanUpListeners() behavior in each Member VM
- for (VM memberVM : toArray(memberVM1, memberVM2, memberVM3)) {
- memberVM.invoke(() -> {
- NotificationHub notificationHub = managementService.getNotificationHub();
- notificationHub.cleanUpListeners();
-
- assertThat(notificationHub.getListenerObjectMap()).isEmpty();
- });
- }
- }
-
- private void createManager() {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, MANAGER_NAME);
- config.setProperty(JMX_MANAGER, "true");
- config.setProperty(JMX_MANAGER_START, "true");
- config.setProperty(JMX_MANAGER_PORT, "0");
- config.setProperty(HTTP_SERVICE_PORT, "0");
-
- cache = (InternalCache) new CacheFactory(config).create();
- distributedMember = cache.getDistributionManager().getId();
- managementService = (SystemManagementService) ManagementService.getManagementService(cache);
- notificationListener = spy(NotificationListener.class);
-
- distributedSystemMXBean = managementService.getDistributedSystemMXBean();
- }
-
- private void createMember(int vmId) {
- Properties config = getDistributedSystemProperties();
- config.setProperty(NAME, MEMBER_NAME + vmId);
- config.setProperty(JMX_MANAGER, "false");
-
- cache = (InternalCache) new CacheFactory(config).create();
- distributedMember = cache.getDistributionManager().getId();
- managementService = (SystemManagementService) ManagementService.getManagementService(cache);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/admin/jmx/internal/DeprecatedAgentLauncherIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/admin/jmx/internal/DeprecatedAgentLauncherIntegrationTest.java
index b7c80dc..3d144a7 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/admin/jmx/internal/DeprecatedAgentLauncherIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/admin/jmx/internal/DeprecatedAgentLauncherIntegrationTest.java
@@ -14,7 +14,6 @@
*/
package org.apache.geode.admin.jmx.internal;
-import static java.lang.System.lineSeparator;
import static org.apache.geode.admin.jmx.AgentConfig.DEFAULT_PROPERTY_FILE;
import static org.apache.geode.admin.jmx.internal.AgentConfigImpl.AGENT_PROPSFILE_PROPERTY_NAME;
import static org.apache.geode.admin.jmx.internal.AgentLauncher.AGENT_PROPS;
@@ -24,13 +23,11 @@ import static org.apache.geode.admin.jmx.internal.AgentLauncher.RUNNING;
import static org.apache.geode.admin.jmx.internal.AgentLauncher.SHUTDOWN;
import static org.apache.geode.admin.jmx.internal.AgentLauncher.STARTING;
import static org.apache.geode.admin.jmx.internal.AgentLauncher.VMARGS;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assume.assumeFalse;
import java.io.File;
import java.io.IOException;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -48,8 +45,6 @@ import org.apache.geode.test.process.ProcessWrapper;
public class DeprecatedAgentLauncherIntegrationTest {
- private static final long TIMEOUT = getTimeout().getValueInMS();
-
private String classpath;
@Rule
@@ -299,11 +294,7 @@ public class DeprecatedAgentLauncherIntegrationTest {
if (processOutputPattern != null) {
agentProcess.waitForOutputToMatch(processOutputPattern);
}
- assertThat(agentProcess.waitFor(TIMEOUT)).as("Expecting process started with:" + lineSeparator()
- + " " + Arrays.asList(args) + lineSeparator() + "with output:" + lineSeparator() + " "
- + agentProcess.getOutput(true) + lineSeparator() + "to terminate with exit code: 0"
- + lineSeparator() + "but waitFor is still waiting after timeout: " + TIMEOUT + " seconds.")
- .isEqualTo(0);
+ agentProcess.waitFor();
}
}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/SingleHopClientExecutorWithLoggingIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/SingleHopClientExecutorWithLoggingIntegrationTest.java
index d44cc7d..56a1acf 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/SingleHopClientExecutorWithLoggingIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/SingleHopClientExecutorWithLoggingIntegrationTest.java
@@ -17,21 +17,14 @@
package org.apache.geode.cache.client.internal;
import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
-import static org.apache.geode.test.util.ResourceUtils.getResource;
import static org.assertj.core.api.Assertions.assertThat;
-import java.net.URL;
-
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.SystemErrRule;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
import org.apache.geode.test.junit.categories.ClientServerTest;
import org.apache.geode.test.junit.categories.LoggingTest;
@@ -43,34 +36,18 @@ import org.apache.geode.test.junit.categories.LoggingTest;
@Category({ClientServerTest.class, LoggingTest.class})
public class SingleHopClientExecutorWithLoggingIntegrationTest {
- private static String configFilePath;
-
- @ClassRule
- public static SystemOutRule systemOutRule = new SystemOutRule().enableLog();
-
- @ClassRule
- public static SystemErrRule systemErrRule = new SystemErrRule().enableLog();
-
- @ClassRule
- public static TemporaryFolder temporaryFolder = new TemporaryFolder();
-
@Rule
- public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
+ public SystemErrRule systemErrRule = new SystemErrRule().enableLog();
- @BeforeClass
- public static void setUpLogConfigFile() throws Exception {
- String configFileName =
- SingleHopClientExecutorWithLoggingIntegrationTest.class.getSimpleName() + "_log4j2.xml";
- URL resource = getResource(configFileName);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), configFileName)
- .getAbsolutePath();
- }
+ @Rule
+ public SystemOutRule systemOutRule = new SystemOutRule().enableLog();
/**
* Refer: GEODE-2109 This test verifies that any exception thrown from forked thread is logged
* into log.
*/
@Test
+ @Ignore("Until GEODE-5637 is fixed")
public void submittedTaskShouldLogFailure() {
String message = "I am expecting this to be logged";
@@ -82,6 +59,7 @@ public class SingleHopClientExecutorWithLoggingIntegrationTest {
/*
* Sometimes need to wait for more than sec as thread execution takes time.
*/
- await().untilAsserted(() -> assertThat(systemOutRule.getLog()).contains(message));
+ await()
+ .untilAsserted(() -> assertThat(systemErrRule.getLog()).contains(message));
}
}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorLauncherIntegrationTestCase.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorLauncherIntegrationTestCase.java
index 1e484dc..61c7313 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorLauncherIntegrationTestCase.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/LocatorLauncherIntegrationTestCase.java
@@ -93,7 +93,7 @@ public abstract class LocatorLauncherIntegrationTestCase extends LauncherIntegra
return givenLocatorLauncher(newBuilder());
}
- protected LocatorLauncher givenLocatorLauncher(final Builder builder) {
+ private LocatorLauncher givenLocatorLauncher(final Builder builder) {
return builder.build();
}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/InternalLocatorIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/InternalLocatorIntegrationTest.java
new file mode 100644
index 0000000..9d0917b
--- /dev/null
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/InternalLocatorIntegrationTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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.geode.distributed.internal;
+
+import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
+import static org.apache.geode.distributed.ConfigurationProperties.NAME;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Properties;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import org.apache.geode.distributed.Locator;
+import org.apache.geode.internal.AvailablePortHelper;
+import org.apache.geode.internal.logging.log4j.LogWriterAppender;
+import org.apache.geode.internal.logging.log4j.LogWriterAppenders;
+
+public class InternalLocatorIntegrationTest {
+
+ private Locator locator;
+ private LogWriterAppender appender;
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Test
+ public void testLogWriterAppenderShouldBeRemovedForALocatorWithNoDS() throws Exception {
+ Properties properties = new Properties();
+ properties.setProperty(NAME, "testVM");
+ properties.setProperty(LOG_FILE, temporaryFolder.newFile("testVM.log").getAbsolutePath());
+
+ int port = AvailablePortHelper.getRandomAvailableTCPPort();
+ locator = InternalLocator.startLocator(port, null, null, null, null, false, properties, null);
+
+ appender = LogWriterAppenders.getAppender(LogWriterAppenders.Identifier.MAIN);
+ assertThat(appender).isNotNull();
+
+ locator.stop();
+
+ appender = LogWriterAppenders.getAppender(LogWriterAppenders.Identifier.MAIN);
+ assertThat(appender).isNull();
+ }
+
+ @Test
+ public void testLogWriterAppenderShouldBeRemovedForALocatorWithDS() throws Exception {
+ Properties properties = new Properties();
+ properties.setProperty(NAME, "testVM");
+ properties.setProperty(LOG_FILE, temporaryFolder.newFile("testVM.log").getAbsolutePath());
+
+ int port = AvailablePortHelper.getRandomAvailableTCPPort();
+ locator = InternalLocator.startLocatorAndDS(port, null, properties);
+
+ appender = LogWriterAppenders.getAppender(LogWriterAppenders.Identifier.MAIN);
+ assertThat(appender).isNotNull();
+
+ locator.stop();
+
+ appender = LogWriterAppenders.getAppender(LogWriterAppenders.Identifier.MAIN);
+ assertThat(appender).isNull();
+ }
+}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
index cfbaacc..35df7d9 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
@@ -101,8 +101,8 @@ import org.apache.geode.internal.DataSerializableFixedID;
import org.apache.geode.internal.HeapDataOutputStream;
import org.apache.geode.internal.Version;
import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
-import org.apache.geode.internal.alerting.AlertingAction;
import org.apache.geode.internal.cache.DistributedCacheOperation;
+import org.apache.geode.internal.logging.log4j.AlertAppender;
import org.apache.geode.test.junit.categories.MembershipTest;
@Category({MembershipTest.class})
@@ -243,11 +243,14 @@ public class JGroupsMessengerJUnitTest {
messenger.setMessageFlags(dmsg, jgmsg);
assertFalse("expected no_fc to not be set in " + jgmsg.getFlags(),
jgmsg.isFlagSet(Message.Flag.NO_FC));
- AlertingAction.execute(() -> {
+ AlertAppender.setIsAlerting(true);
+ try {
messenger.setMessageFlags(dmsg, jgmsg);
assertTrue("expected no_fc to be set in " + jgmsg.getFlags(),
jgmsg.isFlagSet(Message.Flag.NO_FC));
- });
+ } finally {
+ AlertAppender.setIsAlerting(false);
+ }
}
@Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertListenerRegistrationIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertListenerRegistrationIntegrationTest.java
deleted file mode 100644
index 196d9ca..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertListenerRegistrationIntegrationTest.java
+++ /dev/null
@@ -1,183 +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.geode.internal.alerting;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.internal.alerting.AlertLevel.ERROR;
-import static org.apache.geode.internal.alerting.AlertLevel.NONE;
-import static org.apache.geode.internal.alerting.AlertLevel.SEVERE;
-import static org.apache.geode.internal.alerting.AlertLevel.WARNING;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.Properties;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.logging.log4j.AlertAppender;
-import org.apache.geode.test.junit.categories.AlertingTest;
-
-/**
- * Integration tests for adding and removing {@code Alert} listeners.
- */
-@Category(AlertingTest.class)
-public class AlertListenerRegistrationIntegrationTest {
-
- private InternalDistributedSystem system;
- private DistributedMember member;
- private AlertingService alertingService;
-
- @Before
- public void setUp() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
- member = system.getDistributedMember();
- alertingService = system.getAlertingService();
- }
-
- @After
- public void tearDown() {
- system.disconnect();
- }
-
- @Test
- public void alertingProviderIsAlertAppender() {
- assertThat(alertingService.getAlertingProviderRegistry().getAlertingProvider())
- .isInstanceOf(AlertAppender.class);
- }
-
- @Test
- public void hasAlertListenerIsFalseByDefault() {
- for (AlertLevel alertLevel : AlertLevel.values()) {
- assertThat(alertingService.hasAlertListener(member, alertLevel)).isFalse();
- }
- }
-
- @Test
- public void hasAlertListenerIsTrueAfterAdding() {
- alertingService.addAlertListener(member, WARNING);
-
- assertThat(alertingService.hasAlertListener(member, WARNING)).isTrue();
- }
-
- @Test
- public void hasAlertListenerIsTrueOnlyForLevelWarning() {
- alertingService.addAlertListener(member, WARNING);
-
- for (AlertLevel alertLevel : AlertLevel.values()) {
- if (alertLevel != WARNING) {
- assertThat(alertingService.hasAlertListener(member, alertLevel)).isFalse();
- }
- }
- }
-
- @Test
- public void hasAlertListenerIsTrueOnlyForLevelError() {
- alertingService.addAlertListener(member, ERROR);
-
- for (AlertLevel alertLevel : AlertLevel.values()) {
- if (alertLevel != ERROR) {
- assertThat(alertingService.hasAlertListener(member, alertLevel)).isFalse();
- }
- }
- }
-
- @Test
- public void hasAlertListenerIsTrueOnlyForLevelSevere() {
- alertingService.addAlertListener(member, SEVERE);
-
- for (AlertLevel alertLevel : AlertLevel.values()) {
- if (alertLevel != SEVERE) {
- assertThat(alertingService.hasAlertListener(member, alertLevel)).isFalse();
- }
- }
- }
-
- @Test
- public void addAlertListenerDoesNothingForLevelNone() {
- alertingService.addAlertListener(member, NONE);
-
- for (AlertLevel alertLevel : AlertLevel.values()) {
- assertThat(alertingService.hasAlertListener(member, alertLevel)).isFalse();
- }
- }
-
- @Test
- public void removeAlertListenerReturnsFalseByDefault() {
- assertThat(alertingService.removeAlertListener(member)).isFalse();
- }
-
- @Test
- public void removeAlertListenerReturnsFalseAfterAddingForLevelNone() {
- alertingService.addAlertListener(member, NONE);
-
- assertThat(alertingService.removeAlertListener(member)).isFalse();
- }
-
- @Test
- public void removeAlertListenerReturnsTrueAfterAdding() {
- alertingService.addAlertListener(member, WARNING);
-
- assertThat(alertingService.removeAlertListener(member)).isTrue();
- }
-
- @Test
- public void hasAlertListenerIsFalseAfterRemoving() {
- alertingService.addAlertListener(member, WARNING);
- alertingService.removeAlertListener(member);
-
- assertThat(alertingService.hasAlertListener(member, WARNING)).isFalse();
- }
-
- @Test
- public void systemHasAlertListenerForMemberIsFalseByDefault() {
- assertThat(system.hasAlertListenerFor(member)).isFalse();
- for (AlertLevel alertLevel : AlertLevel.values()) {
- assertThat(system.hasAlertListenerFor(member, alertLevel.intLevel())).isFalse();
- }
- }
-
- @Test
- public void systemHasAlertListenerForAlertLevelIsFalseByDefault() {
- for (AlertLevel alertLevel : AlertLevel.values()) {
- assertThat(system.hasAlertListenerFor(member, alertLevel.intLevel())).isFalse();
- }
- }
-
- @Test
- public void systemHasAlertListenerIsTrueAfterAdding() {
- alertingService.addAlertListener(member, WARNING);
-
- assertThat(system.hasAlertListenerFor(member, WARNING.intLevel())).isTrue();
- }
-
- @Test
- public void systemHasAlertListenerIsFalseForOtherLevels() {
- alertingService.addAlertListener(member, WARNING);
-
- for (AlertLevel alertLevel : AlertLevel.values()) {
- if (alertLevel != WARNING) {
- assertThat(system.hasAlertListenerFor(member, alertLevel.intLevel())).isFalse();
- }
- }
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertingServiceWithClusterIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertingServiceWithClusterIntegrationTest.java
deleted file mode 100644
index 58b2b6a..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertingServiceWithClusterIntegrationTest.java
+++ /dev/null
@@ -1,274 +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.geode.internal.alerting;
-
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.distributed.ConfigurationProperties.START_LOCATOR;
-import static org.apache.geode.internal.AvailablePortHelper.getRandomAvailableTCPPort;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.addListener;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.removeListener;
-import static org.apache.geode.internal.alerting.AlertLevel.ERROR;
-import static org.apache.geode.internal.alerting.AlertLevel.NONE;
-import static org.apache.geode.internal.alerting.AlertLevel.SEVERE;
-import static org.apache.geode.internal.alerting.AlertLevel.WARNING;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
-import static org.apache.geode.test.dunit.NetworkUtils.getServerHostName;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.isA;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.timeout;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import java.util.Properties;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TestName;
-import org.mockito.ArgumentCaptor;
-
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.admin.remote.AlertListenerMessage;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.management.internal.AlertDetails;
-import org.apache.geode.test.junit.categories.AlertingTest;
-
-/**
- * Integration tests for {@link AlertingService} in a cluster member.
- */
-@Category(AlertingTest.class)
-public class AlertingServiceWithClusterIntegrationTest {
-
- private static final long TIMEOUT = getTimeout().getValueInMS();
-
- private InternalDistributedSystem system;
- private DistributedMember member;
- private AlertListenerMessage.Listener messageListener;
- private Logger logger;
- private String connectionName;
- private String alertMessage;
- private String exceptionMessage;
- private String threadName;
- private long threadId;
-
- private AlertingService alertingService;
-
- @Rule
- public TestName testName = new TestName();
-
- @Before
- public void setUp() {
- alertMessage = "Alerting in " + testName.getMethodName();
- exceptionMessage = "Exception in " + testName.getMethodName();
- connectionName = "Member in " + testName.getMethodName();
- threadName = Thread.currentThread().getName();
- threadId = Thread.currentThread().getId();
-
- messageListener = spy(AlertListenerMessage.Listener.class);
- addListener(messageListener);
-
- String startLocator = getServerHostName() + "[" + getRandomAvailableTCPPort() + "]";
-
- Properties config = new Properties();
- config.setProperty(START_LOCATOR, startLocator);
- config.setProperty(NAME, connectionName);
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
- member = system.getDistributedMember();
- logger = LogService.getLogger();
-
- alertingService = system.getAlertingService();
- }
-
- @After
- public void tearDown() {
- removeListener(messageListener);
- system.disconnect();
- }
-
- @Test
- public void alertMessageIsNotReceivedWithoutListener() {
- logger.fatal(alertMessage);
-
- verifyNoMoreInteractions(messageListener);
- }
-
- @Test
- public void alertMessageIsReceivedForListenerLevelWarning() {
- alertingService.addAlertListener(member, WARNING);
-
- logger.warn(alertMessage);
-
- verify(messageListener, timeout(TIMEOUT)).received(isA(AlertListenerMessage.class));
- }
-
- @Test
- public void alertMessageIsReceivedForListenerLevelError() {
- alertingService.addAlertListener(member, ERROR);
-
- logger.error(alertMessage);
-
- verify(messageListener, timeout(TIMEOUT)).received(isA(AlertListenerMessage.class));
- }
-
- @Test
- public void alertMessageIsReceivedForListenerLevelFatal() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- verify(messageListener, timeout(TIMEOUT)).received(isA(AlertListenerMessage.class));
- }
-
- @Test
- public void alertMessageIsNotReceivedForLevelNone() {
- alertingService.addAlertListener(member, NONE);
-
- logger.fatal(alertMessage);
-
- verifyNoMoreInteractions(messageListener);
- }
-
- @Test
- public void alertMessageIsReceivedForHigherLevels() {
- alertingService.addAlertListener(member, WARNING);
-
- logger.error(alertMessage);
- logger.fatal(alertMessage);
-
- verify(messageListener, timeout(TIMEOUT).times(2)).received(isA(AlertListenerMessage.class));
- }
-
- @Test
- public void alertMessageIsNotReceivedForLowerLevels() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.warn(alertMessage);
- logger.error(alertMessage);
-
- verifyNoMoreInteractions(messageListener);
- }
-
- @Test
- public void alertDetailsIsCreatedByAlertMessage() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails()).isNotNull().isInstanceOf(AlertDetails.class);
- }
-
- @Test
- public void alertDetailsAlertLevelMatches() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getAlertLevel()).isEqualTo(SEVERE.intLevel());
- }
-
- @Test
- public void alertDetailsMessageMatches() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getMsg()).isEqualTo(alertMessage);
- }
-
- @Test
- public void alertDetailsSenderIsNullForLocalAlert() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getSender()).isNull();
- }
-
- @Test
- public void alertDetailsSource() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getSource()).contains(threadName);
- }
-
- @Test
- public void alertDetailsConnectionName() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getConnectionName()).isEqualTo(connectionName);
- }
-
- @Test
- public void alertDetailsExceptionTextIsEmpty() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getExceptionText()).isEqualTo("");
- }
-
- @Test
- public void alertDetailsExceptionTextMatches() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage, new Exception(exceptionMessage));
-
- assertThat(captureAlertDetails().getExceptionText()).contains(exceptionMessage);
- }
-
- @Test
- public void alertDetailsThreadName() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getThreadName()).isEqualTo(threadName);
- }
-
- @Test
- public void alertDetailsThreadId() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getTid()).isEqualTo(threadId);
- }
-
- @Test
- public void alertDetailsMessageTime() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- assertThat(captureAlertDetails().getMsgTime()).isNotNull();
- }
-
- private AlertDetails captureAlertDetails() {
- ArgumentCaptor<AlertDetails> alertDetailsCaptor = ArgumentCaptor.forClass(AlertDetails.class);
- verify(messageListener, timeout(TIMEOUT)).created(alertDetailsCaptor.capture());
- return alertDetailsCaptor.getValue();
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertingServiceWithLonerIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertingServiceWithLonerIntegrationTest.java
deleted file mode 100644
index 1b8e8f5..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/alerting/AlertingServiceWithLonerIntegrationTest.java
+++ /dev/null
@@ -1,89 +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.geode.internal.alerting;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.addListener;
-import static org.apache.geode.internal.admin.remote.AlertListenerMessage.removeListener;
-import static org.apache.geode.internal.alerting.AlertLevel.SEVERE;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-
-import java.util.Properties;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TestName;
-
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.admin.remote.AlertListenerMessage;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.test.junit.categories.AlertingTest;
-
-/**
- * Integration tests for {@link AlertingService} in a loner member.
- */
-@Category(AlertingTest.class)
-public class AlertingServiceWithLonerIntegrationTest {
-
- private InternalDistributedSystem system;
- private DistributedMember member;
- private AlertListenerMessage.Listener messageListener;
- private Logger logger;
- private String alertMessage;
-
- private AlertingService alertingService;
-
- @Rule
- public TestName testName = new TestName();
-
- @Before
- public void setUp() {
- alertMessage = "Alerting in " + testName.getMethodName();
-
- messageListener = spy(AlertListenerMessage.Listener.class);
- addListener(messageListener);
-
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
- member = system.getDistributedMember();
- logger = LogService.getLogger();
-
- alertingService = system.getAlertingService();
- }
-
- @After
- public void tearDown() {
- removeListener(messageListener);
- system.disconnect();
- }
-
- @Test
- public void alertMessageIsNotReceived() {
- alertingService.addAlertListener(member, SEVERE);
-
- logger.fatal(alertMessage);
-
- verifyNoMoreInteractions(messageListener);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/BannerLoggingIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/BannerLoggingIntegrationTest.java
deleted file mode 100644
index 04a8c72..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/BannerLoggingIntegrationTest.java
+++ /dev/null
@@ -1,129 +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.geode.internal.logging;
-
-import static java.nio.charset.Charset.defaultCharset;
-import static org.apache.commons.io.FileUtils.readLines;
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
-import static org.apache.geode.internal.Banner.BannerHeader.displayValues;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.File;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.Banner;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for logging of the {@link Banner}.
- */
-@Category(LoggingTest.class)
-public class BannerLoggingIntegrationTest {
-
- private File mainLogFile;
- private InternalDistributedSystem system;
- private Logger geodeLogger;
- private String logMessage;
-
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public TestName testName = new TestName();
-
- @Before
- public void setUp() {
- String name = testName.getMethodName();
- mainLogFile = new File(temporaryFolder.getRoot(), name + "-main.log");
-
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFile.getAbsolutePath());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- geodeLogger = LogService.getLogger();
- logMessage = "Logging in " + testName.getMethodName();
- }
-
- @After
- public void tearDown() throws Exception {
- if (system != null) {
- system.disconnect();
- }
- }
-
- @Test
- public void bannerIsLoggedToFile() {
- LogFileAssert.assertThat(mainLogFile).contains(displayValues());
- }
-
- @Test
- public void bannerIsLoggedToFileOnlyOnce() {
- LogFileAssert.assertThat(mainLogFile).containsOnlyOnce(displayValues());
- }
-
- /**
- * Verifies that the banner is logged before any log messages.
- */
- @Test
- public void bannerIsLoggedToFileBeforeLogMessage() throws Exception {
- geodeLogger.info(logMessage);
-
- List<String> lines = readLines(mainLogFile, defaultCharset());
-
- boolean foundBanner = false;
- boolean foundLogMessage = false;
-
- for (String line : lines) {
- if (containsAny(line, displayValues())) {
- assertThat(foundLogMessage).as("Banner should be logged before log message: " + lines)
- .isFalse();
- foundBanner = true;
- }
- if (line.contains(logMessage)) {
- assertThat(foundBanner).as("Log message should be logged after banner: " + lines)
- .isTrue();
- foundLogMessage = true;
- }
- }
-
- assertThat(foundBanner).as("Banner not found in: " + lines).isTrue();
- assertThat(foundLogMessage).as("Log message not found in: " + lines).isTrue();
- }
-
- private boolean containsAny(String string, String... values) {
- for (String value : values) {
- if (string.contains(value)) {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogRollingWithDistributedSystemIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/CacheLogRollingIntegrationTest.java
similarity index 91%
rename from geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogRollingWithDistributedSystemIntegrationTest.java
rename to geode-core/src/integrationTest/java/org/apache/geode/internal/logging/CacheLogRollingIntegrationTest.java
index 90c77e9..5b2b77f 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogRollingWithDistributedSystemIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/CacheLogRollingIntegrationTest.java
@@ -42,12 +42,12 @@ import org.apache.geode.distributed.DistributedSystem;
import org.apache.geode.test.junit.categories.LoggingTest;
/**
- * Integration tests for log rolling with {@link DistributedSystem} lifecycle.
+ * Integration tests for log rolling with cache lifecycle.
*
* @since GemFire 6.5
*/
@Category(LoggingTest.class)
-public class LogRollingWithDistributedSystemIntegrationTest {
+public class CacheLogRollingIntegrationTest {
private static final int MAX_LOG_STATEMENTS = 100000;
private static final String SECURITY_PREFIX = "security_";
@@ -84,9 +84,9 @@ public class LogRollingWithDistributedSystemIntegrationTest {
@Test
public void testSimpleStartRestartWithRolling() {
Properties config = createConfig();
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(LOG_FILE_SIZE_LIMIT, "1");
- config.setProperty(LOG_DISK_SPACE_LIMIT, "200");
+ config.put(LOG_FILE, logFile.getAbsolutePath());
+ config.put(LOG_FILE_SIZE_LIMIT, "1");
+ config.put(LOG_DISK_SPACE_LIMIT, "200");
system = DistributedSystem.connect(config);
system.disconnect();
@@ -98,8 +98,7 @@ public class LogRollingWithDistributedSystemIntegrationTest {
File newRolledLogFile = childFile(mainInt - 1, 1);
assertThat(newMetaFile).doesNotExist();
- assertThat(newRolledLogFile).as("mainInt=" + mainInt + ", newMetaFile=" + newMetaFile
- + ", newRolledLogFile=" + newRolledLogFile).doesNotExist();
+ assertThat(newRolledLogFile).doesNotExist();
system = DistributedSystem.connect(config);
@@ -113,8 +112,8 @@ public class LogRollingWithDistributedSystemIntegrationTest {
@Test
public void testStartWithRollingThenRestartWithRolling() throws Exception {
Properties config = createConfig();
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(LOG_FILE_SIZE_LIMIT, "1");
+ config.put(LOG_FILE, logFile.getAbsolutePath());
+ config.put(LOG_FILE_SIZE_LIMIT, "1");
system = DistributedSystem.connect(config);
@@ -140,8 +139,8 @@ public class LogRollingWithDistributedSystemIntegrationTest {
@Test
public void testLogFileLayoutAndRolling() throws Exception {
Properties config = createConfig();
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(LOG_FILE_SIZE_LIMIT, "1");
+ config.put(LOG_FILE, logFile.getAbsolutePath());
+ config.put(LOG_FILE_SIZE_LIMIT, "1");
system = DistributedSystem.connect(config);
@@ -151,9 +150,9 @@ public class LogRollingWithDistributedSystemIntegrationTest {
@Test
public void testSecurityLogFileLayoutAndRolling() throws Exception {
Properties config = createConfig();
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(LOG_FILE_SIZE_LIMIT, "1");
- config.setProperty(SECURITY_LOG_FILE, securityLogFile.getAbsolutePath());
+ config.put(LOG_FILE, logFile.getAbsolutePath());
+ config.put(LOG_FILE_SIZE_LIMIT, "1");
+ config.put(SECURITY_LOG_FILE, securityLogFile.getAbsolutePath());
system = DistributedSystem.connect(config);
@@ -163,8 +162,8 @@ public class LogRollingWithDistributedSystemIntegrationTest {
@Test
public void with_logFileSizeLimit_should_createMetaLogFile() {
Properties config = createConfig();
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(LOG_FILE_SIZE_LIMIT, "1");
+ config.put(LOG_FILE, logFile.getAbsolutePath());
+ config.put(LOG_FILE_SIZE_LIMIT, "1");
system = DistributedSystem.connect(config);
@@ -179,7 +178,7 @@ public class LogRollingWithDistributedSystemIntegrationTest {
@Test
public void without_logFileSizeLimit_shouldNot_createMetaLogFile() {
Properties config = createConfig();
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
+ config.put(LOG_FILE, logFile.getAbsolutePath());
system = DistributedSystem.connect(config);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ConfigurationInfoIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ConfigurationInfoIntegrationTest.java
deleted file mode 100644
index 3b69302..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ConfigurationInfoIntegrationTest.java
+++ /dev/null
@@ -1,42 +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.geode.internal.logging;
-
-import static org.apache.geode.internal.logging.ConfigurationInfo.getConfigurationInfo;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.internal.logging.log4j.Log4jAgent;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for {@link ConfigurationInfo}.
- */
-@Category(LoggingTest.class)
-public class ConfigurationInfoIntegrationTest {
-
- @Test
- public void getConfigurationInfoContainsLog4j2Xml() {
- assertThat(getConfigurationInfo()).contains("log4j2.xml");
- }
-
- @Test
- public void getConfigurationInfoMatchesLog4jAgent() {
-
- assertThat(getConfigurationInfo()).contains(Log4jAgent.getConfigurationInfo());
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ConfigurationIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ConfigurationIntegrationTest.java
deleted file mode 100644
index d8bc236..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ConfigurationIntegrationTest.java
+++ /dev/null
@@ -1,133 +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.geode.internal.logging;
-
-import static org.apache.geode.internal.logging.Configuration.LogLevelUpdateOccurs.ALWAYS;
-import static org.apache.geode.internal.logging.Configuration.LogLevelUpdateScope.ALL_LOGGERS;
-import static org.apache.geode.internal.logging.Configuration.LogLevelUpdateScope.GEODE_AND_APPLICATION_LOGGERS;
-import static org.apache.geode.internal.logging.Configuration.LogLevelUpdateScope.GEODE_AND_SECURITY_LOGGERS;
-import static org.apache.geode.internal.logging.Configuration.LogLevelUpdateScope.GEODE_LOGGERS;
-import static org.apache.geode.internal.logging.Configuration.MAIN_LOGGER_NAME;
-import static org.apache.geode.internal.logging.Configuration.SECURITY_LOGGER_NAME;
-import static org.apache.geode.internal.logging.LogWriterLevel.INFO;
-import static org.apache.geode.internal.logging.LogWriterLevel.WARNING;
-import static org.apache.geode.internal.logging.log4j.Log4jAgent.getLoggerConfig;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.config.LoggerConfig;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.internal.logging.log4j.Log4jAgent;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for {@link Configuration}.
- */
-@Category(LoggingTest.class)
-public class ConfigurationIntegrationTest {
-
- private static final String APPLICATION_LOGGER_NAME = "com.application";
-
- private LogConfigSupplier logConfigSupplier;
- private LogConfig logConfig;
-
- private Logger geodeLogger;
- private Logger geodeSecurityLogger;
- private Logger applicationLogger;
-
- @Before
- public void setUp() {
- logConfigSupplier = mock(LogConfigSupplier.class);
- logConfig = mock(LogConfig.class);
-
- when(logConfigSupplier.getLogConfig()).thenReturn(logConfig);
- when(logConfig.getLogLevel()).thenReturn(INFO.intLevel());
- when(logConfig.getSecurityLogLevel()).thenReturn(INFO.intLevel());
-
- geodeLogger = LogManager.getLogger(MAIN_LOGGER_NAME);
- geodeSecurityLogger = LogManager.getLogger(SECURITY_LOGGER_NAME);
- applicationLogger = LogManager.getLogger(APPLICATION_LOGGER_NAME);
-
- List<LoggerConfig> loggerConfigs = Arrays.asList(getLoggerConfig(geodeLogger),
- getLoggerConfig(geodeSecurityLogger), getLoggerConfig(applicationLogger));
-
- Log4jAgent.updateLogLevel(Level.INFO, loggerConfigs.toArray(new LoggerConfig[0]));
- }
-
- @Test
- public void loggerLogLevelIsInfo() {
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.INFO);
- assertThat(geodeSecurityLogger.getLevel()).isEqualTo(Level.INFO);
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
- }
-
- @Test
- public void updatesLogLevelForScopeGeodeLoggers() {
- when(logConfig.getLogLevel()).thenReturn(WARNING.intLevel());
-
- Configuration configuration = Configuration.create(ALWAYS, GEODE_LOGGERS);
- configuration.initialize(logConfigSupplier);
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.WARN);
- assertThat(geodeSecurityLogger.getLevel()).isEqualTo(Level.INFO);
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
- }
-
- @Test
- public void updatesLogLevelForScopeGeodeAndSecurityLoggers() {
- when(logConfig.getLogLevel()).thenReturn(WARNING.intLevel());
-
- Configuration configuration = Configuration.create(ALWAYS, GEODE_AND_SECURITY_LOGGERS);
- configuration.initialize(logConfigSupplier);
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.WARN);
- assertThat(geodeSecurityLogger.getLevel()).isEqualTo(Level.WARN);
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
- }
-
- @Test
- public void updatesLogLevelForScopeAllLoggers() {
- when(logConfig.getLogLevel()).thenReturn(WARNING.intLevel());
-
- Configuration configuration = Configuration.create(ALWAYS, ALL_LOGGERS);
- configuration.initialize(logConfigSupplier);
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.WARN);
- assertThat(geodeSecurityLogger.getLevel()).isEqualTo(Level.WARN);
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.WARN);
- }
-
- @Test
- public void updatesLogLevelForScopeGeodeAndApplicationLoggers() {
- when(logConfig.getLogLevel()).thenReturn(WARNING.intLevel());
-
- Configuration configuration = Configuration.create(ALWAYS, GEODE_AND_APPLICATION_LOGGERS);
- configuration.initialize(logConfigSupplier);
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.WARN);
- assertThat(geodeSecurityLogger.getLevel()).isEqualTo(Level.INFO);
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.WARN);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/DistributedSystemLogFileIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/DistributedSystemLogFileIntegrationTest.java
new file mode 100755
index 0000000..dba2b0b
--- /dev/null
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/DistributedSystemLogFileIntegrationTest.java
@@ -0,0 +1,1152 @@
+/*
+ * 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.geode.internal.logging;
+
+import static org.apache.commons.lang3.SystemUtils.LINE_SEPARATOR;
+import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
+import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
+import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
+import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
+import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_LOG_FILE;
+import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_LOG_LEVEL;
+import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.List;
+import java.util.Properties;
+import java.util.Scanner;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
+import org.junit.rules.TestName;
+
+import org.apache.geode.LogWriter;
+import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.internal.logging.log4j.FastLogger;
+import org.apache.geode.internal.logging.log4j.LogWriterLogger;
+import org.apache.geode.test.junit.categories.LoggingTest;
+
+/**
+ * Connects DistributedSystem and tests logging behavior at a high level.
+ */
+@Category(LoggingTest.class)
+public class DistributedSystemLogFileIntegrationTest {
+
+ private static final AtomicInteger COUNTER = new AtomicInteger();
+
+ private File logFile;
+ private String logFileName;
+ private File securityLogFile;
+ private String securityLogFileName;
+
+ private InternalDistributedSystem system;
+
+ private String prefix;
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Rule
+ public TestName testName = new TestName();
+
+ @Before
+ public void setUp() {
+ logFile = new File(temporaryFolder.getRoot(),
+ testName.getMethodName() + "-system-" + System.currentTimeMillis() + ".log");
+ logFileName = logFile.getAbsolutePath();
+
+ securityLogFile = new File(temporaryFolder.getRoot(),
+ "security-" + testName.getMethodName() + "-system-" + System.currentTimeMillis() + ".log");
+ securityLogFileName = securityLogFile.getAbsolutePath();
+
+ prefix = "ExpectedStrings: " + testName.getMethodName() + " message logged at ";
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ if (system != null) {
+ system.disconnect();
+ }
+ // We will want to remove this at some point but right now the log context
+ // does not clear out the security logconfig between tests
+ LoggerContext context = (LoggerContext) LogManager.getContext(false);
+ context.stop();
+ }
+
+ @Test
+ public void testDistributedSystemLogWritersWithFilesDetails() throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_FILE, logFileName);
+ config.put(SECURITY_LOG_FILE, securityLogFileName);
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(config);
+
+ await().untilAsserted(() -> {
+ assertThat(logFile).exists();
+ assertThat(securityLogFile).exists();
+ });
+
+ // assertThat logFile is not empty
+ try (FileInputStream fis = new FileInputStream(logFile)) {
+ assertThat(fis.available()).isGreaterThan(0);
+ }
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ assertThat(distributionConfig.getLogLevel())
+ .isEqualTo(LogWriterLevel.CONFIG.getLogWriterLevel());
+ assertThat(distributionConfig.getSecurityLogLevel())
+ .isEqualTo(LogWriterLevel.CONFIG.getLogWriterLevel());
+
+ assertThat(distributionConfig.getLogFile().getAbsolutePath()).isEqualTo(logFileName);
+ assertThat(distributionConfig.getSecurityLogFile().getAbsolutePath())
+ .isEqualTo(securityLogFileName);
+
+ assertThat(system.getLogWriter()).isInstanceOf(LogWriterLogger.class);
+ assertThat(system.getSecurityLogWriter()).isInstanceOf(LogWriterLogger.class);
+
+ LogWriterLogger logWriterLogger = (LogWriterLogger) system.getLogWriter();
+ LogWriterLogger securityLogWriterLogger = (LogWriterLogger) system.getSecurityLogWriter();
+
+ assertThat(logWriterLogger.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+ assertThat(securityLogWriterLogger.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+
+ securityLogWriterLogger.info("test: security log file created at info");
+
+ // assertThat securityLogFile is not empty
+ try (FileInputStream fis = new FileInputStream(securityLogFile)) {
+ assertThat(fis.available()).isGreaterThan(0);
+ }
+
+ LogWriter logWriter = logWriterLogger;
+ assertThat(logWriter.finestEnabled()).isFalse();
+ assertThat(logWriter.finerEnabled()).isFalse();
+ assertThat(logWriter.fineEnabled()).isFalse();
+ assertThat(logWriter.configEnabled()).isTrue();
+ assertThat(logWriter.infoEnabled()).isTrue();
+ assertThat(logWriter.warningEnabled()).isTrue();
+ assertThat(logWriter.errorEnabled()).isTrue();
+ assertThat(logWriter.severeEnabled()).isTrue();
+
+ FastLogger logWriterFastLogger = logWriterLogger;
+ // assertThat(logWriterFastLogger.isDelegating()).isTrue();
+ assertThat(logWriterFastLogger.isTraceEnabled()).isFalse();
+ assertThat(logWriterFastLogger.isDebugEnabled()).isFalse();
+ assertThat(logWriterFastLogger.isInfoEnabled()).isTrue();
+ assertThat(logWriterFastLogger.isWarnEnabled()).isTrue();
+ assertThat(logWriterFastLogger.isErrorEnabled()).isTrue();
+ assertThat(logWriterFastLogger.isFatalEnabled()).isTrue();
+
+ LogWriter securityLogWriter = securityLogWriterLogger;
+ assertThat(securityLogWriter.finestEnabled()).isFalse();
+ assertThat(securityLogWriter.finerEnabled()).isFalse();
+ assertThat(securityLogWriter.fineEnabled()).isFalse();
+ assertThat(securityLogWriter.configEnabled()).isTrue();
+ assertThat(securityLogWriter.infoEnabled()).isTrue();
+ assertThat(securityLogWriter.warningEnabled()).isTrue();
+ assertThat(securityLogWriter.errorEnabled()).isTrue();
+ assertThat(securityLogWriter.severeEnabled()).isTrue();
+
+ FastLogger securityLogWriterFastLogger = logWriterLogger;
+ // assertThat(securityLogWriterFastLogger.isDelegating()).isFalse();
+ assertThat(securityLogWriterFastLogger.isTraceEnabled()).isFalse();
+ assertThat(securityLogWriterFastLogger.isDebugEnabled()).isFalse();
+ assertThat(securityLogWriterFastLogger.isInfoEnabled()).isTrue();
+ assertThat(securityLogWriterFastLogger.isWarnEnabled()).isTrue();
+ assertThat(securityLogWriterFastLogger.isErrorEnabled()).isTrue();
+ assertThat(securityLogWriterFastLogger.isFatalEnabled()).isTrue();
+ }
+
+ @Test
+ public void testDistributedSystemCreatesLogFile() throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_FILE, logFileName);
+ config.put(LOG_LEVEL, "config");
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(config);
+
+ await().untilAsserted(() -> assertThat(logFile).exists());
+
+ LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
+ Logger geodeLogger = LogService.getLogger();
+ Logger applicationLogger = LogManager.getLogger("net.customer");
+
+ // -------------------------------------------------------------------------------------------
+ // CONFIG level
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ assertThat(distributionConfig.getLogLevel())
+ .isEqualTo(LogWriterLevel.CONFIG.getLogWriterLevel());
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.INFO);
+ assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
+
+ String message = createMessage(LogWriterLevel.FINEST);
+ logWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ logWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ logWriter.fine(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ logWriter.config(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ logWriter.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ logWriter.warning(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ logWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ logWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ applicationLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ applicationLogger.debug(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.INFO);
+ applicationLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ applicationLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ applicationLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ applicationLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+
+ // -------------------------------------------------------------------------------------------
+ // FINE level
+
+ distributionConfig.setLogLevel(LogWriterLevel.FINE.getLogWriterLevel());
+
+ assertThat(distributionConfig.getLogLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
+ assertThat(applicationLogger.getLevel()).isEqualTo(Level.DEBUG);
+
+ message = createMessage(LogWriterLevel.FINEST);
+ logWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ logWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ logWriter.fine(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ logWriter.config(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ logWriter.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ logWriter.warning(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ logWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ logWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ applicationLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ applicationLogger.debug(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.INFO);
+ applicationLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ applicationLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ applicationLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ applicationLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+
+ // -------------------------------------------------------------------------------------------
+ // ERROR level
+
+ distributionConfig.setLogLevel(LogWriterLevel.ERROR.getLogWriterLevel());
+
+ assertThat(distributionConfig.getLogLevel())
+ .isEqualTo(LogWriterLevel.ERROR.getLogWriterLevel());
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.ERROR.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.ERROR);
+ assertThat(applicationLogger.getLevel()).isEqualTo(Level.ERROR);
+
+ message = createMessage(LogWriterLevel.FINEST);
+ logWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ logWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ logWriter.fine(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ logWriter.config(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ logWriter.info(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ logWriter.warning(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ logWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ logWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ applicationLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ applicationLogger.debug(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.INFO);
+ applicationLogger.info(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.WARN);
+ applicationLogger.warn(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ applicationLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ applicationLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+ }
+
+ @Test
+ public void testDistributedSystemWithFineLogLevel() throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_FILE, logFileName);
+ config.put(LOG_LEVEL, "fine");
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(config);
+
+ await().untilAsserted(() -> assertThat(logFile).exists());
+
+ LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
+ Logger geodeLogger = LogService.getLogger();
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ // -------------------------------------------------------------------------------------------
+ // FINE level
+
+ assertThat(distributionConfig.getLogLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
+
+ String message = createMessage(LogWriterLevel.FINEST);
+ logWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ logWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ logWriter.fine(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ logWriter.config(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ logWriter.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ logWriter.warning(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ logWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ logWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+
+ // -------------------------------------------------------------------------------------------
+ // ERROR level
+
+ distributionConfig.setLogLevel(LogWriterLevel.ERROR.getLogWriterLevel());
+
+ assertThat(distributionConfig.getLogLevel())
+ .isEqualTo(LogWriterLevel.ERROR.getLogWriterLevel());
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.ERROR.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.ERROR);
+
+ message = createMessage(LogWriterLevel.FINEST);
+ logWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ logWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ logWriter.fine(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ logWriter.config(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ logWriter.info(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ logWriter.warning(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ logWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ logWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+ }
+
+ @Test
+ public void testDistributedSystemWithDebugLogLevel() throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_FILE, logFileName);
+ config.put(LOG_LEVEL, "debug");
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(config);
+
+ await().untilAsserted(() -> assertThat(logFile).exists());
+
+ LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
+ Logger geodeLogger = LogService.getLogger();
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ // -------------------------------------------------------------------------------------------
+ // DEBUG LEVEL
+
+ assertThat(distributionConfig.getLogLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
+
+ String message = createMessage(LogWriterLevel.FINEST);
+ logWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ logWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ logWriter.fine(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ logWriter.config(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ logWriter.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ logWriter.warning(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ logWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ logWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+
+ // -------------------------------------------------------------------------------------------
+ // ERROR LEVEL
+
+ distributionConfig.setLogLevel(LogWriterLevel.ERROR.getLogWriterLevel());
+
+ assertThat(distributionConfig.getLogLevel())
+ .isEqualTo(LogWriterLevel.ERROR.getLogWriterLevel());
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.ERROR.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.ERROR);
+
+ message = createMessage(LogWriterLevel.FINEST);
+ logWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ logWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ logWriter.fine(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ logWriter.config(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ logWriter.info(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ logWriter.warning(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ logWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ logWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+ }
+
+ @Test
+ public void testDistributedSystemWithSecurityLogDefaultLevel() throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_FILE, logFileName);
+ config.put(LOG_LEVEL, "fine");
+ config.put(SECURITY_LOG_FILE, securityLogFileName);
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(config);
+
+ await().untilAsserted(() -> {
+ assertThat(logFile).exists();
+ assertThat(securityLogFile).exists();
+ });
+
+ LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
+ LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
+ Logger geodeLogger = LogService.getLogger();
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ assertThat(distributionConfig.getLogLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(distributionConfig.getSecurityLogLevel())
+ .isEqualTo(LogWriterLevel.CONFIG.getLogWriterLevel());
+
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(securityLogWriter.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
+
+ String message = createMessage(LogWriterLevel.FINEST);
+ securityLogWriter.finest(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ securityLogWriter.fine(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ securityLogWriter.info(message);
+ assertThatFileContains(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ geodeLogger.debug(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileContains(logFile, message);
+ }
+
+ @Test
+ public void testDistributedSystemWithSecurityLogFineLevel() throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_FILE, logFileName);
+ config.put(LOG_LEVEL, "fine");
+ config.put(SECURITY_LOG_FILE, securityLogFileName);
+ config.put(SECURITY_LOG_LEVEL, "fine");
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(config);
+
+ await().untilAsserted(() -> {
+ assertThat(logFile).exists();
+ assertThat(securityLogFile).exists();
+ });
+
+ LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
+ LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
+ Logger geodeLogger = LogService.getLogger();
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ assertThat(distributionConfig.getLogLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(distributionConfig.getSecurityLogLevel())
+ .isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(securityLogWriter.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
+
+ String message = createMessage(LogWriterLevel.FINEST);
+ securityLogWriter.finest(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ securityLogWriter.finer(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ securityLogWriter.fine(message);
+ assertThatFileContains(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ securityLogWriter.config(message);
+ assertThatFileContains(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ securityLogWriter.info(message);
+ assertThatFileContains(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ securityLogWriter.warning(message);
+ assertThatFileContains(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ securityLogWriter.error(message);
+ assertThatFileContains(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ securityLogWriter.severe(message);
+ assertThatFileContains(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileDoesNotContain(securityLogFile, message);
+ assertThatFileContains(logFile, message);
+ }
+
+ /**
+ * tests scenario where security log has not been set but a level has been set to a less granular
+ * level than that of the regular log. Verifies that the correct logs for security show up in the
+ * regular log as expected
+ */
+ @Test
+ public void testDistributedSystemWithSecurityInfoLevelAndLogAtFineLevelButNoSecurityLog()
+ throws Exception {
+ Properties CONFIG = new Properties();
+ CONFIG.put(LOG_FILE, logFileName);
+ CONFIG.put(LOG_LEVEL, "fine");
+ CONFIG.put(SECURITY_LOG_LEVEL, "info");
+ CONFIG.put(MCAST_PORT, "0");
+ CONFIG.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(CONFIG);
+
+ await().untilAsserted(() -> assertThat(logFile).exists());
+
+ LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
+ LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
+ Logger geodeLogger = LogService.getLogger();
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ assertThat(distributionConfig.getLogLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(distributionConfig.getSecurityLogLevel())
+ .isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(securityLogWriter.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
+
+ String message = createMessage(LogWriterLevel.FINEST);
+ securityLogWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ securityLogWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ securityLogWriter.fine(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ securityLogWriter.config(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ securityLogWriter.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ securityLogWriter.warning(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ securityLogWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ securityLogWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+ }
+
+ /**
+ * tests scenario where security log has not been set but a level has been set to a more granular
+ * level than that of the regular log. Verifies that the correct logs for security show up in the
+ * regular log as expected
+ */
+ @Test
+ public void testDistributedSystemWithSecurityFineLevelAndLogAtInfoLevelButNoSecurityLog()
+ throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_FILE, logFileName);
+ config.put(LOG_LEVEL, "info");
+ config.put(SECURITY_LOG_LEVEL, "fine");
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "");
+
+ system = (InternalDistributedSystem) DistributedSystem.connect(config);
+
+ await().untilAsserted(() -> assertThat(logFile).exists());
+
+ LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
+ LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
+ Logger geodeLogger = LogService.getLogger();
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ assertThat(distributionConfig.getLogLevel()).isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+ assertThat(distributionConfig.getSecurityLogLevel())
+ .isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+
+ assertThat(logWriter.getLogWriterLevel()).isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+ assertThat(securityLogWriter.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.FINE.getLogWriterLevel());
+ assertThat(geodeLogger.getLevel()).isEqualTo(Level.INFO);
+
+ String message = createMessage(LogWriterLevel.FINEST);
+ securityLogWriter.finest(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINER);
+ securityLogWriter.finer(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(LogWriterLevel.FINE);
+ securityLogWriter.fine(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.CONFIG);
+ securityLogWriter.config(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.INFO);
+ securityLogWriter.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.WARNING);
+ securityLogWriter.warning(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.ERROR);
+ securityLogWriter.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(LogWriterLevel.SEVERE);
+ securityLogWriter.severe(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.TRACE);
+ geodeLogger.trace(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.DEBUG);
+ geodeLogger.debug(message);
+ assertThatFileDoesNotContain(logFile, message);
+
+ message = createMessage(Level.INFO);
+ geodeLogger.info(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.WARN);
+ geodeLogger.warn(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.ERROR);
+ geodeLogger.error(message);
+ assertThatFileContains(logFile, message);
+
+ message = createMessage(Level.FATAL);
+ geodeLogger.fatal(message);
+ assertThatFileContains(logFile, message);
+ }
+
+ private String createMessage(LogWriterLevel logLevel) {
+ return prefix + logLevel.name() + " [" + COUNTER.incrementAndGet() + "]";
+ }
+
+ private String createMessage(Level level) {
+ return prefix + level.name() + " [" + COUNTER.incrementAndGet() + "]";
+ }
+
+ private void assertThatFileContains(final File file, final String string)
+ throws IOException {
+ try (Scanner scanner = new Scanner(file)) {
+ while (scanner.hasNextLine()) {
+ if (scanner.nextLine().trim().contains(string)) {
+ return;
+ }
+ }
+ }
+
+ List<String> lines = Files.readAllLines(file.toPath());
+ fail("Expected file " + file.getAbsolutePath() + " to contain " + string + LINE_SEPARATOR
+ + "Actual: " + lines);
+ }
+
+ private void assertThatFileDoesNotContain(final File file, final String string)
+ throws IOException {
+ boolean fail = false;
+ try (Scanner scanner = new Scanner(file)) {
+ while (scanner.hasNextLine()) {
+ if (scanner.nextLine().trim().contains(string)) {
+ fail = true;
+ break;
+ }
+ }
+ }
+ if (fail) {
+ List<String> lines = Files.readAllLines(file.toPath());
+ fail("Expected file " + file.getAbsolutePath() + " to not contain " + string + LINE_SEPARATOR
+ + "Actual: " + lines);
+ }
+ }
+}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LocatorLogFileIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LocatorLogFileIntegrationTest.java
new file mode 100644
index 0000000..89ac2a0
--- /dev/null
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LocatorLogFileIntegrationTest.java
@@ -0,0 +1,123 @@
+/*
+ * 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.geode.internal.logging;
+
+import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
+import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
+import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
+import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
+import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Properties;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
+import org.junit.rules.TestName;
+
+import org.apache.geode.distributed.Locator;
+import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.internal.AvailablePort;
+import org.apache.geode.internal.logging.log4j.LogWriterLogger;
+import org.apache.geode.test.junit.categories.LoggingTest;
+
+/**
+ * Creates Locator and tests logging behavior at a high level.
+ */
+@Category(LoggingTest.class)
+public class LocatorLogFileIntegrationTest {
+
+ private File logFile;
+ private String logFileName;
+ private File securityLogFile;
+
+ private int port;
+ private Locator locator;
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Rule
+ public TestName testName = new TestName();
+
+ @Before
+ public void setUp() {
+ logFile = new File(temporaryFolder.getRoot(),
+ testName.getMethodName() + "-system-" + System.currentTimeMillis() + ".log");
+ logFileName = logFile.getAbsolutePath();
+
+ securityLogFile = new File("");
+
+ port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ if (locator != null) {
+ locator.stop();
+ }
+ }
+
+ @Test
+ public void testLocatorCreatesLogFile() throws Exception {
+ Properties config = new Properties();
+ config.put(LOG_LEVEL, "config");
+ config.put(MCAST_PORT, "0");
+ config.put(LOCATORS, "localhost[" + port + "]");
+ config.put(ENABLE_CLUSTER_CONFIGURATION, "false");
+
+ locator = Locator.startLocatorAndDS(port, logFile, config);
+
+ InternalDistributedSystem system = (InternalDistributedSystem) locator.getDistributedSystem();
+
+ await().untilAsserted(() -> assertThat(logFile).exists());
+
+ // assertThat logFile is not empty
+ try (FileInputStream fis = new FileInputStream(logFile)) {
+ assertThat(fis.available()).isGreaterThan(0);
+ }
+
+ DistributionConfig distributionConfig = system.getConfig();
+
+ assertThat(distributionConfig.getLogLevel())
+ .isEqualTo(LogWriterLevel.CONFIG.getLogWriterLevel());
+ assertThat(distributionConfig.getSecurityLogLevel())
+ .isEqualTo(LogWriterLevel.CONFIG.getLogWriterLevel());
+
+ assertThat(distributionConfig.getLogFile().getAbsolutePath()).isEqualTo(logFileName);
+ assertThat(distributionConfig.getSecurityLogFile().getAbsolutePath())
+ .isEqualTo(securityLogFile.getAbsolutePath());
+
+ assertThat(system.getLogWriter()).isInstanceOf(LogWriterLogger.class);
+ assertThat(system.getSecurityLogWriter()).isInstanceOf(LogWriterLogger.class);
+
+ LogWriterLogger logWriterLogger = (LogWriterLogger) system.getLogWriter();
+ LogWriterLogger securityLogWriterLogger = (LogWriterLogger) system.getSecurityLogWriter();
+
+ assertThat(logWriterLogger.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+ assertThat(securityLogWriterLogger.getLogWriterLevel())
+ .isEqualTo(LogWriterLevel.INFO.getLogWriterLevel());
+
+ assertThat(securityLogFile).doesNotExist();
+ }
+}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogLevelChangesWithCacheIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogLevelChangesWithCacheIntegrationTest.java
deleted file mode 100644
index 81d1b34..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogLevelChangesWithCacheIntegrationTest.java
+++ /dev/null
@@ -1,150 +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.geode.internal.logging;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
-import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_LOG_LEVEL;
-import static org.apache.geode.internal.logging.LogWriterLevel.INFO;
-import static org.apache.geode.internal.logging.LogWriterLevel.WARNING;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.Properties;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for log level control using {@link DistributionConfig} with lifecycle of
- * {@link Cache}.
- */
-@Category(LoggingTest.class)
-public class LogLevelChangesWithCacheIntegrationTest {
-
- private static final String APPLICATION_LOGGER_NAME = "com.application";
-
- private InternalCache cache;
- private Logger geodeLogger;
- private Logger applicationLogger;
- private InternalLogWriter mainLogWriter;
- private InternalLogWriter securityLogWriter;
- private DistributionConfig distributionConfig;
- private LogConfig logConfig;
-
- @Before
- public void setUp() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_LEVEL, "INFO");
- config.setProperty(SECURITY_LOG_LEVEL, "INFO");
-
- cache = (InternalCache) new CacheFactory(config).create();
- InternalDistributedSystem system = cache.getInternalDistributedSystem();
-
- distributionConfig = system.getConfig();
- logConfig = system.getLogConfig();
-
- mainLogWriter = (InternalLogWriter) cache.getLogger();
- securityLogWriter = (InternalLogWriter) cache.getSecurityLogger();
-
- geodeLogger = LogService.getLogger();
- applicationLogger = LogManager.getLogger(APPLICATION_LOGGER_NAME);
- }
-
- @After
- public void tearDown() throws Exception {
- if (cache != null) {
- cache.close();
- }
- }
-
- @Test
- public void mainLogWriterLogLevelIsInfo() {
- assertThat(mainLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void securityLogWriterLogLevelIsInfo() {
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void changesMainLogWriterLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(mainLogWriter.getLogWriterLevel()).isEqualTo(WARNING.intLevel());
- }
-
- @Test
- public void changesDistributionConfigLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(WARNING.intLevel());
- }
-
- @Test
- public void changesLogConfigLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(logConfig.getLogLevel()).isEqualTo(WARNING.intLevel());
- }
-
- @Test
- public void doesNotChangeSecurityLogWriterLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void doesNotChangeDistributionConfigSecurityLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void doesNotChangeLogConfigSecurityLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(logConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void changesGeodeLoggerLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.WARN);
- }
-
- @Test
- public void doesNotChangeApplicationLoggerLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogLevelChangesWithDistributedSystemIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogLevelChangesWithDistributedSystemIntegrationTest.java
deleted file mode 100644
index 260c2cf..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogLevelChangesWithDistributedSystemIntegrationTest.java
+++ /dev/null
@@ -1,167 +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.geode.internal.logging;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
-import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_LOG_LEVEL;
-import static org.apache.geode.internal.logging.LogWriterLevel.INFO;
-import static org.apache.geode.internal.logging.LogWriterLevel.WARNING;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.Properties;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for log level control using {@link DistributionConfig} with lifecycle of
- * {@link DistributedSystem}.
- */
-@Category(LoggingTest.class)
-public class LogLevelChangesWithDistributedSystemIntegrationTest {
-
- private static final String APPLICATION_LOGGER_NAME = "com.application";
-
- private InternalDistributedSystem system;
- private Logger geodeLogger;
- private Logger applicationLogger;
- private InternalLogWriter mainLogWriter;
- private InternalLogWriter securityLogWriter;
- private DistributionConfig distributionConfig;
- private LogConfig logConfig;
-
- @Before
- public void setUp() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_LEVEL, "INFO");
- config.setProperty(SECURITY_LOG_LEVEL, "INFO");
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- distributionConfig = system.getConfig();
- logConfig = system.getLogConfig();
-
- mainLogWriter = (InternalLogWriter) system.getLogWriter();
- securityLogWriter = (InternalLogWriter) system.getSecurityLogWriter();
-
- geodeLogger = LogService.getLogger();
- applicationLogger = LogManager.getLogger(APPLICATION_LOGGER_NAME);
- }
-
- @After
- public void tearDown() throws Exception {
- if (system != null) {
- system.disconnect();
- }
- }
-
- @Test
- public void distributionConfigLogLevelIsInfo() {
- assertThat(distributionConfig.getLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void distributionConfigSecurityLogLevelIsInfo() {
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void logConfigLogLevelIsInfo() {
- assertThat(logConfig.getLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void logConfigSecurityLogLevelIsInfo() {
- assertThat(logConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void mainLogWriterLevelIsInfo() {
- assertThat(mainLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void securityLogWriterLevelIsInfo() {
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void changesMainLogWriterLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(mainLogWriter.getLogWriterLevel()).isEqualTo(WARNING.intLevel());
- }
-
- @Test
- public void changesDistributionConfigLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(WARNING.intLevel());
- }
-
- @Test
- public void changesLogConfigLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(logConfig.getLogLevel()).isEqualTo(WARNING.intLevel());
- }
-
- @Test
- public void doesNotChangeSecurityLogWriterLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void doesNotChangeDistributionConfigSecurityLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void doesNotChangeLogConfigSecurityLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(logConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
- }
-
- @Test
- public void changesGeodeLoggerLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.WARN);
- }
-
- @Test
- public void doesNotChangeApplicationLoggerLogLevel() {
- distributionConfig.setLogLevel(WARNING.intLevel());
-
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogServiceIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogServiceIntegrationTest.java
new file mode 100755
index 0000000..33fbce5
--- /dev/null
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LogServiceIntegrationTest.java
@@ -0,0 +1,236 @@
+/*
+ * 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.geode.internal.logging;
+
+import static org.apache.geode.internal.logging.LogServiceIntegrationTestSupport.writeConfigFile;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.File;
+import java.net.URL;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.config.ConfigurationFactory;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.SystemErrRule;
+import org.junit.contrib.java.lang.system.SystemOutRule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.ExternalResource;
+import org.junit.rules.TemporaryFolder;
+
+import org.apache.geode.internal.logging.log4j.Configurator;
+import org.apache.geode.test.junit.categories.LoggingTest;
+
+/**
+ * Integration tests for LogService and how it configures and uses log4j2
+ */
+@Category(LoggingTest.class)
+public class LogServiceIntegrationTest {
+
+ private static final String DEFAULT_CONFIG_FILE_NAME = "log4j2.xml";
+ private static final String CLI_CONFIG_FILE_NAME = "log4j2-cli.xml";
+
+ @Rule
+ public SystemErrRule systemErrRule = new SystemErrRule().enableLog();
+
+ @Rule
+ public SystemOutRule systemOutRule = new SystemOutRule().enableLog();
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Rule
+ public ExternalResource externalResource = new ExternalResource() {
+ @Override
+ protected void before() {
+ beforeConfigFileProp = System.getProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ beforeLevel = StatusLogger.getLogger().getLevel();
+
+ System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ StatusLogger.getLogger().setLevel(Level.OFF);
+
+ Configurator.shutdown();
+ }
+
+ @Override
+ protected void after() {
+ Configurator.shutdown();
+
+ System.clearProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+ if (beforeConfigFileProp != null) {
+ System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY, beforeConfigFileProp);
+ }
+ StatusLogger.getLogger().setLevel(beforeLevel);
+
+ LogService.reconfigure();
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isTrue();
+ }
+ };
+
+ private String beforeConfigFileProp;
+ private Level beforeLevel;
+
+ private URL defaultConfigUrl;
+ private URL cliConfigUrl;
+
+ @Before
+ public void setUp() {
+ defaultConfigUrl = LogService.class.getResource(LogService.DEFAULT_CONFIG);
+ cliConfigUrl = LogService.class.getResource(LogService.CLI_CONFIG);
+ }
+
+ @After
+ public void after() {
+ // if either of these fail then log4j2 probably logged a failure to stdout
+ assertThat(systemErrRule.getLog()).isEmpty();
+ assertThat(systemOutRule.getLog()).isEmpty();
+ }
+
+ @Test
+ public void shouldPreferConfigurationFilePropertyIfSet() throws Exception {
+ File configFile = temporaryFolder.newFile(DEFAULT_CONFIG_FILE_NAME);
+ String configFileName = configFile.toURI().toString();
+ System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY, configFileName);
+ writeConfigFile(configFile, Level.DEBUG);
+
+ LogService.reconfigure();
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isFalse();
+ assertThat(System.getProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY))
+ .isEqualTo(configFileName);
+ assertThat(LogService.getLogger().getName()).isEqualTo(getClass().getName());
+ }
+
+ @Test
+ public void shouldUseDefaultConfigIfNotConfigured() {
+ LogService.reconfigure();
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isTrue();
+ assertThat(System.getProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY))
+ .isNullOrEmpty();
+ }
+
+ @Test
+ public void defaultConfigShouldIncludeStdout() {
+ LogService.reconfigure();
+ Logger rootLogger = (Logger) LogService.getRootLogger();
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isTrue();
+ assertThat(rootLogger.getAppenders().get(LogService.STDOUT)).isNotNull();
+ }
+
+ @Test
+ public void removeConsoleAppenderShouldRemoveStdout() {
+ LogService.reconfigure();
+ Logger rootLogger = (Logger) LogService.getRootLogger();
+
+ LogService.removeConsoleAppender();
+
+ assertThat(rootLogger.getAppenders().get(LogService.STDOUT)).isNull();
+ }
+
+ @Test
+ public void restoreConsoleAppenderShouldRestoreStdout() {
+ LogService.reconfigure();
+ Logger rootLogger = (Logger) LogService.getRootLogger();
+
+ LogService.removeConsoleAppender();
+
+ assertThat(rootLogger.getAppenders().get(LogService.STDOUT)).isNull();
+
+ LogService.restoreConsoleAppender();
+
+ assertThat(rootLogger.getAppenders().get(LogService.STDOUT)).isNotNull();
+ }
+
+ @Test
+ public void removeAndRestoreConsoleAppenderShouldAffectRootLogger() {
+ LogService.reconfigure();
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isTrue();
+
+ Logger rootLogger = (Logger) LogService.getRootLogger();
+
+ // assert "Console" is present for ROOT
+ Appender appender = rootLogger.getAppenders().get(LogService.STDOUT);
+ assertThat(appender).isNotNull();
+
+ LogService.removeConsoleAppender();
+
+ // assert "Console" is not present for ROOT
+ appender = rootLogger.getAppenders().get(LogService.STDOUT);
+ assertThat(appender).isNull();
+
+ LogService.restoreConsoleAppender();
+
+ // assert "Console" is present for ROOT
+ appender = rootLogger.getAppenders().get(LogService.STDOUT);
+ assertThat(appender).isNotNull();
+ }
+
+ @Test
+ public void shouldNotUseDefaultConfigIfCliConfigSpecified() {
+ System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
+ cliConfigUrl.toString());
+
+ LogService.reconfigure();
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isFalse();
+ assertThat(System.getProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY))
+ .isEqualTo(cliConfigUrl.toString());
+ assertThat(LogService.getLogger().getName()).isEqualTo(getClass().getName());
+ }
+
+ @Test
+ public void isUsingGemFireDefaultConfigShouldBeTrueIfDefaultConfig() {
+ System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
+ defaultConfigUrl.toString());
+
+ assertThat(LogService.getConfiguration().getConfigurationSource().toString())
+ .contains(DEFAULT_CONFIG_FILE_NAME);
+ assertThat(LogService.isUsingGemFireDefaultConfig()).isTrue();
+ }
+
+ @Test
+ public void isUsingGemFireDefaultConfigShouldBeFalseIfCliConfig() {
+ System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
+ cliConfigUrl.toString());
+
+ assertThat(LogService.getConfiguration().getConfigurationSource().toString())
+ .doesNotContain(DEFAULT_CONFIG_FILE_NAME);
+ assertThat(LogService.isUsingGemFireDefaultConfig()).isFalse();
+ }
+
+ @Test
+ public void shouldUseCliConfigIfCliConfigIsSpecifiedViaClasspath() {
+ System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
+ "classpath:" + CLI_CONFIG_FILE_NAME);
+
+ assertThat(LogService.getConfiguration().getConfigurationSource().toString())
+ .contains(CLI_CONFIG_FILE_NAME);
+ assertThat(LogService.isUsingGemFireDefaultConfig()).isFalse();
+ }
+}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithDistributedSystemIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithDistributedSystemIntegrationTest.java
deleted file mode 100755
index 4880f5c..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithDistributedSystemIntegrationTest.java
+++ /dev/null
@@ -1,1597 +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.geode.internal.logging;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
-import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_LOG_FILE;
-import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_LOG_LEVEL;
-import static org.apache.geode.internal.logging.LogWriterLevel.CONFIG;
-import static org.apache.geode.internal.logging.LogWriterLevel.ERROR;
-import static org.apache.geode.internal.logging.LogWriterLevel.FINE;
-import static org.apache.geode.internal.logging.LogWriterLevel.FINER;
-import static org.apache.geode.internal.logging.LogWriterLevel.FINEST;
-import static org.apache.geode.internal.logging.LogWriterLevel.INFO;
-import static org.apache.geode.internal.logging.LogWriterLevel.SEVERE;
-import static org.apache.geode.internal.logging.LogWriterLevel.WARNING;
-import static org.apache.geode.internal.logging.log4j.Log4jAgent.getLoggerConfig;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.util.Properties;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.LogWriter;
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.logging.log4j.FastLogger;
-import org.apache.geode.internal.logging.log4j.Log4jAgent;
-import org.apache.geode.internal.logging.log4j.LogWriterLogger;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for logging with {@link InternalDistributedSystem} lifecycle.
- */
-@Category(LoggingTest.class)
-public class LoggingWithDistributedSystemIntegrationTest {
-
- private static final String APPLICATION_LOGGER_NAME = "com.application";
- private static final AtomicInteger COUNTER = new AtomicInteger();
-
- private String currentWorkingDirPath;
- private File mainLogFile;
- private String mainLogFilePath;
- private File securityLogFile;
- private String securityLogFilePath;
- private InternalDistributedSystem system;
- private String prefix;
-
- private Logger geodeLogger;
- private Logger applicationLogger;
-
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public TestName testName = new TestName();
-
- @Before
- public void setUp() {
- File currentWorkingDir = new File("");
- currentWorkingDirPath = currentWorkingDir.getAbsolutePath();
-
- String name = testName.getMethodName();
- mainLogFile = new File(temporaryFolder.getRoot(), name + "-main.log");
- mainLogFilePath = mainLogFile.getAbsolutePath();
- securityLogFile = new File(temporaryFolder.getRoot(), name + "-security.log");
- securityLogFilePath = securityLogFile.getAbsolutePath();
-
- prefix = "ExpectedStrings: " + testName.getMethodName() + " message logged at level ";
-
- geodeLogger = LogService.getLogger();
- applicationLogger = LogManager.getLogger(APPLICATION_LOGGER_NAME);
-
- Log4jAgent.updateLogLevel(Level.INFO, getLoggerConfig(applicationLogger));
- }
-
- @After
- public void tearDown() throws Exception {
- if (system != null) {
- system.disconnect();
- }
- }
-
- @Test
- public void applicationLoggerLevelIsInfo() {
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
- }
-
- @Test
- public void defaultConfigForLogging() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- LogConfig logConfig = system.getLogConfig();
-
- assertThat(logConfig.getName()).isEqualTo("");
- assertThat(logConfig.getLogFile().getAbsolutePath()).isEqualTo(currentWorkingDirPath);
- assertThat(logConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(logConfig.getLogDiskSpaceLimit()).isEqualTo(0);
- assertThat(logConfig.getLogFileSizeLimit()).isEqualTo(0);
- assertThat(logConfig.getSecurityLogFile().getAbsolutePath()).isEqualTo(currentWorkingDirPath);
- assertThat(logConfig.getSecurityLogLevel()).isEqualTo(CONFIG.intLevel());
- }
-
- @Test
- public void bothLogFilesConfigured() throws Exception {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(SECURITY_LOG_FILE, securityLogFilePath);
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriterLogger = (LogWriterLogger) system.getLogWriter();
- LogWriterLogger securityLogWriterLogger = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> {
- system.getLogWriter().info("log another line");
-
- assertThat(mainLogFile).exists();
- assertThat(securityLogFile).exists();
-
- // assertThat mainLogFile is not empty
- try (FileInputStream fis = new FileInputStream(mainLogFile)) {
- assertThat(fis.available()).isGreaterThan(0);
- }
- });
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(CONFIG.intLevel());
-
- assertThat(distributionConfig.getLogFile().getAbsolutePath()).isEqualTo(mainLogFilePath);
- assertThat(distributionConfig.getSecurityLogFile().getAbsolutePath())
- .isEqualTo(securityLogFilePath);
-
- assertThat(system.getLogWriter()).isInstanceOf(LogWriterLogger.class);
- assertThat(system.getSecurityLogWriter()).isInstanceOf(LogWriterLogger.class);
-
- assertThat(logWriterLogger.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- assertThat(securityLogWriterLogger.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- securityLogWriterLogger.info("test: security log file created at info");
-
- // assertThat securityLogFile is not empty
- try (FileInputStream fis = new FileInputStream(securityLogFile)) {
- assertThat(fis.available()).isGreaterThan(0);
- }
-
- LogWriter logWriter = logWriterLogger;
- assertThat(logWriter.finestEnabled()).isFalse();
- assertThat(logWriter.finerEnabled()).isFalse();
- assertThat(logWriter.fineEnabled()).isFalse();
- assertThat(logWriter.configEnabled()).isTrue();
- assertThat(logWriter.infoEnabled()).isTrue();
- assertThat(logWriter.warningEnabled()).isTrue();
- assertThat(logWriter.errorEnabled()).isTrue();
- assertThat(logWriter.severeEnabled()).isTrue();
-
- FastLogger logWriterFastLogger = logWriterLogger;
- assertThat(logWriterFastLogger.isDelegating()).isFalse();
- assertThat(logWriterFastLogger.isTraceEnabled()).isFalse();
- assertThat(logWriterFastLogger.isDebugEnabled()).isFalse();
- assertThat(logWriterFastLogger.isInfoEnabled()).isTrue();
- assertThat(logWriterFastLogger.isWarnEnabled()).isTrue();
- assertThat(logWriterFastLogger.isErrorEnabled()).isTrue();
- assertThat(logWriterFastLogger.isFatalEnabled()).isTrue();
-
- LogWriter securityLogWriter = securityLogWriterLogger;
- assertThat(securityLogWriter.finestEnabled()).isFalse();
- assertThat(securityLogWriter.finerEnabled()).isFalse();
- assertThat(securityLogWriter.fineEnabled()).isFalse();
- assertThat(securityLogWriter.configEnabled()).isTrue();
- assertThat(securityLogWriter.infoEnabled()).isTrue();
- assertThat(securityLogWriter.warningEnabled()).isTrue();
- assertThat(securityLogWriter.errorEnabled()).isTrue();
- assertThat(securityLogWriter.severeEnabled()).isTrue();
-
- FastLogger securityLogWriterFastLogger = logWriterLogger;
- assertThat(securityLogWriterFastLogger.isDelegating()).isFalse();
- assertThat(securityLogWriterFastLogger.isTraceEnabled()).isFalse();
- assertThat(securityLogWriterFastLogger.isDebugEnabled()).isFalse();
- assertThat(securityLogWriterFastLogger.isInfoEnabled()).isTrue();
- assertThat(securityLogWriterFastLogger.isWarnEnabled()).isTrue();
- assertThat(securityLogWriterFastLogger.isErrorEnabled()).isTrue();
- assertThat(securityLogWriterFastLogger.isFatalEnabled()).isTrue();
- }
-
- @Test
- public void mainLogWriterLogsToMainLogFile() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // CONFIG level
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- String message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // FINE level
-
- distributionConfig.setLogLevel(FINE.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
-
- message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR level
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(ERROR.intLevel());
-
- message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void securityLogWriterLogsToMainLogFile() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // CONFIG level
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- String message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // FINE level
-
- distributionConfig.setLogLevel(FINE.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR level
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void geodeLoggerLogsToMainLogFile() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // CONFIG level
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.INFO);
-
- String message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // FINE level
-
- distributionConfig.setLogLevel(FINE.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
-
- message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR level
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.ERROR);
-
- message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void applicationLoggerLogsToMainLogFile() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // CONFIG level
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
-
- String message = createMessage(Level.TRACE);
- applicationLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- applicationLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- applicationLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- applicationLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- applicationLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- applicationLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // FINE level
-
- distributionConfig.setLogLevel(FINE.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
-
- message = createMessage(Level.TRACE);
- applicationLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- applicationLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- applicationLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- applicationLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- applicationLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- applicationLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR level
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(applicationLogger.getLevel()).isEqualTo(Level.INFO);
-
- message = createMessage(Level.TRACE);
- applicationLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- applicationLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- applicationLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- applicationLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- applicationLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- applicationLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void mainLogWriterLogsToMainLogFileWithMainLogLevelFine() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // FINE level
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
-
- String message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR level
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(ERROR.intLevel());
-
- message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void securityLogWriterLogsToMainLogFileWithMainLogLevelFine() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- String message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void geodeLoggerLogsToMainLogFileWithMainLogLevelFine() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // FINE level
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
-
- String message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR level
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.ERROR);
-
- message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void mainLogWriterLogsToMainLogFileWithMainLogLevelDebug() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, Level.DEBUG.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // DEBUG LEVEL
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
-
- String message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR LEVEL
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(ERROR.intLevel());
-
- message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void securityLogWriterLogsToMainLogFileWithMainLogLevelDebug() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, Level.DEBUG.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- String message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void geodeLoggerLogsToMainLogFileWithMainLogLevelDebug() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, Level.DEBUG.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- // DEBUG LEVEL
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
-
- String message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- // ERROR LEVEL
-
- distributionConfig.setLogLevel(ERROR.intLevel());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(ERROR.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.ERROR);
-
- message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void logsToDifferentLogFilesWithMainLogLevelFine() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
- config.setProperty(SECURITY_LOG_FILE, securityLogFilePath);
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
- LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> {
- assertThat(mainLogFile).exists();
- assertThat(securityLogFile).exists();
- });
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(CONFIG.intLevel());
-
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
-
- String message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(securityLogFile).contains(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- @Test
- public void logsToDifferentLogFilesWithBothLogLevelsFine() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
- config.setProperty(SECURITY_LOG_FILE, securityLogFilePath);
- config.setProperty(SECURITY_LOG_LEVEL, FINE.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
- LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> {
- assertThat(mainLogFile).exists();
- assertThat(securityLogFile).exists();
- });
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(FINE.intLevel());
-
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
-
- String message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(securityLogFile).contains(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(securityLogFile).contains(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(securityLogFile).contains(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(securityLogFile).contains(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(securityLogFile).contains(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(securityLogFile).contains(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(securityLogFile).doesNotContain(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- /**
- * tests scenario where security log has not been set but a level has been set to a less granular
- * level than that of the regular log. Verifies that the correct logs for security show up in the
- * regular log as expected
- */
- @Test
- public void mainLogWriterLogsToMainLogFileWithHigherSecurityLogLevel() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
- config.setProperty(SECURITY_LOG_LEVEL, INFO.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
-
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
-
- String message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- /**
- * tests scenario where security log has not been set but a level has been set to a less granular
- * level than that of the regular log. Verifies that the correct logs for security show up in the
- * regular log as expected
- */
- @Test
- public void securityLogWriterLogsToMainLogFileWithHigherSecurityLogLevel() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
- config.setProperty(SECURITY_LOG_LEVEL, INFO.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
-
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- String message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- /**
- * tests scenario where security log has not been set but a level has been set to a less granular
- * level than that of the regular log. Verifies that the correct logs for security show up in the
- * regular log as expected
- */
- @Test
- public void geodeLoggerLogsToMainLogFileWithHigherSecurityLogLevel() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, FINE.name());
- config.setProperty(SECURITY_LOG_LEVEL, INFO.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(FINE.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(INFO.intLevel());
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.DEBUG);
-
- String message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- /**
- * tests scenario where security log has not been set but a level has been set to a more granular
- * level than that of the regular log. Verifies that the correct logs for security show up in the
- * regular log as expected
- */
- @Test
- public void mainLogWriterLogsToMainLogFileWithLowerSecurityLogLevel() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, INFO.name());
- config.setProperty(SECURITY_LOG_LEVEL, FINE.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger logWriter = (LogWriterLogger) system.getLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(INFO.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(FINE.intLevel());
-
- assertThat(logWriter.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- String message = createMessage(FINEST);
- logWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- logWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- logWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(CONFIG);
- logWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- logWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- logWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- logWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- logWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- /**
- * tests scenario where security log has not been set but a level has been set to a more granular
- * level than that of the regular log. Verifies that the correct logs for security show up in the
- * regular log as expected
- */
- @Test
- public void securityLogWriterLogsToMainLogFileWithLowerSecurityLogLevel() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, INFO.name());
- config.setProperty(SECURITY_LOG_LEVEL, FINE.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
- LogWriterLogger securityLogWriter = (LogWriterLogger) system.getSecurityLogWriter();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(INFO.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(FINE.intLevel());
-
- assertThat(securityLogWriter.getLogWriterLevel()).isEqualTo(FINE.intLevel());
-
- String message = createMessage(FINEST);
- securityLogWriter.finest(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINER);
- securityLogWriter.finer(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(FINE);
- securityLogWriter.fine(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(CONFIG);
- securityLogWriter.config(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(INFO);
- securityLogWriter.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(WARNING);
- securityLogWriter.warning(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(ERROR);
- securityLogWriter.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(SEVERE);
- securityLogWriter.severe(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- /**
- * tests scenario where security log has not been set but a level has been set to a more granular
- * level than that of the regular log. Verifies that the correct logs for security show up in the
- * regular log as expected
- */
- @Test
- public void geodeLoggerLogsToMainLogFileWithLowerSecurityLogLevel() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFilePath);
- config.setProperty(LOG_LEVEL, INFO.name());
- config.setProperty(SECURITY_LOG_LEVEL, FINE.name());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- DistributionConfig distributionConfig = system.getConfig();
-
- await().untilAsserted(() -> assertThat(mainLogFile).exists());
-
- assertThat(distributionConfig.getLogLevel()).isEqualTo(INFO.intLevel());
- assertThat(distributionConfig.getSecurityLogLevel()).isEqualTo(FINE.intLevel());
-
- assertThat(geodeLogger.getLevel()).isEqualTo(Level.INFO);
-
- String message = createMessage(Level.TRACE);
- geodeLogger.trace(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.DEBUG);
- geodeLogger.debug(message);
- LogFileAssert.assertThat(mainLogFile).doesNotContain(message);
-
- message = createMessage(Level.INFO);
- geodeLogger.info(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.WARN);
- geodeLogger.warn(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.ERROR);
- geodeLogger.error(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
-
- message = createMessage(Level.FATAL);
- geodeLogger.fatal(message);
- LogFileAssert.assertThat(mainLogFile).contains(message);
- }
-
- private String createMessage(LogWriterLevel logLevel) {
- return prefix + logLevel.name() + " [" + COUNTER.incrementAndGet() + "]";
- }
-
- private String createMessage(Level level) {
- return prefix + level.name() + " [" + COUNTER.incrementAndGet() + "]";
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithLocatorIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithLocatorIntegrationTest.java
deleted file mode 100644
index cd1ed35..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithLocatorIntegrationTest.java
+++ /dev/null
@@ -1,207 +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.geode.internal.logging;
-
-import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.internal.logging.LogWriterLevel.CONFIG;
-import static org.apache.geode.internal.logging.LogWriterLevel.INFO;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.util.Properties;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.distributed.Locator;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.AvailablePort;
-import org.apache.geode.internal.logging.log4j.LogWriterLogger;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for logging with {@link InternalLocator} lifecycle.
- */
-@Category(LoggingTest.class)
-public class LoggingWithLocatorIntegrationTest {
-
- private String name;
- private int port;
- private String currentWorkingDirPath;
- private File logFile;
- private File securityLogFile;
-
- private InternalLocator locator;
-
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public TestName testName = new TestName();
-
- @Before
- public void setUp() throws Exception {
- name = testName.getMethodName();
-
- File currentWorkingDir = new File("");
- currentWorkingDirPath = currentWorkingDir.getAbsolutePath();
- logFile = new File(temporaryFolder.getRoot(),
- testName.getMethodName() + "-system-" + System.currentTimeMillis() + ".log");
- securityLogFile = new File("");
-
- port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
- }
-
- @After
- public void tearDown() {
- if (locator != null) {
- locator.stop();
- }
- }
-
- @Test
- public void startLocatorDefaultLoggingConfig() throws Exception {
- Properties config = new Properties();
-
- locator = InternalLocator.startLocator(port, null, null, null, null, false, config, null);
-
- LogConfig logConfig = locator.getLogConfig();
-
- assertThat(logConfig.getName()).isEqualTo("");
- assertThat(logConfig.getLogFile().getAbsolutePath()).isEqualTo(currentWorkingDirPath);
- assertThat(logConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(logConfig.getLogDiskSpaceLimit()).isEqualTo(0);
- assertThat(logConfig.getLogFileSizeLimit()).isEqualTo(0);
- assertThat(logConfig.getSecurityLogFile().getAbsolutePath())
- .isEqualTo(currentWorkingDirPath);
- assertThat(logConfig.getSecurityLogLevel()).isEqualTo(CONFIG.intLevel());
- }
-
- @Test
- public void startLocatorDefaultLoggingConfigWithLogFile() throws Exception {
- Properties config = new Properties();
-
- locator = InternalLocator.startLocator(port, logFile, null, null, null, false, config, null);
-
- LogConfig logConfig = locator.getLogConfig();
-
- assertThat(logConfig.getName()).isEqualTo("");
- assertThat(logConfig.getLogFile().getAbsolutePath()).isEqualTo(logFile.getAbsolutePath());
- assertThat(logConfig.getLogLevel()).isEqualTo(CONFIG.intLevel());
- assertThat(logConfig.getLogDiskSpaceLimit()).isEqualTo(0);
- assertThat(logConfig.getLogFileSizeLimit()).isEqualTo(0);
- assertThat(logConfig.getSecurityLogFile().getAbsolutePath())
- .isEqualTo(currentWorkingDirPath);
- assertThat(logConfig.getSecurityLogLevel()).isEqualTo(CONFIG.intLevel());
- }
-
- @Test
- public void startLocatorAndDSCreatesLogFile() throws Exception {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "localhost[" + port + "]");
- config.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
-
- locator = (InternalLocator) Locator.startLocatorAndDS(port, logFile, config);
-
- await().untilAsserted(() -> assertThat(logFile).exists());
-
- // assertThat logFile is not empty
- try (FileInputStream fis = new FileInputStream(logFile)) {
- assertThat(fis.available()).isGreaterThan(0);
- }
-
- InternalDistributedSystem system = (InternalDistributedSystem) locator.getDistributedSystem();
-
- assertThat(system.getLogWriter()).isInstanceOf(LogWriterLogger.class);
- assertThat(system.getSecurityLogWriter()).isInstanceOf(LogWriterLogger.class);
-
- LogWriterLogger logWriterLogger = (LogWriterLogger) system.getLogWriter();
- LogWriterLogger securityLogWriterLogger = (LogWriterLogger) system.getSecurityLogWriter();
-
- assertThat(logWriterLogger.getLogWriterLevel()).isEqualTo(INFO.intLevel());
- assertThat(securityLogWriterLogger.getLogWriterLevel()).isEqualTo(INFO.intLevel());
-
- DistributionConfig distributionConfig = system.getConfig();
-
- assertThat(distributionConfig.getLogFile().getAbsolutePath())
- .isEqualTo(logFile.getAbsolutePath());
- assertThat(distributionConfig.getSecurityLogFile().getAbsolutePath())
- .isEqualTo(currentWorkingDirPath);
-
- assertThat(securityLogFile).doesNotExist();
- }
-
- @Test
- public void locatorWithNoDS() throws Exception {
- Properties config = new Properties();
- config.setProperty(NAME, name);
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
-
- locator = InternalLocator.startLocator(port, null, null, null, null, false, config, null);
- Logger logger = LogService.getLogger();
-
- // assert that logging goes to logFile
- String logMessageBeforeClose = "Logging before locator is stopped in " + name;
- logger.info(logMessageBeforeClose);
-
- LogFileAssert.assertThat(logFile).contains(logMessageBeforeClose);
-
- locator.stop();
-
- // assert that logging stops going to logFile
- String logMessageAfterClose = "Logging after locator is stopped in " + name;
- logger.info(logMessageAfterClose);
- LogFileAssert.assertThat(logFile).doesNotContain(logMessageAfterClose);
- }
-
- @Test
- public void locatorWithDS() throws Exception {
- Properties config = new Properties();
- config.setProperty(NAME, name);
- config.setProperty(LOG_FILE, logFile.getAbsolutePath());
- config.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
-
- locator = (InternalLocator) InternalLocator.startLocatorAndDS(port, null, config);
- Logger logger = LogService.getLogger();
-
- // assert that logging goes to logFile
- String logMessageBeforeClose = "Logging before locator is stopped in " + name;
- logger.info(logMessageBeforeClose);
-
- LogFileAssert.assertThat(logFile).contains(logMessageBeforeClose);
-
- locator.stop();
-
- // assert that logging stops going to logFile
- String logMessageAfterClose = "Logging after locator is stopped in " + name;
- logger.info(logMessageAfterClose);
- LogFileAssert.assertThat(logFile).doesNotContain(logMessageAfterClose);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithLocatorLauncherIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithLocatorLauncherIntegrationTest.java
deleted file mode 100644
index 50d318a..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithLocatorLauncherIntegrationTest.java
+++ /dev/null
@@ -1,65 +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.geode.internal.logging;
-
-import static org.apache.geode.internal.Banner.BannerHeader.displayValues;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.distributed.LocatorLauncher;
-import org.apache.geode.distributed.LocatorLauncherIntegrationTestCase;
-import org.apache.geode.internal.process.ProcessControllerFactory;
-import org.apache.geode.internal.process.ProcessType;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests of logging with {@link LocatorLauncher}.
- */
-@Category(LoggingTest.class)
-public class LoggingWithLocatorLauncherIntegrationTest extends LocatorLauncherIntegrationTestCase {
-
- @Before
- public void setUp() throws Exception {
- System.setProperty(ProcessType.PROPERTY_TEST_PREFIX, getUniqueName() + "-");
- assertThat(new ProcessControllerFactory().isAttachAPIFound()).isTrue();
-
- givenRunningLocator();
- }
-
- @After
- public void tearDown() throws Exception {
- disconnectFromDS();
- }
-
- @Test
- public void logFileExists() {
- assertThat(getLogFile()).exists();
- }
-
- @Test
- public void logFileContainsBanner() {
- LogFileAssert.assertThat(getLogFile()).contains(displayValues());
- }
-
- @Test
- public void logFileContainsBannerOnlyOnce() {
- LogFileAssert.assertThat(getLogFile()).containsOnlyOnce(displayValues());
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithServerLauncherIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithServerLauncherIntegrationTest.java
deleted file mode 100644
index 182e1c4..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/LoggingWithServerLauncherIntegrationTest.java
+++ /dev/null
@@ -1,65 +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.geode.internal.logging;
-
-import static org.apache.geode.internal.Banner.BannerHeader.displayValues;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.distributed.ServerLauncher;
-import org.apache.geode.distributed.ServerLauncherIntegrationTestCase;
-import org.apache.geode.internal.process.ProcessControllerFactory;
-import org.apache.geode.internal.process.ProcessType;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests of logging with {@link ServerLauncher}.
- */
-@Category(LoggingTest.class)
-public class LoggingWithServerLauncherIntegrationTest extends ServerLauncherIntegrationTestCase {
-
- @Before
- public void setUp() throws Exception {
- System.setProperty(ProcessType.PROPERTY_TEST_PREFIX, getUniqueName() + "-");
- assertThat(new ProcessControllerFactory().isAttachAPIFound()).isTrue();
-
- givenRunningServer();
- }
-
- @After
- public void tearDown() throws Exception {
- disconnectFromDS();
- }
-
- @Test
- public void logFileExists() {
- assertThat(getLogFile()).exists();
- }
-
- @Test
- public void logFileContainsBanner() {
- LogFileAssert.assertThat(getLogFile()).contains(displayValues());
- }
-
- @Test
- public void logFileContainsBannerOnlyOnce() {
- LogFileAssert.assertThat(getLogFile()).containsOnlyOnce(displayValues());
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ManagerLogWriterFactoryIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ManagerLogWriterFactoryIntegrationTest.java
deleted file mode 100644
index d7264f4..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/ManagerLogWriterFactoryIntegrationTest.java
+++ /dev/null
@@ -1,152 +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.geode.internal.logging;
-
-import static org.apache.geode.internal.logging.LogWriterLevel.FINE;
-import static org.apache.geode.internal.logging.LogWriterLevel.WARNING;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.internal.statistics.StatisticsConfig;
-
-/**
- * Integration tests for {@link ManagerLogWriterFactory}.
- */
-public class ManagerLogWriterFactoryIntegrationTest {
-
- private File mainLogFile;
- private String mainLogFilePath;
- private File securityLogFile;
- private String securityLogFilePath;
- private LogConfig mainLogConfig;
- private LogConfig securityLogConfig;
- private StatisticsConfig statisticsConfig;
-
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public TestName testName = new TestName();
-
- @Before
- public void setUp() {
- String name = getClass().getSimpleName() + "_" + testName.getMethodName();
-
- mainLogFile = new File(temporaryFolder.getRoot(), name + "-main.log");
- mainLogFilePath = mainLogFile.getAbsolutePath();
-
- securityLogFile = new File(temporaryFolder.getRoot(), name + "-security.log");
- securityLogFilePath = securityLogFile.getAbsolutePath();
-
- mainLogConfig = mock(LogConfig.class);
- securityLogConfig = mock(LogConfig.class);
- statisticsConfig = mock(StatisticsConfig.class);
-
- when(mainLogConfig.getLogFile()).thenReturn(mainLogFile);
- when(mainLogConfig.getLogLevel()).thenReturn(FINE.intLevel());
-
- when(securityLogConfig.getLogFile()).thenReturn(mainLogFile);
- when(securityLogConfig.getLogLevel()).thenReturn(FINE.intLevel());
- when(securityLogConfig.getSecurityLogFile()).thenReturn(securityLogFile);
- when(securityLogConfig.getSecurityLogLevel()).thenReturn(WARNING.intLevel());
- }
-
- @Test
- public void getLogFileReturnsMainLogFileIfSecurityIsFalse() {
- File logFile = new ManagerLogWriterFactory().setSecurity(false).getLogFile(mainLogConfig);
-
- assertThat(logFile.getAbsolutePath()).isEqualTo(mainLogFilePath);
- }
-
- @Test
- public void getLogFileReturnsSecurityLogFileIfSecurityIsTrue() {
- File logFile = new ManagerLogWriterFactory().setSecurity(true).getLogFile(securityLogConfig);
-
- assertThat(logFile.getAbsolutePath()).isEqualTo(securityLogFilePath);
- }
-
- @Test
- public void getLogLevelReturnsMainLogLevelIfSecurityIsFalse() {
- int level = new ManagerLogWriterFactory().setSecurity(false).getLogLevel(mainLogConfig);
-
- assertThat(level).isEqualTo(FINE.intLevel());
- }
-
- @Test
- public void getLogLevelReturnsSecurityLogLevelIfSecurityIsTrue() {
- int level = new ManagerLogWriterFactory().setSecurity(true).getLogLevel(securityLogConfig);
-
- assertThat(level).isEqualTo(WARNING.intLevel());
- }
-
- @Test
- public void createReturnsManagerLogWriterIfSecurityIsFalse() {
- ManagerLogWriter logWriter =
- new ManagerLogWriterFactory().setSecurity(false).create(mainLogConfig, statisticsConfig);
-
- assertThat(logWriter).isNotInstanceOf(SecurityManagerLogWriter.class);
- }
-
- @Test
- public void createUsesMainLogFileIfSecurityIsFalse() {
- new ManagerLogWriterFactory().setSecurity(false).create(mainLogConfig, statisticsConfig);
-
- assertThat(mainLogFile).exists();
- assertThat(securityLogFile).doesNotExist();
- }
-
- @Test
- public void createReturnsSecurityManagerLogWriterIfSecurityIsTrue() {
- ManagerLogWriter logWriter =
- new ManagerLogWriterFactory().setSecurity(true).create(securityLogConfig, statisticsConfig);
-
- assertThat(logWriter).isInstanceOf(SecurityManagerLogWriter.class);
- }
-
- @Test
- public void createUsesSecurityLogFileIfSecurityIsTrue() {
- new ManagerLogWriterFactory().setSecurity(true).create(securityLogConfig, statisticsConfig);
-
- assertThat(mainLogFile).doesNotExist();
- assertThat(securityLogFile).exists();
- }
-
- @Test
- public void createSetsConfigOnLogWriterIfSecurityIsFalse() {
- ManagerLogWriter logWriter =
- new ManagerLogWriterFactory().setSecurity(false).create(mainLogConfig, statisticsConfig);
-
- assertThat(logWriter.getConfig()).isNotNull();
- assertThat(logWriter.getConfig().getLogFile().getAbsolutePath()).isSameAs(mainLogFilePath);
- }
-
- @Test
- public void createSetsConfigWithSecurityLogFileIfSecurityIsTrue() {
- ManagerLogWriter logWriter =
- new ManagerLogWriterFactory().setSecurity(true).create(securityLogConfig, statisticsConfig);
-
- assertThat(logWriter.getConfig()).isNotNull().isInstanceOf(SecurityLogConfig.class);
- assertThat(logWriter.getConfig().getLogFile().getAbsolutePath()).isSameAs(securityLogFilePath);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/MergeLogFilesIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/MergeLogFilesIntegrationTest.java
index 39fb22d..ba2a293 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/MergeLogFilesIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/MergeLogFilesIntegrationTest.java
@@ -44,7 +44,7 @@ import org.apache.geode.test.dunit.ThreadUtils;
import org.apache.geode.test.junit.categories.LoggingTest;
/**
- * Integration tests for (new multi-threaded) {@link MergeLogFiles} utility.
+ * This class tests the functionality of the (new multi-threaded) {@link MergeLogFiles} utility.
*/
@Category(LoggingTest.class)
public class MergeLogFilesIntegrationTest {
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/NonBlankStrings.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/NonBlankStrings.java
deleted file mode 100644
index d215caf..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/NonBlankStrings.java
+++ /dev/null
@@ -1,27 +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.geode.internal.logging;
-
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-public class NonBlankStrings {
-
- public static List<String> nonBlankStrings(List<String> values) {
- return values.stream().filter(s -> isNotBlank(s)).collect(Collectors.toList());
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/StartupConfigurationLoggingIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/StartupConfigurationLoggingIntegrationTest.java
deleted file mode 100644
index e76b0a0..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/StartupConfigurationLoggingIntegrationTest.java
+++ /dev/null
@@ -1,159 +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.geode.internal.logging;
-
-import static java.lang.System.lineSeparator;
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.internal.logging.Configuration.STARTUP_CONFIGURATION;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.File;
-import java.nio.charset.Charset;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.Banner;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for logging of the startup configuration. Startup configuration consists of
- * {@link Configuration#STARTUP_CONFIGURATION} and {@link DistributionConfig#toLoggerString()}.
- */
-@Category(LoggingTest.class)
-public class StartupConfigurationLoggingIntegrationTest {
-
- private File mainLogFile;
- private InternalDistributedSystem system;
- private String banner;
- private String[] startupConfiguration;
- private Logger geodeLogger;
- private String logMessage;
-
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public TestName testName = new TestName();
-
- @Before
- public void setUp() {
- String name = testName.getMethodName();
- mainLogFile = new File(temporaryFolder.getRoot(), name + "-main.log");
-
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFile.getAbsolutePath());
- config.setProperty(NAME, getClass().getSimpleName() + "_" + testName.getMethodName());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- banner = Banner.getString(null);
-
- DistributionConfig distributionConfig = system.getConfig();
- startupConfiguration = StringUtils
- .split(STARTUP_CONFIGURATION + distributionConfig.toLoggerString(), lineSeparator());
-
- geodeLogger = LogService.getLogger();
- logMessage = "Logging in " + testName.getMethodName();
- }
-
- @After
- public void tearDown() throws Exception {
- if (system != null) {
- system.disconnect();
- }
- }
-
- @Test
- public void startupConfigurationIsLoggedToFile() {
- LogFileAssert.assertThat(mainLogFile).contains(startupConfiguration);
- }
-
- @Test
- public void startupConfigurationIsLoggedToFileOnlyOnce() {
- LogFileAssert.assertThat(mainLogFile).containsOnlyOnce(startupConfiguration);
- }
-
- @Test
- public void startupConfigurationIsLoggedToFileAfterBanner() throws Exception {
- List<String> bannerLines = Arrays.asList(StringUtils.split(banner, lineSeparator()));
- List<String> startupConfigLines = Arrays.asList(startupConfiguration);
- List<String> logLines = FileUtils.readLines(mainLogFile, Charset.defaultCharset());
-
- boolean foundBanner = false;
- boolean foundStartupConfig = false;
-
- for (String line : logLines) {
- if (bannerLines.contains(line)) {
- assertThat(foundStartupConfig)
- .as("Banner should be logged before startup configuration: " + logLines).isFalse();
- foundBanner = true;
- }
- if (startupConfigLines.contains(line)) {
- assertThat(foundBanner)
- .as("Startup configuration should be logged before banner: " + logLines).isTrue();
- foundStartupConfig = true;
- }
- }
-
- assertThat(foundBanner).as("Banner not found in: " + logLines).isTrue();
- assertThat(foundStartupConfig).as("Startup configuration not found in: " + logLines).isTrue();
- }
-
- @Test
- public void startupConfigurationIsLoggedToFileBeforeLogMessage() throws Exception {
- geodeLogger.info(logMessage);
-
- List<String> startupConfigLines = Arrays.asList(startupConfiguration);
- List<String> logLines = FileUtils.readLines(mainLogFile, Charset.defaultCharset());
-
- boolean foundStartupConfig = false;
- boolean foundLogMessage = false;
-
- for (String line : logLines) {
- if (startupConfigLines.contains(line)) {
- assertThat(foundLogMessage)
- .as("Startup configuration should be before log message: " + logLines).isFalse();
- foundStartupConfig = true;
- }
- if (line.contains(logMessage)) {
- assertThat(foundStartupConfig)
- .as("Log message should be after startup configuration: " + logLines).isTrue();
- foundLogMessage = true;
- }
- }
-
- assertThat(foundStartupConfig).as("Startup configuration not found in: " + logLines).isTrue();
- assertThat(foundLogMessage).as("Log message not found in: " + logLines).isTrue();
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/SystemOutRuleAndSystemErrRuleIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/SystemOutRuleAndSystemErrRuleIntegrationTest.java
deleted file mode 100644
index aded0b4..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/SystemOutRuleAndSystemErrRuleIntegrationTest.java
+++ /dev/null
@@ -1,98 +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.geode.internal.logging;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.io.PrintStream;
-
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.contrib.java.lang.system.SystemErrRule;
-import org.junit.contrib.java.lang.system.SystemOutRule;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Verifies behavior of {@code SystemOutRule} and {@code SystemErrRule} that other Geode logging
- * tests depend on. If this behavior changes, then those tests may also need to change.
- */
-@Category(LoggingTest.class)
-public class SystemOutRuleAndSystemErrRuleIntegrationTest {
-
- private static PrintStream systemOutBeforeRule;
- private static PrintStream systemErrBeforeRule;
-
- private PrintStream systemOutAfterRule;
- private PrintStream systemErrAfterRule;
- private String message;
-
- @Rule
- public SystemOutRule systemOutRule = new SystemOutRule().enableLog();
-
- @Rule
- public SystemErrRule systemErrRule = new SystemErrRule().enableLog();
-
- @BeforeClass
- public static void beforeClass() {
- systemOutBeforeRule = System.out;
- systemErrBeforeRule = System.err;
- }
-
- @Before
- public void setUp() {
- systemOutAfterRule = System.out;
- systemErrAfterRule = System.err;
- message = "simple message";
- }
-
- @AfterClass
- public static void afterClass() {
- systemOutBeforeRule = null;
- systemErrBeforeRule = null;
- }
-
- @Test
- public void ruleDoesNotReceiveFromSystemOutBeforeRule() {
- systemOutBeforeRule.println(message);
-
- assertThat(systemOutRule.getLog()).doesNotContain(message);
- }
-
- @Test
- public void ruleDoesReceiveFromSystemOutAfterRule() {
- systemOutAfterRule.println(message);
-
- assertThat(systemOutRule.getLog()).contains(message);
- }
-
- @Test
- public void ruleDoesNotReceiveFromSystemErrBeforeRule() {
- systemErrBeforeRule.println(message);
-
- assertThat(systemErrRule.getLog()).doesNotContain(message);
- }
-
- @Test
- public void ruleDoesReceiveFromSystemErrAfterRule() {
- systemErrAfterRule.println(message);
-
- assertThat(systemErrRule.getLog()).contains(message);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/AlertAppenderIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/AlertAppenderIntegrationTest.java
deleted file mode 100644
index 7b89360..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/AlertAppenderIntegrationTest.java
+++ /dev/null
@@ -1,261 +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.geode.internal.logging.log4j;
-
-import static org.apache.geode.internal.alerting.AlertingProviderRegistry.getNullAlertingProvider;
-import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
-import static org.apache.geode.test.util.ResourceUtils.getResource;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.isNull;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
-
-import java.net.URL;
-import java.util.Date;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.distributed.internal.ClusterDistributionManager;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.alerting.AlertLevel;
-import org.apache.geode.internal.alerting.AlertMessaging;
-import org.apache.geode.internal.alerting.AlertingProviderRegistry;
-import org.apache.geode.internal.alerting.AlertingSession;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.test.junit.categories.AlertingTest;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for {@link AlertAppender}.
- */
-@Category({AlertingTest.class, LoggingTest.class})
-public class AlertAppenderIntegrationTest {
-
- private static final String CONFIG_FILE_NAME = "AlertAppenderIntegrationTest_log4j2.xml";
- private static final String APPENDER_NAME = "ALERT";
-
- private static String configFilePath;
-
- private AlertAppender alertAppender;
- private InternalDistributedMember localMember;
- private AlertingSession alertingSession;
- private AlertMessaging alertMessaging;
- private AlertingProviderRegistry alertingProviderRegistry;
- private Logger logger;
- private String logMessage;
-
- @ClassRule
- public static TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
-
- @Rule
- public TestName testName = new TestName();
-
- @BeforeClass
- public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
- .getAbsolutePath();
- }
-
- @Before
- public void setUp() throws Exception {
- alertAppender =
- loggerContextRule.getAppender(APPENDER_NAME, AlertAppender.class);
-
- InternalDistributedSystem internalDistributedSystem =
- mock(InternalDistributedSystem.class, RETURNS_DEEP_STUBS);
- localMember = mock(InternalDistributedMember.class);
- ClusterDistributionManager clusterDistributionManager = mock(ClusterDistributionManager.class);
-
- when(internalDistributedSystem.getConfig().getName()).thenReturn(testName.getMethodName());
- when(internalDistributedSystem.getDistributedMember()).thenReturn(localMember);
- when(internalDistributedSystem.getDistributionManager()).thenReturn(clusterDistributionManager);
- when(clusterDistributionManager.getSystem()).thenReturn(internalDistributedSystem);
-
- alertingSession = AlertingSession.create();
- alertMessaging = new AlertMessaging(internalDistributedSystem);
- alertingProviderRegistry = AlertingProviderRegistry.get();
-
- alertingSession.createSession(alertMessaging);
- alertingSession.startSession();
-
- logger = LogService.getLogger();
- logMessage = "Logging in " + testName.getMethodName();
- }
-
- @After
- public void tearDown() throws Exception {
- alertingSession.stopSession();
- alertingProviderRegistry.clear();
- alertAppender.clearLogEvents();
- }
-
- @Test
- public void getLogEventsIsEmptyByDefault() {
- assertThat(alertAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void getLogEventsReturnsLoggedEvents() {
- logger.warn(logMessage);
-
- assertThat(alertAppender.getLogEvents()).hasSize(1);
- LogEvent event = alertAppender.getLogEvents().get(0);
- assertThat(event.getLoggerName()).isEqualTo(getClass().getName());
- assertThat(event.getLevel()).isEqualTo(Level.WARN);
- assertThat(event.getMessage().getFormattedMessage()).isEqualTo(logMessage);
- }
-
- @Test
- public void skipsLogEventsWithoutMatchingAlertLevel() {
- // AlertLevelConverter does not convert trace|debug|info Level to AlertLevel
- logger.trace("trace");
- logger.debug("debug");
- logger.info("info");
-
- assertThat(alertAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void pausedDoesNotAppend() {
- alertAppender.pause();
-
- logger.warn(logMessage);
-
- assertThat(alertAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void resumeAfterPausedAppends() {
- alertAppender.pause();
- alertAppender.resume();
-
- logger.warn(logMessage);
-
- assertThat(alertAppender.getLogEvents()).hasSize(1);
- }
-
- @Test
- public void resumeWithoutPauseStillLogs() {
- alertAppender.resume();
-
- logger.warn(logMessage);
-
- assertThat(alertAppender.getLogEvents()).hasSize(1);
- }
-
- @Test
- public void isPausedReturnsTrueAfterPause() {
- alertAppender.pause();
-
- assertThat(alertAppender.isPaused()).isTrue();
- }
-
- @Test
- public void isPausedReturnsFalseAfterResume() {
- alertAppender.pause();
- alertAppender.resume();
-
- assertThat(alertAppender.isPaused()).isFalse();
- }
-
- @Test
- public void resumeWithoutPauseDoesNothing() {
- alertAppender.resume();
-
- assertThat(alertAppender.isPaused()).isFalse();
- }
-
- @Test
- public void isPausedReturnsFalseByDefault() {
- assertThat(alertAppender.isPaused()).isFalse();
- }
-
- @Test
- public void alertMessagingExistsAfterOnConnect() {
- alertAppender.createSession(alertMessaging);
-
- assertThat(alertAppender.getAlertMessaging()).isNotNull();
- }
-
- @Test
- public void alertMessagingDoesNotExistAfterOnDisconnect() {
- alertAppender.createSession(alertMessaging);
- alertAppender.stopSession();
-
- assertThat(alertAppender.getAlertMessaging()).isNull();
- }
-
- @Test
- public void sendsNoAlertsIfNoListeners() {
- alertAppender.createSession(alertMessaging);
- alertMessaging = spy(alertAppender.getAlertMessaging());
- alertAppender.setAlertMessaging(alertMessaging);
-
- logger.warn(logMessage);
-
- assertThat(alertAppender.getLogEvents()).hasSize(1);
- verifyZeroInteractions(alertMessaging);
- }
-
- @Test
- public void sendsAlertIfListenerExists() {
- alertAppender.createSession(alertMessaging);
- alertMessaging = spy(alertAppender.getAlertMessaging());
- alertAppender.setAlertMessaging(alertMessaging);
- alertAppender.addAlertListener(localMember, AlertLevel.WARNING);
-
- logger.warn(logMessage);
-
- assertThat(alertAppender.getLogEvents()).hasSize(1);
- verify(alertMessaging).sendAlert(eq(localMember), eq(AlertLevel.WARNING), any(Date.class),
- anyString(), anyString(), isNull());
- }
-
- @Test
- public void isRegisteredWithAlertingProviderRegistryDuringInitialization() {
- assertThat(alertingProviderRegistry.getAlertingProvider()).isSameAs(alertAppender);
- }
-
- @Test
- public void isUnregisteredWithAlertingProviderRegistryDuringCleanUp() {
- alertAppender.stop();
-
- assertThat(alertingProviderRegistry.getAlertingProvider()).isSameAs(getNullAlertingProvider());
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/BothLogWriterAppendersIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/BothLogWriterAppendersIntegrationTest.java
deleted file mode 100644
index b0d55d2..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/BothLogWriterAppendersIntegrationTest.java
+++ /dev/null
@@ -1,180 +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.geode.internal.logging.log4j;
-
-import static org.apache.geode.internal.logging.Configuration.MAIN_LOGGER_NAME;
-import static org.apache.geode.internal.logging.Configuration.SECURITY_LOGGER_NAME;
-import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
-import static org.apache.geode.test.util.ResourceUtils.getResource;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-import java.net.URL;
-
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.distributed.ConfigurationProperties;
-import org.apache.geode.internal.logging.LogConfig;
-import org.apache.geode.internal.logging.LogConfigSupplier;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.internal.logging.SessionContext;
-import org.apache.geode.internal.statistics.StatisticsConfig;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-import org.apache.geode.test.junit.categories.SecurityTest;
-
-/**
- * Integration tests for main and security {@link LogWriterAppender}s, loggers, and
- * {@link ConfigurationProperties#LOG_FILE} and {@link ConfigurationProperties#SECURITY_LOG_FILE}.
- */
-@Category({LoggingTest.class, SecurityTest.class})
-public class BothLogWriterAppendersIntegrationTest {
-
- private static final String CONFIG_FILE_NAME = "BothLogWriterAppendersIntegrationTest_log4j2.xml";
- private static final String MAIN_APPENDER_NAME = "LOGWRITER";
- private static final String SECURITY_APPENDER_NAME = "SECURITYLOGWRITER";
-
- private static String configFilePath;
-
- private File securityLogFile;
- private Logger mainGeodeLogger;
- private Logger securityGeodeLogger;
- private String logMessage;
- private LogWriterAppender mainLogWriterAppender;
- private LogWriterAppender securityLogWriterAppender;
-
- @ClassRule
- public static TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
-
- @Rule
- public TestName testName = new TestName();
-
- @BeforeClass
- public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
- .getAbsolutePath();
- }
-
- @Before
- public void setUp() throws Exception {
- String name = testName.getMethodName();
- File mainLogFile = new File(temporaryFolder.getRoot(), name + ".log");
- securityLogFile = new File(temporaryFolder.getRoot(), name + "-security.log");
-
- LogConfig logConfig = mock(LogConfig.class);
- when(logConfig.getName()).thenReturn(name);
- when(logConfig.getLogFile()).thenReturn(mainLogFile);
- when(logConfig.getSecurityLogFile()).thenReturn(securityLogFile);
-
- LogConfigSupplier logConfigSupplier = mock(LogConfigSupplier.class);
- when(logConfigSupplier.getLogConfig()).thenReturn(logConfig);
- when(logConfigSupplier.getStatisticsConfig()).thenReturn(mock(StatisticsConfig.class));
-
- SessionContext sessionContext = mock(SessionContext.class);
- when(sessionContext.getLogConfigSupplier()).thenReturn(logConfigSupplier);
-
- mainGeodeLogger = LogService.getLogger(MAIN_LOGGER_NAME);
- securityGeodeLogger = LogService.getLogger(SECURITY_LOGGER_NAME);
-
- logMessage = "Logging in " + testName.getMethodName();
-
- mainLogWriterAppender = loggerContextRule.getAppender(MAIN_APPENDER_NAME,
- LogWriterAppender.class);
- securityLogWriterAppender = loggerContextRule.getAppender(SECURITY_APPENDER_NAME,
- LogWriterAppender.class);
-
- mainLogWriterAppender.createSession(sessionContext);
- mainLogWriterAppender.startSession();
- mainLogWriterAppender.clearLogEvents();
-
- securityLogWriterAppender.createSession(sessionContext);
- securityLogWriterAppender.startSession();
- securityLogWriterAppender.clearLogEvents();
- }
-
- @After
- public void tearDown() throws Exception {
- mainLogWriterAppender.stopSession();
- securityLogWriterAppender.stopSession();
- }
-
- @Test
- public void mainLogWriterAppenderLogEventsIsEmptyByDefault() {
- assertThat(mainLogWriterAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void securityLogWriterAppenderLogEventsIsEmptyByDefault() {
- assertThat(securityLogWriterAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void geodeLoggerAppendsToLogWriterAppender() {
- mainGeodeLogger.info(logMessage);
-
- assertThat(mainLogWriterAppender.getLogEvents()).hasSize(1);
- }
-
- @Test
- public void geodeLoggerDoesNotAppendToSecurityLogWriterAppender() {
- mainGeodeLogger.info(logMessage);
-
- assertThat(securityLogWriterAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void geodeSecurityLoggerAppendsToSecurityLogWriterAppender() {
- securityGeodeLogger.info(logMessage);
-
- assertThat(securityLogWriterAppender.getLogEvents()).hasSize(1);
- }
-
- @Test
- public void geodeSecurityLoggerDoesNotAppendToLogWriterAppender() {
- securityGeodeLogger.info(logMessage);
-
- assertThat(mainLogWriterAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void securityGeodeLoggerLogsToSecurityLogFile() {
- securityGeodeLogger.info(logMessage);
-
- LogFileAssert.assertThat(securityLogFile).exists().contains(logMessage);
- }
-
- @Test
- public void securityGeodeLoggerDoesNotLogToMainLogFile() {
- securityGeodeLogger.info(logMessage);
-
- assertThat(mainLogWriterAppender.getLogEvents()).isEmpty();
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CacheWithDefaultAppendersIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CacheWithDefaultAppendersIntegrationTest.java
deleted file mode 100644
index 0956da9..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CacheWithDefaultAppendersIntegrationTest.java
+++ /dev/null
@@ -1,96 +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.geode.internal.logging.log4j;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.internal.logging.log4j.Log4jAgent.ALERT_APPENDER_NAME;
-import static org.apache.geode.internal.logging.log4j.Log4jAgent.GEODE_CONSOLE_APPENDER_NAME;
-import static org.apache.geode.internal.logging.log4j.Log4jAgent.LOGWRITER_APPENDER_NAME;
-import static org.apache.geode.internal.logging.log4j.Log4jAgent.SECURITY_LOGWRITER_APPENDER_NAME;
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.Properties;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.core.Appender;
-import org.apache.logging.log4j.core.Logger;
-import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Validates the default appenders that should exist when a {@code Cache} is created.
- */
-@Category(LoggingTest.class)
-public class CacheWithDefaultAppendersIntegrationTest {
-
- private InternalCache cache;
- private Configuration configuration;
-
- @Before
- public void setUp() {
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
-
- cache = (InternalCache) new CacheFactory(config).create();
-
- Logger coreLogger = (Logger) LogManager.getRootLogger();
- LoggerContext context = coreLogger.getContext();
-
- configuration = context.getConfiguration();
- }
-
- @After
- public void tearDown() {
- cache.close();
- }
-
- @Test
- public void hasGeodeConsoleAppenderNamed_GEODE_CONSOLE_APPENDER_NAME() {
- Appender appender = configuration.getAppender(GEODE_CONSOLE_APPENDER_NAME);
-
- assertThat(appender).isNotNull().isInstanceOf(GeodeConsoleAppender.class);
- }
-
- @Test
- public void hasAlertAppenderNamed_ALERT_APPENDER_NAME() {
- Appender appender = configuration.getAppender(ALERT_APPENDER_NAME);
-
- assertThat(appender).isNotNull().isInstanceOf(AlertAppender.class);
- }
-
- @Test
- public void hasLogWriterAppenderNamed_LOGWRITER_APPENDER_NAME() {
- Appender appender = configuration.getAppender(LOGWRITER_APPENDER_NAME);
-
- assertThat(appender).isNotNull().isInstanceOf(LogWriterAppender.class);
- }
-
- @Test
- public void hasLogWriterAppenderNamed_SECURITY_LOGWRITER_APPENDER_NAME() {
- Appender appender = configuration.getAppender(SECURITY_LOGWRITER_APPENDER_NAME);
-
- assertThat(appender).isNotNull().isInstanceOf(LogWriterAppender.class);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConfigurationWithLogLevelChangesIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConfigurationWithLogLevelChangesIntegrationTest.java
deleted file mode 100644
index 7509da3..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConfigurationWithLogLevelChangesIntegrationTest.java
+++ /dev/null
@@ -1,226 +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.geode.internal.logging.log4j;
-
-import static org.apache.geode.internal.logging.Configuration.DEFAULT_LOGWRITER_LEVEL;
-import static org.apache.geode.internal.logging.Configuration.create;
-import static org.apache.geode.internal.logging.InternalLogWriter.FINE_LEVEL;
-import static org.apache.geode.internal.logging.InternalLogWriter.WARNING_LEVEL;
-import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
-import static org.apache.geode.test.util.ResourceUtils.getResource;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.net.URL;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.internal.logging.Configuration;
-import org.apache.geode.internal.logging.Configuration.LogLevelUpdateOccurs;
-import org.apache.geode.internal.logging.Configuration.LogLevelUpdateScope;
-import org.apache.geode.internal.logging.LogConfig;
-import org.apache.geode.internal.logging.LogConfigSupplier;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for {@link Configuration} and log level changes with
- * {@link GeodeConsoleAppender}.
- */
-@Category(LoggingTest.class)
-public class ConfigurationWithLogLevelChangesIntegrationTest {
-
- private static final String CONFIG_FILE_NAME =
- "ConfigurationWithLogLevelChangesIntegrationTest_log4j2.xml";
- private static final String APPENDER_NAME = "STDOUT";
- private static final String APPLICATION_LOGGER_NAME = "com.company.application";
-
- private static String configFilePath;
-
- private LogConfig config;
- private Configuration configuration;
- private Logger geodeLogger;
- private Logger applicationLogger;
- private String logMessage;
- private GeodeConsoleAppender geodeConsoleAppender;
-
- @ClassRule
- public static TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
-
- @Rule
- public TestName testName = new TestName();
-
- @BeforeClass
- public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
- .getAbsolutePath();
- }
-
- @Before
- public void setUp() throws Exception {
- config = mock(LogConfig.class);
- when(config.getLogLevel()).thenReturn(DEFAULT_LOGWRITER_LEVEL);
- when(config.getSecurityLogLevel()).thenReturn(DEFAULT_LOGWRITER_LEVEL);
-
- LogConfigSupplier logConfigSupplier = mock(LogConfigSupplier.class);
- when(logConfigSupplier.getLogConfig()).thenReturn(config);
-
- configuration = create(LogLevelUpdateOccurs.ALWAYS, LogLevelUpdateScope.GEODE_LOGGERS);
- configuration.initialize(logConfigSupplier);
-
- geodeLogger = LogService.getLogger();
- applicationLogger = LogService.getLogger(APPLICATION_LOGGER_NAME);
-
- logMessage = "Logging in " + testName.getMethodName();
-
- geodeConsoleAppender =
- loggerContextRule.getAppender(APPENDER_NAME, GeodeConsoleAppender.class);
- }
-
- @After
- public void tearDown() throws Exception {
- geodeConsoleAppender.clearLogEvents();
- configuration.shutdown();
- }
-
- @Test
- public void geodeLoggerDebugNotLoggedByDefault() {
- // act
- geodeLogger.debug(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void geodeLoggerDebugLoggedAfterLoweringLogLevelToFine() {
- // arrange
- when(config.getLogLevel()).thenReturn(FINE_LEVEL);
- configuration.configChanged();
-
- // act
- geodeLogger.debug(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).hasSize(1);
- LogEvent event = geodeConsoleAppender.getLogEvents().get(0);
- assertThat(event.getLoggerName()).isEqualTo(getClass().getName());
- assertThat(event.getLevel()).isEqualTo(Level.DEBUG);
- assertThat(event.getMessage().getFormattedMessage()).isEqualTo(logMessage);
- }
-
- @Test
- public void geodeLoggerDebugNotLoggedAfterRestoringLogLevelToDefault() {
- // arrange
- when(config.getLogLevel()).thenReturn(FINE_LEVEL);
- configuration.configChanged();
-
- // re-arrange
- geodeConsoleAppender.clearLogEvents();
- when(config.getLogLevel()).thenReturn(DEFAULT_LOGWRITER_LEVEL);
- configuration.configChanged();
-
- // act
- geodeLogger.debug(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void applicationLoggerBelowLevelUnaffectedByLoweringLogLevelChanges() {
- // arrange
- when(config.getLogLevel()).thenReturn(FINE_LEVEL);
- configuration.configChanged();
-
- // act
- applicationLogger.debug(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).isEmpty();
- }
-
- @Test
- public void applicationLoggerInfoLoggedByDefault() {
- // act
- applicationLogger.info(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).hasSize(1);
- LogEvent event = geodeConsoleAppender.getLogEvents().get(0);
- assertThat(event.getLoggerName()).isEqualTo(APPLICATION_LOGGER_NAME);
- assertThat(event.getLevel()).isEqualTo(Level.INFO);
- assertThat(event.getMessage().getFormattedMessage()).isEqualTo(logMessage);
- }
-
- @Test
- public void applicationLoggerAboveLevelUnaffectedByLoweringLogLevelChanges() {
- // arrange
- geodeConsoleAppender.clearLogEvents();
- when(config.getLogLevel()).thenReturn(FINE_LEVEL);
- configuration.configChanged();
-
- // act
- applicationLogger.info(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).hasSize(1);
- }
-
- @Test
- public void applicationLoggerAboveLevelUnaffectedByRaisingLogLevelChanges() {
- // arrange
- geodeConsoleAppender.clearLogEvents();
- when(config.getLogLevel()).thenReturn(WARNING_LEVEL);
- configuration.configChanged();
-
- // act
- applicationLogger.info(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).hasSize(1);
- }
-
- @Test
- public void infoStatementNotLoggedAfterRaisingLogLevelToWarning() {
- // arrange
- geodeConsoleAppender.clearLogEvents();
- when(config.getLogLevel()).thenReturn(WARNING_LEVEL);
- configuration.configChanged();
-
- // act
- geodeLogger.info(logMessage);
-
- // assert
- assertThat(geodeConsoleAppender.getLogEvents()).isEmpty();
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConsoleAppenderWithLoggerContextRuleIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConsoleAppenderWithLoggerContextRuleIntegrationTest.java
index 931cb1c..2001d44 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConsoleAppenderWithLoggerContextRuleIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConsoleAppenderWithLoggerContextRuleIntegrationTest.java
@@ -22,80 +22,87 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.net.URL;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LifeCycle;
+import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.appender.DefaultErrorHandler;
import org.apache.logging.log4j.core.appender.OutputStreamManager;
import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.test.appender.ListAppender;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.contrib.java.lang.system.SystemErrRule;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
import org.apache.geode.test.junit.categories.LoggingTest;
-/**
- * Verifies behavior of {@code SystemOutRule} with {@code LoggerContextRule} that other Geode
- * logging tests depends on. If this behavior changes, then those tests may also need to change.
- */
@Category(LoggingTest.class)
public class ConsoleAppenderWithLoggerContextRuleIntegrationTest {
- private static final String CONFIG_FILE_NAME =
- "ConsoleAppenderWithLoggerContextRuleIntegrationTest_log4j2.xml";
- private static final String APPENDER_NAME = "STDOUT";
-
private static String configFilePath;
- private Logger logger;
+ private Logger postConfigLogger;
private String logMessage;
- private ConsoleAppender consoleAppender;
@ClassRule
public static SystemOutRule systemOutRule = new SystemOutRule().enableLog();
@ClassRule
+ public static SystemErrRule systemErrRule = new SystemErrRule().enableLog();
+
+ @ClassRule
public static TemporaryFolder temporaryFolder = new TemporaryFolder();
@Rule
public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
- @Rule
- public TestName testName = new TestName();
-
@BeforeClass
public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
+ String configFileName =
+ ConsoleAppenderWithLoggerContextRuleIntegrationTest.class.getSimpleName() + "_log4j2.xml";
+ URL resource = getResource(configFileName);
+ configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), configFileName)
.getAbsolutePath();
}
@Before
public void setUp() throws Exception {
- logger = LogManager.getLogger();
- logMessage = "Logging in " + testName.getMethodName();
- consoleAppender = loggerContextRule.getAppender(APPENDER_NAME, ConsoleAppender.class);
+ postConfigLogger = LogManager.getLogger();
+ logMessage = "this is a log statement";
systemOutRule.clearLog();
+ systemErrRule.clearLog();
}
@Test
- public void consoleAppenderIsConfigured() {
+ public void delegateConsoleAppenderIsConfigured() {
+ assertThat(loggerContextRule.getListAppender("LIST")).isNotNull();
+
+ ListAppender listAppender = findAppender(ListAppender.class);
+ assertThat(listAppender).isNotNull();
+
+ ConsoleAppender consoleAppender = findAppender(ConsoleAppender.class);
+ assertThat(consoleAppender).isNotNull();
+
assertThat(consoleAppender.getFilter()).isNull();
assertThat(consoleAppender.getHandler()).isInstanceOf(DefaultErrorHandler.class);
assertThat(consoleAppender.getImmediateFlush()).isTrue();
assertThat(consoleAppender.getLayout()).isNotNull();
assertThat(consoleAppender.getManager()).isInstanceOf(OutputStreamManager.class);
- assertThat(consoleAppender.getName()).isEqualTo(APPENDER_NAME);
+ assertThat(consoleAppender.getName()).isEqualTo("STDOUT");
assertThat(consoleAppender.getState()).isSameAs(LifeCycle.State.STARTED);
assertThat(consoleAppender.getTarget()).isSameAs(ConsoleAppender.Target.SYSTEM_OUT);
@@ -109,10 +116,27 @@ public class ConsoleAppenderWithLoggerContextRuleIntegrationTest {
}
@Test
- public void staticSystemOutRuleCapturesConsoleAppenderOutput() {
- logger.info(logMessage);
+ public void staticSystemOutRuleCapturesConsoleAppenderOutputFromPostConfigLogger() {
+ postConfigLogger.info(logMessage);
assertThat(systemOutRule.getLog()).contains(Level.INFO.name().toLowerCase());
assertThat(systemOutRule.getLog()).contains(logMessage);
+
+ assertThat(systemErrRule.getLog()).isEmpty();
+ }
+
+ private <T extends Appender> T findAppender(Class<T> appenderClass) {
+ LoggerContext loggerContext =
+ ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).getContext();
+ Map<String, Appender> appenders = loggerContext.getConfiguration().getAppenders();
+ List<Class<? extends Appender>> appenderClasses = new ArrayList<>();
+ for (Appender appender : appenders.values()) {
+ appenderClasses.add(appender.getClass());
+ if (appenderClass.isAssignableFrom(appender.getClass())) {
+ return appenderClass.cast(appender);
+ }
+ }
+ assertThat(appenderClasses).contains(appenderClass);
+ return null;
}
}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConsoleAppenderWithSystemOutRuleIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConsoleAppenderWithSystemOutRuleIntegrationTest.java
new file mode 100644
index 0000000..22d48a6
--- /dev/null
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/ConsoleAppenderWithSystemOutRuleIntegrationTest.java
@@ -0,0 +1,182 @@
+/*
+ * 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.geode.internal.logging.log4j;
+
+import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
+import static org.apache.geode.test.util.ResourceUtils.getResource;
+import static org.apache.logging.log4j.core.config.ConfigurationFactory.CONFIGURATION_FILE_PROPERTY;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LifeCycle;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.appender.DefaultErrorHandler;
+import org.apache.logging.log4j.core.appender.OutputStreamManager;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.contrib.java.lang.system.SystemErrRule;
+import org.junit.contrib.java.lang.system.SystemOutRule;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
+
+import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.test.junit.categories.LoggingTest;
+
+/**
+ * Verifies that we can capture output of {@code ConsoleAppender}. If this behavior changes, then
+ * Geode logging tests may also need to change.
+ */
+@Category(LoggingTest.class)
+public class ConsoleAppenderWithSystemOutRuleIntegrationTest {
+
+ private static final Logger classLoadedLogger = LogManager.getLogger();
+
+ private String beforeConfigFile;
+ private Level beforeLevel;
+
+ private Logger preConfigLogger;
+ private Logger postConfigLogger;
+ private String logMessage;
+
+ @ClassRule
+ public static SystemOutRule systemOutRule = new SystemOutRule().enableLog();
+
+ @ClassRule
+ public static SystemErrRule systemErrRule = new SystemErrRule().enableLog();
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Before
+ public void setUp() throws Exception {
+ preConfigLogger = LogManager.getLogger();
+
+ Configurator.shutdown();
+
+ beforeConfigFile = System.getProperty(CONFIGURATION_FILE_PROPERTY);
+ beforeLevel = StatusLogger.getLogger().getLevel();
+
+ String configFileName = getClass().getSimpleName() + "_log4j2.xml";
+ File configFile = createFileFromResource(getResource(configFileName),
+ temporaryFolder.getRoot(), configFileName);
+
+ System.setProperty(CONFIGURATION_FILE_PROPERTY, configFile.getAbsolutePath());
+ LogService.reconfigure();
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isFalse();
+
+ systemOutRule.clearLog();
+ systemErrRule.clearLog();
+
+ postConfigLogger = LogManager.getLogger();
+ logMessage = "this is a log statement";
+ }
+
+ @After
+ public void tearDown() {
+ Configurator.shutdown();
+
+ System.clearProperty(CONFIGURATION_FILE_PROPERTY);
+ if (beforeConfigFile != null) {
+ System.setProperty(CONFIGURATION_FILE_PROPERTY, beforeConfigFile);
+ }
+ StatusLogger.getLogger().setLevel(beforeLevel);
+
+ LogService.reconfigure();
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isTrue();
+ }
+
+ @Test
+ public void delegateConsoleAppenderIsConfigured() {
+ ConsoleAppender consoleAppender = findAppender(ConsoleAppender.class);
+ assertThat(consoleAppender).isNotNull();
+
+ assertThat(consoleAppender.getFilter()).isNull();
+ assertThat(consoleAppender.getHandler()).isInstanceOf(DefaultErrorHandler.class);
+ assertThat(consoleAppender.getImmediateFlush()).isTrue();
+ assertThat(consoleAppender.getLayout()).isNotNull();
+ assertThat(consoleAppender.getManager()).isInstanceOf(OutputStreamManager.class);
+ assertThat(consoleAppender.getName()).isEqualTo("STDOUT");
+ assertThat(consoleAppender.getState()).isSameAs(LifeCycle.State.STARTED);
+ assertThat(consoleAppender.getTarget()).isSameAs(ConsoleAppender.Target.SYSTEM_OUT);
+
+ OutputStreamManager outputStreamManager = consoleAppender.getManager();
+ assertThat(outputStreamManager.isOpen()).isTrue();
+ assertThat(outputStreamManager.getByteBuffer()).isInstanceOf(ByteBuffer.class);
+ assertThat(outputStreamManager.hasOutputStream()).isTrue();
+ assertThat(outputStreamManager.getContentFormat()).isEmpty();
+ assertThat(outputStreamManager.getLoggerContext()).isNull();
+ assertThat(outputStreamManager.getName()).isEqualTo("SYSTEM_OUT.false.false");
+ }
+
+ @Test
+ public void staticSystemOutRuleCapturesConsoleAppenderOutputFromPostConfigLogger() {
+ postConfigLogger.info(logMessage);
+
+ assertThat(systemOutRule.getLog()).contains(Level.INFO.name().toLowerCase());
+ assertThat(systemOutRule.getLog()).contains(logMessage);
+
+ assertThat(systemErrRule.getLog()).isEmpty();
+ }
+
+ @Test
+ public void staticSystemOutRuleFailsToCaptureConsoleAppenderOutputFromPreConfigLogger() {
+ preConfigLogger.info(logMessage);
+
+ assertThat(systemOutRule.getLog()).isEmpty();
+ assertThat(systemErrRule.getLog()).isEmpty();
+ }
+
+ @Test
+ public void staticSystemOutRuleFailsToCaptureConsoleAppenderOutputFromClassLoadedLogger() {
+ classLoadedLogger.info(logMessage);
+
+ assertThat(systemOutRule.getLog()).isEmpty();
+ assertThat(systemErrRule.getLog()).isEmpty();
+ }
+
+ private <T extends Appender> T findAppender(Class<T> appenderClass) {
+ LoggerContext loggerContext =
+ ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).getContext();
+ Map<String, Appender> appenders = loggerContext.getConfiguration().getAppenders();
+ List<Class<? extends Appender>> appenderClasses = new ArrayList<>();
+ for (Appender appender : appenders.values()) {
+ appenderClasses.add(appender.getClass());
+ if (appenderClass.isAssignableFrom(appender.getClass())) {
+ return appenderClass.cast(appender);
+ }
+ }
+ assertThat(appenderClasses).contains(appenderClass);
+ return null;
+ }
+}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CacheWithCustomLogConfigIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CustomConfigWithCacheIntegrationTest.java
similarity index 89%
rename from geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CacheWithCustomLogConfigIntegrationTest.java
rename to geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CustomConfigWithCacheIntegrationTest.java
index f6b0b6f..bf9e9d9 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CacheWithCustomLogConfigIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CustomConfigWithCacheIntegrationTest.java
@@ -40,20 +40,18 @@ import org.junit.contrib.java.lang.system.SystemErrRule;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.CacheFactory;
+import org.apache.geode.internal.logging.LogService;
import org.apache.geode.test.junit.categories.LoggingTest;
/**
- * Integration tests for {@link Cache} with custom {@code log4j2.xml}.
+ * Integration tests with custom log4j2 configuration.
*/
@Category(LoggingTest.class)
-public class CacheWithCustomLogConfigIntegrationTest {
+public class CustomConfigWithCacheIntegrationTest {
- private static final String CONFIG_FILE_NAME =
- "CacheWithCustomLogConfigIntegrationTest_log4j2.xml";
private static final String CONFIG_LAYOUT_PREFIX = "CUSTOM";
private static final String CUSTOM_REGEX_STRING =
"CUSTOM: level=[A-Z]+ time=\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3} [^ ]{3} message=.*[\\n]+throwable=.*$";
@@ -61,11 +59,12 @@ public class CacheWithCustomLogConfigIntegrationTest {
private static String configFilePath;
- private Cache cache;
private LogWriterLogger logWriterLogger;
private String logMessage;
private ListAppender listAppender;
+ private Cache cache;
+
@ClassRule
public static SystemOutRule systemOutRule = new SystemOutRule().enableLog();
@@ -78,13 +77,12 @@ public class CacheWithCustomLogConfigIntegrationTest {
@Rule
public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
- @Rule
- public TestName testName = new TestName();
-
@BeforeClass
public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
+ String configFileName =
+ CustomConfigWithCacheIntegrationTest.class.getSimpleName() + "_log4j2.xml";
+ URL resource = getResource(configFileName);
+ configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), configFileName)
.getAbsolutePath();
}
@@ -98,7 +96,11 @@ public class CacheWithCustomLogConfigIntegrationTest {
cache = new CacheFactory(config).create();
logWriterLogger = (LogWriterLogger) cache.getLogger();
- logMessage = "Logging in " + testName.getMethodName();
+ logMessage = "this is a log statement";
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isFalse();
+
listAppender = loggerContextRule.getListAppender("CUSTOM");
systemOutRule.clearLog();
@@ -107,7 +109,9 @@ public class CacheWithCustomLogConfigIntegrationTest {
@After
public void tearDown() throws Exception {
- cache.close();
+ if (cache != null) {
+ cache.close();
+ }
}
@Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/LogServiceWithCustomLogConfigIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CustomConfigWithLogServiceIntegrationTest.java
similarity index 83%
rename from geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/LogServiceWithCustomLogConfigIntegrationTest.java
rename to geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CustomConfigWithLogServiceIntegrationTest.java
index 4d04fc0..23c6f79 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/LogServiceWithCustomLogConfigIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/CustomConfigWithLogServiceIntegrationTest.java
@@ -14,7 +14,6 @@
*/
package org.apache.geode.internal.logging.log4j;
-import static org.apache.geode.internal.logging.log4j.Log4jAgent.getConfigurationInfo;
import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
import static org.apache.geode.test.util.ResourceUtils.getResource;
import static org.assertj.core.api.Assertions.assertThat;
@@ -36,19 +35,16 @@ import org.junit.contrib.java.lang.system.SystemErrRule;
import org.junit.contrib.java.lang.system.SystemOutRule;
import org.junit.experimental.categories.Category;
import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.test.junit.categories.LoggingTest;
/**
- * Integration tests for {@link LogService} with custom logging configuration.
+ * Integration tests with custom log4j2 configuration.
*/
@Category(LoggingTest.class)
-public class LogServiceWithCustomLogConfigIntegrationTest {
+public class CustomConfigWithLogServiceIntegrationTest {
- private static final String CONFIG_FILE_NAME =
- "LogServiceWithCustomLogConfigIntegrationTest_log4j2.xml";
private static final String CONFIG_LAYOUT_PREFIX = "CUSTOM";
private static final String CUSTOM_REGEX_STRING =
"CUSTOM: level=[A-Z]+ time=\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3} [^ ]{3} message=.*[\\n]+throwable=.*$";
@@ -72,29 +68,27 @@ public class LogServiceWithCustomLogConfigIntegrationTest {
@Rule
public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
- @Rule
- public TestName testName = new TestName();
-
@BeforeClass
public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
+ String configFileName =
+ CustomConfigWithCacheIntegrationTest.class.getSimpleName() + "_log4j2.xml";
+ URL resource = getResource(configFileName);
+ configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), configFileName)
.getAbsolutePath();
}
@Before
public void setUp() throws Exception {
- systemOutRule.clearLog();
- systemErrRule.clearLog();
-
logger = LogService.getLogger();
- logMessage = "Logging in " + testName.getMethodName();
+ logMessage = "this is a log statement";
+
+ assertThat(LogService.isUsingGemFireDefaultConfig()).as(LogService.getConfigurationInfo())
+ .isFalse();
+
listAppender = loggerContextRule.getListAppender("CUSTOM");
- }
- @Test
- public void isUsingGemFireDefaultConfigIsFalse() {
- assertThat(Log4jAgent.isUsingGemFireDefaultConfig()).as(getConfigurationInfo()).isFalse();
+ systemOutRule.clearLog();
+ systemErrRule.clearLog();
}
@Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/DistributedSystemWithBothLogWriterAppendersIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/DistributedSystemWithBothLogWriterAppendersIntegrationTest.java
deleted file mode 100644
index 28133f8..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/DistributedSystemWithBothLogWriterAppendersIntegrationTest.java
+++ /dev/null
@@ -1,203 +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.geode.internal.logging.log4j;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
-import static org.apache.geode.distributed.ConfigurationProperties.SECURITY_LOG_FILE;
-import static org.apache.geode.internal.logging.Configuration.SECURITY_LOGGER_NAME;
-import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
-import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
-import static org.apache.geode.test.util.ResourceUtils.getResource;
-
-import java.io.File;
-import java.net.URL;
-import java.util.Properties;
-
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.LogWriter;
-import org.apache.geode.distributed.ConfigurationProperties;
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.test.assertj.LogFileAssert;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for logging of main and security {@code Logger}s and {@link LogWriter}s to
- * {@link ConfigurationProperties#LOG_FILE} and {@link ConfigurationProperties#SECURITY_LOG_FILE}
- * with {@link DistributedSystem}.
- */
-@Category(LoggingTest.class)
-public class DistributedSystemWithBothLogWriterAppendersIntegrationTest {
-
- private static final String CONFIG_FILE_NAME =
- "DistributedSystemWithBothLogWriterAppendersIntegrationTest_log4j2.xml";
-
- private static String configFilePath;
-
- private File mainLogFile;
- private File securityLogFile;
- private InternalDistributedSystem system;
- private Logger mainLogger;
- private Logger securityLogger;
- private LogWriter mainLogWriter;
- private LogWriter securityLogWriter;
- private String logMessage;
-
- @ClassRule
- public static TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
-
- @Rule
- public TestName testName = new TestName();
-
- @BeforeClass
- public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
- .getAbsolutePath();
- }
-
- @Before
- public void setUp() throws Exception {
- String name = testName.getMethodName();
- mainLogFile = new File(temporaryFolder.getRoot(), name + "-main.log");
- securityLogFile = new File(temporaryFolder.getRoot(), name + "-security.log");
-
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
- config.setProperty(LOG_FILE, mainLogFile.getAbsolutePath());
- config.setProperty(SECURITY_LOG_FILE, securityLogFile.getAbsolutePath());
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- mainLogger = LogService.getLogger();
- securityLogger = LogService.getLogger(SECURITY_LOGGER_NAME);
-
- mainLogWriter = system.getLogWriter();
- securityLogWriter = system.getSecurityLogWriter();
-
- mainLogger.info("Starting {}", getClass().getName());
- securityLogger.info("Starting {}", getClass().getName());
-
- await().until(() -> mainLogFile.exists());
- await().until(() -> securityLogFile.exists());
-
- logMessage = "Logging " + testName.getMethodName();
- }
-
- @After
- public void tearDown() throws Exception {
- system.disconnect();
- }
-
- @Test
- public void mainLogger_debug_notLoggedByDefault() {
- mainLogger.debug(logMessage);
-
- LogFileAssert.assertThat(mainLogFile).doesNotContain(logMessage);
- }
-
- @Test
- public void mainLogger_logsTo_mainLogFile() {
- mainLogger.info(logMessage);
-
- LogFileAssert.assertThat(mainLogFile).contains(logMessage);
- }
-
- @Test
- public void mainLogger_doesNotLogTo_securityLogFile() {
- mainLogger.info(logMessage);
-
- LogFileAssert.assertThat(securityLogFile).doesNotContain(logMessage);
- }
-
- @Test
- public void securityLogger_debug_notLoggedByDefault() {
- securityLogger.debug(logMessage);
-
- LogFileAssert.assertThat(securityLogFile).doesNotContain(logMessage);
- }
-
- @Test
- public void securityLogger_logsTo_securityLogFile() {
- securityLogger.info(logMessage);
-
- LogFileAssert.assertThat(securityLogFile).contains(logMessage);
- }
-
- @Test
- public void securityLogger_doesNotLogTo_mainLogFile() {
- securityLogger.info(logMessage);
-
- LogFileAssert.assertThat(mainLogFile).doesNotContain(logMessage);
- }
-
- @Test
- public void mainLogWriter_fine_notLoggedByDefault() {
- mainLogWriter.fine(logMessage);
-
- LogFileAssert.assertThat(mainLogFile).doesNotContain(logMessage);
- }
-
- @Test
- public void mainLogWriter_logsTo_mainLogFile() {
- mainLogWriter.info(logMessage);
-
- LogFileAssert.assertThat(mainLogFile).contains(logMessage);
- }
-
- @Test
- public void mainLogWriter_doesNotLogTo_securityLogFile() {
- mainLogWriter.info(logMessage);
-
- LogFileAssert.assertThat(securityLogFile).doesNotContain(logMessage);
- }
-
- @Test
- public void securityLogWriter_fine_notLoggedByDefault() {
- securityLogWriter.fine(logMessage);
-
- LogFileAssert.assertThat(securityLogFile).doesNotContain(logMessage);
- }
-
- @Test
- public void securityLogWriter_logsTo_securityLogFile() {
- securityLogWriter.info(logMessage);
-
- LogFileAssert.assertThat(securityLogFile).contains(logMessage);
- }
-
- @Test
- public void securityLogWriter_doesNotLogTo_mainLogFile() {
- securityLogWriter.info(logMessage);
-
- LogFileAssert.assertThat(mainLogFile).doesNotContain(logMessage);
- }
-}
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/DistributedSystemWithLogLevelChangesIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/DistributedSystemWithLogLevelChangesIntegrationTest.java
deleted file mode 100644
index cdd7071..0000000
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/logging/log4j/DistributedSystemWithLogLevelChangesIntegrationTest.java
+++ /dev/null
@@ -1,207 +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.geode.internal.logging.log4j;
-
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.internal.logging.Configuration.DEFAULT_LOGWRITER_LEVEL;
-import static org.apache.geode.internal.logging.Configuration.LOG_LEVEL_UPDATE_OCCURS_PROPERTY;
-import static org.apache.geode.internal.logging.InternalLogWriter.FINE_LEVEL;
-import static org.apache.geode.internal.logging.InternalLogWriter.WARNING_LEVEL;
-import static org.apache.geode.test.util.ResourceUtils.createFileFromResource;
-import static org.apache.geode.test.util.ResourceUtils.getResource;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.fail;
-
-import java.net.URL;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.contrib.java.lang.system.RestoreSystemProperties;
-import org.junit.experimental.categories.Category;
-import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-
-import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.logging.Configuration.LogLevelUpdateOccurs;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.test.junit.categories.LoggingTest;
-
-/**
- * Integration tests for {@link DistributedSystem} and log level changes with
- * {@link GeodeConsoleAppender}.
- */
-@Category(LoggingTest.class)
-public class DistributedSystemWithLogLevelChangesIntegrationTest {
-
- private static final String CONFIG_FILE_NAME =
- "DistributedSystemWithLogLevelChangesIntegrationTest_log4j2.xml";
- private static final String APPENDER_NAME = "STDOUT";
- private static final String APPLICATION_LOGGER_NAME = "com.company.application";
-
- private static String configFilePath;
-
- private InternalDistributedSystem system;
- private DistributionConfig distributionConfig;
- private Logger geodeLogger;
- private Logger applicationLogger;
- private String logMessage;
- private GeodeConsoleAppender geodeConsoleAppender;
-
- @ClassRule
- public static TemporaryFolder temporaryFolder = new TemporaryFolder();
-
- @Rule
- public LoggerContextRule loggerContextRule = new LoggerContextRule(configFilePath);
-
- @Rule
- public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties();
-
- @Rule
- public TestName testName = new TestName();
-
- @BeforeClass
- public static void setUpLogConfigFile() throws Exception {
- URL resource = getResource(CONFIG_FILE_NAME);
- configFilePath = createFileFromResource(resource, temporaryFolder.getRoot(), CONFIG_FILE_NAME)
- .getAbsolutePath();
- }
-
- @Before
- public void setUp() throws Exception {
- System.setProperty(LOG_LEVEL_UPDATE_OCCURS_PROPERTY, LogLevelUpdateOccurs.ALWAYS.name());
-
- Properties config = new Properties();
- config.setProperty(LOCATORS, "");
-
- system = (InternalDistributedSystem) DistributedSystem.connect(config);
-
- distributionConfig = system.getConfig();
- geodeLogger = LogService.getLogger();
- applicationLogger = LogService.getLogger(APPLICATION_LOGGER_NAME);
- logMessage = "Logging in " + testName.getMethodName();
- geodeConsoleAppender =
- loggerContextRule.getAppender(APPENDER_NAME, GeodeConsoleAppender.class);
- }
-
- @After
- public void tearDown() throws Exception {
- system.disconnect();
- geodeConsoleAppender.clearLogEvents();
- }
-
- @Test
- public void debugNotLoggedByDefault() {
- geodeLogger.debug(logMessage);
-
- assertThatLogEventsDoesNotContain(logMessage, getClass().getName(), Level.DEBUG);
- }
-
- @Test
- public void debugLoggedAfterLoweringLogLevelToFine() {
- distributionConfig.setLogLevel(FINE_LEVEL);
-
- geodeLogger.debug(logMessage);
-
- assertThatLogEventsContains(logMessage, geodeLogger.getName(), Level.DEBUG);
- }
-
- @Test
- public void debugNotLoggedAfterRestoringLogLevelToDefault() {
- distributionConfig.setLogLevel(FINE_LEVEL);
-
- system.getConfig().setLogLevel(DEFAULT_LOGWRITER_LEVEL);
- geodeLogger.debug(logMessage);
-
- assertThatLogEventsDoesNotContain(logMessage, geodeLogger.getName(), Level.DEBUG);
- }
-
- @Test
- public void applicationLoggerInfoLoggedByDefault() {
- applicationLogger.info(logMessage);
-
- assertThatLogEventsContains(logMessage, applicationLogger.getName(), Level.INFO);
- }
-
- @Test
- public void applicationLoggerBelowLevelUnaffectedByLoweringLogLevelChanges() {
- distributionConfig.setLogLevel(FINE_LEVEL);
-
- applicationLogger.debug(logMessage);
-
- assertThatLogEventsDoesNotContain(logMessage, applicationLogger.getName(), Level.DEBUG);
- }
-
- @Test
- public void applicationLoggerAboveLevelUnaffectedByLoweringLogLevelChanges() {
- distributionConfig.setLogLevel(FINE_LEVEL);
-
- applicationLogger.info(logMessage);
-
- assertThatLogEventsContains(logMessage, applicationLogger.getName(), Level.INFO);
- }
-
- @Test
- public void applicationLoggerAboveLevelUnaffectedByRaisingLogLevelChanges() {
- distributionConfig.setLogLevel(WARNING_LEVEL);
-
- applicationLogger.info(logMessage);
-
- assertThatLogEventsContains(logMessage, applicationLogger.getName(), Level.INFO);
- }
-
- @Test
- public void infoStatementNotLoggedAfterRaisingLogLevelToWarning() {
- distributionConfig.setLogLevel(WARNING_LEVEL);
-
- geodeLogger.info(logMessage);
-
- assertThatLogEventsDoesNotContain(logMessage, geodeLogger.getName(), Level.INFO);
... 18467 lines suppressed ...