diff --git a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/pom.xml b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/pom.xml
index cf10add5ab..847fc9f2f1 100644
--- a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/pom.xml
+++ b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/pom.xml
@@ -36,5 +36,17 @@
dolphinscheduler-api-test-core
${project.version}
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-dao
+ dev-SNAPSHOT
+ test
+
+
+ org.apache.dolphinscheduler
+ dolphinscheduler-api
+ dev-SNAPSHOT
+ test
+
diff --git a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/cases/TenantAPITest.java b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/cases/TenantAPITest.java
index 5cf9435012..76dbd21cdc 100644
--- a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/cases/TenantAPITest.java
+++ b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/cases/TenantAPITest.java
@@ -54,12 +54,12 @@ public class TenantAPITest {
LoginPage loginPage = new LoginPage();
HttpResponse loginHttpResponse = loginPage.login(user, password);
- sessionId = JSONUtils.convertValue(loginHttpResponse.body().data(), LoginResponseData.class).sessionId();
+ sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
}
@AfterAll
public static void cleanup() {
- LOGGER.info("success cleanup");
+ log.info("success cleanup");
}
@Test
@@ -69,7 +69,7 @@ public class TenantAPITest {
HttpResponse createTenantHttpResponse = tenantPage.createTenant(sessionId, tenant, 1, "");
- Assertions.assertTrue(createTenantHttpResponse.body().success());
+ Assertions.assertTrue(createTenantHttpResponse.getBody().getSuccess());
}
@Test
@@ -79,7 +79,7 @@ public class TenantAPITest {
HttpResponse createTenantHttpResponse = tenantPage.createTenant(sessionId, tenant, 1, "");
- Assertions.assertFalse(createTenantHttpResponse.body().success());
+ Assertions.assertFalse(createTenantHttpResponse.getBody().getSuccess());
}
@Test
@@ -90,15 +90,15 @@ public class TenantAPITest {
HttpResponse createTenantHttpResponse = tenantPage.getTenantListPaging(sessionId, 1, 10, "");
boolean result = false;
- for (TenantListPagingResponseTotalList tenantListPagingResponseTotalList : JSONUtils.convertValue(createTenantHttpResponse.body().data(), TenantListPagingResponseData.class).totalList()) {
- if (tenantListPagingResponseTotalList.tenantCode().equals(tenant)) {
+ for (TenantListPagingResponseTotalList tenantListPagingResponseTotalList : JSONUtils.convertValue(createTenantHttpResponse.getBody().getData(), TenantListPagingResponseData.class).getTotalList()) {
+ if (tenantListPagingResponseTotalList.getTenantCode().equals(tenant)) {
result = true;
- existTenantId = tenantListPagingResponseTotalList.id();
+ existTenantId = tenantListPagingResponseTotalList.getId();
break;
}
}
- Assertions.assertTrue(createTenantHttpResponse.body().success());
+ Assertions.assertTrue(createTenantHttpResponse.getBody().getSuccess());
Assertions.assertTrue(result);
}
@@ -109,6 +109,6 @@ public class TenantAPITest {
HttpResponse deleteTenantHttpResponse = tenantPage.deleteTenant(sessionId, existTenantId);
- Assertions.assertTrue(deleteTenantHttpResponse.body().success());
+ Assertions.assertTrue(deleteTenantHttpResponse.getBody().getSuccess());
}
}
diff --git a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/cases/WorkerGroupAPITest.java b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/cases/WorkerGroupAPITest.java
new file mode 100644
index 0000000000..903b6f4ee6
--- /dev/null
+++ b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/cases/WorkerGroupAPITest.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to Apache Software Foundation (ASF) under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Apache Software Foundation (ASF) licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.dolphinscheduler.api.test.cases;
+
+import org.apache.dolphinscheduler.api.test.core.DolphinScheduler;
+import org.apache.dolphinscheduler.api.test.entity.HttpResponse;
+import org.apache.dolphinscheduler.api.test.entity.LoginResponseData;
+import org.apache.dolphinscheduler.api.test.pages.LoginPage;;
+import org.apache.dolphinscheduler.api.test.pages.security.WorkerGroupPage;
+import org.apache.dolphinscheduler.api.test.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.enums.UserType;
+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 java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+@DolphinScheduler(composeFiles = "docker/basic/docker-compose.yaml")
+@Slf4j
+public class WorkerGroupAPITest {
+
+ private static final String username = "admin";
+
+ private static final String password = "dolphinscheduler123";
+
+ private static String sessionId;
+
+ private static User loginUser;
+
+ private static WorkerGroupPage workerGroupPage;
+
+ @BeforeAll
+ public static void setup() {
+ LoginPage loginPage = new LoginPage();
+ HttpResponse loginHttpResponse = loginPage.login(username, password);
+ sessionId = JSONUtils.convertValue(loginHttpResponse.getBody().getData(), LoginResponseData.class).getSessionId();
+ workerGroupPage = new WorkerGroupPage(sessionId);
+ loginUser = new User();
+ loginUser.setId(123);
+ loginUser.setUserType(UserType.GENERAL_USER);
+ }
+
+ @AfterAll
+ public static void cleanup() {
+ log.info("success cleanup");
+ }
+
+ @Test
+ @Order(1)
+ public void testSaveWorkerGroup() {
+ HttpResponse saveWorkerGroupHttpResponse = workerGroupPage
+ .saveWorkerGroup(loginUser, 1, "test_worker_group", "10.5.0.5:1234", "test", null);
+ Assertions.assertTrue(saveWorkerGroupHttpResponse.getBody().getSuccess());
+
+ HttpResponse queryAllWorkerGroupsResponse = workerGroupPage.queryAllWorkerGroups(loginUser);
+ List workerGroupsList = (List) queryAllWorkerGroupsResponse.getBody().getData();
+ Set workerGroupsActual = new HashSet<>(workerGroupsList);
+ Set workerGroupsExpected = new HashSet<>(Arrays.asList("test_worker_group", "default"));
+ Assertions.assertEquals(workerGroupsExpected, workerGroupsActual);
+ }
+
+ @Test
+ @Order(2)
+ public void testQueryAllWorkerGroupsPaging() {
+ 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"));
+ }
+
+ @Test
+ @Order(3)
+ public void testQueryAllWorkerGroups() {
+ HttpResponse queryAllWorkerGroupsResponse = workerGroupPage.queryAllWorkerGroups(loginUser);
+ Assertions.assertTrue(queryAllWorkerGroupsResponse.getBody().getSuccess());
+
+ String workerGroupPageInfoData = queryAllWorkerGroupsResponse.getBody().getData().toString();
+ Assertions.assertTrue(workerGroupPageInfoData.contains("test_worker_group"));
+ }
+
+ @Test
+ @Order(4)
+ public void queryWorkerAddressList() {
+ HttpResponse queryWorkerAddressListResponse = workerGroupPage.queryWorkerAddressList(loginUser);
+ Assertions.assertTrue(queryWorkerAddressListResponse.getBody().getSuccess());
+ Assertions.assertTrue(queryWorkerAddressListResponse.getBody().getData().toString().contains("10.5.0.5:1234"));
+ }
+
+ @Test
+ @Order(5)
+ public void testDeleteWorkerGroupById() {
+ HttpResponse queryAllWorkerGroupsResponse = workerGroupPage.queryAllWorkerGroups(loginUser);
+ String workerGroupsBeforeDelete = queryAllWorkerGroupsResponse.getBody().getData().toString();
+ Assertions.assertTrue(queryAllWorkerGroupsResponse.getBody().getSuccess());
+ Assertions.assertTrue(workerGroupsBeforeDelete.contains("test_worker_group"));
+
+ HttpResponse deleteWorkerGroupResponse = workerGroupPage.deleteWorkerGroupById(loginUser, 1);
+ Assertions.assertTrue(deleteWorkerGroupResponse.getBody().getSuccess());
+
+ queryAllWorkerGroupsResponse = workerGroupPage.queryAllWorkerGroups(loginUser);
+ String workerGroupsAfterDelete = queryAllWorkerGroupsResponse.getBody().getData().toString();
+ Assertions.assertTrue(!workerGroupsAfterDelete.contains("test_worker_group"));
+ }
+}
diff --git a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/pages/security/WorkerGroupPage.java b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/pages/security/WorkerGroupPage.java
new file mode 100644
index 0000000000..9d6185fd9a
--- /dev/null
+++ b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/pages/security/WorkerGroupPage.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to Apache Software Foundation (ASF) under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Apache Software Foundation (ASF) licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.dolphinscheduler.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;
+import org.apache.dolphinscheduler.dao.entity.User;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+@AllArgsConstructor
+public class WorkerGroupPage {
+
+ private String sessionId;
+
+ public HttpResponse saveWorkerGroup(User loginUser, int id, String name, String addrList, String description, String otherParamsJson) {
+ Map params = new HashMap<>();
+ params.put("loginUser", loginUser);
+ params.put("id", id);
+ params.put("name", name);
+ params.put("addrList", addrList);
+ params.put("description", description);
+ params.put("otherParamsJson", otherParamsJson);
+
+ Map headers = new HashMap<>();
+ headers.put(Constants.SESSION_ID_KEY, sessionId);
+
+ RequestClient requestClient = new RequestClient();
+
+ return requestClient.post("/worker-groups", headers, params);
+ }
+
+ public HttpResponse queryAllWorkerGroups(User loginUser) {
+ Map params = new HashMap<>();
+ params.put("loginUser", loginUser);
+ Map headers = new HashMap<>();
+ headers.put(Constants.SESSION_ID_KEY, sessionId);
+
+ RequestClient requestClient = new RequestClient();
+ return requestClient.get("/worker-groups/all", headers, params);
+ }
+
+ public HttpResponse queryAllWorkerGroupsPaging(User loginUser, Integer pageNo, Integer pageSize, String searchVal) {
+ Map params = new HashMap<>();
+ params.put("loginUser", loginUser);
+ params.put("pageNo", pageNo);
+ params.put("pageSize", pageSize);
+ params.put("searchVal", searchVal);
+ Map headers = new HashMap<>();
+ headers.put(Constants.SESSION_ID_KEY, sessionId);
+
+ RequestClient requestClient = new RequestClient();
+ return requestClient.get("/worker-groups", headers, params);
+ }
+
+ public HttpResponse deleteWorkerGroupById(User loginUser, Integer id) {
+ Map params = new HashMap<>();
+ params.put("loginUser", loginUser);
+ params.put("id", id);
+ Map headers = new HashMap<>();
+ headers.put(Constants.SESSION_ID_KEY, sessionId);
+ RequestClient requestClient = new RequestClient();
+ final String url = String.format("/worker-groups/%s", id);
+ return requestClient.delete(url, headers, params);
+ }
+
+ public HttpResponse queryWorkerAddressList(User loginUser) {
+ Map params = new HashMap<>();
+ params.put("loginUser", loginUser);
+ Map headers = new HashMap<>();
+ headers.put(Constants.SESSION_ID_KEY, sessionId);
+
+ RequestClient requestClient = new RequestClient();
+ return requestClient.get("/worker-groups/worker-address-list", headers, params);
+ }
+
+
+}
diff --git a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/utils/RequestClient.java b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/utils/RequestClient.java
index 12c23c7b0a..faaab102ae 100644
--- a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/utils/RequestClient.java
+++ b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/java/org/apache/dolphinscheduler/api.test/utils/RequestClient.java
@@ -56,7 +56,7 @@ public class RequestClient {
headersBuilder = Headers.of(headers);
}
- LOGGER.info("GET request to {}, Headers: {}", requestUrl, headersBuilder);
+ log.info("GET request to {}, Headers: {}", requestUrl, headersBuilder);
Request request = new Request.Builder()
.url(requestUrl)
.headers(headersBuilder)
@@ -74,7 +74,7 @@ public class RequestClient {
HttpResponse httpResponse = new HttpResponse(responseCode, responseData);
- LOGGER.info("GET response: {}", httpResponse);
+ log.info("GET response: {}", httpResponse);
return httpResponse;
}
@@ -111,7 +111,7 @@ public class RequestClient {
RequestBody requestBody = FormBody.create(MediaType.parse(Constants.REQUEST_CONTENT_TYPE), getParams(params));
- LOGGER.info("POST request to {}, Headers: {}, Params: {}", requestUrl, headersBuilder, params);
+ log.info("POST request to {}, Headers: {}, Params: {}", requestUrl, headersBuilder, params);
Request request = new Request.Builder()
.headers(headersBuilder)
.url(requestUrl)
@@ -129,7 +129,7 @@ public class RequestClient {
HttpResponse httpResponse = new HttpResponse(responseCode, responseData);
- LOGGER.info("POST response: {}", httpResponse);
+ log.info("POST response: {}", httpResponse);
return httpResponse;
}
@@ -146,7 +146,7 @@ public class RequestClient {
Headers headersBuilder = Headers.of(headers);
- LOGGER.info("DELETE request to {}, Headers: {}, Params: {}", requestUrl, headersBuilder, params);
+ log.info("DELETE request to {}, Headers: {}, Params: {}", requestUrl, headersBuilder, params);
Request request = new Request.Builder()
.headers(headersBuilder)
.url(requestUrl)
@@ -164,7 +164,7 @@ public class RequestClient {
HttpResponse httpResponse = new HttpResponse(responseCode, responseData);
- LOGGER.info("DELETE response: {}", httpResponse);
+ log.info("DELETE response: {}", httpResponse);
return httpResponse;
}
diff --git a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml
index 26e7ebda25..f1a1cf1fbb 100644
--- a/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml
+++ b/dolphinscheduler-api-test/dolphinscheduler-api-test-case/src/test/resources/docker/basic/docker-compose.yaml
@@ -26,7 +26,8 @@ services:
ports:
- "12345:12345"
networks:
- - api-test
+ network:
+ ipv4_address: 10.5.0.5
healthcheck:
test: [ "CMD", "curl", "http://localhost:12345/actuator/health" ]
interval: 5s
@@ -34,4 +35,9 @@ services:
retries: 120
networks:
- api-test:
+ network:
+ driver: bridge
+ ipam:
+ config:
+ - subnet: 10.5.0.0/16
+ gateway: 10.5.0.1
diff --git a/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java b/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java
index cc202e9baf..9a6d029cb9 100644
--- a/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java
+++ b/dolphinscheduler-api-test/dolphinscheduler-api-test-core/src/main/java/org/apache/dolphinscheduler/api/test/core/DolphinSchedulerExtension.java
@@ -71,7 +71,7 @@ final class DolphinSchedulerExtension implements BeforeAllCallback, AfterAllCall
compose = new DockerComposeContainer<>(files)
.withPull(true)
.withTailChildContainers(true)
- .withLogConsumer(serviceName, outputFrame -> LOGGER.info(outputFrame.getUtf8String()))
+ .withLogConsumer(serviceName, outputFrame -> log.info(outputFrame.getUtf8String()))
.waitingFor(serviceName, Wait.forHealthcheck().withStartupTimeout(Duration.ofSeconds(Constants.DOCKER_COMPOSE_DEFAULT_TIMEOUT)));
return compose;
diff --git a/dolphinscheduler-api-test/lombok.config b/dolphinscheduler-api-test/lombok.config
deleted file mode 100644
index 15f8d6f2ae..0000000000
--- a/dolphinscheduler-api-test/lombok.config
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-lombok.accessors.fluent=true
-lombok.log.fieldname=LOGGER
-lombok.accessors.fluent=true
-lombok.anyConstructor.addConstructorProperties=true
\ No newline at end of file