This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new db5310c1988 Add test cases on ShardingSphereLogbackBuilder (#33038)
db5310c1988 is described below
commit db5310c19882661dc5d6ff1cb1843d66533535bb
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Sep 28 21:58:59 2024 +0800
Add test cases on ShardingSphereLogbackBuilder (#33038)
* Add test cases on ShardingSphereLogbackBuilder
* Add test cases on ShardingSphereLogbackBuilder
---
.../logging/logger/ShardingSphereAppender.java | 4 +-
.../logging/logger/ShardingSphereLogger.java | 4 +-
.../logging/yaml/swapper/YamlAppenderSwapper.java | 4 +-
.../logging/yaml/swapper/YamlLoggerSwapper.java | 2 +-
.../logging/it/LoggingRuleConfigurationYamlIT.java | 3 +-
.../logging/rule/LoggingRuleTest.java | 2 +-
.../type/logback/ShardingSphereLogbackBuilder.java | 34 +++---
.../logback/ShardingSphereLogbackBuilderTest.java | 123 +++++++++++++++++++++
8 files changed, 144 insertions(+), 32 deletions(-)
diff --git
a/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereAppender.java
b/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereAppender.java
index 6bbd8c47f00..ed2b07639a3 100644
---
a/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereAppender.java
+++
b/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereAppender.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.logging.logger;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import lombok.Setter;
/**
* ShardingSphere appender.
@@ -34,6 +33,5 @@ public final class ShardingSphereAppender {
private final String pattern;
- @Setter
- private String file;
+ private final String file;
}
diff --git
a/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereLogger.java
b/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereLogger.java
index db4c0480450..6b93f794ef0 100644
---
a/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereLogger.java
+++
b/kernel/logging/api/src/main/java/org/apache/shardingsphere/logging/logger/ShardingSphereLogger.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.logging.logger;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import lombok.Setter;
import java.util.Properties;
@@ -38,6 +37,5 @@ public final class ShardingSphereLogger {
private final String appenderName;
- @Setter
- private Properties props = new Properties();
+ private final Properties props = new Properties();
}
diff --git
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlAppenderSwapper.java
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlAppenderSwapper.java
index 8a588e1322c..51dab75a26f 100644
---
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlAppenderSwapper.java
+++
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlAppenderSwapper.java
@@ -38,8 +38,6 @@ public final class YamlAppenderSwapper implements
YamlConfigurationSwapper<YamlA
@Override
public ShardingSphereAppender swapToObject(final YamlAppenderConfiguration
yamlConfig) {
- ShardingSphereAppender result = new
ShardingSphereAppender(yamlConfig.getAppenderName(),
yamlConfig.getAppenderClass(), yamlConfig.getPattern());
- result.setFile(yamlConfig.getFile());
- return result;
+ return new ShardingSphereAppender(yamlConfig.getAppenderName(),
yamlConfig.getAppenderClass(), yamlConfig.getPattern(), yamlConfig.getFile());
}
}
diff --git
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlLoggerSwapper.java
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlLoggerSwapper.java
index 8546a623017..e581c7a89b4 100644
---
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlLoggerSwapper.java
+++
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/YamlLoggerSwapper.java
@@ -40,7 +40,7 @@ public final class YamlLoggerSwapper implements
YamlConfigurationSwapper<YamlLog
@Override
public ShardingSphereLogger swapToObject(final YamlLoggerConfiguration
yamlConfig) {
ShardingSphereLogger result = new
ShardingSphereLogger(yamlConfig.getLoggerName(), yamlConfig.getLevel(),
yamlConfig.getAdditivity(), yamlConfig.getAppenderName());
- result.setProps(yamlConfig.getProps());
+ result.getProps().putAll(yamlConfig.getProps());
return result;
}
}
diff --git
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/it/LoggingRuleConfigurationYamlIT.java
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/it/LoggingRuleConfigurationYamlIT.java
index a9e468b5709..e2af5f5ce23 100644
---
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/it/LoggingRuleConfigurationYamlIT.java
+++
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/it/LoggingRuleConfigurationYamlIT.java
@@ -34,8 +34,7 @@ class LoggingRuleConfigurationYamlIT extends
YamlRuleConfigurationIT {
ShardingSphereLogger logger = new ShardingSphereLogger("foo_logger",
"INFO", true, "foo_appender");
logger.getProps().put("k0", "v0");
logger.getProps().put("k1", "v1");
- ShardingSphereAppender appender = new
ShardingSphereAppender("foo_appender", "foo_appender_class", "sss");
- appender.setFile("foo_file");
+ ShardingSphereAppender appender = new
ShardingSphereAppender("foo_appender", "foo_appender_class", "sss", "foo_file");
return new LoggingRuleConfiguration(Collections.singletonList(logger),
Collections.singletonList(appender));
}
}
diff --git
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/LoggingRuleTest.java
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/LoggingRuleTest.java
index cdc832c6f78..737021ed9f9 100644
---
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/LoggingRuleTest.java
+++
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/rule/LoggingRuleTest.java
@@ -38,7 +38,7 @@ class LoggingRuleTest {
@BeforeEach
void setup() {
loggingRule = new LoggingRule(new
LoggingRuleConfiguration(Collections.singleton(new
ShardingSphereLogger(LoggingConstants.SQL_LOG_TOPIC, "INFO", true, "console")),
- Collections.singleton(new ShardingSphereAppender("console",
"ch.qos.logback.core.ConsoleAppender", "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}
[%thread] %logger{36} - %msg%n"))));
+ Collections.singleton(new ShardingSphereAppender("console",
"ch.qos.logback.core.ConsoleAppender", "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}
[%thread] %logger{36} - %msg%n", null))));
}
@Test
diff --git
a/kernel/logging/type/logback/src/main/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilder.java
b/kernel/logging/type/logback/src/main/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilder.java
index 287b8749e7d..b4ef76dd5b7 100644
---
a/kernel/logging/type/logback/src/main/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilder.java
+++
b/kernel/logging/type/logback/src/main/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilder.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.logging.type.logback;
+import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.FileAppender;
@@ -26,7 +27,6 @@ import ch.qos.logback.core.pattern.PatternLayoutBase;
import org.apache.shardingsphere.logging.logger.ShardingSphereAppender;
import org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
import org.apache.shardingsphere.logging.spi.ShardingSphereLogBuilder;
-import org.slf4j.Logger;
import java.util.Collection;
import java.util.Comparator;
@@ -41,23 +41,25 @@ public final class ShardingSphereLogbackBuilder implements
ShardingSphereLogBuil
@Override
public Collection<ShardingSphereLogger> getDefaultLoggers(final
LoggerContext loggerContext) {
- return loggerContext.getLoggerList().stream().filter(each -> null !=
each.getLevel()).filter(each ->
!Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(each.getName()))
- .map(each -> new ShardingSphereLogger(
- each.getName(), each.getLevel().levelStr,
each.isAdditive(), each.iteratorForAppenders().hasNext() ?
each.iteratorForAppenders().next().getName() : null))
+ return
loggerContext.getLoggerList().stream().filter(this::isQualifiedLogger).map(each
-> new ShardingSphereLogger(
+ each.getName(), each.getLevel().levelStr, each.isAdditive(),
each.iteratorForAppenders().hasNext() ?
each.iteratorForAppenders().next().getName() : null))
.collect(Collectors.toList());
}
+ private boolean isQualifiedLogger(final Logger logger) {
+ return null != logger.getLevel() &&
!Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(logger.getName());
+ }
+
@Override
public Collection<ShardingSphereAppender> getDefaultAppenders(final
LoggerContext loggerContext) {
- return loggerContext.getLoggerList().stream().filter(each -> null !=
each.getLevel()).filter(each ->
!Logger.ROOT_LOGGER_NAME.equalsIgnoreCase(each.getName())).map(each -> {
- if (each.iteratorForAppenders().hasNext()) {
- Appender<?> appender = each.iteratorForAppenders().next();
- ShardingSphereAppender result = new
ShardingSphereAppender(appender.getName(), appender.getClass().getName(),
getAppenderPattern(appender));
- getFileOutput(appender, result);
- return result;
- }
- return null;
- }).filter(Objects::nonNull).collect(Collectors.toCollection(() -> new
TreeSet<>(Comparator.comparing(ShardingSphereAppender::getAppenderName))));
+ return
loggerContext.getLoggerList().stream().filter(this::isQualifiedLogger)
+ .map(each -> each.iteratorForAppenders().hasNext() ?
getShardingSphereAppender(each.iteratorForAppenders().next()) :
null).filter(Objects::nonNull)
+ .collect(Collectors.toCollection(() -> new
TreeSet<>(Comparator.comparing(ShardingSphereAppender::getAppenderName))));
+ }
+
+ private ShardingSphereAppender getShardingSphereAppender(final Appender<?>
appender) {
+ String file = appender instanceof FileAppender ? ((FileAppender<?>)
appender).getFile() : null;
+ return new ShardingSphereAppender(appender.getName(),
appender.getClass().getName(), getAppenderPattern(appender), file);
}
private String getAppenderPattern(final Appender<?> appender) {
@@ -70,12 +72,6 @@ public final class ShardingSphereLogbackBuilder implements
ShardingSphereLogBuil
return "";
}
- private void getFileOutput(final Appender<?> appender, final
ShardingSphereAppender shardingSphereAppender) {
- if (appender instanceof FileAppender) {
- shardingSphereAppender.setFile(((FileAppender<?>)
appender).getFile());
- }
- }
-
@Override
public Class<LoggerContext> getType() {
return LoggerContext.class;
diff --git
a/kernel/logging/type/logback/src/test/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilderTest.java
b/kernel/logging/type/logback/src/test/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilderTest.java
new file mode 100644
index 00000000000..3ac7122fbd0
--- /dev/null
+++
b/kernel/logging/type/logback/src/test/java/org/apache/shardingsphere/logging/type/logback/ShardingSphereLogbackBuilderTest.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.shardingsphere.logging.type.logback;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.core.FileAppender;
+import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
+import ch.qos.logback.core.pattern.PatternLayoutBase;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.logging.logger.ShardingSphereAppender;
+import org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
+import org.apache.shardingsphere.logging.spi.ShardingSphereLogBuilder;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class ShardingSphereLogbackBuilderTest {
+
+ private final ShardingSphereLogbackBuilder builder =
(ShardingSphereLogbackBuilder)
TypedSPILoader.getService(ShardingSphereLogBuilder.class, LoggerContext.class);
+
+ @Test
+ void assertGetDefaultLoggers() {
+ Logger logger1 = mockLogger("FOO", Level.INFO, "fooAppenderName",
false);
+ Logger logger2 = mockLogger("BAR", Level.INFO, null, false);
+ Logger logger3 = mockLogger("EMPTY", null, null, false);
+ Logger logger4 = mockLogger(Logger.ROOT_LOGGER_NAME, Level.INFO, null,
false);
+ LoggerContext loggerContext = mock(LoggerContext.class);
+ when(loggerContext.getLoggerList()).thenReturn(Arrays.asList(logger1,
logger2, logger3, logger4));
+ List<ShardingSphereLogger> actual = new
ArrayList<>(builder.getDefaultLoggers(loggerContext));
+ assertThat(actual.size(), is(2));
+ assertLogger1(actual.get(0));
+ assertLogger2(actual.get(1));
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private Logger mockLogger(final String name, final Level level, final
String appenderName, final boolean isFileAppender) {
+ Logger result = mock(Logger.class, RETURNS_DEEP_STUBS);
+ when(result.getName()).thenReturn(name);
+ when(result.getLevel()).thenReturn(level);
+ if (null != appenderName) {
+ when(result.iteratorForAppenders().hasNext()).thenReturn(true);
+
when(result.iteratorForAppenders().next().getName()).thenReturn(appenderName);
+ if (isFileAppender) {
+ FileAppender appender = mock(FileAppender.class,
RETURNS_DEEP_STUBS);
+ when(appender.getName()).thenReturn(appenderName);
+ when(appender.getFile()).thenReturn("foo_file");
+ LayoutWrappingEncoder<?> encoder =
mock(LayoutWrappingEncoder.class);
+ PatternLayoutBase layout = mock(PatternLayoutBase.class);
+ when(layout.getPattern()).thenReturn("foo_pattern");
+ when(encoder.getLayout()).thenReturn(layout);
+ when(appender.getEncoder()).thenReturn(encoder);
+
when(result.iteratorForAppenders().next()).thenReturn(appender);
+ }
+ }
+ return result;
+ }
+
+ private void assertLogger1(final ShardingSphereLogger actual) {
+ assertThat(actual.getLoggerName(), is("FOO"));
+ assertThat(actual.getLevel(), is("INFO"));
+ assertFalse(actual.getAdditivity());
+ assertThat(actual.getAppenderName(), is("fooAppenderName"));
+ }
+
+ private void assertLogger2(final ShardingSphereLogger actual) {
+ assertThat(actual.getLoggerName(), is("BAR"));
+ assertThat(actual.getLevel(), is("INFO"));
+ assertFalse(actual.getAdditivity());
+ assertNull(actual.getAppenderName());
+ }
+
+ @Test
+ void assertGetDefaultAppenders() {
+ Logger logger1 = mockLogger("FOO", Level.INFO, "fooAppenderName",
true);
+ Logger logger2 = mockLogger("BAR", Level.INFO, "barAppenderName",
false);
+ Logger logger3 = mockLogger("EMPTY_APPENDER", Level.INFO, null, false);
+ LoggerContext loggerContext = mock(LoggerContext.class);
+ when(loggerContext.getLoggerList()).thenReturn(Arrays.asList(logger1,
logger2, logger3));
+ List<ShardingSphereAppender> actual = new
ArrayList<>(builder.getDefaultAppenders(loggerContext));
+ assertThat(actual.size(), is(2));
+ assertAppender1(actual.get(0));
+ assertAppender2(actual.get(1));
+ }
+
+ private void assertAppender1(final ShardingSphereAppender actual) {
+ assertThat(actual.getAppenderName(), is("barAppenderName"));
+ assertThat(actual.getPattern(), is(""));
+ assertNull(actual.getFile());
+ }
+
+ private void assertAppender2(final ShardingSphereAppender actual) {
+ assertThat(actual.getAppenderName(), is("fooAppenderName"));
+ assertThat(actual.getPattern(), is("foo_pattern"));
+ assertThat(actual.getFile(), is("foo_file"));
+ }
+}