You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ki...@apache.org on 2021/07/29 10:41:49 UTC
[dolphinscheduler] branch 1.3.7-prepare updated: add http task
timeout & test unit. (#5915)
This is an automated email from the ASF dual-hosted git repository.
kirs pushed a commit to branch 1.3.7-prepare
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/1.3.7-prepare by this push:
new 0a388af add http task timeout & test unit. (#5915)
0a388af is described below
commit 0a388afa672cf876f90433e260b41d951d9cf6d9
Author: Kerwin <37...@users.noreply.github.com>
AuthorDate: Thu Jul 29 18:41:39 2021 +0800
add http task timeout & test unit. (#5915)
---
.../common/task/http/HttpParameters.java | 27 +++
.../common/task/HttpParametersTest.java | 80 ++++++++
.../server/worker/task/http/HttpTask.java | 3 +-
.../server/worker/task/http/HttpTaskTest.java | 206 +++++++++++++++++++++
.../pages/dag/_source/formModel/tasks/http.vue | 56 +++++-
.../src/js/module/i18n/locale/en_US.js | 6 +
.../src/js/module/i18n/locale/zh_CN.js | 6 +
pom.xml | 3 +-
8 files changed, 382 insertions(+), 5 deletions(-)
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/http/HttpParameters.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/http/HttpParameters.java
index 54284bd..22e833d 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/http/HttpParameters.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/http/HttpParameters.java
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.dolphinscheduler.common.task.http;
import org.apache.dolphinscheduler.common.enums.HttpCheckCondition;
@@ -55,7 +56,17 @@ public class HttpParameters extends AbstractParameters {
*/
private String condition;
+ /**
+ * Connect Timeout
+ * Unit: ms
+ */
+ private int connectTimeout ;
+ /**
+ * Socket Timeout
+ * Unit: ms
+ */
+ private int socketTimeout ;
@Override
public boolean checkParameters() {
@@ -106,4 +117,20 @@ public class HttpParameters extends AbstractParameters {
public void setCondition(String condition) {
this.condition = condition;
}
+
+ public int getConnectTimeout() {
+ return connectTimeout;
+ }
+
+ public void setConnectTimeout(int connectTimeout) {
+ this.connectTimeout = connectTimeout;
+ }
+
+ public int getSocketTimeout() {
+ return socketTimeout;
+ }
+
+ public void setSocketTimeout(int socketTimeout) {
+ this.socketTimeout = socketTimeout;
+ }
}
diff --git a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/task/HttpParametersTest.java b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/task/HttpParametersTest.java
new file mode 100644
index 0000000..b8f3fe8
--- /dev/null
+++ b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/task/HttpParametersTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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.dolphinscheduler.common.task;
+
+import com.alibaba.fastjson.JSON;
+import org.apache.dolphinscheduler.common.enums.HttpCheckCondition;
+import org.apache.dolphinscheduler.common.enums.HttpMethod;
+import org.apache.dolphinscheduler.common.task.http.HttpParameters;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * http parameter
+ */
+public class HttpParametersTest {
+
+ @Test
+ public void testGenerator(){
+ String paramData = "{\"localParams\":[],\"httpParams\":[],\"url\":\"https://www.baidu.com/\"," +
+ "\"httpMethod\":\"GET\",\"httpCheckCondition\":\"STATUS_CODE_DEFAULT\",\"condition\":\"\",\"connectTimeout\":\"10000\",\"socketTimeout\":\"10000\"}";
+ HttpParameters httpParameters = JSON.parseObject(paramData, HttpParameters.class);
+
+ Assert.assertEquals(10000,httpParameters.getConnectTimeout() );
+ Assert.assertEquals(10000,httpParameters.getSocketTimeout());
+ Assert.assertEquals("https://www.baidu.com/",httpParameters.getUrl());
+ Assert.assertEquals(HttpMethod.GET,httpParameters.getHttpMethod());
+ Assert.assertEquals(HttpCheckCondition.STATUS_CODE_DEFAULT,httpParameters.getHttpCheckCondition());
+ Assert.assertEquals("",httpParameters.getCondition());
+
+ }
+
+ @Test
+ public void testCheckParameters(){
+ String paramData = "{\"localParams\":[],\"httpParams\":[],\"url\":\"https://www.baidu.com/\"," +
+ "\"httpMethod\":\"GET\",\"httpCheckCondition\":\"STATUS_CODE_DEFAULT\",\"condition\":\"\",\"connectTimeout\":\"10000\",\"socketTimeout\":\"10000\"}";
+ HttpParameters httpParameters = JSON.parseObject(paramData, HttpParameters.class);
+
+ Assert.assertTrue( httpParameters.checkParameters());
+ Assert.assertEquals(10000,httpParameters.getConnectTimeout() );
+ Assert.assertEquals(10000,httpParameters.getSocketTimeout());
+ Assert.assertEquals("https://www.baidu.com/",httpParameters.getUrl());
+ Assert.assertEquals(HttpMethod.GET,httpParameters.getHttpMethod());
+ Assert.assertEquals(HttpCheckCondition.STATUS_CODE_DEFAULT,httpParameters.getHttpCheckCondition());
+ Assert.assertEquals("",httpParameters.getCondition());
+
+ }
+
+ @Test
+ public void testCheckValues() {
+ String paramData = "{\"localParams\":[],\"httpParams\":[],\"url\":\"https://www.baidu.com/\"," +
+ "\"httpMethod\":\"GET\",\"httpCheckCondition\":\"STATUS_CODE_DEFAULT\",\"condition\":\"\",\"connectTimeout\":\"10000\",\"socketTimeout\":\"10000\"}";
+ HttpParameters httpParameters = JSON.parseObject(paramData, HttpParameters.class);
+
+ Assert.assertTrue( httpParameters.checkParameters());
+ Assert.assertEquals(10000,httpParameters.getConnectTimeout() );
+ Assert.assertEquals(10000,httpParameters.getSocketTimeout());
+ Assert.assertEquals("https://www.baidu.com/",httpParameters.getUrl());
+ Assert.assertEquals(HttpMethod.GET,httpParameters.getHttpMethod());
+ Assert.assertEquals(HttpCheckCondition.STATUS_CODE_DEFAULT,httpParameters.getHttpCheckCondition());
+ Assert.assertEquals("",httpParameters.getCondition());
+ Assert.assertEquals(0,httpParameters.getLocalParametersMap().size());
+ Assert.assertEquals(0,httpParameters.getResourceFilesList().size());
+ }
+
+}
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
index ef1ccdd..8dc5659 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTask.java
@@ -51,7 +51,6 @@ import org.slf4j.Logger;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -303,7 +302,7 @@ public class HttpTask extends AbstractTask {
* @return RequestConfig
*/
private RequestConfig requestConfig() {
- return RequestConfig.custom().setSocketTimeout(MAX_CONNECTION_MILLISECONDS).setConnectTimeout(MAX_CONNECTION_MILLISECONDS).build();
+ return RequestConfig.custom().setSocketTimeout(httpParameters.getSocketTimeout()).setConnectTimeout(httpParameters.getConnectTimeout()).build();
}
/**
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTaskTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTaskTest.java
new file mode 100644
index 0000000..3ece0e8
--- /dev/null
+++ b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/worker/task/http/HttpTaskTest.java
@@ -0,0 +1,206 @@
+/*
+ * 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.dolphinscheduler.server.worker.task.http;
+
+import com.alibaba.fastjson.JSON;
+import org.apache.dolphinscheduler.common.enums.HttpCheckCondition;
+import org.apache.dolphinscheduler.common.enums.HttpMethod;
+import org.apache.dolphinscheduler.common.task.http.HttpParameters;
+import org.apache.dolphinscheduler.common.utils.OSUtils;
+import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+import org.apache.dolphinscheduler.server.entity.TaskExecutionContext;
+import org.apache.dolphinscheduler.server.worker.task.ShellCommandExecutor;
+import org.apache.dolphinscheduler.server.worker.task.TaskProps;
+import org.apache.dolphinscheduler.service.bean.SpringApplicationContext;
+import org.apache.dolphinscheduler.service.process.ProcessService;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.RequestBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.ApplicationContext;
+
+import java.io.IOException;
+import java.util.Date;
+
+import static org.apache.dolphinscheduler.common.enums.CommandType.START_PROCESS;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(OSUtils.class)
+@PowerMockIgnore({"javax.management.*","javax.net.ssl.*"})
+public class HttpTaskTest {
+ private static final Logger logger = LoggerFactory.getLogger(HttpTaskTest.class);
+
+ private HttpTask httpTask;
+
+ private ProcessService processService;
+
+ private ShellCommandExecutor shellCommandExecutor;
+
+ private ApplicationContext applicationContext;
+ private TaskExecutionContext taskExecutionContext;
+
+ @Before
+ public void before() throws Exception {
+ taskExecutionContext = new TaskExecutionContext();
+
+ PowerMockito.mockStatic(OSUtils.class);
+ processService = PowerMockito.mock(ProcessService.class);
+ shellCommandExecutor = PowerMockito.mock(ShellCommandExecutor.class);
+
+ applicationContext = PowerMockito.mock(ApplicationContext.class);
+ SpringApplicationContext springApplicationContext = new SpringApplicationContext();
+ springApplicationContext.setApplicationContext(applicationContext);
+ PowerMockito.when(applicationContext.getBean(ProcessService.class)).thenReturn(processService);
+
+ TaskProps props = new TaskProps();
+ props.setExecutePath("/tmp");
+ props.setTaskAppId(String.valueOf(System.currentTimeMillis()));
+ props.setTaskInstanceId(1);
+ props.setTenantCode("1");
+ props.setEnvFile(".dolphinscheduler_env.sh");
+ props.setTaskStartTime(new Date());
+ props.setTaskTimeout(0);
+ props.setTaskParams(
+ "{\"localParams\":[],\"httpParams\":[],\"url\":\"https://github.com/\",\"httpMethod\":\"GET\"," +
+ "\"httpCheckCondition\":\"STATUS_CODE_DEFAULT\",\"condition\":\"https://github.com/\"," +
+ "\"connectTimeout\":\"1000\",\"socketTimeout\":\"1000\"}");
+
+
+ taskExecutionContext = Mockito.mock(TaskExecutionContext.class);
+ Mockito.when(taskExecutionContext.getTaskParams()).thenReturn(props.getTaskParams());
+ Mockito.when(taskExecutionContext.getExecutePath()).thenReturn("/tmp");
+ Mockito.when(taskExecutionContext.getTaskAppId()).thenReturn("1");
+ Mockito.when(taskExecutionContext.getTenantCode()).thenReturn("root");
+ Mockito.when(taskExecutionContext.getStartTime()).thenReturn(new Date());
+ Mockito.when(taskExecutionContext.getTaskTimeout()).thenReturn(10000);
+ Mockito.when(taskExecutionContext.getLogPath()).thenReturn("/tmp/dx");
+
+ httpTask = new HttpTask(taskExecutionContext, logger);
+ httpTask.init();
+
+ }
+
+ @Test
+ public void testGetParameters() {
+ Assert.assertNotNull(httpTask.getParameters());
+ }
+
+
+ @Test
+ public void testCheckParameters() {
+ Assert.assertTrue(httpTask.getParameters().checkParameters());
+ }
+
+
+ @Test
+ public void testGenerator(){
+ String paramJson = "{\"localParams\":[],\"httpParams\":[],\"url\":\"https://github.com/\"," +
+ "\"httpMethod\":\"GET\",\"httpCheckCondition\":\"STATUS_CODE_DEFAULT\",\"condition\":\"\",\"connectTimeout\":\"10000\",\"socketTimeout\":\"10000\"}";
+ HttpParameters httpParameters = JSON.parseObject(paramJson, HttpParameters.class);
+
+
+ Assert.assertEquals(10000,httpParameters.getConnectTimeout() );
+ Assert.assertEquals(10000,httpParameters.getSocketTimeout());
+ Assert.assertEquals("https://github.com/",httpParameters.getUrl());
+ Assert.assertEquals(HttpMethod.GET,httpParameters.getHttpMethod());
+ Assert.assertEquals(HttpCheckCondition.STATUS_CODE_DEFAULT,httpParameters.getHttpCheckCondition());
+ Assert.assertEquals("",httpParameters.getCondition());
+
+ }
+
+ @Test
+ public void testHandle(){
+ boolean flag = true ;
+ try {
+ httpTask.handle();
+ } catch (Exception e) {
+ flag = false ;
+ e.printStackTrace();
+ }
+
+ Assert.assertTrue(flag);
+
+ }
+
+ @Test
+ public void testSendRequest(){
+
+ CloseableHttpClient client = httpTask.createHttpClient();
+
+ String statusCode = null;
+ String body = null;
+
+ try {
+
+ CloseableHttpResponse response = httpTask.sendRequest(client) ;
+ statusCode = String.valueOf(httpTask.getStatusCode(response));
+ body = httpTask.getResponseBody(response);
+ int exitStatusCode = httpTask.validResponse(body, statusCode);
+
+ Assert.assertNotEquals(-1,exitStatusCode);
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ };
+ }
+
+ @Test
+ public void testValidResponse(){
+ String body = "body";
+ String statusCode = "200" ;
+
+ int exitStatusCode = httpTask.validResponse(body,statusCode);
+ Assert.assertNotEquals(-1,exitStatusCode);
+
+ }
+
+ @Test
+ public void testAppendMessage(){
+ httpTask.appendMessage("message");
+
+ Assert.assertEquals("message",httpTask.getOutput());
+ }
+
+ @Test
+ public void testCreateHttpClient(){
+ Assert.assertNotNull(httpTask.createHttpClient());
+ }
+
+ @Test
+ public void testCreateRequestBuilder(){
+ RequestBuilder requestBuilder = httpTask.createRequestBuilder();
+ Assert.assertEquals(RequestBuilder.get().getMethod(),requestBuilder.getMethod());
+ }
+
+ private ProcessInstance getProcessInstance() {
+ ProcessInstance processInstance = new ProcessInstance();
+ processInstance.setCommandType(START_PROCESS);
+ processInstance.setScheduleTime(new Date());
+ return processInstance;
+ }
+}
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/http.vue b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/http.vue
index 3e2f6ef..bbf91b3 100644
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/http.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/http.vue
@@ -85,6 +85,38 @@
</x-input>
</div>
</m-list-box>
+
+ <m-list-box >
+ <div slot="text">{{$t('Timeout Settings')}}</div>
+ <div slot="content">
+ <label class="label-box">
+ <div style="padding-top: 5px;">
+ <x-switch
+ v-model="timeoutSettings"
+ :disabled="isDetails"
+ ></x-switch>
+ </div>
+ </label>
+ </div>
+ </m-list-box>
+
+ <div class="clearfix list" v-if = "timeoutSettings" >
+ <div class="text-box">
+ <span>{{$t('Connect Timeout')}}</span>
+ </div>
+ <div class="cont-box">
+ <span class="label-box" style="width: 193px;display: inline-block;" >
+ <x-input v-model='connectTimeout' maxlength="7" />
+ </span>
+ <span>{{$t('ms')}}</span>
+ <span class="text-b">{{$t('Socket Timeout')}}</span>
+ <span class="label-box" style="width: 193px;display: inline-block;" >
+ <x-input v-model='socketTimeout' maxlength="7" />
+ </span>
+ <span>{{$t('ms')}}</span>
+ </div>
+ </div>
+
<m-list-box>
<div slot="text">{{$t('Custom Parameters')}}</div>
<div slot="content">
@@ -110,6 +142,9 @@
name: 'http',
data () {
return {
+ timeoutSettings: false,
+ connectTimeout : 60000,
+ socketTimeout : 60000,
url: '',
condition: '',
localParams: [],
@@ -152,6 +187,14 @@
if (!this.$refs.refHttpParams._verifValue()) {
return false
}
+ if (!_.isNumber(parseInt(this.socketTimeout))) {
+ this.$message.warning(`${i18n.$t('Socket Timeout be a positive integer')}`)
+ return false
+ }
+ if (!_.isNumber(parseInt(this.connectTimeout))) {
+ this.$message.warning(`${i18n.$t('Connect timeout be a positive integer')}`)
+ return false
+ }
// storage
this.$emit('on-params', {
localParams: this.localParams,
@@ -159,7 +202,9 @@
url: this.url,
httpMethod: this.httpMethod,
httpCheckCondition: this.httpCheckCondition,
- condition: this.condition
+ condition: this.condition,
+ connectTimeout : this.connectTimeout ,
+ socketTimeout : this.socketTimeout
})
return true
}
@@ -172,7 +217,9 @@
url: this.url,
httpMethod: this.httpMethod,
httpCheckCondition: this.httpCheckCondition,
- condition: this.condition
+ condition: this.condition,
+ connectTimeout : this.connectTimeout ,
+ socketTimeout : this.socketTimeout
}
}
},
@@ -193,6 +240,11 @@
this.httpMethod = o.params.httpMethod || 'GET'
this.httpCheckCondition = o.params.httpCheckCondition || 'DEFAULT'
this.condition = o.params.condition || ''
+ this.connectTimeout = o.params.connectTimeout
+ this.socketTimeout = o.params.socketTimeout
+ if(this.connectTimeout != 60000 || this.socketTimeout != 60000 ){
+ this.timeoutSettings = true
+ }
// backfill localParams
let localParams = o.params.localParams || []
if (localParams.length) {
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
index 83b5757..796c7f8 100755
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
@@ -547,6 +547,12 @@ export default {
'Http Condition': 'Http Condition',
'Please Enter Http Url': 'Please Enter Http Url(required)',
'Please Enter Http Condition': 'Please Enter Http Condition',
+ 'Timeout Settings': 'Timeout Settings',
+ 'Connect Timeout':'Connect Timeout',
+ 'Socket Timeout':'Socket Timeout',
+ 'Connect timeout be a positive integer': 'Connect timeout be a positive integer',
+ 'Socket Timeout be a positive integer': 'Socket Timeout be a positive integer',
+ 'ms':'ms',
'There is no data for this period of time': 'There is no data for this period of time',
'Worker addresses cannot be empty': 'Worker addresses cannot be empty',
'Please generate token': 'Please generate token',
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
index a120953..285d5db 100755
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
@@ -547,6 +547,12 @@ export default {
'Http Condition': '校验内容',
'Please Enter Http Url': '请填写请求地址(必填)',
'Please Enter Http Condition': '请填写校验内容',
+ 'Timeout Settings': '超时设置',
+ 'Connect Timeout':'连接超时',
+ 'Socket Timeout':'Socket超时',
+ 'Connect timeout be a positive integer': '连接超时必须为数字',
+ 'Socket Timeout be a positive integer': 'Socket超时必须为数字',
+ 'ms':'毫秒',
'There is no data for this period of time': '该时间段无数据',
'Worker addresses cannot be empty': 'Worker地址不能为空',
'Please generate token': '请生成Token',
diff --git a/pom.xml b/pom.xml
index c5ada2c..65830b6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -757,6 +757,7 @@
<include>**/common/shell/ShellExecutorTest.java</include>
<include>**/common/task/EntityTestUtils.java</include>
<include>**/common/task/FlinkParametersTest.java</include>
+ <include>**/common/task/HttpParametersTest.java</include>
<include>**/common/task/SqlParametersTest.java</include>
<include>**/common/task/SqoopParameterEntityTest.java</include>
<include>**/common/threadutils/ThreadPoolExecutorsTest.java</include>
@@ -839,7 +840,7 @@
<include>**/server/worker/sql/SqlExecutorTest.java</include>
<include>**/server/worker/task/spark/SparkTaskTest.java</include>
<include>**/server/worker/task/EnvFileTest.java</include>
- <include>**/server/worker/task/spark/SparkTaskTest.java</include>
+ <include>**/server/worker/task/http/HttpTaskTest.java</include>
<include>**/server/worker/task/sqoop/SqoopTaskTest.java</include>
<include>**/server/worker/EnvFileTest.java</include>
<include>**/service/process/ProcessServiceTest.java</include>