执行器回调线程优化,回调地址为空时销毁问题修复;

master
xuxueli 5 years ago
parent 33a3e4f617
commit f754b1ce6d
  1. 1
      doc/XXL-JOB官方文档.md
  2. 28
      xxl-job-core/pom.xml
  3. 25
      xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java
  4. 554
      xxl-job-core/src/test/java/com/xxl/job/core/biz/impl/ExecutorBizImplTest.java

@ -1478,6 +1478,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 12、首页调度报表的日期排序在TIDB下乱序问题修复;
- 13、调度中心与执行器双向通讯超时时间调整为3s;
- 14、调度组件销毁流程优化,先停止调度线程,然后等待时间轮内存量任务处理完成,最终销毁时间轮线程;
- 15、执行器回调线程优化,回调地址为空时销毁问题修复;
### 6.26 版本 v2.1.1 Release Notes[规划中]

@ -44,31 +44,11 @@
<scope>provided</scope>
</dependency>
<!-- junit -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.6.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.6.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.diffblue</groupId>
<artifactId>deeptestutils</artifactId>
<version>1.9.0</version>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

@ -133,20 +133,25 @@ public class TriggerCallbackThread {
public void toStop(){
toStop = true;
// stop callback, interrupt and wait
triggerCallbackThread.interrupt();
try {
triggerCallbackThread.join();
} catch (InterruptedException e) {
logger.error(e.getMessage(), e);
if (triggerCallbackThread != null) { // support empty admin address
triggerCallbackThread.interrupt();
try {
triggerCallbackThread.join();
} catch (InterruptedException e) {
logger.error(e.getMessage(), e);
}
}
// stop retry, interrupt and wait
triggerRetryCallbackThread.interrupt();
try {
triggerRetryCallbackThread.join();
} catch (InterruptedException e) {
logger.error(e.getMessage(), e);
if (triggerRetryCallbackThread != null) {
triggerRetryCallbackThread.interrupt();
try {
triggerRetryCallbackThread.join();
} catch (InterruptedException e) {
logger.error(e.getMessage(), e);
}
}
}
/**

@ -1,441 +1,143 @@
package com.xxl.job.core.biz.impl;
import static org.mockito.AdditionalMatchers.or;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.isA;
import static org.mockito.Matchers.isNull;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import com.diffblue.deeptestutils.Reflector;
import com.diffblue.deeptestutils.mock.DTUMemberMatcher;
import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.model.LogResult;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam;
import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
import com.xxl.job.core.executor.XxlJobExecutor;
import com.xxl.job.core.glue.GlueTypeEnum;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.impl.ScriptJobHandler;
import com.xxl.job.core.log.XxlJobFileAppender;
import com.xxl.job.core.thread.JobThread;
import com.xxl.rpc.remoting.invoker.call.CallType;
import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;
import com.xxl.rpc.remoting.invoker.route.LoadBalance;
import com.xxl.rpc.remoting.net.NetEnum;
import com.xxl.rpc.serialize.Serializer;
import org.junit.After;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.Timeout;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.api.mockito.expectation.PowerMockitoStubber;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"javax.management.*"})
public class ExecutorBizImplTest {
@Rule public final ExpectedException thrown = ExpectedException.none();
@Rule public final Timeout globalTimeout = new Timeout(10000);
/* testedClasses: ExecutorBizImpl */
// Test written by Diffblue Cover.
@Test
public void beatOutputNotNull() {
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
// Act
final ReturnT<String> retval = objectUnderTest.beat();
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
// Test written by Diffblue Cover.
@Test
public void constructorOutputVoid() {
// Act, creating object to test constructor
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
// Method returns void, testing that no exception is thrown
}
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, ConcurrentHashMap.class, XxlJobExecutor.class})
@Test
public void idleBeatInputZeroOutputNotNull() throws Exception, InvocationTargetException {
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final int jobId = 0;
final ConcurrentHashMap concurrentHashMap1 = PowerMockito.mock(ConcurrentHashMap.class);
final JobThread jobThread =
(JobThread)Reflector.getInstance("com.xxl.job.core.thread.JobThread");
Reflector.setField(jobThread, "stopReason", null);
Reflector.setField(jobThread, "running", true);
Reflector.setField(jobThread, "jobId", 0);
Reflector.setField(jobThread, "idleTimes", 0);
Reflector.setField(jobThread, "toStop", false);
Reflector.setField(jobThread, "triggerQueue", null);
Reflector.setField(jobThread, "handler", null);
Reflector.setField(jobThread, "triggerLogIdSet", null);
final Method getMethod = DTUMemberMatcher.method(ConcurrentHashMap.class, "get", Object.class);
PowerMockito.doReturn(jobThread)
.when(concurrentHashMap1, getMethod)
.withArguments(or(isA(Object.class), isNull(Object.class)));
final ConcurrentHashMap concurrentHashMap = PowerMockito.mock(ConcurrentHashMap.class);
PowerMockito.whenNew(ConcurrentHashMap.class)
.withNoArguments()
.thenReturn(concurrentHashMap)
.thenReturn(concurrentHashMap1);
// Act
final ReturnT<String> retval = objectUnderTest.idleBeat(jobId);
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(500, retval.getCode());
Assert.assertEquals("job thread is running or has trigger queue.", retval.getMsg());
}
// Test written by Diffblue Cover.
@PrepareForTest({LinkedBlockingQueue.class, ExecutorBizImpl.class, ConcurrentHashMap.class,
XxlJobExecutor.class})
@Test
public void
idleBeatInputZeroOutputNotNull2() throws Exception, InvocationTargetException {
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final int jobId = 0;
final ConcurrentHashMap concurrentHashMap1 = PowerMockito.mock(ConcurrentHashMap.class);
final JobThread jobThread =
(JobThread)Reflector.getInstance("com.xxl.job.core.thread.JobThread");
Reflector.setField(jobThread, "stopReason", null);
Reflector.setField(jobThread, "running", false);
Reflector.setField(jobThread, "jobId", 0);
Reflector.setField(jobThread, "idleTimes", 0);
Reflector.setField(jobThread, "toStop", false);
final LinkedBlockingQueue linkedBlockingQueue = PowerMockito.mock(LinkedBlockingQueue.class);
final Method sizeMethod = DTUMemberMatcher.method(LinkedBlockingQueue.class, "size");
PowerMockito.doReturn(0).when(linkedBlockingQueue, sizeMethod).withNoArguments();
Reflector.setField(jobThread, "triggerQueue", linkedBlockingQueue);
Reflector.setField(jobThread, "handler", null);
Reflector.setField(jobThread, "triggerLogIdSet", null);
final Method getMethod = DTUMemberMatcher.method(ConcurrentHashMap.class, "get", Object.class);
PowerMockito.doReturn(jobThread)
.when(concurrentHashMap1, getMethod)
.withArguments(or(isA(Object.class), isNull(Object.class)));
final ConcurrentHashMap concurrentHashMap = PowerMockito.mock(ConcurrentHashMap.class);
PowerMockito.whenNew(ConcurrentHashMap.class)
.withNoArguments()
.thenReturn(concurrentHashMap)
.thenReturn(concurrentHashMap1);
// Act
final ReturnT<String> retval = objectUnderTest.idleBeat(jobId);
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, ConcurrentHashMap.class, XxlJobExecutor.class})
@Test
public void idleBeatInputZeroOutputNotNull3() throws Exception, InvocationTargetException {
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final int jobId = 0;
final ConcurrentHashMap concurrentHashMap1 = PowerMockito.mock(ConcurrentHashMap.class);
final Method getMethod = DTUMemberMatcher.method(ConcurrentHashMap.class, "get", Object.class);
PowerMockito.doReturn(null)
.when(concurrentHashMap1, getMethod)
.withArguments(or(isA(Object.class), isNull(Object.class)));
final ConcurrentHashMap concurrentHashMap = PowerMockito.mock(ConcurrentHashMap.class);
PowerMockito.whenNew(ConcurrentHashMap.class)
.withNoArguments()
.thenReturn(concurrentHashMap)
.thenReturn(concurrentHashMap1);
// Act
final ReturnT<String> retval = objectUnderTest.idleBeat(jobId);
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
import java.util.concurrent.TimeUnit;
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, ConcurrentHashMap.class, XxlJobExecutor.class})
@Test
public void killInputZeroOutputNotNull() throws Exception, InvocationTargetException {
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final int jobId = 0;
final ConcurrentHashMap concurrentHashMap1 = PowerMockito.mock(ConcurrentHashMap.class);
final JobThread jobThread =
(JobThread)Reflector.getInstance("com.xxl.job.core.thread.JobThread");
Reflector.setField(jobThread, "stopReason", null);
Reflector.setField(jobThread, "running", false);
Reflector.setField(jobThread, "jobId", 0);
Reflector.setField(jobThread, "idleTimes", 0);
Reflector.setField(jobThread, "toStop", false);
Reflector.setField(jobThread, "triggerQueue", null);
Reflector.setField(jobThread, "handler", null);
Reflector.setField(jobThread, "triggerLogIdSet", null);
final Method getMethod = DTUMemberMatcher.method(ConcurrentHashMap.class, "get", Object.class);
PowerMockito.doReturn(jobThread)
.when(concurrentHashMap1, getMethod)
.withArguments(or(isA(Object.class), isNull(Object.class)));
final Method removeMethod =
DTUMemberMatcher.method(ConcurrentHashMap.class, "remove", Object.class);
PowerMockito.doReturn(null)
.when(concurrentHashMap1, removeMethod)
.withArguments(or(isA(Object.class), isNull(Object.class)));
final ConcurrentHashMap concurrentHashMap = PowerMockito.mock(ConcurrentHashMap.class);
PowerMockito.whenNew(ConcurrentHashMap.class)
.withNoArguments()
.thenReturn(concurrentHashMap)
.thenReturn(concurrentHashMap1);
// Act
final ReturnT<String> retval = objectUnderTest.kill(jobId);
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, ConcurrentHashMap.class, XxlJobExecutor.class})
@Test
public void killInputZeroOutputNotNull2() throws Exception, InvocationTargetException {
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final int jobId = 0;
final ConcurrentHashMap concurrentHashMap1 = PowerMockito.mock(ConcurrentHashMap.class);
final Method getMethod = DTUMemberMatcher.method(ConcurrentHashMap.class, "get", Object.class);
PowerMockito.doReturn(null)
.when(concurrentHashMap1, getMethod)
.withArguments(or(isA(Object.class), isNull(Object.class)));
final ConcurrentHashMap concurrentHashMap = PowerMockito.mock(ConcurrentHashMap.class);
PowerMockito.whenNew(ConcurrentHashMap.class)
.withNoArguments()
.thenReturn(concurrentHashMap)
.thenReturn(concurrentHashMap1);
// Act
final ReturnT<String> retval = objectUnderTest.kill(jobId);
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertEquals("job thread aleady killed.", retval.getMsg());
}
// Test written by Diffblue Cover.
@PrepareForTest({XxlJobFileAppender.class, ExecutorBizImpl.class})
@Test
public void logInputZeroZeroZeroOutputNotNull() throws Exception, InvocationTargetException {
// Setup mocks
PowerMockito.mockStatic(XxlJobFileAppender.class);
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final long logDateTim = 0L;
final int logId = 0;
final int fromLineNum = 0;
final ReturnT returnT = PowerMockito.mock(ReturnT.class);
PowerMockito.whenNew(ReturnT.class)
.withParameterTypes(Object.class)
.withArguments(or(isA(Object.class), isNull(Object.class)))
.thenReturn(returnT);
final Date date = PowerMockito.mock(Date.class);
Reflector.setField(date, "fastTime", 1_515_585_600_000L);
PowerMockito.whenNew(Date.class)
.withParameterTypes(long.class)
.withArguments(anyLong())
.thenReturn(date);
final LogResult logResult =
(LogResult)Reflector.getInstance("com.xxl.job.core.biz.model.LogResult");
final Method readLogMethod =
DTUMemberMatcher.method(XxlJobFileAppender.class, "readLog", String.class, int.class);
PowerMockito.doReturn(logResult)
.when(XxlJobFileAppender.class, readLogMethod)
.withArguments(or(isA(String.class), isNull(String.class)), anyInt());
final Method makeLogFileNameMethod =
DTUMemberMatcher.method(XxlJobFileAppender.class, "makeLogFileName", Date.class, int.class);
PowerMockito.doReturn("?")
.when(XxlJobFileAppender.class, makeLogFileNameMethod)
.withArguments(or(isA(Date.class), isNull(Date.class)), anyInt());
// Act
final ReturnT<LogResult> retval = objectUnderTest.log(logDateTim, logId, fromLineNum);
// Assert result
Assert.assertNotNull(retval);
}
// Test written by Diffblue Cover.
@PrepareForTest({XxlJobExecutor.class, GlueTypeEnum.class, JobThread.class, ExecutorBizImpl.class,
TriggerParam.class})
@Test
public void
runInputNotNullOutputNotNull() throws Exception, InvocationTargetException {
// Setup mocks
PowerMockito.mockStatic(XxlJobExecutor.class);
PowerMockito.mockStatic(GlueTypeEnum.class);
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final TriggerParam triggerParam = PowerMockito.mock(TriggerParam.class);
final Method getJobIdMethod = DTUMemberMatcher.method(TriggerParam.class, "getJobId");
PowerMockito.doReturn(0).when(triggerParam, getJobIdMethod).withNoArguments();
final Method getGlueTypeMethod = DTUMemberMatcher.method(TriggerParam.class, "getGlueType");
((PowerMockitoStubber)PowerMockito.doReturn("?").doReturn("?"))
.when(triggerParam, getGlueTypeMethod)
.withNoArguments();
final ReturnT returnT = PowerMockito.mock(ReturnT.class);
PowerMockito.whenNew(ReturnT.class)
.withParameterTypes(int.class, String.class)
.withArguments(anyInt(), or(isA(String.class), isNull(String.class)))
.thenReturn(returnT);
final GlueTypeEnum glueTypeEnum = PowerMockito.mock(GlueTypeEnum.class);
final Method isScriptMethod = DTUMemberMatcher.method(GlueTypeEnum.class, "isScript");
PowerMockito.doReturn(false).when(glueTypeEnum, isScriptMethod).withNoArguments();
final Method matchMethod = DTUMemberMatcher.method(GlueTypeEnum.class, "match", String.class);
PowerMockito.doReturn(glueTypeEnum)
.when(GlueTypeEnum.class, matchMethod)
.withArguments(or(isA(String.class), isNull(String.class)));
final JobThread jobThread = PowerMockito.mock(JobThread.class);
final IJobHandler iJobHandler =
(IJobHandler)Reflector.getInstance("com.xxl.job.core.handler.IJobHandler");
final Method getHandlerMethod = DTUMemberMatcher.method(JobThread.class, "getHandler");
PowerMockito.doReturn(iJobHandler).when(jobThread, getHandlerMethod).withNoArguments();
final Method loadJobThreadMethod =
DTUMemberMatcher.method(XxlJobExecutor.class, "loadJobThread", int.class);
PowerMockito.doReturn(jobThread)
.when(XxlJobExecutor.class, loadJobThreadMethod)
.withArguments(anyInt());
// Act
final ReturnT<String> retval = objectUnderTest.run(triggerParam);
// Assert result
Assert.assertNotNull(retval);
}
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, XxlJobExecutor.class, TriggerParam.class, JobThread.class,
GlueTypeEnum.class})
@Test
public void
runInputNotNullOutputNotNull2() throws Exception, InvocationTargetException {
// Setup mocks
PowerMockito.mockStatic(GlueTypeEnum.class);
PowerMockito.mockStatic(XxlJobExecutor.class);
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
final TriggerParam triggerParam = PowerMockito.mock(TriggerParam.class);
final Method getJobIdMethod = DTUMemberMatcher.method(TriggerParam.class, "getJobId");
((PowerMockitoStubber)PowerMockito.doReturn(0).doReturn(0).doReturn(0))
.when(triggerParam, getJobIdMethod)
.withNoArguments();
final Method getGlueTypeMethod = DTUMemberMatcher.method(TriggerParam.class, "getGlueType");
((PowerMockitoStubber)PowerMockito.doReturn("?").doReturn("?"))
.when(triggerParam, getGlueTypeMethod)
.withNoArguments();
final Method getGlueUpdatetimeMethod =
DTUMemberMatcher.method(TriggerParam.class, "getGlueUpdatetime");
PowerMockito.doReturn(0L).when(triggerParam, getGlueUpdatetimeMethod).withNoArguments();
final Method getGlueSourceMethod = DTUMemberMatcher.method(TriggerParam.class, "getGlueSource");
PowerMockito.doReturn("?").when(triggerParam, getGlueSourceMethod).withNoArguments();
final ScriptJobHandler scriptJobHandler = PowerMockito.mock(ScriptJobHandler.class);
PowerMockito.whenNew(ScriptJobHandler.class)
.withParameterTypes(int.class, long.class, String.class, GlueTypeEnum.class)
.withArguments(anyInt(), anyLong(), or(isA(String.class), isNull(String.class)),
or(isA(GlueTypeEnum.class), isNull(GlueTypeEnum.class)))
.thenReturn(scriptJobHandler);
final JobThread jobThread = PowerMockito.mock(JobThread.class);
final ReturnT returnT = (ReturnT)Reflector.getInstance("com.xxl.job.core.biz.model.ReturnT");
final Method pushTriggerQueueMethod =
DTUMemberMatcher.method(JobThread.class, "pushTriggerQueue", TriggerParam.class);
PowerMockito.doReturn(returnT)
.when(jobThread, pushTriggerQueueMethod)
.withArguments(or(isA(TriggerParam.class), isNull(TriggerParam.class)));
final Method registJobThreadMethod = DTUMemberMatcher.method(
XxlJobExecutor.class, "registJobThread", int.class, IJobHandler.class, String.class);
PowerMockito.doReturn(jobThread)
.when(XxlJobExecutor.class, registJobThreadMethod)
.withArguments(anyInt(), or(isA(IJobHandler.class), isNull(IJobHandler.class)),
or(isA(String.class), isNull(String.class)));
final GlueTypeEnum glueTypeEnum1 =
(GlueTypeEnum)Reflector.getInstance("com.xxl.job.core.glue.GlueTypeEnum");
final GlueTypeEnum glueTypeEnum = PowerMockito.mock(GlueTypeEnum.class);
final Method isScriptMethod = DTUMemberMatcher.method(GlueTypeEnum.class, "isScript");
PowerMockito.doReturn(true).when(glueTypeEnum, isScriptMethod).withNoArguments();
final Method matchMethod = DTUMemberMatcher.method(GlueTypeEnum.class, "match", String.class);
((PowerMockitoStubber)PowerMockito.doReturn(glueTypeEnum).doReturn(glueTypeEnum1))
.when(GlueTypeEnum.class, matchMethod)
.withArguments(or(isA(String.class), isNull(String.class)));
final JobThread jobThread1 = PowerMockito.mock(JobThread.class);
final IJobHandler iJobHandler1 =
(IJobHandler)Reflector.getInstance("com.xxl.job.core.handler.IJobHandler");
final IJobHandler iJobHandler =
(IJobHandler)Reflector.getInstance("com.xxl.job.core.handler.IJobHandler");
final Method getHandlerMethod = DTUMemberMatcher.method(JobThread.class, "getHandler");
((PowerMockitoStubber)PowerMockito.doReturn(iJobHandler).doReturn(iJobHandler1))
.when(jobThread1, getHandlerMethod)
.withNoArguments();
final Method loadJobThreadMethod =
DTUMemberMatcher.method(XxlJobExecutor.class, "loadJobThread", int.class);
PowerMockito.doReturn(jobThread1)
.when(XxlJobExecutor.class, loadJobThreadMethod)
.withArguments(anyInt());
// Act
final ReturnT<String> retval = objectUnderTest.run(triggerParam);
// Assert result
Assert.assertNotNull(retval);
}
// Test written by Diffblue Cover.
@Test
public void staticInitOutputVoid() throws InvocationTargetException {
public class ExecutorBizImplTest {
// Act, using constructor to test static initializer
final Object constructed = Reflector.getInstance("com.xxl.job.core.biz.impl.ExecutorBizImpl");
public XxlJobExecutor xxlJobExecutor = null;
public ExecutorBiz executorBiz = null;
@Before
public void before() throws Exception {
// init executor
xxlJobExecutor = new XxlJobExecutor();
xxlJobExecutor.setAdminAddresses(null);
xxlJobExecutor.setAppName("xxl-job-executor-sample");
xxlJobExecutor.setIp(null);
xxlJobExecutor.setPort(9999);
xxlJobExecutor.setAccessToken(null);
xxlJobExecutor.setLogPath("/data/applogs/xxl-job/jobhandler");
xxlJobExecutor.setLogRetentionDays(-1);
// start executor
xxlJobExecutor.start();
TimeUnit.SECONDS.sleep(3);
// init executor biz proxy
executorBiz = (ExecutorBiz) new XxlRpcReferenceBean(
NetEnum.NETTY_HTTP,
Serializer.SerializeEnum.HESSIAN.getSerializer(),
CallType.SYNC,
LoadBalance.ROUND,
ExecutorBiz.class,
null,
3000,
"127.0.0.1:9999",
null,
null,
null).getObject();
}
@After
public void after(){
if (xxlJobExecutor != null) {
xxlJobExecutor.destroy();
}
}
@Test
public void beat() {
// Act
final ReturnT<String> retval = executorBiz.beat();
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>) retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
@Test
public void idleBeat(){
final int jobId = 0;
// Act
final ReturnT<String> retval = executorBiz.idleBeat(jobId);
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>) retval).getContent());
Assert.assertEquals(500, retval.getCode());
Assert.assertEquals("job thread is running or has trigger queue.", retval.getMsg());
}
@Test
public void kill(){
final int jobId = 0;
// Act
final ReturnT<String> retval = executorBiz.kill(jobId);
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>) retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
@Test
public void log(){
final long logDateTim = 0L;
final int logId = 0;
final int fromLineNum = 0;
// Act
final ReturnT<LogResult> retval = executorBiz.log(logDateTim, logId, fromLineNum);
// Assert result
Assert.assertNotNull(retval);
}
@Test
public void run(){
// trigger data
final TriggerParam triggerParam = new TriggerParam();
triggerParam.setJobId(1);
triggerParam.setExecutorHandler("demoJobHandler");
triggerParam.setExecutorParams(null);
triggerParam.setExecutorBlockStrategy(ExecutorBlockStrategyEnum.COVER_EARLY.name());
triggerParam.setGlueType(GlueTypeEnum.BEAN.name());
triggerParam.setGlueSource(null);
triggerParam.setGlueUpdatetime(System.currentTimeMillis());
triggerParam.setLogId(1);
triggerParam.setLogDateTim(System.currentTimeMillis());
// Act
final ReturnT<String> retval = executorBiz.run(triggerParam);
// Assert result
Assert.assertNotNull(retval);
}
// Method returns void, testing that no exception is thrown
}
}

Loading…
Cancel
Save