[Chore] [CI] Add api-test and e2e-test to spotless check (#16242)
This commit is contained in:
parent
177a001392
commit
565a91790a
|
|
@ -125,7 +125,7 @@ jobs:
|
|||
run: |
|
||||
./mvnw -B -f dolphinscheduler-api-test/pom.xml -am \
|
||||
-DfailIfNoTests=false \
|
||||
-Dspotless.skip=false \
|
||||
-Dspotless.skip=true \
|
||||
-Dtest=${{ matrix.case.class }} test
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ env:
|
|||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 120
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -31,17 +31,8 @@ import org.apache.dolphinscheduler.common.enums.FailureStrategy;
|
|||
import org.apache.dolphinscheduler.common.enums.ReleaseState;
|
||||
import org.apache.dolphinscheduler.common.enums.UserType;
|
||||
import org.apache.dolphinscheduler.common.enums.WarningType;
|
||||
import org.apache.dolphinscheduler.dao.entity.Project;
|
||||
import org.apache.dolphinscheduler.dao.entity.User;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
|
|
@ -51,6 +42,14 @@ import java.util.Date;
|
|||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
//TODO: Some test cases rely on ProcessInstance APIs. Should complete remaining cases after ProcessInstance related API tests done.
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
@Slf4j
|
||||
|
|
@ -80,7 +79,8 @@ public class ExecutorAPITest {
|
|||
public static void setup() {
|
||||
LoginPage loginPage = new LoginPage();
|
||||
HttpResponse loginHttpResponse = loginPage.login(username, password);
|
||||
sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
sessionId =
|
||||
JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
executorPage = new ExecutorPage(sessionId);
|
||||
processDefinitionPage = new ProcessDefinitionPage(sessionId);
|
||||
projectPage = new ProjectPage(sessionId);
|
||||
|
|
@ -103,7 +103,8 @@ public class ExecutorAPITest {
|
|||
HttpResponse createProjectResponse = projectPage.createProject(loginUser, "project-test");
|
||||
HttpResponse queryAllProjectListResponse = projectPage.queryAllProjectList(loginUser);
|
||||
Assertions.assertTrue(queryAllProjectListResponse.getBody().getSuccess());
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse.getBody().getData()).get(0)).get("code");
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse
|
||||
.getBody().getData()).get(0)).get("code");
|
||||
|
||||
// upload test workflow definition json
|
||||
ClassLoader classLoader = getClass().getClassLoader();
|
||||
|
|
@ -114,13 +115,18 @@ public class ExecutorAPITest {
|
|||
Assertions.assertTrue(data.contains("\"success\":true"));
|
||||
|
||||
// get workflow definition code
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse = processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse =
|
||||
processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
Assertions.assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getData().toString().contains("hello world"));
|
||||
processDefinitionCode = (long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
Assertions.assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getData().toString()
|
||||
.contains("hello world"));
|
||||
processDefinitionCode =
|
||||
(long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse
|
||||
.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
|
||||
// release test workflow
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser, projectCode, processDefinitionCode, ReleaseState.ONLINE);
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser,
|
||||
projectCode, processDefinitionCode, ReleaseState.ONLINE);
|
||||
Assertions.assertTrue(releaseProcessDefinitionResponse.getBody().getSuccess());
|
||||
|
||||
// trigger workflow instance
|
||||
|
|
@ -128,7 +134,8 @@ public class ExecutorAPITest {
|
|||
Date date = new Date();
|
||||
String scheduleTime = String.format("%s,%s", formatter.format(date), formatter.format(date));
|
||||
log.info("use current time {} as scheduleTime", scheduleTime);
|
||||
HttpResponse startProcessInstanceResponse = executorPage.startProcessInstance(loginUser, projectCode, processDefinitionCode, scheduleTime, FailureStrategy.END, WarningType.NONE);
|
||||
HttpResponse startProcessInstanceResponse = executorPage.startProcessInstance(loginUser, projectCode,
|
||||
processDefinitionCode, scheduleTime, FailureStrategy.END, WarningType.NONE);
|
||||
Assertions.assertTrue(startProcessInstanceResponse.getBody().getSuccess());
|
||||
|
||||
triggerCode = (long) startProcessInstanceResponse.getBody().getData();
|
||||
|
|
@ -141,7 +148,8 @@ public class ExecutorAPITest {
|
|||
@Test
|
||||
@Order(2)
|
||||
public void testStartCheckProcessDefinition() {
|
||||
HttpResponse testStartCheckProcessDefinitionResponse = executorPage.startCheckProcessDefinition(loginUser, projectCode, processDefinitionCode);
|
||||
HttpResponse testStartCheckProcessDefinitionResponse =
|
||||
executorPage.startCheckProcessDefinition(loginUser, projectCode, processDefinitionCode);
|
||||
Assertions.assertTrue(testStartCheckProcessDefinitionResponse.getBody().getSuccess());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,21 +30,21 @@ import org.apache.dolphinscheduler.common.enums.ReleaseState;
|
|||
import org.apache.dolphinscheduler.common.enums.UserType;
|
||||
import org.apache.dolphinscheduler.dao.entity.User;
|
||||
|
||||
import java.io.File;;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
@Slf4j
|
||||
public class ProcessDefinitionAPITest {
|
||||
|
|
@ -67,12 +67,12 @@ public class ProcessDefinitionAPITest {
|
|||
|
||||
private static String processDefinitionName;
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void setup() {
|
||||
LoginPage loginPage = new LoginPage();
|
||||
HttpResponse loginHttpResponse = loginPage.login(username, password);
|
||||
sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
sessionId =
|
||||
JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
processDefinitionPage = new ProcessDefinitionPage(sessionId);
|
||||
projectPage = new ProjectPage(sessionId);
|
||||
loginUser = new User();
|
||||
|
|
@ -93,7 +93,8 @@ public class ProcessDefinitionAPITest {
|
|||
HttpResponse queryAllProjectListResponse = projectPage.queryAllProjectList(loginUser);
|
||||
Assertions.assertTrue(queryAllProjectListResponse.getBody().getSuccess());
|
||||
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse.getBody().getData()).get(0)).get("code");
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse
|
||||
.getBody().getData()).get(0)).get("code");
|
||||
ClassLoader classLoader = getClass().getClassLoader();
|
||||
File file = new File(classLoader.getResource("workflow-json/test.json").getFile());
|
||||
CloseableHttpResponse importProcessDefinitionResponse = processDefinitionPage
|
||||
|
|
@ -109,72 +110,92 @@ public class ProcessDefinitionAPITest {
|
|||
@Test
|
||||
@Order(2)
|
||||
public void testQueryAllProcessDefinitionByProjectCode() {
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse = processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse =
|
||||
processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
Assertions.assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getData().toString().contains("hello world"));
|
||||
processDefinitionCode = (long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
processDefinitionName = (String) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse.getBody().getData()).get(0)).get("processDefinition")).get("name");
|
||||
Assertions.assertTrue(
|
||||
queryAllProcessDefinitionByProjectCodeResponse.getBody().getData().toString().contains("hello world"));
|
||||
processDefinitionCode =
|
||||
(long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse
|
||||
.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
processDefinitionName =
|
||||
(String) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse
|
||||
.getBody().getData()).get(0)).get("processDefinition")).get("name");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
public void testQueryProcessDefinitionByCode() {
|
||||
HttpResponse queryProcessDefinitionByCodeResponse = processDefinitionPage.queryProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
HttpResponse queryProcessDefinitionByCodeResponse =
|
||||
processDefinitionPage.queryProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
Assertions.assertTrue(queryProcessDefinitionByCodeResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryProcessDefinitionByCodeResponse.getBody().getData().toString().contains("hello world"));
|
||||
Assertions.assertTrue(
|
||||
queryProcessDefinitionByCodeResponse.getBody().getData().toString().contains("hello world"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(4)
|
||||
public void testgetProcessListByProjectCode() {
|
||||
HttpResponse getProcessListByProjectCodeResponse = processDefinitionPage.getProcessListByProjectCode(loginUser, projectCode);
|
||||
HttpResponse getProcessListByProjectCodeResponse =
|
||||
processDefinitionPage.getProcessListByProjectCode(loginUser, projectCode);
|
||||
Assertions.assertTrue(getProcessListByProjectCodeResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(getProcessListByProjectCodeResponse.getBody().getData().toString().contains("test_import"));
|
||||
Assertions
|
||||
.assertTrue(getProcessListByProjectCodeResponse.getBody().getData().toString().contains("test_import"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
public void testQueryProcessDefinitionByName() {
|
||||
HttpResponse queryProcessDefinitionByNameResponse = processDefinitionPage.queryProcessDefinitionByName(loginUser, projectCode, processDefinitionName);
|
||||
HttpResponse queryProcessDefinitionByNameResponse =
|
||||
processDefinitionPage.queryProcessDefinitionByName(loginUser, projectCode, processDefinitionName);
|
||||
Assertions.assertTrue(queryProcessDefinitionByNameResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryProcessDefinitionByNameResponse.getBody().getData().toString().contains("hello world"));
|
||||
Assertions.assertTrue(
|
||||
queryProcessDefinitionByNameResponse.getBody().getData().toString().contains("hello world"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(6)
|
||||
public void testQueryProcessDefinitionList() {
|
||||
HttpResponse queryProcessDefinitionListResponse = processDefinitionPage.queryProcessDefinitionList(loginUser, projectCode);
|
||||
HttpResponse queryProcessDefinitionListResponse =
|
||||
processDefinitionPage.queryProcessDefinitionList(loginUser, projectCode);
|
||||
Assertions.assertTrue(queryProcessDefinitionListResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryProcessDefinitionListResponse.getBody().getData().toString().contains("hello world"));
|
||||
Assertions
|
||||
.assertTrue(queryProcessDefinitionListResponse.getBody().getData().toString().contains("hello world"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(7)
|
||||
public void testReleaseProcessDefinition() {
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser, projectCode, processDefinitionCode, ReleaseState.ONLINE);
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser,
|
||||
projectCode, processDefinitionCode, ReleaseState.ONLINE);
|
||||
Assertions.assertTrue(releaseProcessDefinitionResponse.getBody().getSuccess());
|
||||
|
||||
HttpResponse queryProcessDefinitionByCodeResponse = processDefinitionPage.queryProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
HttpResponse queryProcessDefinitionByCodeResponse =
|
||||
processDefinitionPage.queryProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
Assertions.assertTrue(queryProcessDefinitionByCodeResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryProcessDefinitionByCodeResponse.getBody().getData().toString().contains("releaseState=ONLINE"));
|
||||
Assertions.assertTrue(
|
||||
queryProcessDefinitionByCodeResponse.getBody().getData().toString().contains("releaseState=ONLINE"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(8)
|
||||
public void testDeleteProcessDefinitionByCode() {
|
||||
HttpResponse deleteProcessDefinitionByCodeResponse = processDefinitionPage.deleteProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
HttpResponse deleteProcessDefinitionByCodeResponse =
|
||||
processDefinitionPage.deleteProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
Assertions.assertFalse(deleteProcessDefinitionByCodeResponse.getBody().getSuccess());
|
||||
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser, projectCode, processDefinitionCode, ReleaseState.OFFLINE);
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser,
|
||||
projectCode, processDefinitionCode, ReleaseState.OFFLINE);
|
||||
Assertions.assertTrue(releaseProcessDefinitionResponse.getBody().getSuccess());
|
||||
|
||||
deleteProcessDefinitionByCodeResponse = processDefinitionPage.deleteProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
deleteProcessDefinitionByCodeResponse =
|
||||
processDefinitionPage.deleteProcessDefinitionByCode(loginUser, projectCode, processDefinitionCode);
|
||||
Assertions.assertTrue(deleteProcessDefinitionByCodeResponse.getBody().getSuccess());
|
||||
|
||||
HttpResponse queryProcessDefinitionListResponse = processDefinitionPage.queryProcessDefinitionList(loginUser, projectCode);
|
||||
HttpResponse queryProcessDefinitionListResponse =
|
||||
processDefinitionPage.queryProcessDefinitionList(loginUser, projectCode);
|
||||
Assertions.assertTrue(queryProcessDefinitionListResponse.getBody().getSuccess());
|
||||
Assertions.assertFalse(queryProcessDefinitionListResponse.getBody().getData().toString().contains("hello world"));
|
||||
Assertions
|
||||
.assertFalse(queryProcessDefinitionListResponse.getBody().getData().toString().contains("hello world"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ import java.util.LinkedHashMap;
|
|||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
|
|
@ -55,8 +57,6 @@ import org.junit.jupiter.api.Order;
|
|||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
@Slf4j
|
||||
public class ProcessInstanceAPITest {
|
||||
|
|
@ -89,7 +89,8 @@ public class ProcessInstanceAPITest {
|
|||
public static void setup() {
|
||||
LoginPage loginPage = new LoginPage();
|
||||
HttpResponse loginHttpResponse = loginPage.login(username, password);
|
||||
sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
sessionId =
|
||||
JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
processInstancePage = new ProcessInstancePage(sessionId);
|
||||
executorPage = new ExecutorPage(sessionId);
|
||||
processDefinitionPage = new ProcessDefinitionPage(sessionId);
|
||||
|
|
@ -113,7 +114,8 @@ public class ProcessInstanceAPITest {
|
|||
HttpResponse createProjectResponse = projectPage.createProject(loginUser, "project-test");
|
||||
HttpResponse queryAllProjectListResponse = projectPage.queryAllProjectList(loginUser);
|
||||
assertTrue(queryAllProjectListResponse.getBody().getSuccess());
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse.getBody().getData()).get(0)).get("code");
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse
|
||||
.getBody().getData()).get(0)).get("code");
|
||||
|
||||
// upload test workflow definition json
|
||||
ClassLoader classLoader = getClass().getClassLoader();
|
||||
|
|
@ -124,13 +126,18 @@ public class ProcessInstanceAPITest {
|
|||
assertTrue(data.contains("\"success\":true"));
|
||||
|
||||
// get workflow definition code
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse = processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse =
|
||||
processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getSuccess());
|
||||
assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getData().toString().contains("hello world"));
|
||||
processDefinitionCode = (long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getData().toString()
|
||||
.contains("hello world"));
|
||||
processDefinitionCode =
|
||||
(long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse
|
||||
.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
|
||||
// release test workflow
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser, projectCode, processDefinitionCode, ReleaseState.ONLINE);
|
||||
HttpResponse releaseProcessDefinitionResponse = processDefinitionPage.releaseProcessDefinition(loginUser,
|
||||
projectCode, processDefinitionCode, ReleaseState.ONLINE);
|
||||
assertTrue(releaseProcessDefinitionResponse.getBody().getSuccess());
|
||||
|
||||
// trigger workflow instance
|
||||
|
|
@ -138,7 +145,8 @@ public class ProcessInstanceAPITest {
|
|||
Date date = new Date();
|
||||
String scheduleTime = String.format("%s,%s", formatter.format(date), formatter.format(date));
|
||||
log.info("use current time {} as scheduleTime", scheduleTime);
|
||||
HttpResponse startProcessInstanceResponse = executorPage.startProcessInstance(loginUser, projectCode, processDefinitionCode, scheduleTime, FailureStrategy.END, WarningType.NONE);
|
||||
HttpResponse startProcessInstanceResponse = executorPage.startProcessInstance(loginUser, projectCode,
|
||||
processDefinitionCode, scheduleTime, FailureStrategy.END, WarningType.NONE);
|
||||
assertTrue(startProcessInstanceResponse.getBody().getSuccess());
|
||||
|
||||
// make sure process instance has completed and successfully persisted into db
|
||||
|
|
@ -147,9 +155,12 @@ public class ProcessInstanceAPITest {
|
|||
.untilAsserted(() -> {
|
||||
// query workflow instance by trigger code
|
||||
triggerCode = (long) startProcessInstanceResponse.getBody().getData();
|
||||
HttpResponse queryProcessInstancesByTriggerCodeResponse = processInstancePage.queryProcessInstancesByTriggerCode(loginUser, projectCode, triggerCode);
|
||||
HttpResponse queryProcessInstancesByTriggerCodeResponse = processInstancePage
|
||||
.queryProcessInstancesByTriggerCode(loginUser, projectCode, triggerCode);
|
||||
assertTrue(queryProcessInstancesByTriggerCodeResponse.getBody().getSuccess());
|
||||
List<LinkedHashMap<String, Object>> body = (List<LinkedHashMap<String, Object>>) queryProcessInstancesByTriggerCodeResponse.getBody().getData();
|
||||
List<LinkedHashMap<String, Object>> body =
|
||||
(List<LinkedHashMap<String, Object>>) queryProcessInstancesByTriggerCodeResponse
|
||||
.getBody().getData();
|
||||
assertTrue(CollectionUtils.isNotEmpty(body));
|
||||
assertEquals("SUCCESS", body.get(0).get("state"));
|
||||
processInstanceId = (int) body.get(0).get("id");
|
||||
|
|
@ -163,7 +174,8 @@ public class ProcessInstanceAPITest {
|
|||
@Test
|
||||
@Order(2)
|
||||
public void testQueryProcessInstanceList() {
|
||||
HttpResponse queryProcessInstanceListResponse = processInstancePage.queryProcessInstanceList(loginUser, projectCode, 1, 10);
|
||||
HttpResponse queryProcessInstanceListResponse =
|
||||
processInstancePage.queryProcessInstanceList(loginUser, projectCode, 1, 10);
|
||||
assertTrue(queryProcessInstanceListResponse.getBody().getSuccess());
|
||||
assertTrue(queryProcessInstanceListResponse.getBody().getData().toString().contains("test_import"));
|
||||
}
|
||||
|
|
@ -171,7 +183,8 @@ public class ProcessInstanceAPITest {
|
|||
@Test
|
||||
@Order(3)
|
||||
public void testQueryTaskListByProcessId() {
|
||||
HttpResponse queryTaskListByProcessIdResponse = processInstancePage.queryTaskListByProcessId(loginUser, projectCode, processInstanceId);
|
||||
HttpResponse queryTaskListByProcessIdResponse =
|
||||
processInstancePage.queryTaskListByProcessId(loginUser, projectCode, processInstanceId);
|
||||
assertTrue(queryTaskListByProcessIdResponse.getBody().getSuccess());
|
||||
assertTrue(queryTaskListByProcessIdResponse.getBody().getData().toString().contains("test_import"));
|
||||
}
|
||||
|
|
@ -179,7 +192,8 @@ public class ProcessInstanceAPITest {
|
|||
@Test
|
||||
@Order(4)
|
||||
public void testQueryProcessInstanceById() {
|
||||
HttpResponse queryProcessInstanceByIdResponse = processInstancePage.queryProcessInstanceById(loginUser, projectCode, processInstanceId);
|
||||
HttpResponse queryProcessInstanceByIdResponse =
|
||||
processInstancePage.queryProcessInstanceById(loginUser, projectCode, processInstanceId);
|
||||
assertTrue(queryProcessInstanceByIdResponse.getBody().getSuccess());
|
||||
assertTrue(queryProcessInstanceByIdResponse.getBody().getData().toString().contains("test_import"));
|
||||
}
|
||||
|
|
@ -187,10 +201,12 @@ public class ProcessInstanceAPITest {
|
|||
@Test
|
||||
@Order(5)
|
||||
public void testDeleteProcessInstanceById() {
|
||||
HttpResponse deleteProcessInstanceByIdResponse = processInstancePage.deleteProcessInstanceById(loginUser, projectCode, processInstanceId);
|
||||
HttpResponse deleteProcessInstanceByIdResponse =
|
||||
processInstancePage.deleteProcessInstanceById(loginUser, projectCode, processInstanceId);
|
||||
assertTrue(deleteProcessInstanceByIdResponse.getBody().getSuccess());
|
||||
|
||||
HttpResponse queryProcessInstanceListResponse = processInstancePage.queryProcessInstanceList(loginUser, projectCode, 1, 10);
|
||||
HttpResponse queryProcessInstanceListResponse =
|
||||
processInstancePage.queryProcessInstanceList(loginUser, projectCode, 1, 10);
|
||||
assertTrue(queryProcessInstanceListResponse.getBody().getSuccess());
|
||||
Assertions.assertFalse(queryProcessInstanceListResponse.getBody().getData().toString().contains("test_import"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,17 +29,17 @@ import org.apache.dolphinscheduler.common.enums.UserType;
|
|||
import org.apache.dolphinscheduler.dao.entity.Project;
|
||||
import org.apache.dolphinscheduler.dao.entity.User;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
@Slf4j
|
||||
// TODO: Add more detailed permission control related cases after userPage test cases completed
|
||||
|
|
@ -59,7 +59,8 @@ public class ProjectAPITest {
|
|||
public static void setup() {
|
||||
LoginPage loginPage = new LoginPage();
|
||||
HttpResponse loginHttpResponse = loginPage.login(username, password);
|
||||
sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
sessionId =
|
||||
JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
projectPage = new ProjectPage(sessionId);
|
||||
loginUser = new User();
|
||||
loginUser.setUserName("admin");
|
||||
|
|
@ -98,7 +99,8 @@ public class ProjectAPITest {
|
|||
List<LinkedHashMap> projects = (List<LinkedHashMap>) queryAllProjectListResponse.getBody().getData();
|
||||
Long code = (Long) projects.get(0).get("code");
|
||||
|
||||
HttpResponse updateProjectResponse = projectPage.updateProject(loginUser, code,"project-new", loginUser.getUserName());
|
||||
HttpResponse updateProjectResponse =
|
||||
projectPage.updateProject(loginUser, code, "project-new", loginUser.getUserName());
|
||||
Assertions.assertTrue(updateProjectResponse.getBody().getSuccess());
|
||||
|
||||
queryAllProjectListResponse = projectPage.queryAllProjectList(loginUser);
|
||||
|
|
@ -133,17 +135,21 @@ public class ProjectAPITest {
|
|||
@Test
|
||||
@Order(6)
|
||||
public void testQueryProjectWithAuthorizedLevelListPaging() {
|
||||
HttpResponse queryProjectWithAuthorizedLevelListPagingResponse = projectPage.queryProjectWithAuthorizedLevelListPaging(loginUser, loginUser.getId(),1, 1);
|
||||
HttpResponse queryProjectWithAuthorizedLevelListPagingResponse =
|
||||
projectPage.queryProjectWithAuthorizedLevelListPaging(loginUser, loginUser.getId(), 1, 1);
|
||||
Assertions.assertTrue(queryProjectWithAuthorizedLevelListPagingResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryProjectWithAuthorizedLevelListPagingResponse.getBody().getData().toString().contains("project-new"));
|
||||
Assertions.assertTrue(queryProjectWithAuthorizedLevelListPagingResponse.getBody().getData().toString()
|
||||
.contains("project-new"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(7)
|
||||
public void testQueryUnauthorizedProject() {
|
||||
HttpResponse queryUnauthorizedProjectResponse = projectPage.queryUnauthorizedProject(loginUser, loginUser.getId());
|
||||
HttpResponse queryUnauthorizedProjectResponse =
|
||||
projectPage.queryUnauthorizedProject(loginUser, loginUser.getId());
|
||||
Assertions.assertTrue(queryUnauthorizedProjectResponse.getBody().getSuccess());
|
||||
// project-new was created by instead of authorized to this user, therefore, it should be in the unauthorized list
|
||||
// project-new was created by instead of authorized to this user, therefore, it should be in the unauthorized
|
||||
// list
|
||||
Assertions.assertTrue(queryUnauthorizedProjectResponse.getBody().getData().toString().contains("project-new"));
|
||||
}
|
||||
|
||||
|
|
@ -152,17 +158,21 @@ public class ProjectAPITest {
|
|||
public void testQueryAuthorizedProject() {
|
||||
HttpResponse queryAuthorizedProjectResponse = projectPage.queryAuthorizedProject(loginUser, loginUser.getId());
|
||||
Assertions.assertTrue(queryAuthorizedProjectResponse.getBody().getSuccess());
|
||||
// project-new was created by instead of authorized to this user, therefore, it should not be in the authorized list
|
||||
// project-new was created by instead of authorized to this user, therefore, it should not be in the authorized
|
||||
// list
|
||||
Assertions.assertFalse(queryAuthorizedProjectResponse.getBody().getData().toString().contains("project-new"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(9)
|
||||
public void testQueryProjectWithAuthorizedLevel() {
|
||||
HttpResponse queryProjectWithAuthorizedLevelResponse = projectPage.queryProjectWithAuthorizedLevel(loginUser, loginUser.getId());
|
||||
HttpResponse queryProjectWithAuthorizedLevelResponse =
|
||||
projectPage.queryProjectWithAuthorizedLevel(loginUser, loginUser.getId());
|
||||
Assertions.assertTrue(queryProjectWithAuthorizedLevelResponse.getBody().getSuccess());
|
||||
// queryProjectWithAuthorizedLevel api returns a joint-set of projects both created by and authorized to the user
|
||||
Assertions.assertTrue(queryProjectWithAuthorizedLevelResponse.getBody().getData().toString().contains("project-new"));
|
||||
// queryProjectWithAuthorizedLevel api returns a joint-set of projects both created by and authorized to the
|
||||
// user
|
||||
Assertions.assertTrue(
|
||||
queryProjectWithAuthorizedLevelResponse.getBody().getData().toString().contains("project-new"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -181,10 +191,13 @@ public class ProjectAPITest {
|
|||
@Test
|
||||
@Order(11)
|
||||
public void testQueryProjectCreatedAndAuthorizedByUser() {
|
||||
HttpResponse queryProjectCreatedAndAuthorizedByUserResponse = projectPage.queryProjectCreatedAndAuthorizedByUser(loginUser);
|
||||
HttpResponse queryProjectCreatedAndAuthorizedByUserResponse =
|
||||
projectPage.queryProjectCreatedAndAuthorizedByUser(loginUser);
|
||||
Assertions.assertTrue(queryProjectCreatedAndAuthorizedByUserResponse.getBody().getSuccess());
|
||||
// queryProjectCreatedAndAuthorizedByUser api returns a joint-set of projects both created by and authorized to the user
|
||||
Assertions.assertTrue(queryProjectCreatedAndAuthorizedByUserResponse.getBody().getData().toString().contains("project-new"));
|
||||
// queryProjectCreatedAndAuthorizedByUser api returns a joint-set of projects both created by and authorized to
|
||||
// the user
|
||||
Assertions.assertTrue(
|
||||
queryProjectCreatedAndAuthorizedByUserResponse.getBody().getData().toString().contains("project-new"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -192,7 +205,8 @@ public class ProjectAPITest {
|
|||
public void testQueryAllProjectListForDependent() {
|
||||
HttpResponse queryAllProjectListForDependentResponse = projectPage.queryAllProjectListForDependent(loginUser);
|
||||
Assertions.assertTrue(queryAllProjectListForDependentResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryAllProjectListForDependentResponse.getBody().getData().toString().contains("project-new"));
|
||||
Assertions.assertTrue(
|
||||
queryAllProjectListForDependentResponse.getBody().getData().toString().contains("project-new"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -203,8 +217,7 @@ public class ProjectAPITest {
|
|||
Long code = (Long) projects.get(0).get("code");
|
||||
HttpResponse queryAllProjectListForDependentResponse = projectPage.deleteProject(loginUser, code);
|
||||
Assertions.assertTrue(queryAllProjectListForDependentResponse.getBody().getSuccess());
|
||||
Assertions.assertFalse(queryAllProjectListForDependentResponse.getBody().getData().toString().contains("project-new"));
|
||||
Assertions.assertFalse(
|
||||
queryAllProjectListForDependentResponse.getBody().getData().toString().contains("project-new"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -35,14 +35,14 @@ import java.io.File;
|
|||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
@Slf4j
|
||||
public class SchedulerAPITest {
|
||||
|
|
@ -67,12 +67,12 @@ public class SchedulerAPITest {
|
|||
|
||||
private static int scheduleId;
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void setup() {
|
||||
LoginPage loginPage = new LoginPage();
|
||||
HttpResponse loginHttpResponse = loginPage.login(username, password);
|
||||
sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
sessionId =
|
||||
JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
projectPage = new ProjectPage(sessionId);
|
||||
schedulerPage = new SchedulerPage(sessionId);
|
||||
processDefinitionPage = new ProcessDefinitionPage(sessionId);
|
||||
|
|
@ -94,17 +94,24 @@ public class SchedulerAPITest {
|
|||
HttpResponse queryAllProjectListResponse = projectPage.queryAllProjectList(loginUser);
|
||||
Assertions.assertTrue(queryAllProjectListResponse.getBody().getSuccess());
|
||||
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse.getBody().getData()).get(0)).get("code");
|
||||
projectCode = (long) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProjectListResponse
|
||||
.getBody().getData()).get(0)).get("code");
|
||||
ClassLoader classLoader = getClass().getClassLoader();
|
||||
File file = new File(classLoader.getResource("workflow-json/test.json").getFile());
|
||||
processDefinitionPage.importProcessDefinition(loginUser, projectCode, file);
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse = processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
HttpResponse queryAllProcessDefinitionByProjectCodeResponse =
|
||||
processDefinitionPage.queryAllProcessDefinitionByProjectCode(loginUser, projectCode);
|
||||
Assertions.assertTrue(queryAllProcessDefinitionByProjectCodeResponse.getBody().getSuccess());
|
||||
processDefinitionCode = (long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
processDefinitionCode =
|
||||
(long) ((LinkedHashMap<String, Object>) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryAllProcessDefinitionByProjectCodeResponse
|
||||
.getBody().getData()).get(0)).get("processDefinition")).get("code");
|
||||
|
||||
processDefinitionPage.releaseProcessDefinition(loginUser, projectCode, processDefinitionCode, ReleaseState.ONLINE);
|
||||
final String schedule = "{\"startTime\":\"2019-08-08 00:00:00\",\"endTime\":\"2100-08-08 00:00:00\",\"timezoneId\":\"America/Phoenix\",\"crontab\":\"0 0 3/6 * * ? *\"}" ;
|
||||
HttpResponse createScheduleResponse = schedulerPage.createSchedule(loginUser, projectCode, processDefinitionCode, schedule);
|
||||
processDefinitionPage.releaseProcessDefinition(loginUser, projectCode, processDefinitionCode,
|
||||
ReleaseState.ONLINE);
|
||||
final String schedule =
|
||||
"{\"startTime\":\"2019-08-08 00:00:00\",\"endTime\":\"2100-08-08 00:00:00\",\"timezoneId\":\"America/Phoenix\",\"crontab\":\"0 0 3/6 * * ? *\"}";
|
||||
HttpResponse createScheduleResponse =
|
||||
schedulerPage.createSchedule(loginUser, projectCode, processDefinitionCode, schedule);
|
||||
Assertions.assertTrue(createScheduleResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(createScheduleResponse.getBody().getData().toString().contains("2019-08-08"));
|
||||
}
|
||||
|
|
@ -115,13 +122,15 @@ public class SchedulerAPITest {
|
|||
HttpResponse queryScheduleListResponse = schedulerPage.queryScheduleList(loginUser, projectCode);
|
||||
Assertions.assertTrue(queryScheduleListResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryScheduleListResponse.getBody().getData().toString().contains("2019-08-08"));
|
||||
scheduleId = (int) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryScheduleListResponse.getBody().getData()).get(0)).get("id");
|
||||
scheduleId = (int) ((LinkedHashMap<String, Object>) ((List<LinkedHashMap>) queryScheduleListResponse.getBody()
|
||||
.getData()).get(0)).get("id");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
public void testPublishScheduleOnline() {
|
||||
HttpResponse publishScheduleOnlineResponse = schedulerPage.publishScheduleOnline(loginUser, projectCode, scheduleId);
|
||||
HttpResponse publishScheduleOnlineResponse =
|
||||
schedulerPage.publishScheduleOnline(loginUser, projectCode, scheduleId);
|
||||
Assertions.assertTrue(publishScheduleOnlineResponse.getBody().getSuccess());
|
||||
|
||||
HttpResponse queryScheduleListResponse = schedulerPage.queryScheduleList(loginUser, projectCode);
|
||||
|
|
@ -137,14 +146,17 @@ public class SchedulerAPITest {
|
|||
|
||||
HttpResponse queryScheduleListResponse = schedulerPage.queryScheduleList(loginUser, projectCode);
|
||||
Assertions.assertTrue(queryScheduleListResponse.getBody().getSuccess());
|
||||
Assertions.assertTrue(queryScheduleListResponse.getBody().getData().toString().contains("releaseState=OFFLINE"));
|
||||
Assertions
|
||||
.assertTrue(queryScheduleListResponse.getBody().getData().toString().contains("releaseState=OFFLINE"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
public void testUpdateSchedule() {
|
||||
final String schedule = "{\"startTime\":\"1996-08-08 00:00:00\",\"endTime\":\"2200-08-08 00:00:00\",\"timezoneId\":\"America/Phoenix\",\"crontab\":\"0 0 3/6 * * ? *\"}";
|
||||
HttpResponse updateScheduleResponse = schedulerPage.updateSchedule(loginUser, projectCode, scheduleId, schedule);
|
||||
final String schedule =
|
||||
"{\"startTime\":\"1996-08-08 00:00:00\",\"endTime\":\"2200-08-08 00:00:00\",\"timezoneId\":\"America/Phoenix\",\"crontab\":\"0 0 3/6 * * ? *\"}";
|
||||
HttpResponse updateScheduleResponse =
|
||||
schedulerPage.updateSchedule(loginUser, projectCode, scheduleId, schedule);
|
||||
Assertions.assertTrue(updateScheduleResponse.getBody().getSuccess());
|
||||
|
||||
HttpResponse queryScheduleListResponse = schedulerPage.queryScheduleList(loginUser, projectCode);
|
||||
|
|
@ -163,5 +175,3 @@ public class SchedulerAPITest {
|
|||
Assertions.assertFalse(queryScheduleListResponse.getBody().getData().toString().contains("1996-08-08"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -28,17 +28,18 @@ import org.apache.dolphinscheduler.api.test.pages.LoginPage;
|
|||
import org.apache.dolphinscheduler.api.test.pages.security.TenantPage;
|
||||
import org.apache.dolphinscheduler.api.test.utils.JSONUtils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
@Slf4j
|
||||
public class TenantAPITest {
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
|
||||
private static final String user = "admin";
|
||||
|
|
@ -54,7 +55,8 @@ public class TenantAPITest {
|
|||
LoginPage loginPage = new LoginPage();
|
||||
HttpResponse loginHttpResponse = loginPage.login(user, password);
|
||||
|
||||
sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
sessionId =
|
||||
JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
|
|
@ -90,7 +92,9 @@ public class TenantAPITest {
|
|||
HttpResponse createTenantHttpResponse = tenantPage.getTenantListPaging(sessionId, 1, 10, "");
|
||||
boolean result = false;
|
||||
|
||||
for (TenantListPagingResponseTotalList tenantListPagingResponseTotalList : JSONUtils.convertValue(createTenantHttpResponse.getBody().getData(), TenantListPagingResponseData.class).getTotalList()) {
|
||||
for (TenantListPagingResponseTotalList tenantListPagingResponseTotalList : JSONUtils
|
||||
.convertValue(createTenantHttpResponse.getBody().getData(), TenantListPagingResponseData.class)
|
||||
.getTotalList()) {
|
||||
if (tenantListPagingResponseTotalList.getTenantCode().equals(tenant)) {
|
||||
result = true;
|
||||
existTenantId = tenantListPagingResponseTotalList.getId();
|
||||
|
|
|
|||
|
|
@ -33,14 +33,14 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
@Slf4j
|
||||
public class WorkerGroupAPITest {
|
||||
|
|
@ -59,7 +59,8 @@ public class WorkerGroupAPITest {
|
|||
public static void setup() {
|
||||
LoginPage loginPage = new LoginPage();
|
||||
HttpResponse loginHttpResponse = loginPage.login(username, password);
|
||||
sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
sessionId =
|
||||
JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
|
||||
workerGroupPage = new WorkerGroupPage(sessionId);
|
||||
loginUser = new User();
|
||||
loginUser.setId(123);
|
||||
|
|
@ -88,7 +89,8 @@ public class WorkerGroupAPITest {
|
|||
@Test
|
||||
@Order(2)
|
||||
public void testQueryAllWorkerGroupsPaging() {
|
||||
HttpResponse queryAllWorkerGroupsPagingResponse = workerGroupPage.queryAllWorkerGroupsPaging(loginUser, 1, 2, null);
|
||||
HttpResponse queryAllWorkerGroupsPagingResponse =
|
||||
workerGroupPage.queryAllWorkerGroupsPaging(loginUser, 1, 2, null);
|
||||
Assertions.assertTrue(queryAllWorkerGroupsPagingResponse.getBody().getSuccess());
|
||||
String workerGroupPageInfoData = queryAllWorkerGroupsPagingResponse.getBody().getData().toString();
|
||||
Assertions.assertTrue(workerGroupPageInfoData.contains("test_worker_group"));
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import lombok.NoArgsConstructor;
|
|||
@NoArgsConstructor
|
||||
@Data
|
||||
public class TenantListPagingResponseData {
|
||||
|
||||
private Integer currentPage;
|
||||
|
||||
private Integer pageSize;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ import lombok.NoArgsConstructor;
|
|||
@NoArgsConstructor
|
||||
@Data
|
||||
public class TenantListPagingResponseTotalList {
|
||||
|
||||
private Date createTime;
|
||||
|
||||
private Date updateTime;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
|
||||
public final class LoginPage {
|
||||
|
||||
public HttpResponse login(String username, String password) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
|
||||
|
|
|
|||
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.api.test.pages.project;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import org.apache.dolphinscheduler.api.test.core.Constants;
|
||||
import org.apache.dolphinscheduler.api.test.entity.HttpResponse;
|
||||
import org.apache.dolphinscheduler.api.test.utils.RequestClient;
|
||||
|
|
@ -29,8 +27,11 @@ import org.apache.dolphinscheduler.dao.entity.User;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
public final class ProjectPage {
|
||||
|
||||
private String sessionId;
|
||||
|
||||
public HttpResponse createProject(User loginUser, String projectName) {
|
||||
|
|
@ -90,7 +91,8 @@ public final class ProjectPage {
|
|||
return requestClient.get("/projects", headers, params);
|
||||
}
|
||||
|
||||
public HttpResponse queryProjectWithAuthorizedLevelListPaging(User loginUser, Integer userId, Integer pageSize, Integer pageNo) {
|
||||
public HttpResponse queryProjectWithAuthorizedLevelListPaging(User loginUser, Integer userId, Integer pageSize,
|
||||
Integer pageNo) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("loginUser", loginUser);
|
||||
params.put("userId", userId);
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
|
||||
public final class TenantPage {
|
||||
|
||||
public HttpResponse createTenant(String sessionId, String tenant, Integer queueId, String description) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("tenantCode", tenant);
|
||||
|
|
|
|||
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.api.test.pages.security;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import org.apache.dolphinscheduler.api.test.core.Constants;
|
||||
import org.apache.dolphinscheduler.api.test.entity.HttpResponse;
|
||||
import org.apache.dolphinscheduler.api.test.utils.RequestClient;
|
||||
|
|
@ -29,13 +27,15 @@ import org.apache.dolphinscheduler.dao.entity.User;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class WorkerGroupPage {
|
||||
|
||||
private String sessionId;
|
||||
|
||||
public HttpResponse saveWorkerGroup(User loginUser, int id, String name, String addrList, String description, String otherParamsJson) {
|
||||
public HttpResponse saveWorkerGroup(User loginUser, int id, String name, String addrList, String description,
|
||||
String otherParamsJson) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("loginUser", loginUser);
|
||||
params.put("id", id);
|
||||
|
|
@ -96,5 +96,4 @@ public class WorkerGroupPage {
|
|||
return requestClient.get("/worker-groups/worker-address-list", headers, params);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,14 +34,15 @@ import java.util.Map;
|
|||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class ExecutorPage {
|
||||
|
||||
private String sessionId;
|
||||
|
||||
public HttpResponse startProcessInstance(User loginUser, long projectCode, long processDefinitionCode, String scheduleTime, FailureStrategy failureStrategy, WarningType warningType) {
|
||||
public HttpResponse startProcessInstance(User loginUser, long projectCode, long processDefinitionCode,
|
||||
String scheduleTime, FailureStrategy failureStrategy,
|
||||
WarningType warningType) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("loginUser", loginUser);
|
||||
params.put("processDefinitionCode", processDefinitionCode);
|
||||
|
|
@ -93,7 +94,8 @@ public class ExecutorPage {
|
|||
return requestClient.post(url, headers, params);
|
||||
}
|
||||
|
||||
public HttpResponse executeTask(User loginUser, long projectCode, int processInstanceId, String startNodeList, TaskDependType taskDependType) {
|
||||
public HttpResponse executeTask(User loginUser, long projectCode, int processInstanceId, String startNodeList,
|
||||
TaskDependType taskDependType) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("loginUser", loginUser);
|
||||
params.put("processInstanceId", processInstanceId);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ import org.apache.dolphinscheduler.api.test.utils.RequestClient;
|
|||
import org.apache.dolphinscheduler.common.enums.ReleaseState;
|
||||
import org.apache.dolphinscheduler.dao.entity.User;
|
||||
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
|
@ -32,9 +34,6 @@ import java.util.Map;
|
|||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class ProcessDefinitionPage {
|
||||
|
|
@ -107,7 +106,8 @@ public class ProcessDefinitionPage {
|
|||
return requestClient.get(url, headers, params);
|
||||
}
|
||||
|
||||
public HttpResponse releaseProcessDefinition(User loginUser, long projectCode, long code, ReleaseState releaseState) {
|
||||
public HttpResponse releaseProcessDefinition(User loginUser, long projectCode, long code,
|
||||
ReleaseState releaseState) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("loginUser", loginUser);
|
||||
params.put("code", code);
|
||||
|
|
|
|||
|
|
@ -19,13 +19,9 @@
|
|||
|
||||
package org.apache.dolphinscheduler.api.test.pages.workflow;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.ExecuteType;
|
||||
import org.apache.dolphinscheduler.api.test.core.Constants;
|
||||
import org.apache.dolphinscheduler.api.test.entity.HttpResponse;
|
||||
import org.apache.dolphinscheduler.api.test.utils.RequestClient;
|
||||
import org.apache.dolphinscheduler.common.enums.FailureStrategy;
|
||||
import org.apache.dolphinscheduler.common.enums.TaskDependType;
|
||||
import org.apache.dolphinscheduler.common.enums.WarningType;
|
||||
import org.apache.dolphinscheduler.dao.entity.User;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
|
@ -34,7 +30,6 @@ import java.util.Map;
|
|||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class ProcessInstancePage {
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ import java.util.Map;
|
|||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class SchedulerPage {
|
||||
|
|
@ -63,7 +62,6 @@ public class SchedulerPage {
|
|||
return requestClient.post(url, headers, params);
|
||||
}
|
||||
|
||||
|
||||
public HttpResponse publishScheduleOnline(User loginUser, long projectCode, int scheduleId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("loginUser", loginUser);
|
||||
|
|
|
|||
|
|
@ -17,12 +17,11 @@
|
|||
|
||||
package org.apache.dolphinscheduler.api.test.utils;
|
||||
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import static com.fasterxml.jackson.databind.DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT;
|
||||
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
|
||||
import static com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL;
|
||||
import static com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
|
||||
import org.apache.dolphinscheduler.api.test.core.Constants;
|
||||
|
||||
|
|
@ -72,8 +71,11 @@ public class JSONUtils {
|
|||
* can use static singleton, inject: just make sure to reuse!
|
||||
*/
|
||||
private static final ObjectMapper objectMapper =
|
||||
new ObjectMapper().configure(FAIL_ON_UNKNOWN_PROPERTIES, false).configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true).configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
|
||||
.configure(REQUIRE_SETTERS_FOR_GETTERS, true).setTimeZone(TimeZone.getDefault()).setDateFormat(new SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
|
||||
new ObjectMapper().configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
|
||||
.configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
|
||||
.configure(READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
|
||||
.configure(REQUIRE_SETTERS_FOR_GETTERS, true).setTimeZone(TimeZone.getDefault())
|
||||
.setDateFormat(new SimpleDateFormat(Constants.YYYY_MM_DD_HH_MM_SS));
|
||||
|
||||
private JSONUtils() {
|
||||
throw new UnsupportedOperationException("Construct JSONUtils");
|
||||
|
|
|
|||
|
|
@ -23,6 +23,15 @@ import org.apache.dolphinscheduler.api.test.core.Constants;
|
|||
import org.apache.dolphinscheduler.api.test.entity.HttpResponse;
|
||||
import org.apache.dolphinscheduler.api.test.entity.HttpResponseBody;
|
||||
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.message.BasicHeader;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.util.HashMap;
|
||||
|
|
@ -39,17 +48,6 @@ import okhttp3.Request;
|
|||
import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.entity.ContentType;
|
||||
import org.apache.http.entity.mime.MultipartEntityBuilder;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.message.BasicHeader;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
|
||||
|
||||
@Slf4j
|
||||
public class RequestClient {
|
||||
|
||||
|
|
@ -171,7 +169,8 @@ public class RequestClient {
|
|||
return httpResponse;
|
||||
}
|
||||
|
||||
public CloseableHttpResponse postWithFile(String url, Map<String, String> headers, Map<String, Object> params, File file) {
|
||||
public CloseableHttpResponse postWithFile(String url, Map<String, String> headers, Map<String, Object> params,
|
||||
File file) {
|
||||
try {
|
||||
Headers headersBuilder = Headers.of(headers);
|
||||
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
|
||||
|
|
@ -180,8 +179,7 @@ public class RequestClient {
|
|||
"file",
|
||||
new FileInputStream(file),
|
||||
ContentType.APPLICATION_OCTET_STREAM,
|
||||
file.getName()
|
||||
);
|
||||
file.getName());
|
||||
HttpEntity multipart = builder.build();
|
||||
String requestUrl = String.format("%s%s", Constants.DOLPHINSCHEDULER_API_URL, url);
|
||||
log.info("POST request to {}, Headers: {}, Params: {}", requestUrl, headersBuilder, params);
|
||||
|
|
@ -199,7 +197,6 @@ public class RequestClient {
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
public HttpResponse delete(String url, Map<String, String> headers, Map<String, Object> params) {
|
||||
if (headers == null) {
|
||||
|
|
|
|||
|
|
@ -37,5 +37,6 @@ import org.testcontainers.junit.jupiter.Testcontainers;
|
|||
@TestMethodOrder(OrderAnnotation.class)
|
||||
@ExtendWith(DolphinSchedulerExtension.class)
|
||||
public @interface DolphinScheduler {
|
||||
|
||||
String[] composeFiles();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,22 +24,21 @@ import java.net.URL;
|
|||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.extension.AfterAllCallback;
|
||||
import org.junit.jupiter.api.extension.BeforeAllCallback;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.testcontainers.containers.ContainerState;
|
||||
import org.testcontainers.containers.DockerComposeContainer;
|
||||
import org.testcontainers.containers.wait.strategy.Wait;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
final class DolphinSchedulerExtension implements BeforeAllCallback, AfterAllCallback {
|
||||
|
||||
private final boolean localMode = Objects.equals(System.getProperty("local"), "true");
|
||||
|
||||
private final String serviceName = "dolphinscheduler_1";
|
||||
|
|
@ -78,7 +77,8 @@ final class DolphinSchedulerExtension implements BeforeAllCallback, AfterAllCall
|
|||
.withPull(true)
|
||||
.withTailChildContainers(true)
|
||||
.withLogConsumer(serviceName, outputFrame -> log.info(outputFrame.getUtf8String()))
|
||||
.waitingFor(serviceName, Wait.forHealthcheck().withStartupTimeout(Duration.ofSeconds(Constants.DOCKER_COMPOSE_DEFAULT_TIMEOUT)));
|
||||
.waitingFor(serviceName, Wait.forHealthcheck()
|
||||
.withStartupTimeout(Duration.ofSeconds(Constants.DOCKER_COMPOSE_DEFAULT_TIMEOUT)));
|
||||
|
||||
return compose;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,9 +27,6 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.datasource.DataSourcePage;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -37,11 +34,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/datasource-clickhouse/docker-compose.yaml")
|
||||
public class ClickhouseDataSourceE2ETest {
|
||||
|
||||
private static RemoteWebDriver browser;
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
|
|
@ -68,7 +65,6 @@ public class ClickhouseDataSourceE2ETest {
|
|||
|
||||
private static final String jdbcParams = "";
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void setup() {
|
||||
new LoginPage(browser)
|
||||
|
|
@ -81,7 +77,8 @@ public class ClickhouseDataSourceE2ETest {
|
|||
void testCreateClickhouseDataSource() {
|
||||
final DataSourcePage page = new DataSourcePage(browser);
|
||||
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, pgPassword, database, jdbcParams);
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, pgPassword,
|
||||
database, jdbcParams);
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(page.driver()).until(ExpectedConditions.invisibilityOfElementLocated(
|
||||
new By.ByClassName("dialog-create-data-source")));
|
||||
|
|
@ -103,10 +100,8 @@ public class ClickhouseDataSourceE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.dataSourceItemsList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName)
|
||||
);
|
||||
page.dataSourceItemsList()).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
|
|
@ -27,13 +26,13 @@ import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.ClusterPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class ClusterE2ETest {
|
||||
|
|
@ -53,8 +52,7 @@ class ClusterE2ETest {
|
|||
new LoginPage(browser)
|
||||
.login("admin", "dolphinscheduler123")
|
||||
.goToNav(SecurityPage.class)
|
||||
.goToTab(ClusterPage.class)
|
||||
;
|
||||
.goToTab(ClusterPage.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -78,10 +76,8 @@ class ClusterE2ETest {
|
|||
final ClusterPage page = new ClusterPage(browser);
|
||||
page.create(clusterName, clusterConfig, clusterDesc);
|
||||
|
||||
Awaitility.await().untilAsserted(() ->
|
||||
assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists")
|
||||
);
|
||||
Awaitility.await().untilAsserted(() -> assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists"));
|
||||
|
||||
page.createClusterForm().buttonCancel().click();
|
||||
}
|
||||
|
|
@ -112,12 +108,10 @@ class ClusterE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.clusterList()
|
||||
)
|
||||
page.clusterList())
|
||||
.as("Cluster list should not contain deleted cluster")
|
||||
.noneMatch(
|
||||
it -> it.getText().contains(clusterName) || it.getText().contains(editClusterName)
|
||||
);
|
||||
it -> it.getText().contains(clusterName) || it.getText().contains(editClusterName));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
|
|
@ -27,13 +26,13 @@ import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.EnvironmentPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class EnvironmentE2ETest {
|
||||
|
|
@ -55,8 +54,7 @@ class EnvironmentE2ETest {
|
|||
new LoginPage(browser)
|
||||
.login("admin", "dolphinscheduler123")
|
||||
.goToNav(SecurityPage.class)
|
||||
.goToTab(EnvironmentPage.class)
|
||||
;
|
||||
.goToTab(EnvironmentPage.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -80,10 +78,8 @@ class EnvironmentE2ETest {
|
|||
final EnvironmentPage page = new EnvironmentPage(browser);
|
||||
page.create(environmentName, environmentConfig, environmentDesc, environmentWorkerGroup);
|
||||
|
||||
Awaitility.await().untilAsserted(() ->
|
||||
assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists")
|
||||
);
|
||||
Awaitility.await().untilAsserted(() -> assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists"));
|
||||
|
||||
page.createEnvironmentForm().buttonCancel().click();
|
||||
}
|
||||
|
|
@ -92,7 +88,8 @@ class EnvironmentE2ETest {
|
|||
@Order(30)
|
||||
void testEditEnvironment() {
|
||||
final EnvironmentPage page = new EnvironmentPage(browser);
|
||||
page.update(environmentName, editEnvironmentName, editEnvironmentConfig, editEnvironmentDesc, editEnvironmentWorkerGroup);
|
||||
page.update(environmentName, editEnvironmentName, editEnvironmentConfig, editEnvironmentDesc,
|
||||
editEnvironmentWorkerGroup);
|
||||
|
||||
Awaitility.await().untilAsserted(() -> {
|
||||
browser.navigate().refresh();
|
||||
|
|
@ -114,12 +111,11 @@ class EnvironmentE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.environmentList()
|
||||
)
|
||||
page.environmentList())
|
||||
.as("Environment list should not contain deleted environment")
|
||||
.noneMatch(
|
||||
it -> it.getText().contains(environmentName) || it.getText().contains(editEnvironmentName)
|
||||
);
|
||||
it -> it.getText().contains(environmentName)
|
||||
|| it.getText().contains(editEnvironmentName));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.Constants;
|
||||
|
|
@ -37,10 +36,10 @@ import java.io.IOException;
|
|||
import java.io.RandomAccessFile;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.time.Duration;
|
||||
import java.util.Comparator;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
|
|
@ -49,12 +48,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/file-manage/docker-compose.yaml")
|
||||
public class FileManageE2ETest {
|
||||
|
||||
private static RemoteWebDriver browser;
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
|
|
@ -173,7 +171,7 @@ public class FileManageE2ETest {
|
|||
|
||||
/*
|
||||
* when the storage is s3,the directory cannot be renamed
|
||||
* */
|
||||
*/
|
||||
// @Test
|
||||
// @Order(22)
|
||||
// void testRenameDirectory() {
|
||||
|
|
@ -204,10 +202,8 @@ public class FileManageE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.fileList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(testDirectoryName)
|
||||
);
|
||||
page.fileList()).noneMatch(
|
||||
it -> it.getText().contains(testDirectoryName));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -267,10 +263,8 @@ public class FileManageE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.fileList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(testRenameFileName)
|
||||
);
|
||||
page.fileList()).noneMatch(
|
||||
it -> it.getText().contains(testRenameFileName));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -286,7 +280,8 @@ public class FileManageE2ETest {
|
|||
|
||||
page.uploadFile(testUnder1GBFilePath.toFile().getAbsolutePath());
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(browser).until(ExpectedConditions.invisibilityOfElementLocated(By.id("fileUpdateDialog")));
|
||||
WebDriverWaitFactory.createWebDriverWait(browser)
|
||||
.until(ExpectedConditions.invisibilityOfElementLocated(By.id("fileUpdateDialog")));
|
||||
|
||||
Awaitility.await().untilAsserted(() -> {
|
||||
assertThat(page.fileList())
|
||||
|
|
|
|||
|
|
@ -27,8 +27,6 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.datasource.DataSourcePage;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -36,11 +34,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/datasource-hive/docker-compose.yaml")
|
||||
public class HiveDataSourceE2ETest {
|
||||
|
||||
private static RemoteWebDriver browser;
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
|
|
@ -73,7 +71,6 @@ public class HiveDataSourceE2ETest {
|
|||
.login(user, password)
|
||||
.goToNav(DataSourcePage.class);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -81,7 +78,8 @@ public class HiveDataSourceE2ETest {
|
|||
void testCreateHiveDataSource() {
|
||||
final DataSourcePage page = new DataSourcePage(browser);
|
||||
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, hivePassword, database, jdbcParams);
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, hivePassword,
|
||||
database, jdbcParams);
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(page.driver()).until(ExpectedConditions.invisibilityOfElementLocated(
|
||||
new By.ByClassName("dialog-create-data-source")));
|
||||
|
|
@ -103,10 +101,8 @@ public class HiveDataSourceE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.dataSourceItemsList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName)
|
||||
);
|
||||
page.dataSourceItemsList()).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,9 +27,6 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.datasource.DataSourcePage;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -37,11 +34,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/datasource-mysql/docker-compose.yaml")
|
||||
public class MysqlDataSourceE2ETest {
|
||||
|
||||
private static RemoteWebDriver browser;
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
|
|
@ -68,7 +65,6 @@ public class MysqlDataSourceE2ETest {
|
|||
|
||||
private static final String jdbcParams = "{\"useSSL\": false}";
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void setup() {
|
||||
new LoginPage(browser)
|
||||
|
|
@ -81,7 +77,8 @@ public class MysqlDataSourceE2ETest {
|
|||
void testCreateMysqlDataSource() {
|
||||
final DataSourcePage page = new DataSourcePage(browser);
|
||||
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, mysqlPassword, database, jdbcParams);
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, mysqlPassword,
|
||||
database, jdbcParams);
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(page.driver()).until(ExpectedConditions.invisibilityOfElementLocated(
|
||||
new By.ByClassName("dialog-create-data-source")));
|
||||
|
|
@ -103,10 +100,8 @@ public class MysqlDataSourceE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.dataSourceItemsList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName)
|
||||
);
|
||||
page.dataSourceItemsList()).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,9 +27,6 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.datasource.DataSourcePage;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -37,11 +34,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/datasource-postgresql/docker-compose.yaml")
|
||||
public class PostgresDataSourceE2ETest {
|
||||
|
||||
private static RemoteWebDriver browser;
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
|
|
@ -68,7 +65,6 @@ public class PostgresDataSourceE2ETest {
|
|||
|
||||
private static final String jdbcParams = "";
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void setup() {
|
||||
new LoginPage(browser)
|
||||
|
|
@ -81,7 +77,8 @@ public class PostgresDataSourceE2ETest {
|
|||
void testCreatePostgresDataSource() {
|
||||
final DataSourcePage page = new DataSourcePage(browser);
|
||||
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, pgPassword, database, jdbcParams);
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, pgPassword,
|
||||
database, jdbcParams);
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(page.driver()).until(ExpectedConditions.invisibilityOfElementLocated(
|
||||
new By.ByClassName("dialog-create-data-source")));
|
||||
|
|
@ -103,10 +100,8 @@ public class PostgresDataSourceE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.dataSourceItemsList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName)
|
||||
);
|
||||
page.dataSourceItemsList()).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,14 +25,15 @@ import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
|||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.ProjectPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class ProjectE2ETest {
|
||||
|
||||
private static final String project = "test-project-1";
|
||||
|
||||
private static RemoteWebDriver browser;
|
||||
|
|
@ -59,10 +60,8 @@ class ProjectE2ETest {
|
|||
Awaitility.await().untilAsserted(() -> {
|
||||
browser.navigate().refresh();
|
||||
assertThat(
|
||||
page.projectList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(project)
|
||||
);
|
||||
page.projectList()).noneMatch(
|
||||
it -> it.getText().contains(project));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
|
|
@ -27,13 +26,13 @@ import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.QueuePage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class QueueE2ETest {
|
||||
|
|
@ -50,8 +49,7 @@ class QueueE2ETest {
|
|||
new LoginPage(browser)
|
||||
.login("admin", "dolphinscheduler123")
|
||||
.goToNav(SecurityPage.class)
|
||||
.goToTab(QueuePage.class)
|
||||
;
|
||||
.goToTab(QueuePage.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -75,10 +73,8 @@ class QueueE2ETest {
|
|||
final QueuePage page = new QueuePage(browser);
|
||||
page.create(queueName, queueValue);
|
||||
|
||||
Awaitility.await().untilAsserted(() ->
|
||||
assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists")
|
||||
);
|
||||
Awaitility.await().untilAsserted(() -> assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists"));
|
||||
|
||||
page.createQueueForm().buttonCancel().click();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,9 +27,6 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.datasource.DataSourcePage;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -37,11 +34,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/datasource-sqlserver/docker-compose.yaml")
|
||||
public class SqlServerDataSourceE2ETest {
|
||||
|
||||
private static RemoteWebDriver browser;
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
|
|
@ -68,7 +65,6 @@ public class SqlServerDataSourceE2ETest {
|
|||
|
||||
private static final String jdbcParams = "";
|
||||
|
||||
|
||||
@BeforeAll
|
||||
public static void setup() {
|
||||
new LoginPage(browser)
|
||||
|
|
@ -81,7 +77,8 @@ public class SqlServerDataSourceE2ETest {
|
|||
void testCreateSqlServerDataSource() {
|
||||
final DataSourcePage page = new DataSourcePage(browser);
|
||||
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, pgPassword, database, jdbcParams);
|
||||
page.createDataSource(dataSourceType, dataSourceName, dataSourceDescription, ip, port, userName, pgPassword,
|
||||
database, jdbcParams);
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(page.driver()).until(ExpectedConditions.invisibilityOfElementLocated(
|
||||
new By.ByClassName("dialog-create-data-source")));
|
||||
|
|
@ -103,10 +100,8 @@ public class SqlServerDataSourceE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.dataSourceItemsList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName)
|
||||
);
|
||||
page.dataSourceItemsList()).noneMatch(
|
||||
it -> it.getText().contains(dataSourceName));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,16 +26,17 @@ import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class TenantE2ETest {
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
private static final String editDescription = "This is a test";
|
||||
|
||||
|
|
@ -46,8 +47,7 @@ class TenantE2ETest {
|
|||
new LoginPage(browser)
|
||||
.login("admin", "dolphinscheduler123")
|
||||
.goToNav(SecurityPage.class)
|
||||
.goToTab(TenantPage.class)
|
||||
;
|
||||
.goToTab(TenantPage.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -69,10 +69,8 @@ class TenantE2ETest {
|
|||
|
||||
page.create(tenant);
|
||||
|
||||
Awaitility.await().untilAsserted(() ->
|
||||
assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists")
|
||||
);
|
||||
Awaitility.await().untilAsserted(() -> assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists"));
|
||||
|
||||
page.tenantForm().buttonCancel().click();
|
||||
}
|
||||
|
|
@ -103,10 +101,8 @@ class TenantE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.tenantList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(tenant)
|
||||
);
|
||||
page.tenantList()).noneMatch(
|
||||
it -> it.getText().contains(tenant));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,12 +26,12 @@ import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.TokenPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
public class TokenE2ETest {
|
||||
|
|
@ -45,8 +45,7 @@ public class TokenE2ETest {
|
|||
new LoginPage(browser)
|
||||
.login("admin", "dolphinscheduler123")
|
||||
.goToNav(SecurityPage.class)
|
||||
.goToTab(TokenPage.class)
|
||||
;
|
||||
.goToTab(TokenPage.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
|
|
@ -30,9 +29,6 @@ import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.UserPage;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
|
|
@ -41,10 +37,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class UserE2ETest {
|
||||
|
||||
private static final String tenant = System.getProperty("user.name");
|
||||
private static final String user = "test_user";
|
||||
private static final String password = "testUser123";
|
||||
|
|
@ -107,10 +104,8 @@ class UserE2ETest {
|
|||
|
||||
page.create(user, password, email, phone, tenant);
|
||||
|
||||
Awaitility.await().untilAsserted(() ->
|
||||
assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists")
|
||||
);
|
||||
Awaitility.await().untilAsserted(() -> assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists"));
|
||||
|
||||
page.createUserForm().buttonCancel().click();
|
||||
}
|
||||
|
|
@ -147,10 +142,8 @@ class UserE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.userList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(user) || it.getText().contains(editUser)
|
||||
);
|
||||
page.userList()).noneMatch(
|
||||
it -> it.getText().contains(user) || it.getText().contains(editUser));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
|
|
@ -28,9 +27,6 @@ import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.WorkerGroupPage;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -38,10 +34,11 @@ import org.openqa.selenium.By;
|
|||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class WorkerGroupE2ETest {
|
||||
|
||||
private static final String workerGroupName = "test_worker_group";
|
||||
private static final String editWorkerGroupName = "edit_worker_group";
|
||||
|
||||
|
|
@ -82,10 +79,8 @@ class WorkerGroupE2ETest {
|
|||
|
||||
page.create(workerGroupName);
|
||||
|
||||
Awaitility.await().untilAsserted(() ->
|
||||
assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists")
|
||||
);
|
||||
Awaitility.await().untilAsserted(() -> assertThat(browser.findElement(By.tagName("body")).getText())
|
||||
.contains("already exists"));
|
||||
|
||||
page.createWorkerForm().buttonCancel().click();
|
||||
}
|
||||
|
|
@ -105,7 +100,6 @@ class WorkerGroupE2ETest {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Order(40)
|
||||
void testDeleteWorkerGroup() {
|
||||
|
|
@ -117,10 +111,8 @@ class WorkerGroupE2ETest {
|
|||
browser.navigate().refresh();
|
||||
|
||||
assertThat(
|
||||
page.workerGroupList()
|
||||
).noneMatch(
|
||||
it -> it.getText().contains(workerGroupName) || it.getText().contains(editWorkerGroupName)
|
||||
);
|
||||
page.workerGroupList()).noneMatch(
|
||||
it -> it.getText().contains(workerGroupName) || it.getText().contains(editWorkerGroupName));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
|
|
@ -35,7 +37,6 @@ import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.UserPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
|
|
@ -43,14 +44,11 @@ import org.junit.jupiter.api.Test;
|
|||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.time.Duration;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class WorkflowE2ETest {
|
||||
|
||||
private static final String project = "test-workflow-1";
|
||||
|
||||
private static final String workflow = "test-workflow-1";
|
||||
|
|
@ -82,8 +80,7 @@ class WorkflowE2ETest {
|
|||
|
||||
userPage.update(user, user, email, phone, tenant)
|
||||
.goToNav(ProjectPage.class)
|
||||
.create(project)
|
||||
;
|
||||
.create(project);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
|
|
@ -126,14 +123,12 @@ class WorkflowE2ETest {
|
|||
.submit()
|
||||
.name(workflow)
|
||||
.addGlobalParam("global_param", "hello world")
|
||||
.submit()
|
||||
;
|
||||
.submit();
|
||||
|
||||
Awaitility.await().untilAsserted(() -> assertThat(workflowDefinitionPage.workflowList())
|
||||
.as("Workflow list should contain newly-created workflow")
|
||||
.anyMatch(
|
||||
it -> it.getText().contains(workflow)
|
||||
));
|
||||
it -> it.getText().contains(workflow)));
|
||||
workflowDefinitionPage.publish(workflow);
|
||||
}
|
||||
|
||||
|
|
@ -158,12 +153,10 @@ class WorkflowE2ETest {
|
|||
.submit()
|
||||
.name(workflow)
|
||||
.addGlobalParam("global_param", "hello world")
|
||||
.submit()
|
||||
;
|
||||
.submit();
|
||||
|
||||
Awaitility.await().untilAsserted(() -> assertThat(
|
||||
workflowDefinitionPage.workflowList()
|
||||
).anyMatch(it -> it.getText().contains(workflow)));
|
||||
workflowDefinitionPage.workflowList()).anyMatch(it -> it.getText().contains(workflow)));
|
||||
workflowDefinitionPage.publish(workflow);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
|
|
@ -32,6 +34,7 @@ import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.HttpTaskForm;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.UserPage;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
|
|
@ -39,16 +42,10 @@ import org.junit.jupiter.api.Test;
|
|||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@DolphinScheduler(composeFiles = "docker/workflow-http/docker-compose.yaml")
|
||||
public class WorkflowHttpTaskE2ETest {
|
||||
|
||||
|
||||
private static final String project = "test-workflow-1";
|
||||
|
||||
private static final String workflow = "test-workflow-1";
|
||||
|
|
@ -82,8 +79,7 @@ public class WorkflowHttpTaskE2ETest {
|
|||
|
||||
userPage.update(user, user, email, phone, tenant)
|
||||
.goToNav(ProjectPage.class)
|
||||
.create(project)
|
||||
;
|
||||
.create(project);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
|
|
@ -125,18 +121,15 @@ public class WorkflowHttpTaskE2ETest {
|
|||
.submit()
|
||||
.name(workflow)
|
||||
.addGlobalParam("global_param", "hello world")
|
||||
.submit()
|
||||
;
|
||||
.submit();
|
||||
|
||||
Awaitility.await().untilAsserted(() -> assertThat(workflowDefinitionPage.workflowList())
|
||||
.as("Workflow list should contain newly-created workflow")
|
||||
.anyMatch(
|
||||
it -> it.getText().contains(workflow)
|
||||
));
|
||||
it -> it.getText().contains(workflow)));
|
||||
workflowDefinitionPage.publish(workflow);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Order(30)
|
||||
void testRunWorkflow() {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
|
|
@ -33,23 +35,19 @@ import org.apache.dolphinscheduler.e2e.pages.security.EnvironmentPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.UserPage;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
public class WorkflowJavaTaskE2ETest {
|
||||
|
||||
private static final String project = "test-workflow-1";
|
||||
|
||||
private static final String workflow = "test-workflow-1";
|
||||
|
|
@ -98,8 +96,7 @@ public class WorkflowJavaTaskE2ETest {
|
|||
|
||||
userPage.update(user, user, email, phone, tenant)
|
||||
.goToNav(ProjectPage.class)
|
||||
.create(project)
|
||||
;
|
||||
.create(project);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
|
|
@ -122,8 +119,6 @@ public class WorkflowJavaTaskE2ETest {
|
|||
.delete(tenant);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
void testCreateWorkflow() {
|
||||
|
|
@ -143,18 +138,15 @@ public class WorkflowJavaTaskE2ETest {
|
|||
.submit()
|
||||
.name(workflow)
|
||||
.addGlobalParam("global_param", "hello world")
|
||||
.submit()
|
||||
;
|
||||
.submit();
|
||||
|
||||
Awaitility.await().untilAsserted(() -> assertThat(workflowDefinitionPage.workflowList())
|
||||
.as("Workflow list should contain newly-created workflow")
|
||||
.anyMatch(
|
||||
it -> it.getText().contains(workflow)
|
||||
));
|
||||
it -> it.getText().contains(workflow)));
|
||||
workflowDefinitionPage.publish(workflow);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
@Order(30)
|
||||
void testRunWorkflow() {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
|
@ -35,19 +37,18 @@ import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.SwitchTaskFor
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
class WorkflowSwitchE2ETest {
|
||||
|
||||
private static final String project = "test-workflow-1";
|
||||
private static final String workflow = "test-workflow-1";
|
||||
private static final String ifBranchName = "key==1";
|
||||
|
|
@ -65,8 +66,7 @@ class WorkflowSwitchE2ETest {
|
|||
.goToTab(TenantPage.class)
|
||||
.create(tenant)
|
||||
.goToNav(ProjectPage.class)
|
||||
.create(project)
|
||||
;
|
||||
.create(project);
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
|
|
@ -76,15 +76,13 @@ class WorkflowSwitchE2ETest {
|
|||
.goTo(project)
|
||||
.goToTab(WorkflowDefinitionTab.class)
|
||||
.cancelPublishAll()
|
||||
.deleteAll()
|
||||
;
|
||||
.deleteAll();
|
||||
new NavBarPage(browser)
|
||||
.goToNav(ProjectPage.class)
|
||||
.delete(project)
|
||||
.goToNav(SecurityPage.class)
|
||||
.goToTab(TenantPage.class)
|
||||
.delete(tenant)
|
||||
;
|
||||
.delete(tenant);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -135,8 +133,7 @@ class WorkflowSwitchE2ETest {
|
|||
.submit();
|
||||
|
||||
Awaitility.await().untilAsserted(() -> assertThat(
|
||||
workflowDefinitionPage.workflowList()
|
||||
).anyMatch(it -> it.getText().contains(workflow)));
|
||||
workflowDefinitionPage.workflowList()).anyMatch(it -> it.getText().contains(workflow)));
|
||||
|
||||
workflowDefinitionPage.publish(workflow);
|
||||
}
|
||||
|
|
@ -178,8 +175,10 @@ class WorkflowSwitchE2ETest {
|
|||
|
||||
Awaitility.await().untilAsserted(() -> {
|
||||
assertThat(taskInstances.size()).isEqualTo(3);
|
||||
assertThat(taskInstances.stream().filter(row -> row.taskInstanceName().contains(ifBranchName)).count()).isEqualTo(1);
|
||||
assertThat(taskInstances.stream().noneMatch(row -> row.taskInstanceName().contains(elseBranchName))).isTrue();
|
||||
assertThat(taskInstances.stream().filter(row -> row.taskInstanceName().contains(ifBranchName)).count())
|
||||
.isEqualTo(1);
|
||||
assertThat(taskInstances.stream().noneMatch(row -> row.taskInstanceName().contains(elseBranchName)))
|
||||
.isTrue();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,8 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases.tasks;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.cases.workflow.BaseWorkflowE2ETest;
|
||||
import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.ProjectPage;
|
||||
|
|
@ -27,16 +29,12 @@ import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowInstanceTa
|
|||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.ShellTaskForm;
|
||||
import org.apache.dolphinscheduler.e2e.pages.resource.FileManagePage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.resource.ResourcePage;
|
||||
import org.junit.FixMethodOrder;
|
||||
import org.junit.jupiter.api.Order;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.runners.MethodSorters;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestMethodOrder;
|
||||
|
||||
@TestMethodOrder(MethodOrderer.MethodName.class)
|
||||
@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
|
||||
public class ShellTaskE2ETest extends BaseWorkflowE2ETest {
|
||||
|
||||
|
|
|
|||
|
|
@ -17,19 +17,12 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.cases.workflow;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverHolder;
|
||||
import org.apache.dolphinscheduler.e2e.models.tenant.DefaultTenant;
|
||||
import org.apache.dolphinscheduler.e2e.models.users.AdminUser;
|
||||
import org.apache.dolphinscheduler.e2e.models.users.IUser;
|
||||
import org.apache.dolphinscheduler.e2e.pages.LoginPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.ProjectDetailPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.ProjectPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.TaskInstanceTab;
|
||||
|
|
@ -38,11 +31,16 @@ import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowInstanceTa
|
|||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.UserPage;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
@Slf4j
|
||||
public abstract class BaseWorkflowE2ETest {
|
||||
|
|
@ -83,8 +81,7 @@ public abstract class BaseWorkflowE2ETest {
|
|||
await().untilAsserted(() -> assertThat(workflowDefinitionPage.workflowList())
|
||||
.as("Workflow list should contain newly-created workflow: %s", workflowName)
|
||||
.anyMatch(
|
||||
it -> it.getText().contains(workflowName)
|
||||
));
|
||||
it -> it.getText().contains(workflowName)));
|
||||
}
|
||||
|
||||
protected void runWorkflow(String workflowName) {
|
||||
|
|
@ -155,7 +152,8 @@ public abstract class BaseWorkflowE2ETest {
|
|||
if (workflowInstances.size() > 1) {
|
||||
throw new RuntimeException("More than one failed workflow instance found: " +
|
||||
workflowInstances.stream()
|
||||
.map(WorkflowInstanceTab.Row::workflowInstanceName).collect(Collectors.joining(", ")));
|
||||
.map(WorkflowInstanceTab.Row::workflowInstanceName)
|
||||
.collect(Collectors.joining(", ")));
|
||||
}
|
||||
return workflowInstances.get(0);
|
||||
}, Objects::nonNull);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
package org.apache.dolphinscheduler.e2e.models.tenant;
|
||||
|
||||
public class DefaultTenant implements ITenant {
|
||||
|
||||
@Override
|
||||
public String getTenantCode() {
|
||||
return "default";
|
||||
|
|
|
|||
|
|
@ -17,10 +17,11 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.models.users;
|
||||
|
||||
import lombok.Data;
|
||||
import org.apache.dolphinscheduler.e2e.models.tenant.BootstrapTenant;
|
||||
import org.apache.dolphinscheduler.e2e.models.tenant.ITenant;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class AdminUser implements IUser {
|
||||
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.models.users;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.models.tenant.ITenant;
|
||||
|
||||
public interface IUser {
|
||||
|
||||
String getUserName();
|
||||
|
|
@ -31,5 +29,4 @@ public interface IUser {
|
|||
|
||||
String getTenant();
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,22 +22,19 @@ package org.apache.dolphinscheduler.e2e.pages;
|
|||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.models.users.IUser;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Getter
|
||||
public final class LoginPage extends NavBarPage {
|
||||
|
||||
@FindBys({
|
||||
@FindBy(className = "input-user-name"),
|
||||
@FindBy(tagName = "input"),
|
||||
|
|
@ -67,7 +64,8 @@ public final class LoginPage extends NavBarPage {
|
|||
|
||||
@SneakyThrows
|
||||
public NavBarPage login(String username, String password) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(buttonSwitchLanguage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(buttonSwitchLanguage));
|
||||
buttonSwitchLanguage().click();
|
||||
|
||||
inputUsername().sendKeys(username);
|
||||
|
|
|
|||
|
|
@ -20,22 +20,20 @@
|
|||
package org.apache.dolphinscheduler.e2e.pages.common;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
@Getter
|
||||
public final class CodeEditor {
|
||||
|
||||
@FindBys({
|
||||
@FindBy(className = "monaco-editor"),
|
||||
@FindBy(className = "view-line"),
|
||||
|
|
|
|||
|
|
@ -18,23 +18,22 @@
|
|||
*
|
||||
*/
|
||||
|
||||
|
||||
package org.apache.dolphinscheduler.e2e.pages.common;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Getter
|
||||
public class HttpInput {
|
||||
|
||||
@FindBys({
|
||||
@FindBy(className = "input-url-name"),
|
||||
@FindBy(tagName = "input")
|
||||
|
|
@ -43,8 +42,6 @@ public class HttpInput {
|
|||
|
||||
private WebDriver driver;
|
||||
|
||||
|
||||
|
||||
public HttpInput(WebDriver driver) {
|
||||
PageFactory.initElements(driver, this);
|
||||
this.driver = driver;
|
||||
|
|
|
|||
|
|
@ -26,20 +26,18 @@ import org.apache.dolphinscheduler.e2e.pages.project.ProjectPage;
|
|||
import org.apache.dolphinscheduler.e2e.pages.resource.ResourcePage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Getter
|
||||
public class NavBarPage {
|
||||
|
||||
protected final RemoteWebDriver driver;
|
||||
|
||||
@FindBy(xpath = "//div[contains(@class, 'tab-horizontal')]//div[contains(@role,'menubar')]//span[contains(text(), 'Project')]")
|
||||
|
|
@ -72,21 +70,26 @@ public class NavBarPage {
|
|||
}
|
||||
|
||||
if (nav == SecurityPage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(securityTab));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(securityTab));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", securityTab());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/tenant-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/tenant-manage"));
|
||||
return nav.cast(new SecurityPage(driver));
|
||||
}
|
||||
|
||||
if (nav == ResourcePage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(resourceTab));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(resourceTab));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", resourceTab());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/resource/file-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/resource/file-manage"));
|
||||
return nav.cast(new ResourcePage(driver));
|
||||
}
|
||||
|
||||
if (nav == DataSourcePage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(dataSourceTab));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(dataSourceTab));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", dataSourceTab());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/datasource"));
|
||||
return nav.cast(new DataSourcePage(driver));
|
||||
|
|
|
|||
|
|
@ -20,28 +20,22 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.pages.datasource;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.security.Key;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedCondition;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
|
||||
@Getter
|
||||
public class DataSourcePage extends NavBarPage implements NavBarPage.NavBarItem {
|
||||
|
|
@ -71,7 +65,8 @@ public class DataSourcePage extends NavBarPage implements NavBarPage.NavBarItem
|
|||
createDataSourceForm = new CreateDataSourceForm();
|
||||
}
|
||||
|
||||
public DataSourcePage createDataSource(String dataSourceType, String dataSourceName, String dataSourceDescription, String ip, String port, String userName, String password, String database,
|
||||
public DataSourcePage createDataSource(String dataSourceType, String dataSourceName, String dataSourceDescription,
|
||||
String ip, String port, String userName, String password, String database,
|
||||
String jdbcParams) {
|
||||
buttonCreateDataSource().click();
|
||||
|
||||
|
|
@ -80,7 +75,8 @@ public class DataSourcePage extends NavBarPage implements NavBarPage.NavBarItem
|
|||
|
||||
dataSourceModal().findElement(By.className(dataSourceType.toUpperCase() + "-box")).click();
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.textToBePresentInElement(driver.findElement(By.className("dialog-create-data-source")), dataSourceType.toUpperCase()));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.textToBePresentInElement(
|
||||
driver.findElement(By.className("dialog-create-data-source")), dataSourceType.toUpperCase()));
|
||||
|
||||
createDataSourceForm().inputDataSourceName().sendKeys(dataSourceName);
|
||||
createDataSourceForm().inputDataSourceDescription().sendKeys(dataSourceDescription);
|
||||
|
|
@ -118,6 +114,7 @@ public class DataSourcePage extends NavBarPage implements NavBarPage.NavBarItem
|
|||
|
||||
@Getter
|
||||
public class CreateDataSourceForm {
|
||||
|
||||
CreateDataSourceForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,22 +19,23 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.pages.project;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.TaskInstanceTab;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowDefinitionTab;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowInstanceTab;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
|
||||
@Getter
|
||||
public final class ProjectDetailPage extends NavBarPage {
|
||||
|
||||
@FindBy(css = ".tab-vertical .n-submenu:nth-of-type(2) .n-menu-item:nth-of-type(2) > .n-menu-item-content")
|
||||
private WebElement menuProcessDefinition;
|
||||
|
||||
|
|
@ -52,12 +53,14 @@ public final class ProjectDetailPage extends NavBarPage {
|
|||
public <T extends Tab> T goToTab(Class<T> tab) {
|
||||
if (tab == WorkflowDefinitionTab.class) {
|
||||
menuProcessDefinition().click();
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/workflow-definition"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/workflow-definition"));
|
||||
return tab.cast(new WorkflowDefinitionTab(driver));
|
||||
}
|
||||
if (tab == WorkflowInstanceTab.class) {
|
||||
menuProcessInstances().click();
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/workflow/instances"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/workflow/instances"));
|
||||
return tab.cast(new WorkflowInstanceTab(driver));
|
||||
}
|
||||
if (tab == TaskInstanceTab.class) {
|
||||
|
|
|
|||
|
|
@ -19,11 +19,16 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.pages.project;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage.NavBarItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
|
@ -31,15 +36,10 @@ import org.openqa.selenium.remote.RemoteWebDriver;
|
|||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.Getter;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
@Getter
|
||||
public final class ProjectPage extends NavBarPage implements NavBarItem {
|
||||
|
||||
@FindBy(className = "btn-create-project")
|
||||
private WebElement buttonCreateProject;
|
||||
|
||||
|
|
@ -77,7 +77,6 @@ public final class ProjectPage extends NavBarPage implements NavBarItem {
|
|||
return this;
|
||||
}
|
||||
|
||||
|
||||
public ProjectPage delete(String project) {
|
||||
projectList()
|
||||
.stream()
|
||||
|
|
@ -104,6 +103,7 @@ public final class ProjectPage extends NavBarPage implements NavBarItem {
|
|||
|
||||
@Getter
|
||||
public class CreateProjectForm {
|
||||
|
||||
CreateProjectForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,18 +20,19 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.pages.project.workflow;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.ProjectDetailPage;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Getter
|
||||
public final class TaskInstanceTab extends NavBarPage implements ProjectDetailPage.Tab {
|
||||
|
|
@ -53,6 +54,7 @@ public final class TaskInstanceTab extends NavBarPage implements ProjectDetailPa
|
|||
|
||||
@RequiredArgsConstructor
|
||||
public static class Row {
|
||||
|
||||
private final WebElement row;
|
||||
|
||||
public String taskInstanceName() {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ import org.apache.dolphinscheduler.e2e.pages.project.ProjectDetailPage;
|
|||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
|
@ -35,10 +37,9 @@ import org.openqa.selenium.support.FindBy;
|
|||
import org.openqa.selenium.support.FindBys;
|
||||
import org.testcontainers.shaded.org.awaitility.Awaitility;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public final class WorkflowDefinitionTab extends NavBarPage implements ProjectDetailPage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-process")
|
||||
private WebElement buttonCreateProcess;
|
||||
|
||||
|
|
@ -138,8 +139,7 @@ public final class WorkflowDefinitionTab extends NavBarPage implements ProjectDe
|
|||
Awaitility.await().untilAsserted(() -> assertThat(workflowList())
|
||||
.as("Workflow list should contain newly-created workflow")
|
||||
.anyMatch(
|
||||
it -> it.getText().contains(workflow)
|
||||
));
|
||||
it -> it.getText().contains(workflow)));
|
||||
|
||||
workflowList()
|
||||
.stream()
|
||||
|
|
|
|||
|
|
@ -21,15 +21,16 @@ package org.apache.dolphinscheduler.e2e.pages.project.workflow;
|
|||
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.HttpTaskForm;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.JavaTaskForm;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.ShellTaskForm;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.SubWorkflowTaskForm;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.SwitchTaskForm;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.task.JavaTaskForm;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
|
|
@ -38,17 +39,14 @@ import org.openqa.selenium.WebElement;
|
|||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
|
||||
import com.google.common.io.Resources;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.SneakyThrows;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
@Getter
|
||||
public final class WorkflowForm {
|
||||
|
||||
private WebDriver driver;
|
||||
private final WorkflowSaveDialog saveForm;
|
||||
private final WorkflowFormatDialog formatDialog;
|
||||
|
|
@ -95,7 +93,8 @@ public final class WorkflowForm {
|
|||
|
||||
public WebElement getTask(String taskName) {
|
||||
List<WebElement> tasks = WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("svg > g > g[class^='x6-graph-svg-stage'] > g[data-shape^='dag-task']")));
|
||||
.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(
|
||||
By.cssSelector("svg > g > g[class^='x6-graph-svg-stage'] > g[data-shape^='dag-task']")));
|
||||
|
||||
WebElement task = tasks.stream()
|
||||
.filter(t -> t.getText().contains(taskName))
|
||||
|
|
@ -110,7 +109,8 @@ public final class WorkflowForm {
|
|||
|
||||
public WorkflowSaveDialog submit() {
|
||||
buttonSave().click();
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(.,'Basic Information')]")));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(.,'Basic Information')]")));
|
||||
return new WorkflowSaveDialog(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,22 +19,19 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.pages.project.workflow;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.openqa.selenium.By;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.pagefactory.ByChained;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Getter
|
||||
public final class WorkflowFormatDialog {
|
||||
|
||||
private final WebDriver driver;
|
||||
private final WorkflowForm parent;
|
||||
|
||||
|
|
|
|||
|
|
@ -25,19 +25,20 @@ import org.apache.dolphinscheduler.e2e.pages.project.ProjectDetailPage;
|
|||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.openqa.selenium.support.pagefactory.ByChained;
|
||||
|
||||
@Getter
|
||||
public final class WorkflowInstanceTab extends NavBarPage implements ProjectDetailPage.Tab {
|
||||
|
||||
@FindBy(className = "items-workflow-instances")
|
||||
private List<WebElement> instanceList;
|
||||
|
||||
|
|
@ -84,6 +85,7 @@ public final class WorkflowInstanceTab extends NavBarPage implements ProjectDeta
|
|||
|
||||
@RequiredArgsConstructor
|
||||
public static class Row {
|
||||
|
||||
private final WebElement row;
|
||||
|
||||
public String workflowInstanceName() {
|
||||
|
|
|
|||
|
|
@ -21,20 +21,17 @@ package org.apache.dolphinscheduler.e2e.pages.project.workflow;
|
|||
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
@Getter
|
||||
public final class WorkflowRunDialog {
|
||||
|
||||
private final WorkflowDefinitionTab parent;
|
||||
|
||||
@FindBy(className = "btn-submit")
|
||||
|
|
@ -47,9 +44,12 @@ public final class WorkflowRunDialog {
|
|||
}
|
||||
|
||||
public WorkflowDefinitionTab submit() {
|
||||
By runDialogTitleXpath = By.xpath(String.format("//*[contains(text(), '%s')]", "Please set the parameters before starting"));
|
||||
WebDriverWaitFactory.createWebDriverWait(parent.driver()).until(ExpectedConditions.visibilityOfElementLocated(runDialogTitleXpath));
|
||||
WebDriverWaitFactory.createWebDriverWait(parent.driver()).until(ExpectedConditions.elementToBeClickable(buttonSubmit()));
|
||||
By runDialogTitleXpath =
|
||||
By.xpath(String.format("//*[contains(text(), '%s')]", "Please set the parameters before starting"));
|
||||
WebDriverWaitFactory.createWebDriverWait(parent.driver())
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(runDialogTitleXpath));
|
||||
WebDriverWaitFactory.createWebDriverWait(parent.driver())
|
||||
.until(ExpectedConditions.elementToBeClickable(buttonSubmit()));
|
||||
|
||||
buttonSubmit().click();
|
||||
|
||||
|
|
|
|||
|
|
@ -19,26 +19,21 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.pages.project.workflow;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.pagefactory.ByChained;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Getter
|
||||
public final class WorkflowSaveDialog {
|
||||
|
||||
private final WebDriver driver;
|
||||
private final WorkflowForm parent;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,14 +22,15 @@ package org.apache.dolphinscheduler.e2e.pages.project.workflow.task;
|
|||
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.HttpInput;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
public class HttpTaskForm extends TaskNodeForm {
|
||||
|
||||
private WebDriver driver;
|
||||
|
||||
private HttpInput httpInput;
|
||||
|
||||
|
||||
public HttpTaskForm(WorkflowForm parent) {
|
||||
super(parent);
|
||||
this.httpInput = new HttpInput(parent.driver());
|
||||
|
|
|
|||
|
|
@ -22,9 +22,11 @@ package org.apache.dolphinscheduler.e2e.pages.project.workflow.task;
|
|||
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.CodeEditor;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
public class JavaTaskForm extends TaskNodeForm {
|
||||
|
||||
private CodeEditor codeEditor;
|
||||
|
||||
private WebDriver driver;
|
||||
|
|
|
|||
|
|
@ -23,11 +23,12 @@ import org.apache.dolphinscheduler.e2e.pages.common.CodeEditor;
|
|||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
||||
@Getter
|
||||
public final class ShellTaskForm extends TaskNodeForm {
|
||||
|
||||
private CodeEditor codeEditor;
|
||||
|
||||
private WebDriver driver;
|
||||
|
|
|
|||
|
|
@ -22,20 +22,20 @@ package org.apache.dolphinscheduler.e2e.pages.project.workflow.task;
|
|||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
public final class SubWorkflowTaskForm extends TaskNodeForm {
|
||||
|
||||
@FindBys({
|
||||
@FindBy(className = "select-child-node"),
|
||||
@FindBy(className = "n-base-selection"),
|
||||
|
|
@ -47,7 +47,6 @@ public final class SubWorkflowTaskForm extends TaskNodeForm {
|
|||
|
||||
private WebDriver driver;
|
||||
|
||||
|
||||
public SubWorkflowTaskForm(WorkflowForm parent) {
|
||||
super(parent);
|
||||
|
||||
|
|
@ -55,11 +54,13 @@ public final class SubWorkflowTaskForm extends TaskNodeForm {
|
|||
}
|
||||
|
||||
public SubWorkflowTaskForm childNode(String node) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(btnSelectChildNodeDropdown));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(btnSelectChildNodeDropdown));
|
||||
|
||||
btnSelectChildNodeDropdown().click();
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(By.className(
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(By.className(
|
||||
"n-base-select-option__content")));
|
||||
|
||||
selectChildNode()
|
||||
|
|
|
|||
|
|
@ -19,19 +19,19 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.pages.project.workflow.task;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
public final class SwitchTaskForm extends TaskNodeForm {
|
||||
|
|
@ -76,7 +76,8 @@ public final class SwitchTaskForm extends TaskNodeForm {
|
|||
SwitchTaskIfBranch switchTaskIfBranch = new SwitchTaskIfBranch(this);
|
||||
switchTaskIfBranch.codeEditor().content(switchScript);
|
||||
|
||||
((JavascriptExecutor)parent().driver()).executeScript("arguments[0].click();", switchTaskIfBranch.inputIfBranch());
|
||||
((JavascriptExecutor) parent().driver()).executeScript("arguments[0].click();",
|
||||
switchTaskIfBranch.inputIfBranch());
|
||||
|
||||
final By optionsLocator = By.className("option-if-branches");
|
||||
|
||||
|
|
|
|||
|
|
@ -19,8 +19,10 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.pages.project.workflow.task;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.CodeEditor;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
|
|
@ -29,6 +31,7 @@ import org.openqa.selenium.support.PageFactory;
|
|||
|
||||
@Getter
|
||||
public final class SwitchTaskIfBranch {
|
||||
|
||||
private final WebDriver driver;
|
||||
private final SwitchTaskForm parent;
|
||||
|
||||
|
|
|
|||
|
|
@ -19,9 +19,13 @@
|
|||
*/
|
||||
package org.apache.dolphinscheduler.e2e.pages.project.workflow.task;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
|
|
@ -30,13 +34,10 @@ import org.openqa.selenium.support.FindBy;
|
|||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
public abstract class TaskNodeForm {
|
||||
|
||||
@FindBys({
|
||||
@FindBy(className = "input-node-name"),
|
||||
@FindBy(tagName = "input")
|
||||
|
|
@ -85,7 +86,6 @@ public abstract class TaskNodeForm {
|
|||
})
|
||||
private WebElement selectResource;
|
||||
|
||||
|
||||
private final WorkflowForm parent;
|
||||
|
||||
TaskNodeForm(WorkflowForm parent) {
|
||||
|
|
@ -168,7 +168,8 @@ public abstract class TaskNodeForm {
|
|||
|
||||
final By optionsLocator = By.className("n-tree-node-content__text");
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(parent().driver()).until(ExpectedConditions.visibilityOfElementLocated(optionsLocator));
|
||||
WebDriverWaitFactory.createWebDriverWait(parent().driver())
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(optionsLocator));
|
||||
|
||||
parent().driver()
|
||||
.findElements(optionsLocator)
|
||||
|
|
|
|||
|
|
@ -20,35 +20,31 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.pages.resource;
|
||||
|
||||
import lombok.Getter;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.CodeEditor;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.LocalFileDetector;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedCondition;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
|
||||
@Getter
|
||||
public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-directory")
|
||||
private WebElement buttonCreateDirectory;
|
||||
|
||||
|
|
@ -165,7 +161,8 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
// todo: add file type
|
||||
public FileManagePage createFile(String fileName, String scripts) {
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(buttonCreateFile()));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(buttonCreateFile()));
|
||||
|
||||
buttonCreateFile().click();
|
||||
|
||||
|
|
@ -184,8 +181,7 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
createFile(fileName, scripts);
|
||||
|
||||
await()
|
||||
.untilAsserted(() ->
|
||||
assertThat(fileList())
|
||||
.untilAsserted(() -> assertThat(fileList())
|
||||
.as("File list should contain newly-created file: " + fileName)
|
||||
.extracting(WebElement::getText)
|
||||
.anyMatch(it -> it.contains(fileName)));
|
||||
|
|
@ -204,7 +200,8 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/edit"));
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.textToBePresentInElement(driver.findElement(By.tagName("body")), fileName));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.textToBePresentInElement(driver.findElement(By.tagName("body")), fileName));
|
||||
|
||||
editFileBox().codeEditor().content(scripts);
|
||||
editFileBox().buttonSubmit().click();
|
||||
|
|
@ -238,6 +235,7 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
|
||||
@Getter
|
||||
public class CreateDirectoryBox {
|
||||
|
||||
CreateDirectoryBox() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
@ -257,6 +255,7 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
|
||||
@Getter
|
||||
public class RenameBox {
|
||||
|
||||
RenameBox() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
@ -276,6 +275,7 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
|
||||
@Getter
|
||||
public class CreateFileBox {
|
||||
|
||||
CreateFileBox() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
@ -297,6 +297,7 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
|
||||
@Getter
|
||||
public class EditFileBox {
|
||||
|
||||
EditFileBox() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
@ -312,6 +313,7 @@ public class FileManagePage extends NavBarPage implements ResourcePage.Tab {
|
|||
|
||||
@Getter
|
||||
public class UploadFileBox {
|
||||
|
||||
UploadFileBox() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ package org.apache.dolphinscheduler.e2e.pages.resource;
|
|||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.time.Duration;
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
|
@ -30,13 +30,10 @@ import org.openqa.selenium.remote.RemoteWebDriver;
|
|||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
|
||||
@Getter
|
||||
public class ResourcePage extends NavBarPage implements NavBarPage.NavBarItem {
|
||||
|
||||
@FindBy(css = ".tab-vertical > .n-menu-item:nth-child(1) > .n-menu-item-content")
|
||||
private WebElement fileManageTab;
|
||||
|
||||
|
|
@ -49,7 +46,8 @@ public class ResourcePage extends NavBarPage implements NavBarPage.NavBarItem {
|
|||
public <T extends ResourcePage.Tab> T goToTab(Class<T> tab) {
|
||||
if (tab == FileManagePage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/resource"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(fileManageTab));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(fileManageTab));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", fileManageTab());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/file-manage"));
|
||||
return tab.cast(new FileManagePage(driver));
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
|
|
@ -31,13 +33,10 @@ import org.openqa.selenium.remote.RemoteWebDriver;
|
|||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public final class ClusterPage extends NavBarPage implements SecurityPage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-cluster")
|
||||
private WebElement buttonCreateCluster;
|
||||
|
||||
|
|
@ -79,7 +78,6 @@ public final class ClusterPage extends NavBarPage implements SecurityPage.Tab {
|
|||
.orElseThrow(() -> new RuntimeException("No edit button in cluster list"))
|
||||
.click();
|
||||
|
||||
|
||||
editClusterForm().inputClusterName().sendKeys(Keys.CONTROL + "a");
|
||||
editClusterForm().inputClusterName().sendKeys(Keys.BACK_SPACE);
|
||||
editClusterForm().inputClusterName().sendKeys(name);
|
||||
|
|
@ -114,6 +112,7 @@ public final class ClusterPage extends NavBarPage implements SecurityPage.Tab {
|
|||
|
||||
@Getter
|
||||
public class ClusterForm {
|
||||
|
||||
ClusterForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,9 +22,10 @@ package org.apache.dolphinscheduler.e2e.pages.security;
|
|||
import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
|
|
@ -33,13 +34,11 @@ import org.openqa.selenium.remote.RemoteWebDriver;
|
|||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
@Getter
|
||||
public final class EnvironmentPage extends NavBarPage implements SecurityPage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-environment")
|
||||
private WebElement buttonCreateEnvironment;
|
||||
|
||||
|
|
@ -68,7 +67,8 @@ public final class EnvironmentPage extends NavBarPage implements SecurityPage.Ta
|
|||
createEnvironmentForm().inputEnvironmentDesc().sendKeys(desc);
|
||||
|
||||
editEnvironmentForm().btnSelectWorkerGroupDropdown().click();
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
"n-base-select-option__content")));
|
||||
editEnvironmentForm().selectWorkerGroupList()
|
||||
.stream()
|
||||
|
|
@ -85,14 +85,14 @@ public final class EnvironmentPage extends NavBarPage implements SecurityPage.Ta
|
|||
public EnvironmentPage update(String oldName, String name, String config, String desc, String workerGroup) {
|
||||
environmentList()
|
||||
.stream()
|
||||
.filter(it -> it.findElement(By.className("environment-name")).getAttribute("innerHTML").contains(oldName))
|
||||
.filter(it -> it.findElement(By.className("environment-name")).getAttribute("innerHTML")
|
||||
.contains(oldName))
|
||||
.flatMap(it -> it.findElements(By.className("edit")).stream())
|
||||
.filter(WebElement::isDisplayed)
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new RuntimeException("No edit button in environment list"))
|
||||
.click();
|
||||
|
||||
|
||||
editEnvironmentForm().inputEnvironmentName().sendKeys(Keys.CONTROL + "a");
|
||||
editEnvironmentForm().inputEnvironmentName().sendKeys(Keys.BACK_SPACE);
|
||||
editEnvironmentForm().inputEnvironmentName().sendKeys(name);
|
||||
|
|
@ -107,7 +107,8 @@ public final class EnvironmentPage extends NavBarPage implements SecurityPage.Ta
|
|||
|
||||
if (editEnvironmentForm().selectedWorkerGroup().getAttribute("innerHTML").equals(workerGroup)) {
|
||||
editEnvironmentForm().btnSelectWorkerGroupDropdown().click();
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
"n-base-select-option__content")));
|
||||
editEnvironmentForm().selectWorkerGroupList()
|
||||
.stream()
|
||||
|
|
@ -140,6 +141,7 @@ public final class EnvironmentPage extends NavBarPage implements SecurityPage.Ta
|
|||
|
||||
@Getter
|
||||
public class EnvironmentForm {
|
||||
|
||||
EnvironmentForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,16 +23,17 @@ import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public final class NamespacePage extends NavBarPage implements SecurityPage.Tab {
|
||||
|
||||
@FindBy(id = "btnCreateNamespace")
|
||||
private WebElement buttonCreateNamespace;
|
||||
|
||||
|
|
@ -59,7 +60,8 @@ public final class NamespacePage extends NavBarPage implements SecurityPage.Tab
|
|||
public NamespacePage update(String namespaceName, String editNamespaceName, String editNamespaceValue) {
|
||||
namespaceList()
|
||||
.stream()
|
||||
.filter(it -> it.findElement(By.className("namespaceName")).getAttribute("innerHTML").contains(namespaceName))
|
||||
.filter(it -> it.findElement(By.className("namespaceName")).getAttribute("innerHTML")
|
||||
.contains(namespaceName))
|
||||
.flatMap(it -> it.findElements(By.className("edit")).stream())
|
||||
.filter(WebElement::isDisplayed)
|
||||
.findFirst()
|
||||
|
|
@ -75,6 +77,7 @@ public final class NamespacePage extends NavBarPage implements SecurityPage.Tab
|
|||
|
||||
@Getter
|
||||
public class NamespaceForm {
|
||||
|
||||
NamespaceForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,9 +21,10 @@ package org.apache.dolphinscheduler.e2e.pages.security;
|
|||
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.security.Key;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.Keys;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
|
@ -32,10 +33,9 @@ import org.openqa.selenium.support.FindBy;
|
|||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public final class QueuePage extends NavBarPage implements SecurityPage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-queue")
|
||||
private WebElement buttonCreateQueue;
|
||||
|
||||
|
|
@ -84,6 +84,7 @@ public final class QueuePage extends NavBarPage implements SecurityPage.Tab {
|
|||
|
||||
@Getter
|
||||
public class QueueForm {
|
||||
|
||||
QueueForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,17 +24,13 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage.NavBarItem;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.remote.RemoteWebDriver;
|
||||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
@Getter
|
||||
public class SecurityPage extends NavBarPage implements NavBarItem {
|
||||
|
|
@ -70,58 +66,74 @@ public class SecurityPage extends NavBarPage implements NavBarItem {
|
|||
public <T extends SecurityPage.Tab> T goToTab(Class<T> tab) {
|
||||
|
||||
if (tab == TenantPage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menuTenantManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menuTenantManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menuTenantManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/tenant-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/tenant-manage"));
|
||||
return tab.cast(new TenantPage(driver));
|
||||
}
|
||||
|
||||
if (tab == UserPage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menUserManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menUserManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menUserManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/user-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/user-manage"));
|
||||
return tab.cast(new UserPage(driver));
|
||||
}
|
||||
|
||||
if (tab == WorkerGroupPage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menWorkerGroupManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menWorkerGroupManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menWorkerGroupManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/worker-group-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/worker-group-manage"));
|
||||
return tab.cast(new WorkerGroupPage(driver));
|
||||
}
|
||||
|
||||
if (tab == QueuePage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menuQueueManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menuQueueManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menuQueueManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/yarn-queue-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/yarn-queue-manage"));
|
||||
return tab.cast(new QueuePage(driver));
|
||||
}
|
||||
|
||||
if (tab == EnvironmentPage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menuEnvironmentManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menuEnvironmentManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menuEnvironmentManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/environment-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/environment-manage"));
|
||||
return tab.cast(new EnvironmentPage(driver));
|
||||
}
|
||||
|
||||
if (tab == ClusterPage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menuClusterManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menuClusterManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menuClusterManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/cluster-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/cluster-manage"));
|
||||
return tab.cast(new ClusterPage(driver));
|
||||
}
|
||||
|
||||
if (tab == TokenPage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menuTokenManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menuTokenManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menuTokenManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/token-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/token-manage"));
|
||||
return tab.cast(new TokenPage(driver));
|
||||
}
|
||||
|
||||
if (tab == NamespacePage.class) {
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(menuNamespaceManage));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(menuNamespaceManage));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].click();", menuNamespaceManage());
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.urlContains("/security/k8s-namespace-manage"));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.urlContains("/security/k8s-namespace-manage"));
|
||||
return tab.cast(new NamespacePage(driver));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,14 +19,15 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.pages.security;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.dolphinscheduler.e2e.models.tenant.ITenant;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowInstanceTab;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
|
|
@ -36,13 +37,9 @@ import org.openqa.selenium.support.FindBy;
|
|||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.openqa.selenium.support.pagefactory.ByChained;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.testcontainers.shaded.org.awaitility.Awaitility.await;
|
||||
|
||||
@Getter
|
||||
public final class TenantPage extends NavBarPage implements SecurityPage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-tenant")
|
||||
private WebElement buttonCreateTenant;
|
||||
|
||||
|
|
@ -132,6 +129,7 @@ public final class TenantPage extends NavBarPage implements SecurityPage.Tab {
|
|||
|
||||
@Getter
|
||||
public class TenantForm {
|
||||
|
||||
TenantForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
@ -160,6 +158,7 @@ public final class TenantPage extends NavBarPage implements SecurityPage.Tab {
|
|||
|
||||
@RequiredArgsConstructor
|
||||
public static class Row {
|
||||
|
||||
private final WebElement row;
|
||||
|
||||
public String tenantCode() {
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage.Tab;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.WebElement;
|
||||
|
|
@ -34,14 +35,12 @@ import org.openqa.selenium.support.FindBy;
|
|||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
@Getter
|
||||
public final class TokenPage extends NavBarPage implements Tab {
|
||||
|
||||
@FindBy(className = "btn-create-token")
|
||||
private WebElement buttonCreateToken;
|
||||
|
||||
|
|
@ -70,9 +69,11 @@ public final class TokenPage extends NavBarPage implements Tab {
|
|||
public TokenPage create(String userName) {
|
||||
buttonCreateToken().click();
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(createTokenForm().selectUserNameDropdown()));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(createTokenForm().selectUserNameDropdown()));
|
||||
createTokenForm().selectUserNameDropdown().click();
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
"n-base-select-option__content")));
|
||||
createTokenForm().selectUserNameList()
|
||||
.stream()
|
||||
|
|
@ -82,7 +83,8 @@ public final class TokenPage extends NavBarPage implements Tab {
|
|||
userName)))
|
||||
.click();
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(createTokenForm().buttonGenerateToken()));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(createTokenForm().buttonGenerateToken()));
|
||||
createTokenForm().buttonGenerateToken().click();
|
||||
|
||||
createTokenForm().buttonSubmit().click();
|
||||
|
|
@ -99,9 +101,11 @@ public final class TokenPage extends NavBarPage implements Tab {
|
|||
.orElseThrow(() -> new RuntimeException("No edit button in token list"))
|
||||
.click();
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(editTokenForm().buttonGenerateToken()));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(editTokenForm().buttonGenerateToken()));
|
||||
editTokenForm().buttonGenerateToken().click();
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.elementToBeClickable(editTokenForm().buttonGenerateToken()));
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.elementToBeClickable(editTokenForm().buttonGenerateToken()));
|
||||
|
||||
editTokenForm().buttonSubmit().click();
|
||||
|
||||
|
|
@ -135,6 +139,7 @@ public final class TokenPage extends NavBarPage implements Tab {
|
|||
|
||||
@Getter
|
||||
public class TokenForm {
|
||||
|
||||
TokenForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,10 @@ import org.apache.dolphinscheduler.e2e.core.WebDriverWaitFactory;
|
|||
import org.apache.dolphinscheduler.e2e.models.users.IUser;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
|
|
@ -34,13 +35,11 @@ import org.openqa.selenium.remote.RemoteWebDriver;
|
|||
import org.openqa.selenium.support.FindBy;
|
||||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
@Getter
|
||||
public final class UserPage extends NavBarPage implements SecurityPage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-user")
|
||||
private WebElement buttonCreateUser;
|
||||
|
||||
|
|
@ -56,7 +55,6 @@ public final class UserPage extends NavBarPage implements SecurityPage.Tab {
|
|||
private final UserForm createUserForm = new UserForm();
|
||||
private final UserForm editUserForm = new UserForm();
|
||||
|
||||
|
||||
public UserPage(RemoteWebDriver driver) {
|
||||
super(driver);
|
||||
}
|
||||
|
|
@ -69,7 +67,8 @@ public final class UserPage extends NavBarPage implements SecurityPage.Tab {
|
|||
|
||||
createUserForm().btnSelectTenantDropdown().click();
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
"n-base-select-option__content")));
|
||||
|
||||
createUserForm().selectTenant()
|
||||
|
|
@ -114,7 +113,8 @@ public final class UserPage extends NavBarPage implements SecurityPage.Tab {
|
|||
|
||||
createUserForm().btnSelectTenantDropdown().click();
|
||||
|
||||
WebDriverWaitFactory.createWebDriverWait(driver).until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
WebDriverWaitFactory.createWebDriverWait(driver)
|
||||
.until(ExpectedConditions.visibilityOfElementLocated(new By.ByClassName(
|
||||
"n-base-select-option__content")));
|
||||
|
||||
createUserForm().selectTenant()
|
||||
|
|
@ -154,6 +154,7 @@ public final class UserPage extends NavBarPage implements SecurityPage.Tab {
|
|||
|
||||
@Getter
|
||||
public class UserForm {
|
||||
|
||||
UserForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,12 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.pages.security;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.JavascriptExecutor;
|
||||
import org.openqa.selenium.Keys;
|
||||
|
|
@ -30,11 +34,9 @@ import org.openqa.selenium.support.FindBy;
|
|||
import org.openqa.selenium.support.FindBys;
|
||||
import org.openqa.selenium.support.PageFactory;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Getter
|
||||
public final class WorkerGroupPage extends NavBarPage implements SecurityPage.Tab {
|
||||
|
||||
@FindBy(className = "btn-create-worker-group")
|
||||
private WebElement buttonCreateWorkerGroup;
|
||||
|
||||
|
|
@ -50,8 +52,6 @@ public final class WorkerGroupPage extends NavBarPage implements SecurityPage.Ta
|
|||
private final WorkerGroupForm createWorkerForm = new WorkerGroupForm();
|
||||
private final WorkerGroupForm editWorkerForm = new WorkerGroupForm();
|
||||
|
||||
|
||||
|
||||
public WorkerGroupPage(RemoteWebDriver driver) {
|
||||
super(driver);
|
||||
}
|
||||
|
|
@ -87,7 +87,6 @@ public final class WorkerGroupPage extends NavBarPage implements SecurityPage.Ta
|
|||
return this;
|
||||
}
|
||||
|
||||
|
||||
public WorkerGroupPage delete(String Worker) {
|
||||
workerGroupList()
|
||||
.stream()
|
||||
|
|
@ -105,6 +104,7 @@ public final class WorkerGroupPage extends NavBarPage implements SecurityPage.Ta
|
|||
|
||||
@Getter
|
||||
public class WorkerGroupForm {
|
||||
|
||||
WorkerGroupForm() {
|
||||
PageFactory.initElements(driver, this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,13 +17,14 @@
|
|||
|
||||
package org.apache.dolphinscheduler.e2e.core;
|
||||
|
||||
import lombok.experimental.UtilityClass;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import lombok.experimental.UtilityClass;
|
||||
|
||||
@UtilityClass
|
||||
public final class Constants {
|
||||
|
||||
/**
|
||||
* tmp directory path
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -37,5 +37,6 @@ import org.testcontainers.junit.jupiter.Testcontainers;
|
|||
@TestMethodOrder(OrderAnnotation.class)
|
||||
@ExtendWith(DolphinSchedulerExtension.class)
|
||||
public @interface DolphinScheduler {
|
||||
|
||||
String[] composeFiles();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ import java.util.Optional;
|
|||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.jupiter.api.extension.AfterAllCallback;
|
||||
import org.junit.jupiter.api.extension.BeforeAllCallback;
|
||||
import org.junit.jupiter.api.extension.BeforeEachCallback;
|
||||
|
|
@ -54,10 +56,9 @@ import org.testcontainers.utility.DockerImageName;
|
|||
import com.google.common.base.Strings;
|
||||
import com.google.common.net.HostAndPort;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
final class DolphinSchedulerExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback {
|
||||
|
||||
private final boolean LOCAL_MODE = Objects.equals(System.getProperty("local"), "true");
|
||||
|
||||
private final boolean M1_CHIP_FLAG = Objects.equals(System.getProperty("m1_chip"), "true");
|
||||
|
|
@ -128,7 +129,8 @@ final class DolphinSchedulerExtension implements BeforeAllCallback, AfterAllCall
|
|||
compose = createDockerCompose(context);
|
||||
compose.start();
|
||||
|
||||
address = HostAndPort.fromParts("host.testcontainers.internal", compose.getServicePort(serviceName, DOCKER_PORT));
|
||||
address =
|
||||
HostAndPort.fromParts("host.testcontainers.internal", compose.getServicePort(serviceName, DOCKER_PORT));
|
||||
rootPath = "/dolphinscheduler/ui/";
|
||||
}
|
||||
|
||||
|
|
@ -216,7 +218,6 @@ final class DolphinSchedulerExtension implements BeforeAllCallback, AfterAllCall
|
|||
.withLogConsumer(serviceName, outputFrame -> LOGGER.info(outputFrame.getUtf8String()))
|
||||
.waitingFor(serviceName, Wait.forHealthcheck().withStartupTimeout(Duration.ofSeconds(300)));
|
||||
|
||||
|
||||
return compose;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,12 +24,13 @@ import static java.nio.charset.StandardCharsets.UTF_8;
|
|||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
final class TestDescription implements org.testcontainers.lifecycle.TestDescription {
|
||||
|
||||
private static final String UNKNOWN_NAME = "unknown";
|
||||
|
||||
private final ExtensionContext context;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
package org.apache.dolphinscheduler.e2e.core;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@
|
|||
</modules>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<maven.compiler.source>11</maven.compiler.source>
|
||||
<maven.compiler.target>11</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<junit.version>5.8.1</junit.version>
|
||||
|
|
|
|||
8
pom.xml
8
pom.xml
|
|
@ -707,6 +707,14 @@
|
|||
<searchRegex>import\s+io\.kubernetes\.client\.[^\*\s]*(|\*);(\r\n|\r|\n)</searchRegex>
|
||||
<replacement>$1</replacement>
|
||||
</replaceRegex>
|
||||
<includes>
|
||||
<include>src/main/java/**/*.java</include>
|
||||
<include>src/test/java/**/*.java</include>
|
||||
<include>dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/**/*.java</include>
|
||||
<include>dolphinscheduler-e2e/dolphinscheduler-e2e-core/src/main/java/**/*.java</include>
|
||||
<include>dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/**/*.java</include>
|
||||
<include>dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/**/*.java</include>
|
||||
</includes>
|
||||
</java>
|
||||
<pom>
|
||||
<sortPom>
|
||||
|
|
|
|||
Loading…
Reference in New Issue