This is an automated email from the ASF dual-hosted git repository.
zhongjiajie 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 ae6aa53f96 [python] Fix submit and run error (#10792)
ae6aa53f96 is described below
commit ae6aa53f963d2ea02ab435db1e5548da23e3f882
Author: Jiajie Zhong <[email protected]>
AuthorDate: Fri Jul 8 10:54:41 2022 +0800
[python] Fix submit and run error (#10792)
because we add permission, so it failed out
createQueue method. this patch fix it and
do some refactor of our tenant and queue
validator code
---
.../apache/dolphinscheduler/api/enums/Status.java | 2 +-
.../api/exceptions/ApiExceptionHandler.java | 6 +
.../api/exceptions/ServiceException.java | 7 +
.../dolphinscheduler/api/python/PythonGateway.java | 37 +---
.../dolphinscheduler/api/service/QueueService.java | 10 +-
.../api/service/TenantService.java | 18 +-
.../api/service/impl/BaseServiceImpl.java | 2 -
.../api/service/impl/QueueServiceImpl.java | 178 +++++++-----------
.../api/service/impl/TenantServiceImpl.java | 161 +++++++++-------
.../api/controller/QueueControllerTest.java | 60 ++++--
.../api/service/QueueServiceTest.java | 134 +++++++-------
.../api/service/TenantServiceTest.java | 206 +++++++++++----------
.../dolphinscheduler/dao/mapper/QueueMapper.java | 7 +-
.../dolphinscheduler/dao/mapper/QueueMapper.xml | 12 +-
14 files changed, 422 insertions(+), 418 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index 7918f5502c..91a45a60a5 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -194,7 +194,7 @@ public enum Status {
QUERY_WORKFLOW_LINEAGE_ERROR(10161, "query workflow lineage error",
"查询血缘失败"),
QUERY_AUTHORIZED_AND_USER_CREATED_PROJECT_ERROR(10162, "query authorized
and user created project error error", "查询授权的和用户创建的项目错误"),
DELETE_PROCESS_DEFINITION_BY_CODE_FAIL(10163, "delete process definition
by code fail, for there are {0} process instances in executing using it",
"删除工作流定义失败,有[{0}]个运行中的工作流实例正在使用"),
- CHECK_OS_TENANT_CODE_ERROR(10164, "Please enter the English os tenant
code", "请输入英文操作系统租户"),
+ CHECK_OS_TENANT_CODE_ERROR(10164, "Tenant code invalid, should follow
linux's users naming conventions", "非法的租户名,需要遵守 Linux 用户命名规范"),
FORCE_TASK_SUCCESS_ERROR(10165, "force task success error", "强制成功任务实例错误"),
TASK_INSTANCE_STATE_OPERATION_ERROR(10166, "the status of task instance
{0} is {1},Cannot perform force success operation",
"任务实例[{0}]的状态是[{1}],无法执行强制成功操作"),
DATASOURCE_TYPE_NOT_EXIST(10167, "data source type not exist", "数据源类型不存在"),
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ApiExceptionHandler.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ApiExceptionHandler.java
index 84d1abc337..e1d5a47138 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ApiExceptionHandler.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ApiExceptionHandler.java
@@ -36,6 +36,12 @@ public class ApiExceptionHandler {
private static final Logger logger =
LoggerFactory.getLogger(ApiExceptionHandler.class);
+ @ExceptionHandler(ServiceException.class)
+ public Result exceptionHandler(ServiceException e, HandlerMethod hm) {
+ logger.error("ServiceException: ", e);
+ return new Result(e.getCode(), e.getMessage());
+ }
+
@ExceptionHandler(Exception.class)
public Result exceptionHandler(Exception e, HandlerMethod hm) {
ApiException ce = hm.getMethodAnnotation(ApiException.class);
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ServiceException.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ServiceException.java
index 932b78f632..369fbbec3e 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ServiceException.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/exceptions/ServiceException.java
@@ -18,6 +18,8 @@ package org.apache.dolphinscheduler.api.exceptions;
import org.apache.dolphinscheduler.api.enums.Status;
+import java.text.MessageFormat;
+
/**
* service exception
@@ -37,6 +39,11 @@ public class ServiceException extends RuntimeException {
this.code = status.getCode();
}
+ public ServiceException(Status status, Object... formatter) {
+ super(MessageFormat.format(status.getMsg(), formatter));
+ this.code = status.getCode();
+ }
+
public ServiceException(Integer code,String message) {
super(message);
this.code = code;
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 eaca6707d4..fe74ff6018 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
@@ -35,7 +35,6 @@ import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.service.ExecutorService;
import org.apache.dolphinscheduler.api.service.ProcessDefinitionService;
import org.apache.dolphinscheduler.api.service.ProjectService;
-import org.apache.dolphinscheduler.api.service.QueueService;
import org.apache.dolphinscheduler.api.service.ResourcesService;
import org.apache.dolphinscheduler.api.service.SchedulerService;
import org.apache.dolphinscheduler.api.service.TaskDefinitionService;
@@ -111,9 +110,6 @@ public class PythonGateway {
@Autowired
private UsersService usersService;
- @Autowired
- private QueueService queueService;
-
@Autowired
private ResourcesService resourceService;
@@ -394,37 +390,8 @@ public class PythonGateway {
}
}
- public Map<String, Object> createQueue(String name, String queueName) {
- Result<Object> verifyQueueExists = queueService.verifyQueue(name,
queueName);
- if (verifyQueueExists.getCode() == 0) {
- return queueService.createQueue(dummyAdminUser, name, queueName);
- } else {
- Map<String, Object> result = new HashMap<>();
- // TODO function putMsg do not work here
- result.put(Constants.STATUS, Status.SUCCESS);
- result.put(Constants.MSG, Status.SUCCESS.getMsg());
- return result;
- }
- }
-
- public Map<String, Object> createTenant(String tenantCode, String desc,
String queueName) throws Exception {
- if (tenantService.checkTenantExists(tenantCode)) {
- Map<String, Object> result = new HashMap<>();
- // TODO function putMsg do not work here
- result.put(Constants.STATUS, Status.SUCCESS);
- result.put(Constants.MSG, Status.SUCCESS.getMsg());
- return result;
- } else {
- Result<Object> verifyQueueExists =
queueService.verifyQueue(queueName, queueName);
- if (verifyQueueExists.getCode() == 0) {
- // TODO why create do not return id?
- queueService.createQueue(dummyAdminUser, queueName, queueName);
- }
- Map<String, Object> result =
queueService.queryQueueName(queueName);
- List<Queue> queueList = (List<Queue>)
result.get(Constants.DATA_LIST);
- Queue queue = queueList.get(0);
- return tenantService.createTenant(dummyAdminUser, tenantCode,
queue.getId(), desc);
- }
+ public Tenant createTenant(String tenantCode, String desc, String
queueName) {
+ return tenantService.createTenantIfNotExists(tenantCode, desc,
queueName, queueName);
}
public void createUser(String userName,
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java
index f978b96b6b..a29fc465bd 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/QueueService.java
@@ -18,6 +18,7 @@
package org.apache.dolphinscheduler.api.service;
import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.dao.entity.Queue;
import org.apache.dolphinscheduler.dao.entity.User;
import java.util.Map;
@@ -77,11 +78,14 @@ public interface QueueService {
Result<Object> verifyQueue(String queue, String queueName);
/**
- * query queue by queueName
+ * Make sure queue with given name exists, and create the queue if not
exists
*
+ * ONLY for python gateway server, and should not use this in web ui
function
+ *
+ * @param queue queue value
* @param queueName queue name
- * @return queue object for provide queue name
+ * @return Queue object
*/
- Map<String, Object> queryQueueName(String queueName);
+ Queue createQueueIfNotExists(String queue, String queueName);
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java
index 47a4082a30..0d795a10c4 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/TenantService.java
@@ -18,6 +18,7 @@
package org.apache.dolphinscheduler.api.service;
import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.dao.entity.Tenant;
import org.apache.dolphinscheduler.dao.entity.User;
import java.util.Map;
@@ -94,18 +95,23 @@ public interface TenantService {
Result verifyTenantCode(String tenantCode);
/**
- * check if provide tenant code object exists
+ * query tenant by tenant code
*
* @param tenantCode tenant code
- * @return true if tenant code exists, false if not
+ * @return tenant list
*/
- boolean checkTenantExists(String tenantCode);
+ Map<String, Object> queryByTenantCode(String tenantCode);
/**
- * query tenant by tenant code
+ * Make sure tenant with given name exists, and create the tenant if not
exists
+ *
+ * ONLY for python gateway server, and should not use this in web ui
function
*
* @param tenantCode tenant code
- * @return tenant list
+ * @param desc The description of tenant object
+ * @param queue The value of queue which current tenant belong
+ * @param queueName The name of queue which current tenant belong
+ * @return Tenant object
*/
- Map<String, Object> queryByTenantCode(String tenantCode);
+ Tenant createTenantIfNotExists(String tenantCode, String desc, String
queue, String queueName);
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
index 4c3124a104..c05b8bbd8b 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/BaseServiceImpl.java
@@ -34,8 +34,6 @@ import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.AuthorizationType;
import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.utils.DateUtils;
-import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
-import org.apache.dolphinscheduler.dao.entity.Project;
import org.apache.dolphinscheduler.dao.entity.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/QueueServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/QueueServiceImpl.java
index 4c3fbdf009..a1efb5fb38 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/QueueServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/QueueServiceImpl.java
@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ServiceException;
import org.apache.dolphinscheduler.api.service.QueueService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.Result;
@@ -39,6 +40,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import org.slf4j.Logger;
@@ -64,6 +66,44 @@ public class QueueServiceImpl extends BaseServiceImpl
implements QueueService {
@Autowired
private UserMapper userMapper;
+ /**
+ * Valid both queue and queueName when we want to create or update queue
object
+ *
+ * @param queue queue value
+ * @param queueName queue name
+ */
+ private void queueValid(String queue, String queueName) throws
ServiceException {
+ if (StringUtils.isEmpty(queue)) {
+ throw new ServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE);
+ } else if (StringUtils.isEmpty(queueName)) {
+ throw new ServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE_NAME);
+ } else if (checkQueueExist(queue)) {
+ throw new ServiceException(Status.QUEUE_VALUE_EXIST, queue);
+ } else if (checkQueueNameExist(queueName)) {
+ throw new ServiceException(Status.QUEUE_NAME_EXIST, queueName);
+ }
+ }
+
+ /**
+ * Insert one single new Queue record to database
+ *
+ * @param queue queue value
+ * @param queueName queue name
+ * @return Queue
+ */
+ private Queue createObjToDB(String queue, String queueName) {
+ Queue queueObj = new Queue();
+ Date now = new Date();
+
+ queueObj.setQueue(queue);
+ queueObj.setQueueName(queueName);
+ queueObj.setCreateTime(now);
+ queueObj.setUpdateTime(now);
+ // save
+ queueMapper.insert(queueObj);
+ return queueObj;
+ }
+
/**
* query queue list
*
@@ -127,42 +167,14 @@ public class QueueServiceImpl extends BaseServiceImpl
implements QueueService {
public Map<String, Object> createQueue(User loginUser, String queue,
String queueName) {
Map<String, Object> result = new HashMap<>();
if (!canOperatorPermissions(loginUser,null,
AuthorizationType.QUEUE,YARN_QUEUE_CREATE)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
- }
-
- if (StringUtils.isEmpty(queue)) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE);
- return result;
+ throw new ServiceException(Status.USER_NO_OPERATION_PERM);
}
+ queueValid(queue, queueName);
- if (StringUtils.isEmpty(queueName)) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE_NAME);
- return result;
- }
-
- if (checkQueueNameExist(queueName)) {
- putMsg(result, Status.QUEUE_NAME_EXIST, queueName);
- return result;
- }
-
- if (checkQueueExist(queue)) {
- putMsg(result, Status.QUEUE_VALUE_EXIST, queue);
- return result;
- }
-
- Queue queueObj = new Queue();
- Date now = new Date();
-
- queueObj.setQueue(queue);
- queueObj.setQueueName(queueName);
- queueObj.setCreateTime(now);
- queueObj.setUpdateTime(now);
-
- queueMapper.insert(queueObj);
- result.put(Constants.DATA_LIST, queueObj);
+ Queue newQueue = createObjToDB(queue, queueName);
+ result.put(Constants.DATA_LIST, newQueue);
putMsg(result, Status.SUCCESS);
- permissionPostHandle(AuthorizationType.QUEUE, loginUser.getId(),
Collections.singletonList(queueObj.getId()), logger);
+ permissionPostHandle(AuthorizationType.QUEUE, loginUser.getId(),
Collections.singletonList(newQueue.getId()), logger);
return result;
}
@@ -179,43 +191,19 @@ public class QueueServiceImpl extends BaseServiceImpl
implements QueueService {
public Map<String, Object> updateQueue(User loginUser, int id, String
queue, String queueName) {
Map<String, Object> result = new HashMap<>();
if (!canOperatorPermissions(loginUser,new Object[]{id},
AuthorizationType.QUEUE,YARN_QUEUE_UPDATE)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
- }
-
- if (StringUtils.isEmpty(queue)) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE);
- return result;
+ throw new ServiceException(Status.USER_NO_OPERATION_PERM);
}
- if (StringUtils.isEmpty(queueName)) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE_NAME);
- return result;
- }
+ queueValid(queue, queueName);
Queue queueObj = queueMapper.selectById(id);
- if (queueObj == null) {
- putMsg(result, Status.QUEUE_NOT_EXIST, id);
- return result;
+ if (Objects.isNull(queueObj)) {
+ throw new ServiceException(Status.QUEUE_NOT_EXIST, queue);
}
// whether queue value or queueName is changed
if (queue.equals(queueObj.getQueue()) &&
queueName.equals(queueObj.getQueueName())) {
- putMsg(result, Status.NEED_NOT_UPDATE_QUEUE);
- return result;
- }
-
- // check queue name is exist
- if (!queueName.equals(queueObj.getQueueName())
- && checkQueueNameExist(queueName)) {
- putMsg(result, Status.QUEUE_NAME_EXIST, queueName);
- return result;
- }
-
- // check queue value is exist
- if (!queue.equals(queueObj.getQueue()) && checkQueueExist(queue)) {
- putMsg(result, Status.QUEUE_VALUE_EXIST, queue);
- return result;
+ throw new ServiceException(Status.NEED_NOT_UPDATE_QUEUE);
}
// check old queue using by any user
@@ -248,53 +236,8 @@ public class QueueServiceImpl extends BaseServiceImpl
implements QueueService {
@Override
public Result<Object> verifyQueue(String queue, String queueName) {
Result<Object> result = new Result<>();
+ queueValid(queue, queueName);
- if (StringUtils.isEmpty(queue)) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE);
- return result;
- }
-
- if (StringUtils.isEmpty(queueName)) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE_NAME);
- return result;
- }
-
- if (checkQueueNameExist(queueName)) {
- putMsg(result, Status.QUEUE_NAME_EXIST, queueName);
- return result;
- }
-
- if (checkQueueExist(queue)) {
- putMsg(result, Status.QUEUE_VALUE_EXIST, queue);
- return result;
- }
-
- putMsg(result, Status.SUCCESS);
- return result;
- }
-
- /**
- * query queue by queueName
- *
- * @param queueName queue name
- * @return queue object for provide queue name
- */
- @Override
- public Map<String, Object> queryQueueName(String queueName) {
- Map<String, Object> result = new HashMap<>();
-
- if (StringUtils.isEmpty(queueName)) {
- putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR,
Constants.QUEUE_NAME);
- return result;
- }
-
- if (!checkQueueNameExist(queueName)) {
- putMsg(result, Status.QUEUE_NOT_EXIST, queueName);
- return result;
- }
-
- List<Queue> queueList = queueMapper.queryQueueName(queueName);
- result.put(Constants.DATA_LIST, queueList);
putMsg(result, Status.SUCCESS);
return result;
}
@@ -334,4 +277,23 @@ public class QueueServiceImpl extends BaseServiceImpl
implements QueueService {
return !oldQueue.equals(newQueue) && userMapper.existUser(oldQueue) ==
Boolean.TRUE;
}
+ /**
+ * Make sure queue with given name exists, and create the queue if not
exists
+ *
+ * ONLY for python gateway server, and should not use this in web ui
function
+ *
+ * @param queue queue value
+ * @param queueName queue name
+ * @return Queue object
+ */
+ @Override
+ public Queue createQueueIfNotExists(String queue, String queueName) {
+ queueValid(queue, queueName);
+ Queue existsQueue = queueMapper.queryQueueName(queue, queueName);
+ if (Objects.isNull(existsQueue)) {
+ return createObjToDB(queue, queueName);
+ }
+ return existsQueue;
+ }
+
}
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
index 2b5ff4422e..c4cca300fb 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TenantServiceImpl.java
@@ -22,17 +22,19 @@ import
com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ServiceException;
+import org.apache.dolphinscheduler.api.service.QueueService;
import org.apache.dolphinscheduler.api.service.TenantService;
import org.apache.dolphinscheduler.api.utils.PageInfo;
import org.apache.dolphinscheduler.api.utils.RegexUtils;
import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.AuthorizationType;
-import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.common.storage.StorageOperate;
import org.apache.dolphinscheduler.common.utils.PropertyUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
+import org.apache.dolphinscheduler.dao.entity.Queue;
import org.apache.dolphinscheduler.dao.entity.Tenant;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
@@ -46,12 +48,12 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
@@ -77,9 +79,53 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
@Autowired
private UserMapper userMapper;
+ @Autowired
+ private QueueService queueService;
+
@Autowired(required = false)
private StorageOperate storageOperate;
+ /**
+ * Valid tenantCode when we want to create or update tenant object
+ *
+ * @param tenantCode Tenant code of tenant object
+ * @return Optional of Status map
+ */
+ private void tenantCodeValid(String tenantCode) throws ServiceException {
+ Map<String, Object> result = new HashMap<>();
+ if (StringUtils.isEmpty(tenantCode)) {
+ throw new ServiceException(Status.REQUEST_PARAMS_NOT_VALID_ERROR,
tenantCode);
+ } else if (StringUtils.length(tenantCode) >
TENANT_FULL_NAME_MAX_LENGTH) {
+ throw new ServiceException(Status.TENANT_FULL_NAME_TOO_LONG_ERROR);
+ } else if (!RegexUtils.isValidLinuxUserName(tenantCode)) {
+ throw new ServiceException(Status.CHECK_OS_TENANT_CODE_ERROR);
+ } else if (checkTenantExists(tenantCode)) {
+ throw new ServiceException(Status.OS_TENANT_CODE_EXIST,
tenantCode);
+ }
+ }
+
+ /**
+ * Insert one single new Tenant record to database
+ *
+ * @param tenantCode new Tenant object tenant code
+ * @param desc new Tenant object description
+ * @param queueId The Queue id of new Tenant object
+ * @return Tenant
+ */
+ private Tenant createObjToDB(String tenantCode, String desc, int queueId) {
+ Tenant tenant = new Tenant();
+ Date now = new Date();
+
+ tenant.setTenantCode(tenantCode);
+ tenant.setQueueId(queueId);
+ tenant.setDescription(desc);
+ tenant.setCreateTime(now);
+ tenant.setUpdateTime(now);
+ // save
+ tenantMapper.insert(tenant);
+ return tenant;
+ }
+
/**
* create tenant
*
@@ -99,42 +145,18 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
Map<String, Object> result = new HashMap<>();
result.put(Constants.STATUS, false);
if (!canOperatorPermissions(loginUser,null, AuthorizationType.TENANT,
TENANT_CREATE)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
- }
-
- if(StringUtils.length(tenantCode) > TENANT_FULL_NAME_MAX_LENGTH){
- putMsg(result, Status.TENANT_FULL_NAME_TOO_LONG_ERROR);
- return result;
- }
-
- if (!RegexUtils.isValidLinuxUserName(tenantCode)) {
- putMsg(result, Status.CHECK_OS_TENANT_CODE_ERROR);
- return result;
- }
-
-
- if (checkTenantExists(tenantCode)) {
- putMsg(result, Status.OS_TENANT_CODE_EXIST, tenantCode);
- return result;
+ throw new ServiceException(Status.USER_NO_OPERATION_PERM);
}
- Tenant tenant = new Tenant();
- Date now = new Date();
- tenant.setTenantCode(tenantCode);
- tenant.setQueueId(queueId);
- tenant.setDescription(desc);
- tenant.setCreateTime(now);
- tenant.setUpdateTime(now);
- // save
- tenantMapper.insert(tenant);
+ tenantCodeValid(tenantCode);
+ Tenant newTenant = createObjToDB(tenantCode, desc, queueId);
// if storage startup
if (PropertyUtils.getResUploadStartupState()) {
storageOperate.createTenantDirIfNotExists(tenantCode);
}
- permissionPostHandle(AuthorizationType.TENANT, loginUser.getId(),
Collections.singletonList(tenant.getId()), logger);
- result.put(Constants.DATA_LIST, tenant);
+ permissionPostHandle(AuthorizationType.TENANT, loginUser.getId(),
Collections.singletonList(newTenant.getId()), logger);
+ result.put(Constants.DATA_LIST, newTenant);
putMsg(result, Status.SUCCESS);
return result;
}
@@ -185,42 +207,29 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
String desc) throws Exception {
Map<String, Object> result = new HashMap<>();
- result.put(Constants.STATUS, false);
if (!canOperatorPermissions(loginUser,null,
AuthorizationType.TENANT,TENANT_UPDATE)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
+ throw new ServiceException(Status.USER_NO_OPERATION_PERM);
}
Tenant tenant = tenantMapper.queryById(id);
- if (tenant == null) {
- putMsg(result, Status.TENANT_NOT_EXIST);
- return result;
+ if (Objects.isNull(tenant)) {
+ throw new ServiceException(Status.TENANT_NOT_EXIST);
}
+ tenantCodeValid(tenantCode);
+
// updateProcessInstance tenant
/**
* if the tenant code is modified, the original resource needs to be
copied to the new tenant.
*/
- if (!tenant.getTenantCode().equals(tenantCode)) {
- if (checkTenantExists(tenantCode)) {
- // if hdfs startup
- if (PropertyUtils.getResUploadStartupState()) {
- storageOperate.createTenantDirIfNotExists(tenantCode);
- }
- } else {
- putMsg(result, Status.OS_TENANT_CODE_HAS_ALREADY_EXISTS);
- return result;
- }
+ if (!tenant.getTenantCode().equals(tenantCode) &&
PropertyUtils.getResUploadStartupState()) {
+ storageOperate.createTenantDirIfNotExists(tenantCode);
}
Date now = new Date();
- if (!StringUtils.isEmpty(tenantCode)) {
- tenant.setTenantCode(tenantCode);
- }
-
if (queueId != 0) {
tenant.setQueueId(queueId);
}
@@ -228,8 +237,7 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
tenant.setUpdateTime(now);
tenantMapper.updateById(tenant);
- result.put(Constants.STATUS, Status.SUCCESS);
- result.put(Constants.MSG, Status.SUCCESS.getMsg());
+ putMsg(result, Status.SUCCESS);
return result;
}
@@ -247,33 +255,28 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
Map<String, Object> result = new HashMap<>();
if (!canOperatorPermissions(loginUser,null,
AuthorizationType.TENANT,TENANT_DELETE)) {
- putMsg(result, Status.USER_NO_OPERATION_PERM);
- return result;
+ throw new ServiceException(Status.USER_NO_OPERATION_PERM);
}
Tenant tenant = tenantMapper.queryById(id);
- if (tenant == null) {
- putMsg(result, Status.TENANT_NOT_EXIST);
- return result;
+ if (Objects.isNull(tenant)) {
+ throw new ServiceException(Status.TENANT_NOT_EXIST);
}
List<ProcessInstance> processInstances =
getProcessInstancesByTenant(tenant);
if (CollectionUtils.isNotEmpty(processInstances)) {
- putMsg(result, Status.DELETE_TENANT_BY_ID_FAIL,
processInstances.size());
- return result;
+ throw new ServiceException(Status.DELETE_TENANT_BY_ID_FAIL,
processInstances.size());
}
List<ProcessDefinition> processDefinitions =
processDefinitionMapper.queryDefinitionListByTenant(tenant.getId());
if (CollectionUtils.isNotEmpty(processDefinitions)) {
- putMsg(result, Status.DELETE_TENANT_BY_ID_FAIL_DEFINES,
processDefinitions.size());
- return result;
+ throw new
ServiceException(Status.DELETE_TENANT_BY_ID_FAIL_DEFINES,
processDefinitions.size());
}
List<User> userList = userMapper.queryUserListByTenant(tenant.getId());
if (CollectionUtils.isNotEmpty(userList)) {
- putMsg(result, Status.DELETE_TENANT_BY_ID_FAIL_USERS,
userList.size());
- return result;
+ throw new ServiceException(Status.DELETE_TENANT_BY_ID_FAIL_USERS,
userList.size());
}
// if resource upload startup
@@ -324,10 +327,9 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
public Result<Object> verifyTenantCode(String tenantCode) {
Result<Object> result = new Result<>();
if (checkTenantExists(tenantCode)) {
- putMsg(result, Status.OS_TENANT_CODE_EXIST, tenantCode);
- } else {
- putMsg(result, Status.SUCCESS);
+ throw new ServiceException(Status.OS_TENANT_CODE_EXIST,
tenantCode);
}
+ putMsg(result, Status.SUCCESS);
return result;
}
@@ -337,8 +339,7 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
* @param tenantCode tenant code
* @return ture if the tenant code exists, otherwise return false
*/
- @Override
- public boolean checkTenantExists(String tenantCode) {
+ private boolean checkTenantExists(String tenantCode) {
Boolean existTenant = tenantMapper.existTenant(tenantCode);
return Boolean.TRUE.equals(existTenant);
}
@@ -359,4 +360,26 @@ public class TenantServiceImpl extends BaseServiceImpl
implements TenantService
}
return result;
}
+
+ /**
+ * Make sure tenant with given name exists, and create the tenant if not
exists
+ *
+ * ONLY for python gateway server, and should not use this in web ui
function
+ *
+ * @param tenantCode tenant code
+ * @param desc The description of tenant object
+ * @param queue The value of queue which current tenant belong
+ * @param queueName The name of queue which current tenant belong
+ * @return Tenant object
+ */
+ @Override
+ public Tenant createTenantIfNotExists(String tenantCode, String desc,
String queue, String queueName) {
+ if (checkTenantExists(tenantCode)) {
+ return tenantMapper.queryByTenantCode(tenantCode);
+ }
+
+ tenantCodeValid(tenantCode);
+ Queue newQueue = queueService.createQueueIfNotExists(queue, queueName);
+ return createObjToDB(tenantCode, desc, newQueue.getId());
+ }
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/QueueControllerTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/QueueControllerTest.java
index 0b2a4e89a7..c147f84a93 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/QueueControllerTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/QueueControllerTest.java
@@ -42,11 +42,14 @@ import org.springframework.util.MultiValueMap;
public class QueueControllerTest extends AbstractControllerTest {
private static final Logger logger =
LoggerFactory.getLogger(QueueControllerTest.class);
- private static final String QUEUE_CREATE_STRING = "queue1";
+ private static final String QUEUE_CREATE_NAME = "queue_create";
+ private static final String QUEUE_MODIFY_NAME = "queue_modify";
+ private static final String QUEUE_NAME_CREATE_NAME = "queue_name_create";
+ private static final String QUEUE_NAME_MODIFY_NAME = "queue_name_modify";
+ private static final String NOT_EXISTS_NAME = "not_exists";
@Test
public void testQueryList() throws Exception {
-
MvcResult mvcResult = mockMvc.perform(get("/queues/list")
.header(SESSION_ID, sessionId))
.andExpect(status().isOk())
@@ -54,13 +57,14 @@ public class QueueControllerTest extends
AbstractControllerTest {
.andReturn();
Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
+
+ Assert.assertNotNull(result);
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
logger.info("query list queue return result:{}",
mvcResult.getResponse().getContentAsString());
}
@Test
- public void testQueryQueueListPaging() throws Exception {
-
+ public void testQueryQueueListPagingEmpty() throws Exception {
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
paramsMap.add("searchVal","");
paramsMap.add("pageNo","1");
@@ -73,17 +77,17 @@ public class QueueControllerTest extends
AbstractControllerTest {
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andReturn();
Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
-
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
- logger.info("query list-paging queue return result:{}",
mvcResult.getResponse().getContentAsString());
+ Assert.assertNotNull(result);
+ Assert.assertEquals(Status.SUCCESS.getCode(),
result.getCode().intValue());
+ logger.info("query list-paging queue return result:{}",
mvcResult.getResponse().getContentAsString());
}
@Test
public void testCreateQueue() throws Exception {
-
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("queue", QUEUE_CREATE_STRING);
- paramsMap.add("queueName","root.queue1");
+ paramsMap.add("queue", QUEUE_CREATE_NAME);
+ paramsMap.add("queueName", QUEUE_NAME_CREATE_NAME);
MvcResult mvcResult = mockMvc.perform(post("/queues")
.header(SESSION_ID, sessionId)
@@ -92,17 +96,18 @@ public class QueueControllerTest extends
AbstractControllerTest {
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andReturn();
Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
+
+ Assert.assertNotNull(result);
Assert.assertEquals(Status.SUCCESS.getCode(),
result.getCode().intValue());
logger.info("create queue return result:{}",
mvcResult.getResponse().getContentAsString());
}
@Test
public void testUpdateQueue() throws Exception {
-
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
paramsMap.add("id","1");
- paramsMap.add("queue","queue2");
- paramsMap.add("queueName","root.queue2");
+ paramsMap.add("queue", QUEUE_MODIFY_NAME);
+ paramsMap.add("queueName", QUEUE_NAME_MODIFY_NAME);
MvcResult mvcResult = mockMvc.perform(put("/queues/{id}", 1)
.header(SESSION_ID, sessionId)
@@ -111,6 +116,8 @@ public class QueueControllerTest extends
AbstractControllerTest {
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andReturn();
Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
+
+ Assert.assertNotNull(result);
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
logger.info("update queue return result:{}",
mvcResult.getResponse().getContentAsString());
}
@@ -120,8 +127,8 @@ public class QueueControllerTest extends
AbstractControllerTest {
// queue value exist
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
- paramsMap.add("queue",QUEUE_CREATE_STRING);
- paramsMap.add("queueName","queue.name");
+ paramsMap.add("queue", QUEUE_MODIFY_NAME);
+ paramsMap.add("queueName", NOT_EXISTS_NAME);
MvcResult mvcResult = mockMvc.perform(post("/queues/verify")
.header(SESSION_ID, sessionId)
@@ -129,13 +136,32 @@ public class QueueControllerTest extends
AbstractControllerTest {
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andReturn();
+
Result result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
+
+ Assert.assertNotNull(result);
Assert.assertEquals(Status.QUEUE_VALUE_EXIST.getCode(),result.getCode().intValue());
+ // queue name exist
+ paramsMap.clear();
+ paramsMap.add("queue", NOT_EXISTS_NAME);
+ paramsMap.add("queueName", QUEUE_NAME_CREATE_NAME);
+
+ mvcResult = mockMvc.perform(post("/queues/verify")
+ .header(SESSION_ID, sessionId)
+ .params(paramsMap))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+ result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
+
+ Assert.assertNotNull(result);
+
Assert.assertEquals(Status.QUEUE_NAME_EXIST.getCode(),result.getCode().intValue());
+
// success
paramsMap.clear();
- paramsMap.add("queue","ait123");
- paramsMap.add("queueName","aitName");
+ paramsMap.add("queue", NOT_EXISTS_NAME);
+ paramsMap.add("queueName", NOT_EXISTS_NAME);
mvcResult = mockMvc.perform(post("/queues/verify")
.header(SESSION_ID, sessionId)
@@ -144,6 +170,8 @@ public class QueueControllerTest extends
AbstractControllerTest {
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andReturn();
result =
JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(),
Result.class);
+
+ Assert.assertNotNull(result);
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
logger.info(mvcResult.getResponse().getContentAsString());
logger.info("verify queue return result:{}",
mvcResult.getResponse().getContentAsString());
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/QueueServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/QueueServiceTest.java
index 30eaeb52e1..60f0039287 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/QueueServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/QueueServiceTest.java
@@ -17,7 +17,12 @@
package org.apache.dolphinscheduler.api.service;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.YARN_QUEUE_CREATE;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.YARN_QUEUE_UPDATE;
+
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ServiceException;
+import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
import org.apache.dolphinscheduler.api.service.impl.BaseServiceImpl;
import org.apache.dolphinscheduler.api.service.impl.QueueServiceImpl;
import org.apache.dolphinscheduler.api.utils.PageInfo;
@@ -28,21 +33,22 @@ import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.dao.entity.Queue;
import org.apache.dolphinscheduler.dao.entity.User;
import org.apache.dolphinscheduler.dao.mapper.QueueMapper;
+import org.apache.dolphinscheduler.dao.mapper.UserMapper;
import org.apache.commons.collections.CollectionUtils;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
-import org.apache.dolphinscheduler.dao.mapper.UserMapper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@@ -54,15 +60,12 @@ import org.slf4j.LoggerFactory;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
-
/**
* queue service test
*/
@RunWith(MockitoJUnitRunner.class)
public class QueueServiceTest {
- private static final Logger logger =
LoggerFactory.getLogger(QueueServiceTest.class);
private static final Logger baseServiceLogger =
LoggerFactory.getLogger(BaseServiceImpl.class);
private static final Logger queueServiceImplLogger =
LoggerFactory.getLogger(QueueServiceImpl.class);
@@ -78,7 +81,10 @@ public class QueueServiceTest {
@Mock
private ResourcePermissionCheckService resourcePermissionCheckService;
- private String queueName = "QueueServiceTest";
+ private static final String QUEUE = "queue";
+ private static final String QUEUE_NAME = "queueName";
+ private static final String EXISTS = "exists";
+ private static final String NOT_EXISTS = "not_exists";
@Before
public void setUp() {
@@ -95,7 +101,6 @@ public class QueueServiceTest {
Mockito.when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.QUEUE,
getLoginUser().getId(), queueServiceImplLogger)).thenReturn(ids);
Mockito.when(queueMapper.selectBatchIds(Mockito.anySet())).thenReturn(getQueueList());
Map<String, Object> result = queueService.queryList(getLoginUser());
- logger.info(result.toString());
List<Queue> queueList = (List<Queue>) result.get(Constants.DATA_LIST);
Assert.assertTrue(CollectionUtils.isNotEmpty(queueList));
@@ -110,96 +115,93 @@ public class QueueServiceTest {
Set<Integer> ids = new HashSet<>();
ids.add(1);
Mockito.when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.QUEUE,
getLoginUser().getId(), queueServiceImplLogger)).thenReturn(ids);
- Mockito.when(queueMapper.queryQueuePaging(Mockito.any(Page.class),
Mockito.anyList(), Mockito.eq(queueName))).thenReturn(page);
- Result result = queueService.queryList(getLoginUser(), queueName, 1,
10);
- logger.info(result.toString());
+ Mockito.when(queueMapper.queryQueuePaging(Mockito.any(Page.class),
Mockito.anyList(), Mockito.eq(QUEUE_NAME))).thenReturn(page);
+ Result result = queueService.queryList(getLoginUser(), QUEUE_NAME, 1,
10);
PageInfo<Queue> pageInfo = (PageInfo<Queue>) result.getData();
Assert.assertTrue(CollectionUtils.isNotEmpty(pageInfo.getTotalList()));
}
@Test
public void testCreateQueue() {
-
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.QUEUE,
getLoginUser().getId(),YARN_QUEUE_CREATE ,
baseServiceLogger)).thenReturn(true);
+
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.QUEUE,
getLoginUser().getId(), YARN_QUEUE_CREATE,
baseServiceLogger)).thenReturn(true);
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.QUEUE,
null, 0, baseServiceLogger)).thenReturn(true);
+
// queue is null
- Map<String, Object> result = queueService.createQueue(getLoginUser(),
null, queueName);
- logger.info(result.toString());
- Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR,
result.get(Constants.STATUS));
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> queueService.createQueue(getLoginUser(), null, QUEUE_NAME));
+ String formatter =
MessageFormat.format(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getMsg(),
Constants.QUEUE);
+ Assertions.assertEquals(formatter, exception.getMessage());
+
// queueName is null
- result = queueService.createQueue(getLoginUser(), queueName, null);
- logger.info(result.toString());
- Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR,
result.get(Constants.STATUS));
+ exception = Assertions.assertThrows(ServiceException.class, () ->
queueService.createQueue(getLoginUser(), QUEUE_NAME, null));
+ formatter =
MessageFormat.format(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getMsg(),
Constants.QUEUE_NAME);
+ Assertions.assertEquals(formatter, exception.getMessage());
+
// correct
- result = queueService.createQueue(getLoginUser(), queueName,
queueName);
- logger.info(result.toString());
+ Map<String, Object> result = queueService.createQueue(getLoginUser(),
QUEUE_NAME, QUEUE_NAME);
Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
-
}
@Test
public void testUpdateQueue() {
-
- Mockito.when(queueMapper.selectById(1)).thenReturn(getQueue());
- Mockito.when(queueMapper.existQueue("test", null)).thenReturn(true);
- Mockito.when(queueMapper.existQueue(null, "test")).thenReturn(true);
-
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.QUEUE,
getLoginUser().getId(), YARN_QUEUE_UPDATE ,
baseServiceLogger)).thenReturn(true);
+ Mockito.when(queueMapper.selectById(1)).thenReturn(getQUEUE());
+ Mockito.when(queueMapper.existQueue(EXISTS, null)).thenReturn(true);
+ Mockito.when(queueMapper.existQueue(null, EXISTS)).thenReturn(true);
+
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.QUEUE,
getLoginUser().getId(), YARN_QUEUE_UPDATE,
baseServiceLogger)).thenReturn(true);
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.QUEUE,
new Object[]{0}, 0, baseServiceLogger)).thenReturn(true);
+
// not exist
- Map<String, Object> result = queueService.updateQueue(getLoginUser(),
0, "queue", queueName);
- logger.info(result.toString());
- Assert.assertEquals(Status.QUEUE_NOT_EXIST.getCode(), ((Status)
result.get(Constants.STATUS)).getCode());
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> queueService.updateQueue(getLoginUser(), 0, QUEUE, QUEUE_NAME));
+ String formatter =
MessageFormat.format(Status.QUEUE_NOT_EXIST.getMsg(), QUEUE);
+ Assertions.assertEquals(formatter, exception.getMessage());
+
//no need update
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.QUEUE,
new Object[]{1}, 0, baseServiceLogger)).thenReturn(true);
- result = queueService.updateQueue(getLoginUser(), 1, queueName,
queueName);
- logger.info(result.toString());
- Assert.assertEquals(Status.NEED_NOT_UPDATE_QUEUE.getCode(), ((Status)
result.get(Constants.STATUS)).getCode());
+ exception = Assertions.assertThrows(ServiceException.class, () ->
queueService.updateQueue(getLoginUser(), 1, QUEUE_NAME, QUEUE_NAME));
+ Assertions.assertEquals(Status.NEED_NOT_UPDATE_QUEUE.getMsg(),
exception.getMessage());
+
//queue exist
- result = queueService.updateQueue(getLoginUser(), 1, "test",
queueName);
- logger.info(result.toString());
- Assert.assertEquals(Status.QUEUE_VALUE_EXIST.getCode(), ((Status)
result.get(Constants.STATUS)).getCode());
+ exception = Assertions.assertThrows(ServiceException.class, () ->
queueService.updateQueue(getLoginUser(), 1, EXISTS, QUEUE_NAME));
+ formatter = MessageFormat.format(Status.QUEUE_VALUE_EXIST.getMsg(),
EXISTS);
+ Assertions.assertEquals(formatter, exception.getMessage());
+
// queueName exist
- result = queueService.updateQueue(getLoginUser(), 1, "test1", "test");
- logger.info(result.toString());
- Assert.assertEquals(Status.QUEUE_NAME_EXIST.getCode(), ((Status)
result.get(Constants.STATUS)).getCode());
+ exception = Assertions.assertThrows(ServiceException.class, () ->
queueService.updateQueue(getLoginUser(), 1, NOT_EXISTS, EXISTS));
+ formatter = MessageFormat.format(Status.QUEUE_NAME_EXIST.getMsg(),
EXISTS);
+ Assertions.assertEquals(formatter, exception.getMessage());
+
//success
Mockito.when(userMapper.existUser(Mockito.anyString())).thenReturn(false);
- result = queueService.updateQueue(getLoginUser(), 1, "test1", "test1");
- logger.info(result.toString());
+ Map<String, Object> result = queueService.updateQueue(getLoginUser(),
1, NOT_EXISTS, NOT_EXISTS);
Assert.assertEquals(Status.SUCCESS.getCode(), ((Status)
result.get(Constants.STATUS)).getCode());
-
}
@Test
public void testVerifyQueue() {
-
- Mockito.when(queueMapper.existQueue(queueName, null)).thenReturn(true);
- Mockito.when(queueMapper.existQueue(null, queueName)).thenReturn(true);
-
//queue null
- Result result = queueService.verifyQueue(null, queueName);
- logger.info(result.toString());
- Assert.assertEquals(result.getCode().intValue(),
Status.REQUEST_PARAMS_NOT_VALID_ERROR.getCode());
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> queueService.verifyQueue(null, QUEUE_NAME));
+ String formatter =
MessageFormat.format(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getMsg(),
Constants.QUEUE);
+ Assertions.assertEquals(formatter, exception.getMessage());
//queueName null
- result = queueService.verifyQueue(queueName, null);
- logger.info(result.toString());
- Assert.assertEquals(result.getCode().intValue(),
Status.REQUEST_PARAMS_NOT_VALID_ERROR.getCode());
+ exception = Assertions.assertThrows(ServiceException.class, () ->
queueService.verifyQueue(QUEUE_NAME, null));
+ formatter =
MessageFormat.format(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getMsg(),
Constants.QUEUE_NAME);
+ Assertions.assertEquals(formatter, exception.getMessage());
//exist queueName
- result = queueService.verifyQueue(queueName, queueName);
- logger.info(result.toString());
- Assert.assertEquals(result.getCode().intValue(),
Status.QUEUE_NAME_EXIST.getCode());
+ Mockito.when(queueMapper.existQueue(EXISTS, null)).thenReturn(true);
+ exception = Assertions.assertThrows(ServiceException.class, () ->
queueService.verifyQueue(EXISTS, QUEUE_NAME));
+ formatter = MessageFormat.format(Status.QUEUE_VALUE_EXIST.getMsg(),
EXISTS);
+ Assertions.assertEquals(formatter, exception.getMessage());
//exist queue
- result = queueService.verifyQueue(queueName, "test");
- logger.info(result.toString());
- Assert.assertEquals(result.getCode().intValue(),
Status.QUEUE_VALUE_EXIST.getCode());
+ Mockito.when(queueMapper.existQueue(null, EXISTS)).thenReturn(true);
+ exception = Assertions.assertThrows(ServiceException.class, () ->
queueService.verifyQueue(QUEUE, EXISTS));
+ formatter = MessageFormat.format(Status.QUEUE_NAME_EXIST.getMsg(),
EXISTS);
+ Assertions.assertEquals(formatter, exception.getMessage());
// success
- result = queueService.verifyQueue("test", "test");
- logger.info(result.toString());
+ Result<Object> result = queueService.verifyQueue(NOT_EXISTS,
NOT_EXISTS);
Assert.assertEquals(result.getCode().intValue(),
Status.SUCCESS.getCode());
-
}
/**
@@ -213,26 +215,20 @@ public class QueueServiceTest {
return loginUser;
}
- private List<User> getUserList() {
- List<User> list = new ArrayList<>();
- list.add(getLoginUser());
- return list;
- }
-
/**
* get queue
*/
- private Queue getQueue() {
+ private Queue getQUEUE() {
Queue queue = new Queue();
queue.setId(1);
- queue.setQueue(queueName);
- queue.setQueueName(queueName);
+ queue.setQueue(QUEUE_NAME);
+ queue.setQueueName(QUEUE_NAME);
return queue;
}
private List<Queue> getQueueList() {
List<Queue> queueList = new ArrayList<>();
- queueList.add(getQueue());
+ queueList.add(getQUEUE());
return queueList;
}
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
index 451f20ec0b..9ce34afe7a 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/TenantServiceTest.java
@@ -17,10 +17,13 @@
package org.apache.dolphinscheduler.api.service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.commons.collections.CollectionUtils;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TENANT_CREATE;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TENANT_DELETE;
+import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.TENANT_UPDATE;
+
import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.exceptions.ServiceException;
+import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
import org.apache.dolphinscheduler.api.service.impl.BaseServiceImpl;
import org.apache.dolphinscheduler.api.service.impl.TenantServiceImpl;
import org.apache.dolphinscheduler.api.utils.PageInfo;
@@ -28,7 +31,6 @@ import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.AuthorizationType;
import org.apache.dolphinscheduler.common.enums.UserType;
-import org.apache.dolphinscheduler.common.storage.StorageOperate;
import org.apache.dolphinscheduler.common.utils.PropertyUtils;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
@@ -38,9 +40,19 @@ import
org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
import org.apache.dolphinscheduler.dao.mapper.UserMapper;
-import
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
+
+import org.apache.commons.collections.CollectionUtils;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import org.junit.Assert;
import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@@ -50,13 +62,8 @@ import
org.powermock.core.classloader.annotations.PrepareForTest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationConstant.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* tenant service test
@@ -65,7 +72,6 @@ import static
org.apache.dolphinscheduler.api.constants.ApiFuncIdentificationCon
@PrepareForTest({PropertyUtils.class})
public class TenantServiceTest {
private static final Logger baseServiceLogger =
LoggerFactory.getLogger(BaseServiceImpl.class);
- private static final Logger logger =
LoggerFactory.getLogger(TenantServiceTest.class);
private static final Logger tenantServiceImplLogger =
LoggerFactory.getLogger(TenantServiceImpl.class);
@InjectMocks
@@ -83,89 +89,93 @@ public class TenantServiceTest {
@Mock
private UserMapper userMapper;
- @Mock
- private StorageOperate storageOperate;
-
@Mock
private ResourcePermissionCheckService resourcePermissionCheckService;
private static final String tenantCode = "hayden";
+ private static final String tenantDesc = "This is the tenant desc";
@Test
- public void testCreateTenant() {
+ public void testCreateTenant() throws Exception {
User loginUser = getLoginUser();
Mockito.when(tenantMapper.existTenant(tenantCode)).thenReturn(true);
-
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.TENANT,
loginUser.getId(), TENANT_CREATE , baseServiceLogger)).thenReturn(true);
+
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.TENANT,
loginUser.getId(), TENANT_CREATE, baseServiceLogger)).thenReturn(true);
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.TENANT,
null, 0, baseServiceLogger)).thenReturn(true);
- try {
- //check tenantCode
- Map<String, Object> result =
- tenantService.createTenant(getLoginUser(), "%!1111", 1,
"TenantServiceTest");
- logger.info(result.toString());
- Assert.assertEquals(Status.CHECK_OS_TENANT_CODE_ERROR,
result.get(Constants.STATUS));
-
- //check exist
- result = tenantService.createTenant(loginUser, tenantCode, 1,
"TenantServiceTest");
- logger.info(result.toString());
- Assert.assertEquals(Status.OS_TENANT_CODE_EXIST,
result.get(Constants.STATUS));
-
- // success
- result = tenantService.createTenant(loginUser, "test", 1,
"TenantServiceTest");
- logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
-
- } catch (Exception e) {
- logger.error("create tenant error", e);
- Assert.fail();
- }
+ Map<String, Object> result;
+
+ //check exist
+ String emptyTenantCode = "";
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> tenantService.createTenant(loginUser, emptyTenantCode, 1, tenantDesc));
+ String formatter =
MessageFormat.format(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getMsg(),
emptyTenantCode);
+ Assertions.assertEquals(formatter, exception.getMessage());
+
+ //check tenant code too long
+ String longStr =
"this_is_a_very_long_string_this_is_a_very_long_string_this_is_a_very_long_string_this_is_a_very_long_string";
+ exception = Assertions.assertThrows(ServiceException.class, () ->
tenantService.createTenant(loginUser, longStr, 1, tenantDesc));
+ Assert.assertEquals(Status.TENANT_FULL_NAME_TOO_LONG_ERROR.getMsg(),
exception.getMessage());
+
+ //check tenant code invalid
+ exception = Assertions.assertThrows(ServiceException.class, () ->
tenantService.createTenant(getLoginUser(), "%!1111", 1, tenantDesc));
+ Assert.assertEquals(Status.CHECK_OS_TENANT_CODE_ERROR.getMsg(),
exception.getMessage());
+
+ //check exist
+ exception = Assertions.assertThrows(ServiceException.class, () ->
tenantService.createTenant(loginUser, tenantCode, 1, tenantDesc));
+ formatter = MessageFormat.format(Status.OS_TENANT_CODE_EXIST.getMsg(),
tenantCode);
+ Assert.assertEquals(formatter, exception.getMessage());
+
+ // success
+ result = tenantService.createTenant(loginUser, "test", 1, tenantDesc);
+ Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ }
+
+ @Test
+ public void testCreateTenantError() {
+ Mockito.when(tenantMapper.existTenant(tenantCode)).thenReturn(true);
+
+ // tenantCode exist
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> tenantService.verifyTenantCode(getTenant().getTenantCode()));
+ String expect =
MessageFormat.format(Status.OS_TENANT_CODE_EXIST.getMsg(),
getTenant().getTenantCode());
+ Assertions.assertEquals(expect, exception.getMessage());
+
+ // success
+ Result result =
tenantService.verifyTenantCode("s00000000000l887888885554444sfjdskfjslakslkdf");
+ Assert.assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
}
@Test
@SuppressWarnings("unchecked")
public void testQueryTenantListPage() {
-
IPage<Tenant> page = new Page<>(1, 10);
page.setRecords(getList());
page.setTotal(1L);
Set<Integer> ids = new HashSet<>();
ids.add(1);
Mockito.when(resourcePermissionCheckService.userOwnedResourceIdsAcquisition(AuthorizationType.TENANT,
getLoginUser().getId(), tenantServiceImplLogger)).thenReturn(ids);
- Mockito.when(tenantMapper.queryTenantPaging(Mockito.any(Page.class),
Mockito.anyList(), Mockito.eq("TenantServiceTest")))
- .thenReturn(page);
- Result result = tenantService.queryTenantList(getLoginUser(),
"TenantServiceTest", 1, 10);
- logger.info(result.toString());
+ Mockito.when(tenantMapper.queryTenantPaging(Mockito.any(Page.class),
Mockito.anyList(), Mockito.eq(tenantDesc)))
+ .thenReturn(page);
+ Result result = tenantService.queryTenantList(getLoginUser(),
tenantDesc, 1, 10);
PageInfo<Tenant> pageInfo = (PageInfo<Tenant>) result.getData();
Assert.assertTrue(CollectionUtils.isNotEmpty(pageInfo.getTotalList()));
}
@Test
- public void testUpdateTenant() {
-
+ public void testUpdateTenant() throws Exception {
Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
-
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.TENANT,
getLoginUser().getId(), TENANT_UPDATE , baseServiceLogger)).thenReturn(true);
+
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.TENANT,
getLoginUser().getId(), TENANT_UPDATE, baseServiceLogger)).thenReturn(true);
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.TENANT,
null, 0, baseServiceLogger)).thenReturn(true);
- try {
- // id not exist
- Map<String, Object> result =
- tenantService.updateTenant(getLoginUser(), 912222,
tenantCode, 1, "desc");
- logger.info(result.toString());
- // success
- Assert.assertEquals(Status.TENANT_NOT_EXIST,
result.get(Constants.STATUS));
- result = tenantService.updateTenant(getLoginUser(), 1, tenantCode,
1, "desc");
- logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
- } catch (Exception e) {
- logger.error("update tenant error", e);
- Assert.fail();
- }
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> tenantService.updateTenant(getLoginUser(), 912222, tenantCode, 1,
tenantDesc));
+ Assertions.assertEquals(Status.TENANT_NOT_EXIST.getMsg(),
exception.getMessage());
+
+ Map<String, Object> result =
tenantService.updateTenant(getLoginUser(), 1, tenantCode, 1, tenantDesc);
+ Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
}
@Test
- public void testDeleteTenantById() {
-
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.TENANT,
getLoginUser().getId(), TENANT_DELETE , baseServiceLogger)).thenReturn(true);
+ public void testDeleteTenantById() throws Exception {
+
Mockito.when(resourcePermissionCheckService.operationPermissionCheck(AuthorizationType.TENANT,
getLoginUser().getId(), TENANT_DELETE, baseServiceLogger)).thenReturn(true);
Mockito.when(resourcePermissionCheckService.resourcePermissionCheck(AuthorizationType.TENANT,
null, 0, baseServiceLogger)).thenReturn(true);
Mockito.when(tenantMapper.queryById(1)).thenReturn(getTenant());
Mockito.when(processInstanceMapper.queryByTenantIdAndStatus(1,
Constants.NOT_TERMINATED_STATES))
@@ -173,58 +183,50 @@ public class TenantServiceTest {
Mockito.when(processDefinitionMapper.queryDefinitionListByTenant(2)).thenReturn(getDefinitionsList());
Mockito.when(userMapper.queryUserListByTenant(3)).thenReturn(getUserList());
- try {
- //TENANT_NOT_EXIST
- Map<String, Object> result =
tenantService.deleteTenantById(getLoginUser(), 12);
- logger.info(result.toString());
- Assert.assertEquals(Status.TENANT_NOT_EXIST,
result.get(Constants.STATUS));
-
- //DELETE_TENANT_BY_ID_FAIL
- result = tenantService.deleteTenantById(getLoginUser(), 1);
- logger.info(result.toString());
- Assert.assertEquals(Status.DELETE_TENANT_BY_ID_FAIL,
result.get(Constants.STATUS));
-
- //DELETE_TENANT_BY_ID_FAIL_DEFINES
- Mockito.when(tenantMapper.queryById(2)).thenReturn(getTenant(2));
- result = tenantService.deleteTenantById(getLoginUser(), 2);
- logger.info(result.toString());
- Assert.assertEquals(Status.DELETE_TENANT_BY_ID_FAIL_DEFINES,
result.get(Constants.STATUS));
-
- //DELETE_TENANT_BY_ID_FAIL_USERS
- Mockito.when(tenantMapper.queryById(3)).thenReturn(getTenant(3));
- result = tenantService.deleteTenantById(getLoginUser(), 3);
- logger.info(result.toString());
- Assert.assertEquals(Status.DELETE_TENANT_BY_ID_FAIL_USERS,
result.get(Constants.STATUS));
-
- // success
- Mockito.when(tenantMapper.queryById(4)).thenReturn(getTenant(4));
- result = tenantService.deleteTenantById(getLoginUser(), 4);
- logger.info(result.toString());
- Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
- } catch (Exception e) {
- logger.error("delete tenant error", e);
- Assert.fail();
- }
+ //TENANT_NOT_EXIST
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> tenantService.deleteTenantById(getLoginUser(), 12));
+ Assertions.assertEquals(Status.TENANT_NOT_EXIST.getMsg(),
exception.getMessage());
+
+ //DELETE_TENANT_BY_ID_FAIL
+ exception = Assertions.assertThrows(ServiceException.class, () ->
tenantService.deleteTenantById(getLoginUser(), 1));
+ String prefix = Status.DELETE_TENANT_BY_ID_FAIL.getMsg().substring(1,
5);
+ Assertions.assertTrue(exception.getMessage().contains(prefix));
+
+ //DELETE_TENANT_BY_ID_FAIL_DEFINES
+ Mockito.when(tenantMapper.queryById(2)).thenReturn(getTenant(2));
+ exception = Assertions.assertThrows(ServiceException.class, () ->
tenantService.deleteTenantById(getLoginUser(), 2));
+ prefix = Status.DELETE_TENANT_BY_ID_FAIL_DEFINES.getMsg().substring(1,
5);
+ Assertions.assertTrue(exception.getMessage().contains(prefix));
+
+ //DELETE_TENANT_BY_ID_FAIL_USERS
+ Mockito.when(tenantMapper.queryById(3)).thenReturn(getTenant(3));
+ exception = Assertions.assertThrows(ServiceException.class, () ->
tenantService.deleteTenantById(getLoginUser(), 3));
+ prefix = Status.DELETE_TENANT_BY_ID_FAIL_USERS.getMsg().substring(1,
5);
+ Assertions.assertTrue(exception.getMessage().contains(prefix));
+
+ // success
+ Mockito.when(tenantMapper.queryById(4)).thenReturn(getTenant(4));
+ Map<String, Object> result =
tenantService.deleteTenantById(getLoginUser(), 4);
+ Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
}
@Test
public void testVerifyTenantCode() {
-
Mockito.when(tenantMapper.existTenant(tenantCode)).thenReturn(true);
- // tenantCode not exist
+ // tenantCode exist
+ Throwable exception = Assertions.assertThrows(ServiceException.class,
() -> tenantService.verifyTenantCode(getTenant().getTenantCode()));
+ String expect =
MessageFormat.format(Status.OS_TENANT_CODE_EXIST.getMsg(),
getTenant().getTenantCode());
+ Assertions.assertEquals(expect, exception.getMessage());
+
+ // success
Result result =
tenantService.verifyTenantCode("s00000000000l887888885554444sfjdskfjslakslkdf");
- logger.info(result.toString());
Assert.assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
- // tenantCode exist
- result = tenantService.verifyTenantCode(getTenant().getTenantCode());
- Assert.assertEquals(Status.OS_TENANT_CODE_EXIST.getCode(),
result.getCode().intValue());
}
/**
* get user
*/
private User getLoginUser() {
-
User loginUser = new User();
loginUser.setUserType(UserType.ADMIN_USER);
return loginUser;
diff --git
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/QueueMapper.java
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/QueueMapper.java
index 8a3942a738..0b523e8619 100644
---
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/QueueMapper.java
+++
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/QueueMapper.java
@@ -55,9 +55,10 @@ public interface QueueMapper extends BaseMapper<Queue> {
Boolean existQueue(@Param("queue") String queue, @Param("queueName")
String queueName);
/**
- * query queue by queue name
+ * query simple queue object by queue name and queue
+ * @param queue queue
* @param queueName queueName
- * @return queue list
+ * @return queue object
*/
- List<Queue> queryQueueName(@Param("queueName") String queueName);
+ Queue queryQueueName(@Param("queue") String queue, @Param("queueName")
String queueName);
}
diff --git
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/QueueMapper.xml
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/QueueMapper.xml
index 3705365543..6478773a85 100644
---
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/QueueMapper.xml
+++
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/QueueMapper.xml
@@ -64,9 +64,13 @@
select
<include refid="baseSql"/>
from t_ds_queue
- where 1 = 1
- <if test="queueName != null and queueName != ''">
- and queue_name =#{queueName}
- </if>
+ <where>
+ <if test="queue != null and queue != ''">
+ and queue =#{queue}
+ </if>
+ <if test="queueName != null and queueName != ''">
+ and queue_name =#{queueName}
+ </if>
+ </where>
</select>
</mapper>