This is an automated email from the ASF dual-hosted git repository.
SbloodyS pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 16044f72af [Improvement-18224][API] Migrate EnvironmentService
Map<String,Object> returns to typed returns (#18225)
16044f72af is described below
commit 16044f72afc1c7e1518c8a331f9de82990e0a2b5
Author: Wenjun Ruan <[email protected]>
AuthorDate: Sat May 9 15:16:10 2026 +0800
[Improvement-18224][API] Migrate EnvironmentService Map<String,Object>
returns to typed returns (#18225)
---
.gitignore | 3 +
dolphinscheduler-api/CLAUDE.md | 46 +++++++-
.../api/controller/EnvironmentController.java | 39 +++----
.../dolphinscheduler/api/python/PythonGateway.java | 9 +-
.../api/service/EnvironmentService.java | 15 ++-
.../api/service/impl/EnvironmentServiceImpl.java | 127 ++++++++-------------
.../api/service/impl/EnvironmentServiceTest.java | 78 +++++--------
dolphinscheduler-master/pom.xml | 2 +-
8 files changed, 151 insertions(+), 168 deletions(-)
diff --git a/.gitignore b/.gitignore
index 47e516d7c7..482e117f35 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,4 +55,7 @@ dolphinscheduler-master/logs
dolphinscheduler-api/logs
__pycache__
ds_schema_check_test
+
+# Agent
docs/superpowers/
+.claude/worktrees
diff --git a/dolphinscheduler-api/CLAUDE.md b/dolphinscheduler-api/CLAUDE.md
index 1f9db04fc8..b306edfa3d 100644
--- a/dolphinscheduler-api/CLAUDE.md
+++ b/dolphinscheduler-api/CLAUDE.md
@@ -49,8 +49,50 @@ REST API server. Entry point for the UI and external clients
(curl, Python SDK).
## Tests
-- Unit tests in `src/test/java`.
-- **Integration tests live in `dolphinscheduler-api-test`** (separate module,
Docker Compose + Testcontainers).
+Unit tests live in `src/test/java`. **Integration tests live in
`dolphinscheduler-api-test`** (separate module, Docker Compose +
Testcontainers).
+
+### Running unit tests from the command line
+
+The CI flow (`.github/workflows/unit-test.yml`) runs in two phases. Mirror it
locally:
+
+**One-time setup** — install BOM + upstream deps to local m2:
+
+```bash
+export MAVEN_OPTS="-Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1024m"
+./mvnw install -B \
+ -pl "dolphinscheduler-bom,dolphinscheduler-api" \
+ -am -DskipTests=true -Dspotless.skip=true -DskipUT=true \
+ -Djacoco.skip=true -Danalyze.skip=true
+```
+
+**Run tests** — use `verify` (NOT `test`), no `-am`, no `clean`:
+
+```bash
+./mvnw verify -B -pl "dolphinscheduler-api" \
+ -Dmaven.test.skip=false -Dspotless.skip=true -DskipUT=false
-Danalyze.skip=true \
+ -Dsurefire.printSummary=true -Dsurefire.useFile=false \
+ -Dsurefire.reportFormat=plain -Dsurefire.redirectTestOutputToFile=false \
+ -Dsurefire.failIfNoSpecifiedTests=false \
+ -Dtest='EnvironmentServiceTest#testVerifyEnvironment'
+```
+
+Drop the `-Dtest=...` filter to run the whole module.
+
+### Why the unusual flags
+
+- **`verify` not `test`** — root pom uses `jacoco-maven-plugin` in
offline-instrument + restore-instrumented-classes mode. Only the `verify`
lifecycle runs the `restore` goal, so `test` alone leaves `target/classes`
instrumented and the next build fails with "Cannot process instrumented class".
+- **`dolphinscheduler-bom` must be in the install `-pl`** — without it, the
installed pom lacks effective dependencyManagement and downstream compile/test
classpaths drop transitive deps like `commons-collections4` and `oshi-core`.
+- **`-DskipTests=true` (not `-Dmaven.test.skip=true`) during install** —
`maven.test.skip` skips test-source attach which breaks downstream modules that
depend on the test-jar.
+- **No `-am` on the test run** — `-am` re-instruments upstream modules with
jacoco and triggers the same "Cannot process instrumented class" failure.
+- **No `clean` between `install` and `verify`** — clean wipes `target/classes`
and the next compile re-resolves transitive deps from the (still installed)
pom; some resolutions fail with `[WARNING] The POM for ... is invalid` and the
build can't see `commons-collections4` etc.
+
+### If things go sideways
+
+- `Cannot process instrumented class` — re-run with `-Djacoco.skip=true`, or
wipe `target/` for the affected module and re-run.
+- `NoClassDefFoundError: oshi/SystemInfo` or
`commons-collections4/CollectionUtils` at test runtime — the bom didn't get
installed; redo the setup step including `dolphinscheduler-bom` in `-pl`.
+- `class file contains wrong class` — local
`~/.m2/.../dolphinscheduler-*-dev-SNAPSHOT.jar` is stale/corrupt. Delete the
offending `dev-SNAPSHOT` directory under
`~/.m2/repository/org/apache/dolphinscheduler/` and re-run install.
+
+Surefire XML reports land at `target/surefire-reports/TEST-<class>.xml` for
the per-test counts.
## Related modules
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/EnvironmentController.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/EnvironmentController.java
index 810f511d8a..25d73d3f44 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/EnvironmentController.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/EnvironmentController.java
@@ -26,6 +26,7 @@ import static
org.apache.dolphinscheduler.api.enums.Status.VERIFY_ENVIRONMENT_ER
import org.apache.dolphinscheduler.api.audit.OperatorLog;
import org.apache.dolphinscheduler.api.audit.enums.AuditType;
+import org.apache.dolphinscheduler.api.dto.EnvironmentDto;
import org.apache.dolphinscheduler.api.exceptions.ApiException;
import org.apache.dolphinscheduler.api.service.EnvironmentService;
import org.apache.dolphinscheduler.api.utils.Result;
@@ -34,7 +35,7 @@ import org.apache.dolphinscheduler.dao.entity.Environment;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.plugin.task.api.utils.ParameterUtils;
-import java.util.Map;
+import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
@@ -127,7 +128,6 @@ public class EnvironmentController extends BaseController {
* query environment details by code
*
* @param environmentCode environment code
- * @return environment detail information
*/
@Operation(summary = "queryEnvironmentByCode", description =
"QUERY_ENVIRONMENT_BY_CODE_NOTES")
@Parameters({
@@ -136,11 +136,10 @@ public class EnvironmentController extends BaseController
{
@GetMapping(value = "/query-by-code")
@ResponseStatus(HttpStatus.OK)
@ApiException(QUERY_ENVIRONMENT_BY_CODE_ERROR)
- public Result queryEnvironmentByCode(@Parameter(hidden = true)
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
- @RequestParam("environmentCode") Long
environmentCode) {
-
- Map<String, Object> result =
environmentService.queryEnvironmentByCode(environmentCode);
- return returnDataList(result);
+ public Result<EnvironmentDto> queryEnvironmentByCode(@Parameter(hidden =
true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+
@RequestParam("environmentCode") Long environmentCode) {
+ EnvironmentDto dto =
environmentService.queryEnvironmentByCode(environmentCode);
+ return Result.success(dto);
}
/**
@@ -175,7 +174,6 @@ public class EnvironmentController extends BaseController {
*
* @param loginUser login user
* @param environmentCode environment code
- * @return delete result code
*/
@Operation(summary = "deleteEnvironmentByCode", description =
"DELETE_ENVIRONMENT_BY_CODE_NOTES")
@Parameters({
@@ -185,26 +183,24 @@ public class EnvironmentController extends BaseController
{
@ResponseStatus(HttpStatus.OK)
@ApiException(DELETE_ENVIRONMENT_ERROR)
@OperatorLog(auditType = AuditType.ENVIRONMENT_DELETE)
- public Result deleteEnvironment(@Parameter(hidden = true)
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
- @RequestParam("environmentCode") Long
environmentCode) {
-
- Map<String, Object> result =
environmentService.deleteEnvironmentByCode(loginUser, environmentCode);
- return returnDataList(result);
+ public Result<Void> deleteEnvironment(@Parameter(hidden = true)
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+ @RequestParam("environmentCode")
Long environmentCode) {
+ environmentService.deleteEnvironmentByCode(loginUser, environmentCode);
+ return Result.success();
}
/**
* query all environment list
*
* @param loginUser login user
- * @return all environment list
*/
@Operation(summary = "queryAllEnvironmentList", description =
"QUERY_ALL_ENVIRONMENT_LIST_NOTES")
@GetMapping(value = "/query-environment-list")
@ResponseStatus(HttpStatus.OK)
@ApiException(QUERY_ENVIRONMENT_ERROR)
- public Result queryAllEnvironmentList(@Parameter(hidden = true)
@RequestAttribute(value = Constants.SESSION_USER) User loginUser) {
- Map<String, Object> result =
environmentService.queryAllEnvironmentList(loginUser);
- return returnDataList(result);
+ public Result<List<EnvironmentDto>>
queryAllEnvironmentList(@Parameter(hidden = true) @RequestAttribute(value =
Constants.SESSION_USER) User loginUser) {
+ List<EnvironmentDto> dtos =
environmentService.queryAllEnvironmentList(loginUser);
+ return Result.success(dtos);
}
/**
@@ -212,7 +208,6 @@ public class EnvironmentController extends BaseController {
*
* @param loginUser login user
* @param environmentName environment name
- * @return true if the environment name not exists, otherwise return false
*/
@Operation(summary = "verifyEnvironment", description =
"VERIFY_ENVIRONMENT_NOTES")
@Parameters({
@@ -221,9 +216,9 @@ public class EnvironmentController extends BaseController {
@PostMapping(value = "/verify-environment")
@ResponseStatus(HttpStatus.OK)
@ApiException(VERIFY_ENVIRONMENT_ERROR)
- public Result verifyEnvironment(@Parameter(hidden = true)
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
- @RequestParam(value = "environmentName")
String environmentName) {
- Map<String, Object> result =
environmentService.verifyEnvironment(environmentName);
- return returnDataList(result);
+ public Result<Void> verifyEnvironment(@Parameter(hidden = true)
@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+ @RequestParam(value =
"environmentName") String environmentName) {
+ environmentService.verifyEnvironment(environmentName);
+ return Result.success();
}
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
index 51291d0cc4..6635d97356 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java
@@ -18,7 +18,6 @@
package org.apache.dolphinscheduler.api.python;
import org.apache.dolphinscheduler.api.configuration.ApiConfig;
-import org.apache.dolphinscheduler.api.dto.EnvironmentDto;
import org.apache.dolphinscheduler.api.dto.resources.ResourceComponent;
import org.apache.dolphinscheduler.api.dto.workflow.WorkflowTriggerRequest;
import org.apache.dolphinscheduler.api.enums.Status;
@@ -610,15 +609,13 @@ public class PythonGateway {
* @param environmentName name of the environment
*/
public Long getEnvironmentInfo(String environmentName) {
- Map<String, Object> result =
environmentService.queryEnvironmentByName(environmentName);
-
- if (result.get("data") == null) {
+ try {
+ return
environmentService.queryEnvironmentByName(environmentName).getCode();
+ } catch (ServiceException e) {
String msg = String.format("Can not find valid environment by name
%s", environmentName);
log.error(msg);
throw new IllegalArgumentException(msg);
}
- EnvironmentDto environmentDto =
EnvironmentDto.class.cast(result.get("data"));
- return environmentDto.getCode();
}
/**
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/EnvironmentService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/EnvironmentService.java
index de694f7bd0..20ccbd66ef 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/EnvironmentService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/EnvironmentService.java
@@ -17,11 +17,12 @@
package org.apache.dolphinscheduler.api.service;
+import org.apache.dolphinscheduler.api.dto.EnvironmentDto;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.dao.entity.Environment;
import org.apache.dolphinscheduler.dao.entity.User;
-import java.util.Map;
+import java.util.List;
public interface EnvironmentService {
@@ -41,14 +42,14 @@ public interface EnvironmentService {
*
* @param name environment name
*/
- Map<String, Object> queryEnvironmentByName(String name);
+ EnvironmentDto queryEnvironmentByName(String name);
/**
* query environment
*
* @param code environment code
*/
- Map<String, Object> queryEnvironmentByCode(Long code);
+ EnvironmentDto queryEnvironmentByCode(Long code);
/**
* delete environment
@@ -56,7 +57,7 @@ public interface EnvironmentService {
* @param loginUser login user
* @param code environment code
*/
- Map<String, Object> deleteEnvironmentByCode(User loginUser, Long code);
+ void deleteEnvironmentByCode(User loginUser, Long code);
/**
* update environment
@@ -85,16 +86,14 @@ public interface EnvironmentService {
* query all environment
*
* @param loginUser
- * @return all environment list
*/
- Map<String, Object> queryAllEnvironmentList(User loginUser);
+ List<EnvironmentDto> queryAllEnvironmentList(User loginUser);
/**
* verify environment name
*
* @param environmentName environment name
- * @return true if the environment name not exists, otherwise return false
*/
- Map<String, Object> verifyEnvironment(String environmentName);
+ void verifyEnvironment(String environmentName);
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceImpl.java
index 591ab3ecaf..1d96750714 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceImpl.java
@@ -27,7 +27,6 @@ import
org.apache.dolphinscheduler.api.exceptions.ServiceException;
import org.apache.dolphinscheduler.api.service.EnvironmentService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
-import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.enums.AuthorizationType;
import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.utils.CodeGenerateUtils;
@@ -47,7 +46,6 @@ import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -205,38 +203,28 @@ public class EnvironmentServiceImpl extends
BaseServiceImpl implements Environme
* query all environment
*
* @param loginUser
- * @return all environment list
*/
@Override
- public Map<String, Object> queryAllEnvironmentList(User loginUser) {
- Map<String, Object> result = new HashMap<>();
+ public List<EnvironmentDto> queryAllEnvironmentList(User loginUser) {
Set<Integer> ids =
resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.ENVIRONMENT,
loginUser.getId(), log);
if (ids.isEmpty()) {
- result.put(Constants.DATA_LIST, Collections.emptyList());
- putMsg(result, Status.SUCCESS);
- return result;
+ return Collections.emptyList();
}
List<Environment> environmentList =
environmentMapper.selectBatchIds(ids);
- if (CollectionUtils.isNotEmpty(environmentList)) {
- Map<Long, List<String>> relationMap =
relationMapper.selectList(null).stream()
-
.collect(Collectors.groupingBy(EnvironmentWorkerGroupRelation::getEnvironmentCode,
-
Collectors.mapping(EnvironmentWorkerGroupRelation::getWorkerGroup,
Collectors.toList())));
-
- List<EnvironmentDto> dtoList =
environmentList.stream().map(environment -> {
- EnvironmentDto dto = new EnvironmentDto();
- BeanUtils.copyProperties(environment, dto);
- List<String> workerGroups =
relationMap.getOrDefault(environment.getCode(), new ArrayList<String>());
- dto.setWorkerGroups(workerGroups);
- return dto;
- }).collect(Collectors.toList());
- result.put(Constants.DATA_LIST, dtoList);
- } else {
- result.put(Constants.DATA_LIST, new ArrayList<>());
+ if (CollectionUtils.isEmpty(environmentList)) {
+ return Collections.emptyList();
}
+ Map<Long, List<String>> relationMap =
relationMapper.selectList(null).stream()
+
.collect(Collectors.groupingBy(EnvironmentWorkerGroupRelation::getEnvironmentCode,
+
Collectors.mapping(EnvironmentWorkerGroupRelation::getWorkerGroup,
Collectors.toList())));
- putMsg(result, Status.SUCCESS);
- return result;
+ return environmentList.stream().map(environment -> {
+ EnvironmentDto dto = new EnvironmentDto();
+ BeanUtils.copyProperties(environment, dto);
+
dto.setWorkerGroups(relationMap.getOrDefault(environment.getCode(), new
ArrayList<>()));
+ return dto;
+ }).collect(Collectors.toList());
}
/**
@@ -245,25 +233,19 @@ public class EnvironmentServiceImpl extends
BaseServiceImpl implements Environme
* @param code environment code
*/
@Override
- public Map<String, Object> queryEnvironmentByCode(Long code) {
- Map<String, Object> result = new HashMap<>();
-
+ public EnvironmentDto queryEnvironmentByCode(Long code) {
Environment env = environmentMapper.queryByEnvironmentCode(code);
-
if (env == null) {
- putMsg(result, Status.QUERY_ENVIRONMENT_BY_CODE_ERROR, code);
- } else {
- List<String> workerGroups =
relationMapper.queryByEnvironmentCode(env.getCode()).stream()
- .map(item -> item.getWorkerGroup())
- .collect(Collectors.toList());
-
- EnvironmentDto dto = new EnvironmentDto();
- BeanUtils.copyProperties(env, dto);
- dto.setWorkerGroups(workerGroups);
- result.put(Constants.DATA_LIST, dto);
- putMsg(result, Status.SUCCESS);
+ throw new ServiceException(Status.QUERY_ENVIRONMENT_BY_CODE_ERROR,
code);
}
- return result;
+ List<String> workerGroups =
relationMapper.queryByEnvironmentCode(env.getCode()).stream()
+ .map(EnvironmentWorkerGroupRelation::getWorkerGroup)
+ .collect(Collectors.toList());
+
+ EnvironmentDto dto = new EnvironmentDto();
+ BeanUtils.copyProperties(env, dto);
+ dto.setWorkerGroups(workerGroups);
+ return dto;
}
/**
@@ -272,24 +254,19 @@ public class EnvironmentServiceImpl extends
BaseServiceImpl implements Environme
* @param name environment name
*/
@Override
- public Map<String, Object> queryEnvironmentByName(String name) {
- Map<String, Object> result = new HashMap<>();
-
+ public EnvironmentDto queryEnvironmentByName(String name) {
Environment env = environmentMapper.queryByEnvironmentName(name);
if (env == null) {
- putMsg(result, Status.QUERY_ENVIRONMENT_BY_NAME_ERROR, name);
- } else {
- List<String> workerGroups =
relationMapper.queryByEnvironmentCode(env.getCode()).stream()
- .map(item -> item.getWorkerGroup())
- .collect(Collectors.toList());
-
- EnvironmentDto dto = new EnvironmentDto();
- BeanUtils.copyProperties(env, dto);
- dto.setWorkerGroups(workerGroups);
- result.put(Constants.DATA_LIST, dto);
- putMsg(result, Status.SUCCESS);
+ throw new ServiceException(Status.QUERY_ENVIRONMENT_BY_NAME_ERROR,
name);
}
- return result;
+ List<String> workerGroups =
relationMapper.queryByEnvironmentCode(env.getCode()).stream()
+ .map(EnvironmentWorkerGroupRelation::getWorkerGroup)
+ .collect(Collectors.toList());
+
+ EnvironmentDto dto = new EnvironmentDto();
+ BeanUtils.copyProperties(env, dto);
+ dto.setWorkerGroups(workerGroups);
+ return dto;
}
/**
@@ -300,11 +277,9 @@ public class EnvironmentServiceImpl extends
BaseServiceImpl implements Environme
*/
@Transactional
@Override
- public Map<String, Object> deleteEnvironmentByCode(User loginUser, Long
code) {
- Map<String, Object> result = new HashMap<>();
+ public void deleteEnvironmentByCode(User loginUser, Long code) {
if (!canOperatorPermissions(loginUser, null,
AuthorizationType.ENVIRONMENT, ENVIRONMENT_DELETE)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
+ throw new ServiceException(Status.USER_NO_OPERATION_PERM);
}
Long relatedTaskNumber = taskDefinitionMapper
@@ -313,22 +288,18 @@ public class EnvironmentServiceImpl extends
BaseServiceImpl implements Environme
if (relatedTaskNumber > 0) {
log.warn("Delete environment failed because {} tasks is using it,
environmentCode:{}.",
relatedTaskNumber, code);
- putMsg(result, Status.DELETE_ENVIRONMENT_RELATED_TASK_EXISTS);
- return result;
+ throw new
ServiceException(Status.DELETE_ENVIRONMENT_RELATED_TASK_EXISTS);
}
int delete = environmentMapper.deleteByCode(code);
- if (delete > 0) {
- relationMapper.delete(new
QueryWrapper<EnvironmentWorkerGroupRelation>()
- .lambda()
- .eq(EnvironmentWorkerGroupRelation::getEnvironmentCode,
code));
- log.info("Environment and relations delete complete,
environmentCode:{}.", code);
- putMsg(result, Status.SUCCESS);
- } else {
+ if (delete <= 0) {
log.error("Environment delete error, environmentCode:{}.", code);
- putMsg(result, Status.DELETE_ENVIRONMENT_ERROR);
+ throw new ServiceException(Status.DELETE_ENVIRONMENT_ERROR);
}
- return result;
+ relationMapper.delete(new
QueryWrapper<EnvironmentWorkerGroupRelation>()
+ .lambda()
+ .eq(EnvironmentWorkerGroupRelation::getEnvironmentCode, code));
+ log.info("Environment and relations delete complete,
environmentCode:{}.", code);
}
/**
@@ -418,27 +389,19 @@ public class EnvironmentServiceImpl extends
BaseServiceImpl implements Environme
* verify environment name
*
* @param environmentName environment name
- * @return true if the environment name not exists, otherwise return false
*/
@Override
- public Map<String, Object> verifyEnvironment(String environmentName) {
- Map<String, Object> result = new HashMap<>();
-
+ public void verifyEnvironment(String environmentName) {
if (StringUtils.isEmpty(environmentName)) {
log.warn("parameter environment name is empty.");
- putMsg(result, Status.ENVIRONMENT_NAME_IS_NULL);
- return result;
+ throw new ServiceException(Status.ENVIRONMENT_NAME_IS_NULL);
}
Environment environment =
environmentMapper.queryByEnvironmentName(environmentName);
if (environment != null) {
log.warn("Environment with the same name already exist, name:{}.",
environment.getName());
- putMsg(result, Status.ENVIRONMENT_NAME_EXISTS, environmentName);
- return result;
+ throw new ServiceException(Status.ENVIRONMENT_NAME_EXISTS,
environmentName);
}
-
- result.put(Constants.STATUS, Status.SUCCESS);
- return result;
}
private void checkUsedEnvironmentWorkerGroupRelation(Set<String>
deleteKeySet,
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceTest.java
index 2f375052a5..4304ecf874 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/impl/EnvironmentServiceTest.java
@@ -27,12 +27,12 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
+import org.apache.dolphinscheduler.api.dto.EnvironmentDto;
import org.apache.dolphinscheduler.api.enums.Status;
import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.api.utils.ServiceTestUtil;
-import org.apache.dolphinscheduler.common.constants.Constants;
import org.apache.dolphinscheduler.common.enums.AuthorizationType;
import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.utils.CodeGenerateUtils;
@@ -49,7 +49,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.assertj.core.util.Lists;
@@ -75,7 +74,6 @@ import
com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@MockitoSettings(strictness = Strictness.LENIENT)
public class EnvironmentServiceTest {
- public static final Logger logger =
LoggerFactory.getLogger(EnvironmentServiceTest.class);
private static final Logger baseServiceLogger =
LoggerFactory.getLogger(BaseServiceImpl.class);
private static final Logger environmentServiceLogger =
LoggerFactory.getLogger(EnvironmentServiceImpl.class);
@@ -200,8 +198,8 @@ public class EnvironmentServiceTest {
public void testQueryAllEnvironmentList() {
when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.ENVIRONMENT,
1,
environmentServiceLogger)).thenReturn(Collections.emptySet());
- Map<String, Object> result =
environmentService.queryAllEnvironmentList(getAdminUser());
- assertEquals(0, ((List<Environment>)
result.get(Constants.DATA_LIST)).size());
+ List<EnvironmentDto> emptyResult =
environmentService.queryAllEnvironmentList(getAdminUser());
+ assertEquals(0, emptyResult.size());
Set<Integer> ids = new HashSet<>();
ids.add(1);
@@ -209,18 +207,12 @@ public class EnvironmentServiceTest {
1, environmentServiceLogger)).thenReturn(ids);
when(environmentMapper.selectBatchIds(ids)).thenReturn(Lists.newArrayList(getEnvironment()));
- result = environmentService.queryAllEnvironmentList(getAdminUser());
- logger.info(result.toString());
- Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
-
- List<Environment> list = (List<Environment>)
(result.get(Constants.DATA_LIST));
- Assertions.assertEquals(1, list.size());
+ List<EnvironmentDto> oneResult =
environmentService.queryAllEnvironmentList(getAdminUser());
+ assertEquals(1, oneResult.size());
when(environmentMapper.selectBatchIds(ids)).thenReturn(Collections.emptyList());
- result = environmentService.queryAllEnvironmentList(getAdminUser());
- Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
- list = (List<Environment>) (result.get(Constants.DATA_LIST));
- Assertions.assertEquals(0, list.size());
+ List<EnvironmentDto> noneResult =
environmentService.queryAllEnvironmentList(getAdminUser());
+ assertEquals(0, noneResult.size());
}
@Test
@@ -258,67 +250,59 @@ public class EnvironmentServiceTest {
@Test
public void testQueryEnvironmentByName() {
when(environmentMapper.queryByEnvironmentName(environmentName)).thenReturn(null);
- Map<String, Object> result =
environmentService.queryEnvironmentByName(environmentName);
- logger.info(result.toString());
- Assertions.assertEquals(Status.QUERY_ENVIRONMENT_BY_NAME_ERROR,
result.get(Constants.STATUS));
+ assertThrowsServiceException(Status.QUERY_ENVIRONMENT_BY_NAME_ERROR,
+ () ->
environmentService.queryEnvironmentByName(environmentName));
when(environmentMapper.queryByEnvironmentName(environmentName)).thenReturn(getEnvironment());
- result = environmentService.queryEnvironmentByName(environmentName);
- logger.info(result.toString());
- Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ EnvironmentDto dto =
environmentService.queryEnvironmentByName(environmentName);
+ Assertions.assertEquals(environmentName, dto.getName());
+ Assertions.assertNotNull(dto.getWorkerGroups());
}
@Test
public void testQueryEnvironmentByCode() {
when(environmentMapper.queryByEnvironmentCode(1L)).thenReturn(null);
- Map<String, Object> result =
environmentService.queryEnvironmentByCode(1L);
- logger.info(result.toString());
- Assertions.assertEquals(Status.QUERY_ENVIRONMENT_BY_CODE_ERROR,
result.get(Constants.STATUS));
+ assertThrowsServiceException(Status.QUERY_ENVIRONMENT_BY_CODE_ERROR,
+ () -> environmentService.queryEnvironmentByCode(1L));
when(environmentMapper.queryByEnvironmentCode(1L)).thenReturn(getEnvironment());
- result = environmentService.queryEnvironmentByCode(1L);
- logger.info(result.toString());
- Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ EnvironmentDto dto = environmentService.queryEnvironmentByCode(1L);
+ Assertions.assertEquals(1L, dto.getCode());
+ Assertions.assertNotNull(dto.getWorkerGroups());
}
@Test
public void testDeleteEnvironmentByCode() {
- User loginUser = getGeneralUser();
+ User generalUser = getGeneralUser();
when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.ENVIRONMENT,
- loginUser.getId(), ENVIRONMENT_DELETE,
baseServiceLogger)).thenReturn(true);
+ generalUser.getId(), ENVIRONMENT_DELETE,
baseServiceLogger)).thenReturn(true);
when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.ENVIRONMENT,
null,
0, baseServiceLogger)).thenReturn(true);
- Map<String, Object> result =
environmentService.deleteEnvironmentByCode(loginUser, 1L);
- logger.info(result.toString());
- Assertions.assertEquals(Status.USER_NO_OPERATION_PERM,
result.get(Constants.STATUS));
+ assertThrowsServiceException(Status.USER_NO_OPERATION_PERM,
+ () -> environmentService.deleteEnvironmentByCode(generalUser,
1L));
- loginUser = getAdminUser();
+ User adminUser = getAdminUser();
when(taskDefinitionMapper.selectCount(any(LambdaQueryWrapper.class))).thenReturn(1L);
- result = environmentService.deleteEnvironmentByCode(loginUser, 1L);
- logger.info(result.toString());
- Assertions.assertEquals(Status.DELETE_ENVIRONMENT_RELATED_TASK_EXISTS,
result.get(Constants.STATUS));
+
assertThrowsServiceException(Status.DELETE_ENVIRONMENT_RELATED_TASK_EXISTS,
+ () -> environmentService.deleteEnvironmentByCode(adminUser,
1L));
when(taskDefinitionMapper.selectCount(any(LambdaQueryWrapper.class))).thenReturn(0L);
when(environmentMapper.deleteByCode(1L)).thenReturn(1);
- result = environmentService.deleteEnvironmentByCode(loginUser, 1L);
- logger.info(result.toString());
- Assertions.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ assertDoesNotThrow(() ->
environmentService.deleteEnvironmentByCode(adminUser, 1L));
when(environmentMapper.deleteByCode(1L)).thenReturn(-1);
- result = environmentService.deleteEnvironmentByCode(loginUser, 1L);
- Assertions.assertEquals(Status.DELETE_ENVIRONMENT_ERROR,
result.get(Constants.STATUS));
+ assertThrowsServiceException(Status.DELETE_ENVIRONMENT_ERROR,
+ () -> environmentService.deleteEnvironmentByCode(adminUser,
1L));
}
@Test
public void testVerifyEnvironment() {
- Map<String, Object> result = environmentService.verifyEnvironment("");
- logger.info(result.toString());
- Assertions.assertEquals(Status.ENVIRONMENT_NAME_IS_NULL,
result.get(Constants.STATUS));
+ assertThrowsServiceException(Status.ENVIRONMENT_NAME_IS_NULL,
+ () -> environmentService.verifyEnvironment(""));
when(environmentMapper.queryByEnvironmentName(environmentName)).thenReturn(getEnvironment());
- result = environmentService.verifyEnvironment(environmentName);
- logger.info(result.toString());
- Assertions.assertEquals(Status.ENVIRONMENT_NAME_EXISTS,
result.get(Constants.STATUS));
+ assertThrowsServiceException(Status.ENVIRONMENT_NAME_EXISTS,
+ () -> environmentService.verifyEnvironment(environmentName));
when(environmentMapper.queryByEnvironmentName(environmentName)).thenReturn(null);
assertDoesNotThrow(() ->
environmentService.verifyEnvironment(environmentName));
diff --git a/dolphinscheduler-master/pom.xml b/dolphinscheduler-master/pom.xml
index 2914a70e49..43b62ce38b 100644
--- a/dolphinscheduler-master/pom.xml
+++ b/dolphinscheduler-master/pom.xml
@@ -397,7 +397,7 @@
<includes>
<include>**/integration/cases/*TestCase.java</include>
</includes>
- <forkCount>4</forkCount>
+ <forkCount>2</forkCount>
<reuseForks>true</reuseForks>
<properties>
<configurationParameters>junit.jupiter.execution.parallel.enabled =
false</configurationParameters>