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"));
+    }
+}

Reply via email to