You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by wu...@apache.org on 2022/10/11 08:25:25 UTC
[shardingsphere-elasticjob] branch master updated: Support building project by Java 19 (#2130)
This is an automated email from the ASF dual-hosted git repository.
wuweijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob.git
The following commit(s) were added to refs/heads/master by this push:
new 76199ab2e Support building project by Java 19 (#2130)
76199ab2e is described below
commit 76199ab2e48875eddf92ef34c6126599869d2205
Author: 吴伟杰 <wu...@apache.org>
AuthorDate: Tue Oct 11 16:25:19 2022 +0800
Support building project by Java 19 (#2130)
* Bump plugins and dependencies
* Refactor LogJobErrorHandlerTest
* Refactor WechatJobErrorHandlerTest
* Refactor DingtalkJobErrorHandlerTest
* Refactor EmailJobErrorHandlerTest
* Bump Java to 19 in maven.yml
---
.github/workflows/maven.yml | 4 +-
.../dingtalk/DingtalkJobErrorHandlerTest.java | 78 +++++++++-------------
.../src/test/resources/logback-test.xml | 22 ++----
.../handler/email/EmailJobErrorHandlerTest.java | 61 ++++++++---------
.../src/test/resources/logback-test.xml | 22 ++----
.../elasticjob-error-handler-general/pom.xml | 6 ++
.../handler/general/LogJobErrorHandlerTest.java | 64 ++++++++----------
.../src/test/resources/logback-test.xml | 26 ++------
.../handler/wechat/WechatJobErrorHandlerTest.java | 73 +++++++++-----------
.../src/test/resources/logback-test.xml | 22 ++----
pom.xml | 10 +--
11 files changed, 150 insertions(+), 238 deletions(-)
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 639a5f4f5..b37a9bc92 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -30,7 +30,7 @@ jobs:
build:
strategy:
matrix:
- java: [ 8, 11, 17 ]
+ java: [ 8, 17, 19 ]
os: [ 'windows-latest', 'macos-latest', 'ubuntu-latest' ]
runs-on: ${{ matrix.os }}
@@ -52,4 +52,4 @@ jobs:
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
- file: '**/target/site/jacoco/jacoco.xml'
\ No newline at end of file
+ file: '**/target/site/jacoco/jacoco.xml'
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandlerTest.java b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandlerTest.java
index 1dfdff5b4..58f1685cf 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandlerTest.java
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/dingtalk/DingtalkJobErrorHandlerTest.java
@@ -17,7 +17,9 @@
package org.apache.shardingsphere.elasticjob.error.handler.dingtalk;
-import lombok.SneakyThrows;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
import org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandlerFactory;
import org.apache.shardingsphere.elasticjob.error.handler.dingtalk.fixture.DingtalkInternalController;
import org.apache.shardingsphere.elasticjob.infra.exception.JobConfigurationException;
@@ -25,22 +27,17 @@ import org.apache.shardingsphere.elasticjob.restful.NettyRestfulService;
import org.apache.shardingsphere.elasticjob.restful.NettyRestfulServiceConfiguration;
import org.apache.shardingsphere.elasticjob.restful.RestfulService;
import org.junit.AfterClass;
+import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import java.util.List;
import java.util.Properties;
-import static org.mockito.Mockito.verify;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
-@RunWith(MockitoJUnitRunner.class)
public final class DingtalkJobErrorHandlerTest {
private static final int PORT = 9875;
@@ -49,9 +46,9 @@ public final class DingtalkJobErrorHandlerTest {
private static RestfulService restfulService;
- @Mock
- private Logger log;
+ private static List<LoggingEvent> appenderList;
+ @SuppressWarnings({"unchecked", "rawtypes"})
@BeforeClass
public static void init() {
NettyRestfulServiceConfiguration config = new NettyRestfulServiceConfiguration(PORT);
@@ -59,6 +56,14 @@ public final class DingtalkJobErrorHandlerTest {
config.addControllerInstances(new DingtalkInternalController());
restfulService = new NettyRestfulService(config);
restfulService.startup();
+ ch.qos.logback.classic.Logger log = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(DingtalkJobErrorHandler.class);
+ ListAppender<LoggingEvent> appender = (ListAppender) log.getAppender("DingtalkJobErrorHandlerTestAppender");
+ appenderList = appender.list;
+ }
+
+ @Before
+ public void setUp() {
+ appenderList.clear();
}
@AfterClass
@@ -71,62 +76,57 @@ public final class DingtalkJobErrorHandlerTest {
@Test
public void assertHandleExceptionWithNotifySuccessful() {
DingtalkJobErrorHandler actual = getDingtalkJobErrorHandler(createConfigurationProperties("http://localhost:9875/send?access_token=mocked_token"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).info("An exception has occurred in Job '{}', an dingtalk message been sent successful.", "test_job", cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.INFO));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job', an dingtalk message been sent successful."));
}
@Test
public void assertHandleExceptionWithWrongToken() {
DingtalkJobErrorHandler actual = getDingtalkJobErrorHandler(createConfigurationProperties("http://localhost:9875/send?access_token=wrong_token"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).error("An exception has occurred in Job '{}' but failed to send dingtalk because of: {}", "test_job", "token is not exist", cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job' but failed to send dingtalk because of: token is not exist"));
}
@Test
public void assertHandleExceptionWithUrlIsNotFound() {
DingtalkJobErrorHandler actual = getDingtalkJobErrorHandler(createConfigurationProperties("http://localhost:9875/404"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).error("An exception has occurred in Job '{}' but failed to send dingtalk because of: unexpected http response status: {}", "test_job", 404, cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job' but failed to send dingtalk because of: unexpected http response status: 404"));
}
@Test
public void assertHandleExceptionWithWrongUrl() {
DingtalkJobErrorHandler actual = getDingtalkJobErrorHandler(createNoSignJobConfigurationProperties("http://wrongUrl"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).error("An exception has occurred in Job '{}', but failed to send dingtalk because of", "test_job", cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job', but failed to send dingtalk because of"));
}
@Test
public void assertHandleExceptionWithNoSign() {
DingtalkJobErrorHandler actual = getDingtalkJobErrorHandler(createNoSignJobConfigurationProperties("http://localhost:9875/send?access_token=mocked_token"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).info("An exception has occurred in Job '{}', an dingtalk message been sent successful.", "test_job", cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.INFO));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job', an dingtalk message been sent successful."));
}
private DingtalkJobErrorHandler getDingtalkJobErrorHandler(final Properties props) {
return (DingtalkJobErrorHandler) JobErrorHandlerFactory.createHandler("DINGTALK", props).orElseThrow(() -> new JobConfigurationException("DINGTALK error handler not found."));
}
- @SneakyThrows
- private void setStaticFieldValue(final DingtalkJobErrorHandler dingtalkJobErrorHandler) {
- Field field = dingtalkJobErrorHandler.getClass().getDeclaredField("log");
- field.setAccessible(true);
- Field modifiers = getModifierField();
- modifiers.setAccessible(true);
- modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
- field.set(dingtalkJobErrorHandler, log);
- }
-
private Properties createConfigurationProperties(final String webhook) {
Properties result = new Properties();
result.setProperty(DingtalkPropertiesConstants.WEBHOOK, webhook);
@@ -145,16 +145,4 @@ public final class DingtalkJobErrorHandlerTest {
result.setProperty(DingtalkPropertiesConstants.READ_TIMEOUT_MILLISECONDS, "6000");
return result;
}
-
- @SneakyThrows({NoSuchMethodException.class, IllegalAccessException.class, InvocationTargetException.class})
- private static Field getModifierField() {
- Method getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
- getDeclaredFields0.setAccessible(true);
- for (Field each : (Field[]) getDeclaredFields0.invoke(Field.class, false)) {
- if ("modifiers".equals(each.getName())) {
- return each;
- }
- }
- throw new UnsupportedOperationException();
- }
}
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/resources/logback-test.xml b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/resources/logback-test.xml
index 0af2535c6..a33f47dff 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/resources/logback-test.xml
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-dingtalk/src/test/resources/logback-test.xml
@@ -17,22 +17,8 @@
-->
<configuration>
- <property name="log.context.name" value="elasticjob-lite-core-test" />
- <property name="log.charset" value="UTF-8" />
- <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
-
- <contextName>${log.context.name}</contextName>
-
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>ERROR</level>
- </filter>
- <encoder charset="${log.charset}">
- <pattern>${log.pattern}</pattern>
- </encoder>
- </appender>
-
- <root>
- <appender-ref ref="STDOUT" />
- </root>
+ <appender name="DingtalkJobErrorHandlerTestAppender" class="ch.qos.logback.core.read.ListAppender" />
+ <logger name="org.apache.shardingsphere.elasticjob.error.handler.dingtalk.DingtalkJobErrorHandler" level="info" additivity="false">
+ <appender-ref ref="DingtalkJobErrorHandlerTestAppender" />
+ </logger>
</configuration>
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java
index 448eede65..dd3375932 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java
@@ -17,25 +17,30 @@
package org.apache.shardingsphere.elasticjob.error.handler.email;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
import lombok.SneakyThrows;
import org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandlerFactory;
import org.apache.shardingsphere.elasticjob.infra.exception.JobConfigurationException;
+import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import java.util.List;
import java.util.Properties;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -43,8 +48,7 @@ import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class EmailJobErrorHandlerTest {
- @Mock
- private Logger log;
+ private static List<LoggingEvent> appenderList;
@Mock
private Session session;
@@ -52,21 +56,34 @@ public final class EmailJobErrorHandlerTest {
@Mock
private Transport transport;
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @BeforeClass
+ public static void init() {
+ ch.qos.logback.classic.Logger log = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(EmailJobErrorHandler.class);
+ ListAppender<LoggingEvent> appender = (ListAppender) log.getAppender("EmailJobErrorHandlerTestAppender");
+ appenderList = appender.list;
+ }
+
+ @Before
+ public void setUp() {
+ appenderList.clear();
+ }
+
@Test
public void assertHandleExceptionWithMessagingException() {
EmailJobErrorHandler emailJobErrorHandler = getEmailJobErrorHandler(createConfigurationProperties());
- setStaticFieldValue(emailJobErrorHandler, "log", log);
Throwable cause = new RuntimeException("test");
String jobName = "test_job";
emailJobErrorHandler.handleException(jobName, cause);
- verify(log).error("An exception has occurred in Job '{}' but failed to send email because of", jobName, cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job' but failed to send email because of"));
}
@Test
@SneakyThrows
public void assertHandleExceptionSucceedInSendingEmail() {
EmailJobErrorHandler emailJobErrorHandler = getEmailJobErrorHandler(createConfigurationProperties());
- setStaticFieldValue(emailJobErrorHandler, "log", log);
setUpMockSession(session);
setFieldValue(emailJobErrorHandler, "session", session);
Throwable cause = new RuntimeException("test");
@@ -74,7 +91,9 @@ public final class EmailJobErrorHandlerTest {
when(session.getTransport()).thenReturn(transport);
emailJobErrorHandler.handleException(jobName, cause);
verify(transport).sendMessage(any(Message.class), any(Address[].class));
- verify(log).info("An exception has occurred in Job '{}', an email has been sent successfully.", jobName, cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.INFO));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job', an email has been sent successfully."));
}
private EmailJobErrorHandler getEmailJobErrorHandler(final Properties props) {
@@ -87,16 +106,6 @@ public final class EmailJobErrorHandlerTest {
when(session.getProperties()).thenReturn(props);
}
- @SneakyThrows
- private void setStaticFieldValue(final EmailJobErrorHandler wechatJobErrorHandler, final String name, final Object value) {
- Field fieldLog = wechatJobErrorHandler.getClass().getDeclaredField(name);
- fieldLog.setAccessible(true);
- Field modifiers = getModifierField();
- modifiers.setAccessible(true);
- modifiers.setInt(fieldLog, fieldLog.getModifiers() & ~Modifier.FINAL);
- fieldLog.set(wechatJobErrorHandler, value);
- }
-
@SneakyThrows
private void setFieldValue(final Object target, final String fieldName, final Object fieldValue) {
Field field = target.getClass().getDeclaredField(fieldName);
@@ -118,16 +127,4 @@ public final class EmailJobErrorHandlerTest {
result.setProperty(EmailPropertiesConstants.BCC, "bcc@xxx.xx");
return result;
}
-
- @SneakyThrows({NoSuchMethodException.class, IllegalAccessException.class, InvocationTargetException.class})
- private static Field getModifierField() {
- Method getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
- getDeclaredFields0.setAccessible(true);
- for (Field each : (Field[]) getDeclaredFields0.invoke(Field.class, false)) {
- if ("modifiers".equals(each.getName())) {
- return each;
- }
- }
- throw new UnsupportedOperationException();
- }
}
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-email/src/test/resources/logback-test.xml
similarity index 57%
copy from elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml
copy to elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-email/src/test/resources/logback-test.xml
index 0af2535c6..dafd4e306 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-email/src/test/resources/logback-test.xml
@@ -17,22 +17,8 @@
-->
<configuration>
- <property name="log.context.name" value="elasticjob-lite-core-test" />
- <property name="log.charset" value="UTF-8" />
- <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
-
- <contextName>${log.context.name}</contextName>
-
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>ERROR</level>
- </filter>
- <encoder charset="${log.charset}">
- <pattern>${log.pattern}</pattern>
- </encoder>
- </appender>
-
- <root>
- <appender-ref ref="STDOUT" />
- </root>
+ <appender name="EmailJobErrorHandlerTestAppender" class="ch.qos.logback.core.read.ListAppender" />
+ <logger name="org.apache.shardingsphere.elasticjob.error.handler.email.EmailJobErrorHandler" level="info" additivity="false">
+ <appender-ref ref="EmailJobErrorHandlerTestAppender" />
+ </logger>
</configuration>
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/pom.xml b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/pom.xml
index 0c633b4e9..83863d7d2 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/pom.xml
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/pom.xml
@@ -61,5 +61,11 @@
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/general/LogJobErrorHandlerTest.java b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/general/LogJobErrorHandlerTest.java
index c8339f860..4b2277de7 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/general/LogJobErrorHandlerTest.java
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/general/LogJobErrorHandlerTest.java
@@ -17,57 +17,47 @@
package org.apache.shardingsphere.elasticjob.error.handler.general;
-import lombok.SneakyThrows;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
import org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandlerFactory;
import org.apache.shardingsphere.elasticjob.infra.exception.JobConfigurationException;
+import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import java.util.List;
import java.util.Properties;
-import static org.mockito.Mockito.verify;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
-@RunWith(MockitoJUnitRunner.class)
public final class LogJobErrorHandlerTest {
- @Mock
- private Logger log;
+ private static List<LoggingEvent> appenderList;
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @BeforeClass
+ public static void setupLogger() {
+ ch.qos.logback.classic.Logger log = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(LogJobErrorHandler.class);
+ ListAppender<LoggingEvent> appender = (ListAppender) log.getAppender("LogJobErrorHandlerTestAppender");
+ appenderList = appender.list;
+ }
+
+ @Before
+ public void setUp() {
+ appenderList.clear();
+ }
@Test
public void assertHandleException() {
LogJobErrorHandler actual = (LogJobErrorHandler) JobErrorHandlerFactory.createHandler("LOG", new Properties()).orElseThrow(() -> new JobConfigurationException("LOG error handler not found."));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).error("Job 'test_job' exception occur in job processing", cause);
- }
-
- @SneakyThrows
- private void setStaticFieldValue(final LogJobErrorHandler logJobErrorHandler) {
- Field field = logJobErrorHandler.getClass().getDeclaredField("log");
- field.setAccessible(true);
- Field modifiers = getModifierField();
- modifiers.setAccessible(true);
- modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
- field.set(logJobErrorHandler, log);
- }
-
- @SneakyThrows({NoSuchMethodException.class, IllegalAccessException.class, InvocationTargetException.class})
- private static Field getModifierField() {
- Method getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
- getDeclaredFields0.setAccessible(true);
- for (Field each : (Field[]) getDeclaredFields0.invoke(Field.class, false)) {
- if ("modifiers".equals(each.getName())) {
- return each;
- }
- }
- throw new UnsupportedOperationException();
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("Job 'test_job' exception occur in job processing"));
+ actual.close();
}
}
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/src/test/resources/logback-test.xml
similarity index 53%
copy from elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml
copy to elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/src/test/resources/logback-test.xml
index 0af2535c6..a0c3fbb71 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-general/src/test/resources/logback-test.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one or more
~ contributor license agreements. See the NOTICE file distributed with
@@ -17,22 +17,8 @@
-->
<configuration>
- <property name="log.context.name" value="elasticjob-lite-core-test" />
- <property name="log.charset" value="UTF-8" />
- <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
-
- <contextName>${log.context.name}</contextName>
-
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>ERROR</level>
- </filter>
- <encoder charset="${log.charset}">
- <pattern>${log.pattern}</pattern>
- </encoder>
- </appender>
-
- <root>
- <appender-ref ref="STDOUT" />
- </root>
-</configuration>
+ <appender name="LogJobErrorHandlerTestAppender" class="ch.qos.logback.core.read.ListAppender" />
+ <logger name="org.apache.shardingsphere.elasticjob.error.handler.general.LogJobErrorHandler" level="error" additivity="false">
+ <appender-ref ref="LogJobErrorHandlerTestAppender" />
+ </logger>
+</configuration>
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/wechat/WechatJobErrorHandlerTest.java b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/wechat/WechatJobErrorHandlerTest.java
index 717030132..e30470c80 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/wechat/WechatJobErrorHandlerTest.java
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/wechat/WechatJobErrorHandlerTest.java
@@ -17,7 +17,9 @@
package org.apache.shardingsphere.elasticjob.error.handler.wechat;
-import lombok.SneakyThrows;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
import org.apache.shardingsphere.elasticjob.error.handler.JobErrorHandlerFactory;
import org.apache.shardingsphere.elasticjob.error.handler.wechat.fixture.WechatInternalController;
import org.apache.shardingsphere.elasticjob.infra.exception.JobConfigurationException;
@@ -25,22 +27,17 @@ import org.apache.shardingsphere.elasticjob.restful.NettyRestfulService;
import org.apache.shardingsphere.elasticjob.restful.NettyRestfulServiceConfiguration;
import org.apache.shardingsphere.elasticjob.restful.RestfulService;
import org.junit.AfterClass;
+import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
+import java.util.List;
import java.util.Properties;
-import static org.mockito.Mockito.verify;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
-@RunWith(MockitoJUnitRunner.class)
public final class WechatJobErrorHandlerTest {
private static final int PORT = 9872;
@@ -49,9 +46,9 @@ public final class WechatJobErrorHandlerTest {
private static RestfulService restfulService;
- @Mock
- private Logger log;
+ private static List<LoggingEvent> appenderList;
+ @SuppressWarnings({"unchecked", "rawtypes"})
@BeforeClass
public static void init() {
NettyRestfulServiceConfiguration configuration = new NettyRestfulServiceConfiguration(PORT);
@@ -59,6 +56,14 @@ public final class WechatJobErrorHandlerTest {
configuration.addControllerInstances(new WechatInternalController());
restfulService = new NettyRestfulService(configuration);
restfulService.startup();
+ ch.qos.logback.classic.Logger log = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(WechatJobErrorHandler.class);
+ ListAppender<LoggingEvent> appender = (ListAppender) log.getAppender("WechatJobErrorHandlerTestAppender");
+ appenderList = appender.list;
+ }
+
+ @Before
+ public void setUp() {
+ appenderList.clear();
}
@AfterClass
@@ -71,53 +76,47 @@ public final class WechatJobErrorHandlerTest {
@Test
public void assertHandleExceptionWithNotifySuccessful() {
WechatJobErrorHandler actual = getWechatJobErrorHandler(createConfigurationProperties("http://localhost:9872/send?key=mocked_key"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).info("An exception has occurred in Job '{}', an wechat message has been sent successful.", "test_job", cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.INFO));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job', an wechat message has been sent successful."));
}
@Test
public void assertHandleExceptionWithWrongToken() {
WechatJobErrorHandler actual = getWechatJobErrorHandler(createConfigurationProperties("http://localhost:9872/send?key=wrong_key"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).error("An exception has occurred in Job '{}' but failed to send wechat because of: {}", "test_job", "token is invalid", cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job' but failed to send wechat because of: token is invalid"));
}
@Test
public void assertHandleExceptionWithWrongUrl() {
WechatJobErrorHandler actual = getWechatJobErrorHandler(createConfigurationProperties("http://wrongUrl"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).error("An exception has occurred in Job '{}' but failed to send wechat because of", "test_job", cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job' but failed to send wechat because of"));
}
@Test
public void assertHandleExceptionWithUrlIsNotFound() {
WechatJobErrorHandler actual = getWechatJobErrorHandler(createConfigurationProperties("http://localhost:9872/404"));
- setStaticFieldValue(actual);
Throwable cause = new RuntimeException("test");
actual.handleException("test_job", cause);
- verify(log).error("An exception has occurred in Job '{}' but failed to send wechat because of: unexpected http response status: {}", "test_job", 404, cause);
+ assertThat(appenderList.size(), is(1));
+ assertThat(appenderList.get(0).getLevel(), is(Level.ERROR));
+ assertThat(appenderList.get(0).getFormattedMessage(), is("An exception has occurred in Job 'test_job' but failed to send wechat because of: unexpected http response status: 404"));
}
private WechatJobErrorHandler getWechatJobErrorHandler(final Properties props) {
return (WechatJobErrorHandler) JobErrorHandlerFactory.createHandler("WECHAT", props).orElseThrow(() -> new JobConfigurationException("WECHAT error handler not found."));
}
- @SneakyThrows
- private void setStaticFieldValue(final WechatJobErrorHandler wechatJobErrorHandler) {
- Field field = wechatJobErrorHandler.getClass().getDeclaredField("log");
- field.setAccessible(true);
- Field modifiers = getModifierField();
- modifiers.setAccessible(true);
- modifiers.setInt(field, field.getModifiers() & ~Modifier.FINAL);
- field.set(wechatJobErrorHandler, log);
- }
-
private Properties createConfigurationProperties(final String webhook) {
Properties result = new Properties();
result.setProperty(WechatPropertiesConstants.WEBHOOK, webhook);
@@ -125,16 +124,4 @@ public final class WechatJobErrorHandlerTest {
result.setProperty(WechatPropertiesConstants.READ_TIMEOUT_MILLISECONDS, "2000");
return result;
}
-
- @SneakyThrows({NoSuchMethodException.class, IllegalAccessException.class, InvocationTargetException.class})
- private static Field getModifierField() {
- Method getDeclaredFields0 = Class.class.getDeclaredMethod("getDeclaredFields0", boolean.class);
- getDeclaredFields0.setAccessible(true);
- for (Field each : (Field[]) getDeclaredFields0.invoke(Field.class, false)) {
- if ("modifiers".equals(each.getName())) {
- return each;
- }
- }
- throw new UnsupportedOperationException();
- }
}
diff --git a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml
index 0af2535c6..624641fd5 100644
--- a/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml
+++ b/elasticjob-ecosystem/elasticjob-error-handler/elasticjob-error-handler-type/elasticjob-error-handler-wechat/src/test/resources/logback-test.xml
@@ -17,22 +17,8 @@
-->
<configuration>
- <property name="log.context.name" value="elasticjob-lite-core-test" />
- <property name="log.charset" value="UTF-8" />
- <property name="log.pattern" value="[%-5level] %date --%thread-- [%logger] %msg %n" />
-
- <contextName>${log.context.name}</contextName>
-
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>ERROR</level>
- </filter>
- <encoder charset="${log.charset}">
- <pattern>${log.pattern}</pattern>
- </encoder>
- </appender>
-
- <root>
- <appender-ref ref="STDOUT" />
- </root>
+ <appender name="WechatJobErrorHandlerTestAppender" class="ch.qos.logback.core.read.ListAppender" />
+ <logger name="org.apache.shardingsphere.elasticjob.error.handler.wechat.WechatJobErrorHandler" level="info" additivity="false">
+ <appender-ref ref="WechatJobErrorHandlerTestAppender" />
+ </logger>
</configuration>
diff --git a/pom.xml b/pom.xml
index cc1f6d7c8..c597462b5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,21 +73,21 @@
<h2.version>1.4.184</h2.version>
<junit.version>4.12</junit.version>
<hamcrest.version>2.2</hamcrest.version>
- <mockito.version>3.11.2</mockito.version>
+ <mockito.version>4.8.0</mockito.version>
- <apache-rat-plugin.version>0.12</apache-rat-plugin.version>
+ <apache-rat-plugin.version>0.15</apache-rat-plugin.version>
<maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
- <maven-jar-plugin.version>2.6</maven-jar-plugin.version>
+ <maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
<maven-surefire-report-plugin.version>2.18.1</maven-surefire-report-plugin.version>
<maven-site-plugin.version>3.4</maven-site-plugin.version>
<lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
<maven-plugin-plugin.version>3.4</maven-plugin-plugin.version>
- <maven-enforcer-plugin.version>1.4</maven-enforcer-plugin.version>
+ <maven-enforcer-plugin.version>3.1.0</maven-enforcer-plugin.version>
<maven-project-info-reports-plugin.version>2.8</maven-project-info-reports-plugin.version>
<maven-javadoc-plugin.version>3.3.0</maven-javadoc-plugin.version>
- <maven-source-plugin.version>2.4</maven-source-plugin.version>
+ <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
<maven-jxr-plugin.version>2.5</maven-jxr-plugin.version>
<coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
<cobertura-maven-plugin.version>2.7</cobertura-maven-plugin.version>