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

This commit is contained in:
xuxueli 2019-07-06 18:05:26 +08:00
parent 33a3e4f617
commit f754b1ce6d
4 changed files with 127 additions and 439 deletions

View File

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

View File

@ -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>

View File

@ -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);
}
}
}
/**

View File

@ -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;
import java.util.concurrent.TimeUnit;
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({"javax.management.*"})
public class ExecutorBizImplTest {
@Rule public final ExpectedException thrown = ExpectedException.none();
@Rule public final Timeout globalTimeout = new Timeout(10000);
public XxlJobExecutor xxlJobExecutor = null;
public ExecutorBiz executorBiz = null;
/* testedClasses: ExecutorBizImpl */
// Test written by Diffblue Cover.
@Test
public void beatOutputNotNull() {
@Before
public void before() throws Exception {
// Arrange
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
// 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);
// Act
final ReturnT<String> retval = objectUnderTest.beat();
// start executor
xxlJobExecutor.start();
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
TimeUnit.SECONDS.sleep(3);
// Test written by Diffblue Cover.
// 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();
}
@Test
public void constructorOutputVoid() {
@After
public void after(){
if (xxlJobExecutor != null) {
xxlJobExecutor.destroy();
}
}
// Act, creating object to test constructor
final ExecutorBizImpl objectUnderTest = new ExecutorBizImpl();
// Method returns void, testing that no exception is thrown
}
@Test
public void beat() {
// Act
final ReturnT<String> retval = executorBiz.beat();
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, ConcurrentHashMap.class, XxlJobExecutor.class})
@Test
public void idleBeatInputZeroOutputNotNull() throws Exception, InvocationTargetException {
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>) retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
// 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);
@Test
public void idleBeat(){
final int jobId = 0;
// Act
final ReturnT<String> retval = objectUnderTest.idleBeat(jobId);
// 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());
}
// 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 {
@Test
public void kill(){
final int jobId = 0;
// 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 = executorBiz.kill(jobId);
// 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());
}
// 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;
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, ConcurrentHashMap.class, XxlJobExecutor.class})
@Test
public void idleBeatInputZeroOutputNotNull3() throws Exception, InvocationTargetException {
// Act
final ReturnT<LogResult> retval = executorBiz.log(logDateTim, logId, fromLineNum);
// 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);
// Assert result
Assert.assertNotNull(retval);
}
// Act
final ReturnT<String> retval = objectUnderTest.idleBeat(jobId);
@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());
// Assert result
Assert.assertNotNull(retval);
Assert.assertNull(((ReturnT<String>)retval).getContent());
Assert.assertEquals(200, retval.getCode());
Assert.assertNull(retval.getMsg());
}
// Act
final ReturnT<String> retval = executorBiz.run(triggerParam);
// Test written by Diffblue Cover.
@PrepareForTest({ExecutorBizImpl.class, ConcurrentHashMap.class, XxlJobExecutor.class})
@Test
public void killInputZeroOutputNotNull() throws Exception, InvocationTargetException {
// Assert result
Assert.assertNotNull(retval);
}
// 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 {
// Act, using constructor to test static initializer
final Object constructed = Reflector.getInstance("com.xxl.job.core.biz.impl.ExecutorBizImpl");
// Method returns void, testing that no exception is thrown
}
}