This is an automated email from the ASF dual-hosted git repository.
caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new cd63069317 [Improvement-15692][task-datasync] rewrite the mockito test
file for DatasyncTaskTest. (#15693)
cd63069317 is described below
commit cd63069317783a542eb1ee302f23d31b53ca4e4a
Author: Tq <[email protected]>
AuthorDate: Mon Mar 11 16:54:55 2024 +0800
[Improvement-15692][task-datasync] rewrite the mockito test file for
DatasyncTaskTest. (#15693)
* 15692 rewrite the mockito test file for DatasyncTaskTest.
* fix format
---
.../plugin/task/datasync/DatasyncTaskTest.java | 142 ++++++++++++---------
1 file changed, 80 insertions(+), 62 deletions(-)
diff --git
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java
index 9f741e0360..11625ee399 100644
---
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java
+++
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/test/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncTaskTest.java
@@ -20,8 +20,6 @@ package org.apache.dolphinscheduler.plugin.task.datasync;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.mockStatic;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
@@ -33,6 +31,10 @@ import
software.amazon.awssdk.services.datasync.model.CancelTaskExecutionRequest
import
software.amazon.awssdk.services.datasync.model.CancelTaskExecutionResponse;
import software.amazon.awssdk.services.datasync.model.CreateTaskRequest;
import software.amazon.awssdk.services.datasync.model.CreateTaskResponse;
+import
software.amazon.awssdk.services.datasync.model.DescribeTaskExecutionRequest;
+import
software.amazon.awssdk.services.datasync.model.DescribeTaskExecutionResponse;
+import software.amazon.awssdk.services.datasync.model.DescribeTaskRequest;
+import software.amazon.awssdk.services.datasync.model.DescribeTaskResponse;
import
software.amazon.awssdk.services.datasync.model.StartTaskExecutionRequest;
import
software.amazon.awssdk.services.datasync.model.StartTaskExecutionResponse;
import software.amazon.awssdk.services.datasync.model.TaskExecutionStatus;
@@ -42,9 +44,9 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
+import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
@@ -56,26 +58,22 @@ public class DatasyncTaskTest {
private static final String mockTaskArn =
"arn:aws:datasync:ap-northeast-3:523202806641:task/task-071ca64ff4c2f0d4a";
- DatasyncHook datasyncHook;
-
+ @InjectMocks
+ @Spy
DatasyncTask datasyncTask;
+ @Mock
+ TaskExecutionContext taskExecutionContext;
+
+ @Spy
+ @InjectMocks
+ DatasyncHook datasyncHook;
+
@Mock
DataSyncClient client;
- MockedStatic<DatasyncHook> datasyncHookMockedStatic;
+
@BeforeEach
public void before() throws IllegalAccessException {
- client = mock(DataSyncClient.class);
- datasyncHookMockedStatic = mockStatic(DatasyncHook.class);
- when(DatasyncHook.createClient()).thenReturn(client);
-
- DatasyncParameters DatasyncParameters = new DatasyncParameters();
- datasyncTask = initTask(DatasyncParameters);
- datasyncTask.setHook(datasyncHook);
- }
-
- @Test
- public void testCreateTaskJson() {
String jsonData = "{\n" +
" \"CloudWatchLogGroupArn\":
\"arn:aws:logs:ap-northeast-3:523202806641:log-group:/aws/datasync:*\",\n"
+
@@ -123,12 +121,16 @@ public class DatasyncTaskTest {
" }\n" +
" ]\n" +
"}";
- DatasyncParameters DatasyncParameters = new DatasyncParameters();
- DatasyncParameters.setJsonFormat(true);
- DatasyncParameters.setJson(jsonData);
+ DatasyncParameters parameters = new DatasyncParameters();
+ parameters.setJson(jsonData);
+ parameters.setJsonFormat(true);
+ datasyncTask = initTask(JSONUtils.toJsonString(parameters));
+ }
+
+ @Test
+ public void testCreateTaskJson() {
+ DatasyncParameters datasyncParameters = datasyncTask.getParameters();
- DatasyncTask DatasyncTask = initTask(DatasyncParameters);
- DatasyncParameters datasyncParameters = DatasyncTask.getParameters();
Assertions.assertEquals("arn:aws:logs:ap-northeast-3:523202806641:log-group:/aws/datasync:*",
datasyncParameters.getCloudWatchLogGroupArn());
Assertions.assertEquals("task001", datasyncParameters.getName());
@@ -145,86 +147,102 @@ public class DatasyncTaskTest {
Assertions.assertEquals("* * * * * ?",
datasyncParameters.getSchedule().getScheduleExpression());
Assertions.assertEquals("aTime",
datasyncParameters.getOptions().getAtime());
Assertions.assertEquals(Long.valueOf(10),
datasyncParameters.getOptions().getBytesPerSecond());
- datasyncHookMockedStatic.close();
}
@Test
public void testCheckCreateTask() {
- DatasyncHook hook = spy(new DatasyncHook());
CreateTaskResponse response = mock(CreateTaskResponse.class);
- when(client.createTask((CreateTaskRequest)
any())).thenReturn(response);
SdkHttpResponse sdkMock = mock(SdkHttpResponse.class);
+ DescribeTaskResponse describeTaskResponse =
mock(DescribeTaskResponse.class);
+ when(client.createTask((CreateTaskRequest)
any())).thenReturn(response);
when(response.sdkHttpResponse()).thenReturn(sdkMock);
+ when(describeTaskResponse.sdkHttpResponse()).thenReturn(sdkMock);
when(sdkMock.isSuccessful()).thenReturn(true);
when(response.taskArn()).thenReturn(mockTaskArn);
+ when(client.describeTask((DescribeTaskRequest)
any())).thenReturn(describeTaskResponse);
+ when(describeTaskResponse.status()).thenReturn(TaskStatus.AVAILABLE);
- doReturn(true).when(hook).doubleCheckTaskStatus(any(), any());
- hook.createDatasyncTask(datasyncTask.getParameters());
- Assertions.assertEquals(mockTaskArn, hook.getTaskArn());
- datasyncHookMockedStatic.close();
+ Boolean flag =
datasyncHook.createDatasyncTask(datasyncTask.getParameters());
+
+ Assertions.assertEquals(mockTaskArn, datasyncHook.getTaskArn());
+ Assertions.assertTrue(flag);
}
@Test
public void testStartTask() {
- DatasyncHook hook = spy(new DatasyncHook());
StartTaskExecutionResponse response =
mock(StartTaskExecutionResponse.class);
- when(client.startTaskExecution((StartTaskExecutionRequest)
any())).thenReturn(response);
SdkHttpResponse sdkMock = mock(SdkHttpResponse.class);
+ DescribeTaskExecutionResponse describeTaskExecutionResponse =
mock(DescribeTaskExecutionResponse.class);
+
+ when(client.startTaskExecution((StartTaskExecutionRequest)
any())).thenReturn(response);
when(response.sdkHttpResponse()).thenReturn(sdkMock);
when(sdkMock.isSuccessful()).thenReturn(true);
when(response.taskExecutionArn()).thenReturn(mockExeArn);
- doReturn(true).when(hook).doubleCheckExecStatus(any(), any());
- hook.startDatasyncTask();
- Assertions.assertEquals(mockExeArn, hook.getTaskExecArn());
- datasyncHookMockedStatic.close();
+
when(describeTaskExecutionResponse.sdkHttpResponse()).thenReturn(sdkMock);
+ when(client.describeTaskExecution((DescribeTaskExecutionRequest)
any()))
+ .thenReturn(describeTaskExecutionResponse);
+
when(describeTaskExecutionResponse.status()).thenReturn(TaskExecutionStatus.LAUNCHING);
+ Boolean executionFlag = datasyncHook.startDatasyncTask();
+
+ Assertions.assertEquals(mockExeArn, datasyncHook.getTaskExecArn());
+ Assertions.assertTrue(executionFlag);
}
@Test
public void testCancelTask() {
- DatasyncHook hook = spy(new DatasyncHook());
CancelTaskExecutionResponse response =
mock(CancelTaskExecutionResponse.class);
- when(client.cancelTaskExecution((CancelTaskExecutionRequest)
any())).thenReturn(response);
SdkHttpResponse sdkMock = mock(SdkHttpResponse.class);
+ when(client.cancelTaskExecution((CancelTaskExecutionRequest)
any())).thenReturn(response);
when(response.sdkHttpResponse()).thenReturn(sdkMock);
when(sdkMock.isSuccessful()).thenReturn(true);
- Assertions.assertEquals(true, hook.cancelDatasyncTask());
- datasyncHookMockedStatic.close();
+ Assertions.assertEquals(true, datasyncHook.cancelDatasyncTask());
}
@Test
public void testDescribeTask() {
- DatasyncHook hook = spy(new DatasyncHook());
- doReturn(null).when(hook).queryDatasyncTaskStatus();
- Assertions.assertEquals(false,
hook.doubleCheckTaskStatus(TaskStatus.AVAILABLE, DatasyncHook.taskFinishFlags));
+ SdkHttpResponse sdkMock = mock(SdkHttpResponse.class);
+ DescribeTaskResponse failed = mock(DescribeTaskResponse.class);
+ DescribeTaskResponse available = mock(DescribeTaskResponse.class);
- doReturn(TaskStatus.AVAILABLE).when(hook).queryDatasyncTaskStatus();
- Assertions.assertEquals(true,
hook.doubleCheckTaskStatus(TaskStatus.AVAILABLE, DatasyncHook.taskFinishFlags));
- datasyncHookMockedStatic.close();
+ when(client.describeTask((DescribeTaskRequest)
any())).thenReturn(failed);
+ when(failed.sdkHttpResponse()).thenReturn(sdkMock);
+ when(sdkMock.isSuccessful()).thenReturn(true);
+ when(failed.status()).thenReturn(TaskStatus.UNKNOWN_TO_SDK_VERSION);
+ Assertions.assertEquals(false,
+ datasyncHook.doubleCheckTaskStatus(TaskStatus.AVAILABLE,
DatasyncHook.taskFinishFlags));
+
+ when(client.describeTask((DescribeTaskRequest)
any())).thenReturn(available);
+ when(available.sdkHttpResponse()).thenReturn(sdkMock);
+ when(sdkMock.isSuccessful()).thenReturn(true);
+ when(available.status()).thenReturn(TaskStatus.AVAILABLE);
+ Assertions.assertEquals(true,
+ datasyncHook.doubleCheckTaskStatus(TaskStatus.AVAILABLE,
DatasyncHook.taskFinishFlags));
}
@Test
public void testDescribeTaskExec() {
- DatasyncHook hook = spy(new DatasyncHook());
- doReturn(null).when(hook).queryDatasyncTaskExecStatus();
+ SdkHttpResponse sdkMock = mock(SdkHttpResponse.class);
+ DescribeTaskExecutionResponse failed =
mock(DescribeTaskExecutionResponse.class);
+ DescribeTaskExecutionResponse success =
mock(DescribeTaskExecutionResponse.class);
+
+ when(client.describeTaskExecution((DescribeTaskExecutionRequest)
any())).thenReturn(failed);
+ when(failed.sdkHttpResponse()).thenReturn(sdkMock);
+ when(sdkMock.isSuccessful()).thenReturn(true);
+
when(failed.status()).thenReturn(TaskExecutionStatus.UNKNOWN_TO_SDK_VERSION);
Assertions.assertEquals(false,
- hook.doubleCheckExecStatus(TaskExecutionStatus.SUCCESS,
DatasyncHook.doneStatus));
+
datasyncHook.doubleCheckExecStatus(TaskExecutionStatus.SUCCESS,
DatasyncHook.doneStatus));
-
doReturn(TaskExecutionStatus.SUCCESS).when(hook).queryDatasyncTaskExecStatus();
- Assertions.assertEquals(true,
hook.doubleCheckExecStatus(TaskExecutionStatus.SUCCESS,
DatasyncHook.doneStatus));
- datasyncHookMockedStatic.close();
+ when(client.describeTaskExecution((DescribeTaskExecutionRequest)
any())).thenReturn(success);
+ when(success.sdkHttpResponse()).thenReturn(sdkMock);
+ when(sdkMock.isSuccessful()).thenReturn(true);
+ when(success.status()).thenReturn(TaskExecutionStatus.SUCCESS);
+ Assertions.assertEquals(true,
+
datasyncHook.doubleCheckExecStatus(TaskExecutionStatus.SUCCESS,
DatasyncHook.doneStatus));
}
- private DatasyncTask initTask(DatasyncParameters DatasyncParameters) {
- TaskExecutionContext taskExecutionContext =
createContext(DatasyncParameters);
- DatasyncTask datasyncTask = new DatasyncTask(taskExecutionContext);
+ private DatasyncTask initTask(String contextJson) {
+ doReturn(contextJson).when(taskExecutionContext).getTaskParams();
datasyncTask.init();
return datasyncTask;
}
-
- public TaskExecutionContext createContext(DatasyncParameters
DatasyncParameters) {
- String parameters = JSONUtils.toJsonString(DatasyncParameters);
- TaskExecutionContext taskExecutionContext =
Mockito.mock(TaskExecutionContext.class);
-
Mockito.when(taskExecutionContext.getTaskParams()).thenReturn(parameters);
- return taskExecutionContext;
- }
}