This is an automated email from the ASF dual-hosted git repository.
xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 083fa1c [ISSUE #3042] fix bug plugin metadata valid error (#3044)
083fa1c is described below
commit 083fa1caa8d506e2799912142562ef36fb9a1917
Author: likeguo <[email protected]>
AuthorDate: Wed Mar 16 10:01:23 2022 +0800
[ISSUE #3042] fix bug plugin metadata valid error (#3044)
* fix plugin edit bug :
https://github.com/apache/incubator-shenyu/issues/3042
* fix plugin edit bug :
https://github.com/apache/incubator-shenyu/issues/3042
* fix plugin edit bug :
https://github.com/apache/incubator-shenyu/issues/3042
---
.../admin/controller/MetaDataController.java | 3 +-
.../shenyu/admin/controller/PluginController.java | 12 +--
.../apache/shenyu/admin/mapper/MetaDataMapper.java | 23 ++++-
.../apache/shenyu/admin/mapper/PluginMapper.java | 10 ++
.../apache/shenyu/admin/model/dto/MetaDataDTO.java | 5 +-
.../apache/shenyu/admin/model/dto/PluginDTO.java | 3 -
.../shenyu/admin/service/MetaDataService.java | 48 ++++++---
.../apache/shenyu/admin/service/PluginService.java | 27 +++++-
.../admin/service/impl/MetaDataServiceImpl.java | 98 +++++++++++--------
.../admin/service/impl/PluginServiceImpl.java | 107 +++++++++++++--------
.../java/org/apache/shenyu/admin/utils/Assert.java | 31 ++++--
.../main/resources/mappers/meta-data-sqlmap.xml | 16 +++
.../src/main/resources/mappers/plugin-sqlmap.xml | 12 +++
.../admin/controller/MetaDataControllerTest.java | 18 ++--
.../admin/controller/PluginControllerTest.java | 42 ++++----
.../shenyu/admin/service/MetaDataServiceTest.java | 11 ++-
.../shenyu/admin/service/PluginServiceTest.java | 69 ++++++-------
17 files changed, 341 insertions(+), 194 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MetaDataController.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MetaDataController.java
index dc1e542..0e07183 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MetaDataController.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/MetaDataController.java
@@ -111,8 +111,7 @@ public class MetaDataController {
*/
@PostMapping("/createOrUpdate")
public ShenyuAdminResult createOrUpdate(@Valid @RequestBody final
MetaDataDTO metaDataDTO) {
- metaDataService.createOrUpdate(metaDataDTO);
- return ShenyuAdminResult.success(ShenyuResultMessage.CREATE_SUCCESS);
+ return
ShenyuAdminResult.success(metaDataService.createOrUpdate(metaDataDTO));
}
/**
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java
index 2955bf5..5fbce86 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/controller/PluginController.java
@@ -115,11 +115,7 @@ public class PluginController {
*/
@PostMapping("")
public ShenyuAdminResult createPlugin(@Valid @RequestBody final PluginDTO
pluginDTO) {
- String result = pluginService.createOrUpdate(pluginDTO);
- if (StringUtils.isNoneBlank(result)) {
- return ShenyuAdminResult.error(result);
- }
- return ShenyuAdminResult.success(ShenyuResultMessage.CREATE_SUCCESS);
+ return
ShenyuAdminResult.success(pluginService.createOrUpdate(pluginDTO));
}
/**
@@ -135,11 +131,7 @@ public class PluginController {
provider =
PluginMapper.class) final String id,
@Valid @RequestBody final PluginDTO
pluginDTO) {
pluginDTO.setId(id);
- final String result = pluginService.createOrUpdate(pluginDTO);
- if (StringUtils.isNoneBlank(result)) {
- return ShenyuAdminResult.error(result);
- }
- return ShenyuAdminResult.success(ShenyuResultMessage.UPDATE_SUCCESS);
+ return createPlugin(pluginDTO);
}
/**
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java
index 68ad81f..b797400 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/MetaDataMapper.java
@@ -21,6 +21,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.shenyu.admin.model.entity.MetaDataDO;
import org.apache.shenyu.admin.model.query.MetaDataQuery;
+import org.apache.shenyu.admin.validation.ExistProvider;
import java.io.Serializable;
import java.util.List;
@@ -30,7 +31,16 @@ import java.util.Set;
* The interface Meta data mapper.
*/
@Mapper
-public interface MetaDataMapper {
+public interface MetaDataMapper extends ExistProvider {
+
+ /**
+ * existed.
+ *
+ * @param id id
+ * @return existed
+ */
+ @Override
+ Boolean existed(@Param("id") Serializable id);
/**
* Select by id meta data do.
@@ -150,5 +160,14 @@ public interface MetaDataMapper {
* @param path path
* @return existed
*/
- Boolean pathExisted(Serializable path);
+ Boolean pathExisted(@Param("path") Serializable path);
+
+ /**
+ * the path is existed.
+ *
+ * @param path path
+ * @param exclude exclude
+ * @return existed
+ */
+ Boolean pathExistedExclude(@Param("path") Serializable path,
@Param("exclude") List<String> exclude);
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/PluginMapper.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/PluginMapper.java
index aa5891c..a4ea6eb 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/PluginMapper.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/mapper/PluginMapper.java
@@ -176,4 +176,14 @@ public interface PluginMapper extends ExistProvider {
* @return existed
*/
Boolean nameExisted(@Param("name") Serializable name);
+
+
+ /**
+ * plugin existed.
+ *
+ * @param name name
+ * @param exclude exclude
+ * @return existed
+ */
+ Boolean nameExistedExclude(@Param("name") Serializable name,
@Param("exclude") List<String> exclude);
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/MetaDataDTO.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/MetaDataDTO.java
index ccfe01c..1c81005 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/MetaDataDTO.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/MetaDataDTO.java
@@ -17,9 +17,8 @@
package org.apache.shenyu.admin.model.dto;
-import org.apache.shenyu.admin.service.provider.MetaDataPathProvider;
+import org.apache.shenyu.admin.mapper.MetaDataMapper;
import org.apache.shenyu.admin.validation.annotation.Existed;
-import org.apache.shenyu.common.constant.AdminConstants;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@@ -30,6 +29,7 @@ public class MetaDataDTO implements Serializable {
private static final long serialVersionUID = 7476312364813536366L;
+ @Existed(provider = MetaDataMapper.class, nullOfIgnore = true, message =
"meta data is not existed")
private String id;
/**
@@ -49,7 +49,6 @@ public class MetaDataDTO implements Serializable {
* the path is not null.
*/
@NotBlank
- @Existed(provider = MetaDataPathProvider.class, reverse = true, message =
AdminConstants.DATA_PATH_IS_EXIST)
private String path;
/**
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/PluginDTO.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/PluginDTO.java
index 5820416..ef317c7 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/PluginDTO.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/model/dto/PluginDTO.java
@@ -18,9 +18,7 @@
package org.apache.shenyu.admin.model.dto;
import org.apache.shenyu.admin.mapper.PluginMapper;
-import org.apache.shenyu.admin.service.provider.PluginNameProvider;
import org.apache.shenyu.admin.validation.annotation.Existed;
-import org.apache.shenyu.common.constant.AdminConstants;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@@ -43,7 +41,6 @@ public class PluginDTO implements Serializable {
* plugin name.
*/
@NotNull
- @Existed(provider = PluginNameProvider.class, reverse = true, message =
AdminConstants.PLUGIN_NAME_IS_EXIST)
private String name;
/**
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/MetaDataService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/MetaDataService.java
index 84b1969..5f0d26d 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/MetaDataService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/MetaDataService.java
@@ -17,6 +17,7 @@
package org.apache.shenyu.admin.service;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shenyu.admin.model.dto.MetaDataDTO;
import org.apache.shenyu.admin.model.entity.MetaDataDO;
import org.apache.shenyu.admin.model.page.CommonPager;
@@ -32,23 +33,42 @@ import java.util.Map;
* this is application authority service.
*/
public interface MetaDataService {
-
+
/**
* save or update mate data.
* {@link
org.apache.shenyu.admin.service.register.AbstractShenyuClientRegisterServiceImpl}
+ *
* @param exist has been exist meta data {@link MetaDataDO}
* @param metaDataDTO meta data dto {@link MetaDataRegisterDTO}
*/
void saveOrUpdateMetaData(MetaDataDO exist, MetaDataRegisterDTO
metaDataDTO);
-
+
/**
* Create or update int.
*
* @param metaDataDTO the meta data dto
* @return the String
*/
- String createOrUpdate(MetaDataDTO metaDataDTO);
-
+ default String createOrUpdate(MetaDataDTO metaDataDTO) {
+ return StringUtils.isBlank(metaDataDTO.getId()) ? create(metaDataDTO)
: update(metaDataDTO);
+ }
+
+ /**
+ * Create.
+ *
+ * @param metaDataDTO the meta data dto
+ * @return the String
+ */
+ String create(MetaDataDTO metaDataDTO);
+
+ /**
+ * update.
+ *
+ * @param metaDataDTO the meta data dto
+ * @return the String
+ */
+ String update(MetaDataDTO metaDataDTO);
+
/**
* delete application authorities.
*
@@ -56,7 +76,7 @@ public interface MetaDataService {
* @return rows int
*/
int delete(List<String> ids);
-
+
/**
* Find by id meta data vo.
*
@@ -64,7 +84,7 @@ public interface MetaDataService {
* @return the meta data vo
*/
MetaDataVO findById(String id);
-
+
/**
* List by page common pager.
*
@@ -72,28 +92,28 @@ public interface MetaDataService {
* @return the common pager
*/
CommonPager<MetaDataVO> listByPage(MetaDataQuery metaDataQuery);
-
+
/**
* Find all list.
*
* @return the list
*/
List<MetaDataVO> findAll();
-
+
/**
* Find all group map.
*
* @return the map
*/
Map<String, List<MetaDataVO>> findAllGroup();
-
+
/**
* List all list.
*
* @return the list
*/
List<MetaData> listAll();
-
+
/**
* Enabled string.
*
@@ -102,12 +122,12 @@ public interface MetaDataService {
* @return the string
*/
String enabled(List<String> ids, Boolean enabled);
-
+
/**
* Sync data.
*/
void syncData();
-
+
/**
* find meta data by path.
*
@@ -115,7 +135,7 @@ public interface MetaDataService {
* @return {@link MetaDataDO}
*/
MetaDataDO findByPath(String path);
-
+
/**
* find meta data by service's name and method's name.
*
@@ -124,7 +144,7 @@ public interface MetaDataService {
* @return {@link MetaDataDO}
*/
MetaDataDO findByServiceNameAndMethodName(String serviceName, String
methodName);
-
+
/**
* insert MetaDataDO.
*
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
index 8d897ac..c8ded13 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/PluginService.java
@@ -17,6 +17,7 @@
package org.apache.shenyu.admin.service;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shenyu.admin.model.dto.PluginDTO;
import org.apache.shenyu.admin.model.entity.PluginDO;
import org.apache.shenyu.admin.model.page.CommonPager;
@@ -37,7 +38,27 @@ public interface PluginService {
* @param pluginDTO the plugin dto
* @return the string
*/
- String createOrUpdate(PluginDTO pluginDTO);
+ default String createOrUpdate(PluginDTO pluginDTO) {
+ return StringUtils.isBlank(pluginDTO.getId()) ? create(pluginDTO) :
update(pluginDTO);
+ }
+
+ /**
+ * create plugin.<br>
+ * insert plugin and insert plugin data.
+ *
+ * @param pluginDTO plugin info
+ * @return success is empty
+ */
+ String create(PluginDTO pluginDTO);
+
+ /**
+ * create plugin.<br>
+ * insert plugin and insert plugin data.
+ *
+ * @param pluginDTO plugin
+ * @return success is empty
+ */
+ String update(PluginDTO pluginDTO);
/**
* Delete string.
@@ -69,7 +90,7 @@ public interface PluginService {
* @return the list
*/
List<PluginData> listAll();
-
+
/**
* list all not in resource.
*
@@ -80,7 +101,7 @@ public interface PluginService {
/**
* Enabled string.
*
- * @param ids the ids
+ * @param ids the ids
* @param enabled the enable
* @return the string
*/
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
index 2fbe07a..b04ba32 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
@@ -30,6 +30,8 @@ import org.apache.shenyu.admin.model.query.MetaDataQuery;
import org.apache.shenyu.admin.model.vo.MetaDataVO;
import org.apache.shenyu.admin.service.MetaDataService;
import org.apache.shenyu.admin.transfer.MetaDataTransfer;
+import org.apache.shenyu.admin.utils.Assert;
+import org.apache.shenyu.admin.utils.ShenyuResultMessage;
import org.apache.shenyu.common.constant.AdminConstants;
import org.apache.shenyu.common.dto.MetaData;
import org.apache.shenyu.common.enums.ConfigGroupEnum;
@@ -57,14 +59,14 @@ import java.util.stream.Collectors;
public class MetaDataServiceImpl implements MetaDataService {
private final MetaDataMapper metaDataMapper;
-
+
private final ApplicationEventPublisher eventPublisher;
-
+
public MetaDataServiceImpl(final MetaDataMapper metaDataMapper, final
ApplicationEventPublisher eventPublisher) {
this.metaDataMapper = metaDataMapper;
this.eventPublisher = eventPublisher;
}
-
+
@Override
public void saveOrUpdateMetaData(final MetaDataDO exist, final
MetaDataRegisterDTO metaDataDTO) {
DataEventTypeEnum eventType;
@@ -85,37 +87,51 @@ public class MetaDataServiceImpl implements MetaDataService
{
eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.META_DATA, eventType,
Collections.singletonList(MetaDataTransfer.INSTANCE.mapToData(metaDataDO))));
}
-
+
@Override
+ @Transactional(rollbackFor = Exception.class)
public String createOrUpdate(final MetaDataDTO metaDataDTO) {
+ return MetaDataService.super.createOrUpdate(metaDataDTO);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String create(final MetaDataDTO metaDataDTO) {
+ Assert.isNull(metaDataMapper.pathExisted(metaDataDTO.getPath()),
AdminConstants.DATA_PATH_IS_EXIST);
MetaDataDO metaDataDO =
MetaDataTransfer.INSTANCE.mapToEntity(metaDataDTO);
- DataEventTypeEnum eventType;
- String pathDesc = Objects.isNull(metaDataDO.getPathDesc()) ? "" :
metaDataDO.getPathDesc();
- if (StringUtils.isEmpty(metaDataDTO.getId())) {
- Timestamp currentTime = new Timestamp(System.currentTimeMillis());
- metaDataDO.setId(UUIDUtils.getInstance().generateShortUuid());
- metaDataDO.setPathDesc(pathDesc);
- metaDataDO.setDateCreated(currentTime);
- metaDataDO.setDateUpdated(currentTime);
- metaDataMapper.insert(metaDataDO);
- eventType = DataEventTypeEnum.CREATE;
- } else {
- MetaDataDO m = metaDataMapper.selectById(metaDataDTO.getId());
- Optional.ofNullable(m).ifPresent(e ->
metaDataDTO.setEnabled(e.getEnabled()));
- metaDataDO.setPathDesc(pathDesc);
- metaDataMapper.update(metaDataDO);
- eventType = DataEventTypeEnum.UPDATE;
- }
- // publish AppAuthData's event
- eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.META_DATA, eventType,
+ metaDataDO.setId(UUIDUtils.getInstance().generateShortUuid());
+ metaDataDO.setPathDesc(Objects.isNull(metaDataDO.getPathDesc()) ? "" :
metaDataDO.getPathDesc());
+ Timestamp currentTime = new Timestamp(System.currentTimeMillis());
+ metaDataDO.setDateCreated(currentTime);
+ metaDataDO.setDateUpdated(currentTime);
+ metaDataMapper.insert(metaDataDO);
+
+ // publish AppAuthData's creste event
+ eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.META_DATA, DataEventTypeEnum.CREATE,
Collections.singletonList(MetaDataTransfer.INSTANCE.mapToData(metaDataDTO))));
- return StringUtils.EMPTY;
+ return ShenyuResultMessage.CREATE_SUCCESS;
}
-
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String update(final MetaDataDTO metaDataDTO) {
+ Assert.isNull(metaDataMapper.pathExistedExclude(metaDataDTO.getPath(),
Collections.singletonList(metaDataDTO.getId())),
AdminConstants.DATA_PATH_IS_EXIST);
+ MetaDataDO metaDataDO =
MetaDataTransfer.INSTANCE.mapToEntity(metaDataDTO);
+ Optional.ofNullable(metaDataMapper.selectById(metaDataDTO.getId()))
+ .ifPresent(e -> metaDataDTO.setEnabled(e.getEnabled()));
+ metaDataDO.setPathDesc(Objects.isNull(metaDataDO.getPathDesc()) ? "" :
metaDataDO.getPathDesc());
+ metaDataMapper.update(metaDataDO);
+
+ // publish AppAuthData's update event
+ eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.META_DATA, DataEventTypeEnum.UPDATE,
+
Collections.singletonList(MetaDataTransfer.INSTANCE.mapToData(metaDataDTO))));
+ return ShenyuResultMessage.UPDATE_SUCCESS;
+ }
+
@Override
@Transactional(rollbackFor = Exception.class)
public int delete(final List<String> ids) {
-
+
int count = 0;
Set<String> idSet = Optional.ofNullable(ids).orElseGet(ArrayList::new)
.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet());
@@ -123,17 +139,17 @@ public class MetaDataServiceImpl implements
MetaDataService {
List<MetaDataDO> metaDataDoList =
metaDataMapper.selectByIdSet(idSet);
List<MetaData> metaDataList =
Optional.ofNullable(metaDataDoList).orElseGet(ArrayList::new)
.stream().map(MetaDataTransfer.INSTANCE::mapToData).collect(Collectors.toList());
-
+
count = metaDataMapper.deleteByIdSet(idSet);
eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.META_DATA, DataEventTypeEnum.DELETE,
metaDataList));
}
-
+
return count;
}
-
+
@Override
public String enabled(final List<String> ids, final Boolean enabled) {
-
+
Set<String> idSet = Optional.ofNullable(ids).orElseGet(ArrayList::new)
.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toSet());
if (CollectionUtils.isEmpty(idSet)) {
@@ -147,13 +163,13 @@ public class MetaDataServiceImpl implements
MetaDataService {
.map(MetaDataTransfer.INSTANCE::mapToData)
.collect(Collectors.toList());
metaDataMapper.updateEnableBatch(idSet, enabled);
-
+
eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.META_DATA, DataEventTypeEnum.UPDATE,
metaDataList));
-
+
return StringUtils.EMPTY;
}
-
+
@Override
public void syncData() {
List<MetaDataDO> all = metaDataMapper.findAll();
@@ -161,12 +177,12 @@ public class MetaDataServiceImpl implements
MetaDataService {
eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.META_DATA, DataEventTypeEnum.REFRESH,
MetaDataTransfer.INSTANCE.mapToDataAll(all)));
}
}
-
+
@Override
public MetaDataVO findById(final String id) {
return
Optional.ofNullable(MetaDataTransfer.INSTANCE.mapToVO(metaDataMapper.selectById(id))).orElseGet(MetaDataVO::new);
}
-
+
@Override
@Pageable
public CommonPager<MetaDataVO> listByPage(final MetaDataQuery
metaDataQuery) {
@@ -175,19 +191,19 @@ public class MetaDataServiceImpl implements
MetaDataService {
.map(MetaDataTransfer.INSTANCE::mapToVO)
.collect(Collectors.toList()));
}
-
+
@Override
public List<MetaDataVO> findAll() {
return
MetaDataTransfer.INSTANCE.mapToVOList(metaDataMapper.selectAll());
}
-
+
@Override
public Map<String, List<MetaDataVO>> findAllGroup() {
return
MetaDataTransfer.INSTANCE.mapToVOList(metaDataMapper.selectAll())
.stream()
.collect(Collectors.groupingBy(MetaDataVO::getAppName));
}
-
+
@Override
public List<MetaData> listAll() {
return metaDataMapper.selectAll()
@@ -196,17 +212,17 @@ public class MetaDataServiceImpl implements
MetaDataService {
.map(MetaDataTransfer.INSTANCE::mapToData)
.collect(Collectors.toList());
}
-
+
@Override
public MetaDataDO findByPath(final String path) {
return metaDataMapper.findByPath(path);
}
-
+
@Override
public MetaDataDO findByServiceNameAndMethodName(final String serviceName,
final String methodName) {
return metaDataMapper.findByServiceNameAndMethod(serviceName,
methodName);
}
-
+
@Override
public int insert(final MetaDataDO metaDataDO) {
return metaDataMapper.insert(metaDataDO);
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
index 8f56c1c..1964b30 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PluginServiceImpl.java
@@ -41,6 +41,8 @@ import org.apache.shenyu.admin.model.vo.ResourceVO;
import org.apache.shenyu.admin.service.PluginService;
import org.apache.shenyu.admin.service.ResourceService;
import org.apache.shenyu.admin.transfer.PluginTransfer;
+import org.apache.shenyu.admin.utils.Assert;
+import org.apache.shenyu.admin.utils.ShenyuResultMessage;
import org.apache.shenyu.common.constant.AdminConstants;
import org.apache.shenyu.common.dto.PluginData;
import org.apache.shenyu.common.enums.AdminPluginOperateEnum;
@@ -65,23 +67,23 @@ import java.util.stream.Collectors;
*/
@Service
public class PluginServiceImpl implements PluginService {
-
+
private final PluginMapper pluginMapper;
-
+
private final PluginHandleMapper pluginHandleMapper;
-
+
private final SelectorMapper selectorMapper;
-
+
private final SelectorConditionMapper selectorConditionMapper;
-
+
private final RuleMapper ruleMapper;
-
+
private final RuleConditionMapper ruleConditionMapper;
-
+
private final ApplicationEventPublisher eventPublisher;
-
+
private final ResourceService resourceService;
-
+
public PluginServiceImpl(final PluginMapper pluginMapper,
final PluginHandleMapper pluginHandleMapper,
final SelectorMapper selectorMapper,
@@ -99,7 +101,7 @@ public class PluginServiceImpl implements PluginService {
this.eventPublisher = eventPublisher;
this.resourceService = resourceService;
}
-
+
/**
* create or update plugin.
*
@@ -109,22 +111,49 @@ public class PluginServiceImpl implements PluginService {
@Override
@Transactional(rollbackFor = Exception.class)
public String createOrUpdate(final PluginDTO pluginDTO) {
+ return PluginService.super.createOrUpdate(pluginDTO);
+ }
+
+ /**
+ * create plugin.<br>
+ * insert plugin and insert plugin data.
+ *
+ * @param pluginDTO plugin info
+ * @return success is empty
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String create(final PluginDTO pluginDTO) {
+ Assert.isNull(pluginMapper.nameExisted(pluginDTO.getName()),
AdminConstants.PLUGIN_NAME_IS_EXIST);
PluginDO pluginDO = PluginDO.buildPluginDO(pluginDTO);
- DataEventTypeEnum eventType = DataEventTypeEnum.CREATE;
- if (StringUtils.isBlank(pluginDTO.getId())) {
- insertPluginDataToResource(pluginDTO);
- pluginMapper.insertSelective(pluginDO);
- } else {
- eventType = DataEventTypeEnum.UPDATE;
- pluginMapper.updateSelective(pluginDO);
- }
-
- // publish change event.
- eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.PLUGIN, eventType,
+ insertPluginDataToResource(pluginDTO);
+ pluginMapper.insertSelective(pluginDO);
+
+ // publish create event.
+ eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.CREATE,
Collections.singletonList(PluginTransfer.INSTANCE.mapToData(pluginDO))));
- return StringUtils.EMPTY;
+ return ShenyuResultMessage.CREATE_SUCCESS;
}
-
+
+ /**
+ * update plugin.<br>
+ *
+ * @param pluginDTO plugin
+ * @return success is empty
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String update(final PluginDTO pluginDTO) {
+ Assert.isNull(pluginMapper.nameExistedExclude(pluginDTO.getName(),
Collections.singletonList(pluginDTO.getId())),
AdminConstants.PLUGIN_NAME_IS_EXIST);
+ PluginDO pluginDO = PluginDO.buildPluginDO(pluginDTO);
+ pluginMapper.updateSelective(pluginDO);
+
+ // publish update event.
+ eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.UPDATE,
+
Collections.singletonList(PluginTransfer.INSTANCE.mapToData(pluginDO))));
+ return ShenyuResultMessage.UPDATE_SUCCESS;
+ }
+
/**
* delete plugins.
*
@@ -142,12 +171,12 @@ public class PluginServiceImpl implements PluginService {
if (CollectionUtils.isEmpty(pluginIds)) {
return AdminConstants.SYS_PLUGIN_ID_NOT_EXIST;
}
-
+
// 2. delete plugins.
this.pluginMapper.deleteByIds(pluginIds);
// 3. delete plugin handle.
this.pluginHandleMapper.deleteByPluginIds(pluginIds);
-
+
// 4. all selectors.
final List<String> selectorIds =
Optional.ofNullable(this.selectorMapper.findByPluginIds(pluginIds))
.orElse(Collections.emptyList())
@@ -169,20 +198,20 @@ public class PluginServiceImpl implements PluginService {
this.ruleConditionMapper.deleteByRuleIds(ruleIds);
}
}
-
+
// 5. delete resource & permission.
final List<ResourceVO> resources =
this.resourceService.listByTitles(plugins.stream()
.map(PluginDO::getName).collect(Collectors.toList()));
if (CollectionUtils.isNotEmpty(resources)) {
this.resourceService.delete(resources.stream().map(ResourceVO::getId).collect(Collectors.toList()));
}
-
+
// 6. publish change event.
eventPublisher.publishEvent(new
DataChangedEvent(ConfigGroupEnum.PLUGIN, DataEventTypeEnum.DELETE,
plugins.stream().map(PluginTransfer.INSTANCE::mapToData).collect(Collectors.toList())));
return StringUtils.EMPTY;
}
-
+
/**
* plugin enabled.
*
@@ -192,7 +221,7 @@ public class PluginServiceImpl implements PluginService {
*/
@Override
public String enabled(final List<String> ids, final Boolean enabled) {
-
+
if (CollectionUtils.isEmpty(ids)) {
return AdminConstants.SYS_PLUGIN_ID_NOT_EXIST;
}
@@ -210,7 +239,7 @@ public class PluginServiceImpl implements PluginService {
}
return StringUtils.EMPTY;
}
-
+
/**
* find plugin by id.
*
@@ -221,7 +250,7 @@ public class PluginServiceImpl implements PluginService {
public PluginVO findById(final String id) {
return PluginVO.buildPluginVO(pluginMapper.selectById(id));
}
-
+
/**
* find page of plugin by query.
*
@@ -234,7 +263,7 @@ public class PluginServiceImpl implements PluginService {
return PageResultUtils.result(pluginQuery.getPageParameter(), () ->
pluginMapper.selectByQuery(pluginQuery)
.stream().map(PluginVO::buildPluginVO).collect(Collectors.toList()));
}
-
+
/**
* query all plugin.
*
@@ -246,21 +275,21 @@ public class PluginServiceImpl implements PluginService {
.map(PluginTransfer.INSTANCE::mapToData)
.collect(Collectors.toList());
}
-
+
@Override
public List<PluginData> listAllNotInResource() {
return pluginMapper.listAllNotInResource().stream()
.map(PluginTransfer.INSTANCE::mapToData)
.collect(Collectors.toList());
}
-
+
@Override
public String selectIdByName(final String name) {
PluginDO pluginDO = pluginMapper.selectByName(name);
Objects.requireNonNull(pluginDO);
return pluginDO.getId();
}
-
+
/**
* Find by name plugin do.
*
@@ -271,7 +300,7 @@ public class PluginServiceImpl implements PluginService {
public PluginDO findByName(final String name) {
return pluginMapper.selectByName(name);
}
-
+
/**
* add plugin and add plugin resource.
*
@@ -299,7 +328,7 @@ public class PluginServiceImpl implements PluginService {
insertPluginButtonResource(resourceDO.getId(), pluginDTO.getName(),
ConfigGroupEnum.RULE, AdminPluginOperateEnum.QUERY);
insertPluginButtonResource(resourceDO.getId(), pluginDTO.getName(),
ConfigGroupEnum.PLUGIN, AdminPluginOperateEnum.SYNCHRONIZE);
}
-
+
/**
* insert Resource Data.
*
@@ -308,7 +337,7 @@ public class PluginServiceImpl implements PluginService {
private void insertPluginMenuResource(final ResourceDO resourceDO) {
resourceService.createResource(resourceDO);
}
-
+
/**
* insert Plugin Selector Button Resource.
*
@@ -340,7 +369,7 @@ public class PluginServiceImpl implements PluginService {
default:
break;
}
-
+
insertPluginMenuResource(resourceDO);
}
}
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/Assert.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/Assert.java
index b0af6e2..e5fdbce 100644
--- a/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/Assert.java
+++ b/shenyu-admin/src/main/java/org/apache/shenyu/admin/utils/Assert.java
@@ -39,9 +39,17 @@ public final class Assert {
* @param message error message
*/
public static void notNull(final Object obj, final String message) {
- if (Objects.isNull(obj)) {
- throw new ValidFailException(message);
- }
+ isTrue(Objects.nonNull(obj), message);
+ }
+
+ /**
+ * assert obj is null.
+ *
+ * @param obj obj
+ * @param message error message
+ */
+ public static void isNull(final Object obj, final String message) {
+ isTrue(Objects.isNull(obj), message);
}
/**
@@ -51,9 +59,7 @@ public final class Assert {
* @param message error message
*/
public static void notBlack(final String str, final String message) {
- if (StringUtils.isBlank(str)) {
- throw new ValidFailException(message);
- }
+ isTrue(StringUtils.isNoneBlank(str), message);
}
/**
@@ -63,7 +69,18 @@ public final class Assert {
* @param message error message
*/
public static void notEmpty(final Collection<?> collection, final String
message) {
- if (CollectionUtils.isEmpty(collection)) {
+ isTrue(!CollectionUtils.isEmpty(collection), message);
+ }
+
+
+ /**
+ * assert test is true.
+ *
+ * @param test string
+ * @param message error message
+ */
+ public static void isTrue(final Boolean test, final String message) {
+ if (!Boolean.TRUE.equals(test)) {
throw new ValidFailException(message);
}
}
diff --git a/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml
index 3398b5a..e43a7da 100644
--- a/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/meta-data-sqlmap.xml
@@ -107,6 +107,22 @@
select true from meta_data where path = #{path} limit 1
</select>
+ <select id="pathExistedExclude" resultType="java.lang.Boolean">
+ select true
+ from meta_data
+ where path = #{path}
+ and id not in
+ <foreach collection="exclude" item="id" index="index"
+ open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ limit 1
+ </select>
+
+ <select id="existed" resultType="java.lang.Boolean">
+ select true from meta_data where id = #{id} limit 1
+ </select>
+
<insert id="insert"
parameterType="org.apache.shenyu.admin.model.entity.MetaDataDO">
insert into meta_data (id, date_created, date_updated, app_name,
path,path_desc,rpc_type,
service_name,method_name,parameter_types,rpc_ext,enabled )
values (#{id,jdbcType=VARCHAR}, #{dateCreated,jdbcType=TIMESTAMP},
#{dateUpdated,jdbcType=TIMESTAMP},
diff --git a/shenyu-admin/src/main/resources/mappers/plugin-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/plugin-sqlmap.xml
index a51388b..7fea9a4 100644
--- a/shenyu-admin/src/main/resources/mappers/plugin-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/plugin-sqlmap.xml
@@ -121,6 +121,18 @@
select true from plugin where name = #{name} limit 1
</select>
+ <select id="nameExistedExclude" resultType="java.lang.Boolean">
+ select true
+ from plugin
+ where name = #{name}
+ and id not in
+ <foreach collection="exclude" item="id" index="index"
+ open="(" separator="," close=")">
+ #{id}
+ </foreach>
+ limit 1
+ </select>
+
<insert id="insert"
parameterType="org.apache.shenyu.admin.model.entity.PluginDO">
insert into plugin (id, date_created, date_updated,
name,config,role, sort, enabled)
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/MetaDataControllerTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/MetaDataControllerTest.java
index d0d443b..e6df159 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/MetaDataControllerTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/MetaDataControllerTest.java
@@ -19,6 +19,7 @@ package org.apache.shenyu.admin.controller;
import org.apache.commons.lang3.StringUtils;
import org.apache.shenyu.admin.exception.ExceptionHandlers;
+import org.apache.shenyu.admin.mapper.MetaDataMapper;
import org.apache.shenyu.admin.model.dto.BatchCommonDTO;
import org.apache.shenyu.admin.model.dto.MetaDataDTO;
import org.apache.shenyu.admin.model.page.CommonPager;
@@ -26,7 +27,6 @@ import org.apache.shenyu.admin.model.page.PageParameter;
import org.apache.shenyu.admin.model.query.MetaDataQuery;
import org.apache.shenyu.admin.model.vo.MetaDataVO;
import org.apache.shenyu.admin.service.MetaDataService;
-import org.apache.shenyu.admin.service.provider.MetaDataPathProvider;
import org.apache.shenyu.admin.spring.SpringBeanUtils;
import org.apache.shenyu.admin.utils.ShenyuResultMessage;
import org.apache.shenyu.common.constant.AdminConstants;
@@ -73,7 +73,7 @@ public final class MetaDataControllerTest {
private MetaDataService metaDataService;
@Mock
- private MetaDataPathProvider pathProvider;
+ private MetaDataMapper metaDataMapper;
private final MetaDataVO metaDataVO = new MetaDataVO("appName", "appPath",
"desc", "rpcType", "serviceName", "methodName", "types", "rpcExt",
"1", DateUtils.localDateTimeToString(LocalDateTime.now()),
DateUtils.localDateTimeToString(LocalDateTime.now()),
@@ -156,14 +156,14 @@ public final class MetaDataControllerTest {
metaDataDTO.setRuleName("ruleName");
metaDataDTO.setEnabled(false);
SpringBeanUtils.getInstance().setApplicationContext(mock(ConfigurableApplicationContext.class));
-
when(SpringBeanUtils.getInstance().getBean(MetaDataPathProvider.class)).thenReturn(pathProvider);
- when(pathProvider.existed(metaDataDTO.getPath())).thenReturn(null);
-
given(this.metaDataService.createOrUpdate(metaDataDTO)).willReturn(StringUtils.EMPTY);
+
when(SpringBeanUtils.getInstance().getBean(MetaDataMapper.class)).thenReturn(metaDataMapper);
+ when(metaDataMapper.existed(metaDataDTO.getId())).thenReturn(true);
+
given(this.metaDataService.createOrUpdate(metaDataDTO)).willReturn(ShenyuResultMessage.UPDATE_SUCCESS);
this.mockMvc.perform(MockMvcRequestBuilders.post("/meta-data/createOrUpdate")
.contentType(MediaType.APPLICATION_JSON)
.content(GsonUtils.getInstance().toJson(metaDataDTO)))
.andExpect(status().isOk())
- .andExpect(jsonPath("$.message",
is(ShenyuResultMessage.CREATE_SUCCESS)))
+ .andExpect(jsonPath("$.message",
is(ShenyuResultMessage.UPDATE_SUCCESS)))
.andReturn();
}
@@ -180,14 +180,14 @@ public final class MetaDataControllerTest {
metaDataDTO.setRuleName("ruleName");
metaDataDTO.setEnabled(false);
SpringBeanUtils.getInstance().setApplicationContext(mock(ConfigurableApplicationContext.class));
-
when(SpringBeanUtils.getInstance().getBean(MetaDataPathProvider.class)).thenReturn(pathProvider);
- when(pathProvider.existed(metaDataDTO.getPath())).thenReturn(true);
+
when(SpringBeanUtils.getInstance().getBean(MetaDataMapper.class)).thenReturn(metaDataMapper);
+ when(metaDataMapper.existed(metaDataDTO.getId())).thenReturn(null);
this.mockMvc.perform(MockMvcRequestBuilders.post("/meta-data/createOrUpdate")
.contentType(MediaType.APPLICATION_JSON)
.content(GsonUtils.getInstance().toJson(metaDataDTO)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.code", is(500)))
- .andExpect(jsonPath("$.message", is("Request error! invalid
argument [path: The path already exists and can't be added repeatedly!]")))
+ .andExpect(jsonPath("$.message", is("Request error! invalid
argument [id: meta data is not existed]")))
.andReturn();
}
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/PluginControllerTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/PluginControllerTest.java
index 4dc35e6..274c86a 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/PluginControllerTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/controller/PluginControllerTest.java
@@ -28,7 +28,6 @@ import org.apache.shenyu.admin.model.query.PluginQuery;
import org.apache.shenyu.admin.model.vo.PluginVO;
import org.apache.shenyu.admin.service.PluginService;
import org.apache.shenyu.admin.service.SyncDataService;
-import org.apache.shenyu.admin.service.provider.PluginNameProvider;
import org.apache.shenyu.admin.spring.SpringBeanUtils;
import org.apache.shenyu.admin.utils.ShenyuResultMessage;
import org.apache.shenyu.common.constant.AdminConstants;
@@ -77,9 +76,6 @@ public final class PluginControllerTest {
private SyncDataService syncDataService;
@Mock
- private PluginNameProvider nameProvider;
-
- @Mock
private PluginMapper pluginMapper;
private PluginVO pluginVO;
@@ -138,31 +134,30 @@ public final class PluginControllerTest {
@Test
public void testCreatePlugin() throws Exception {
PluginDTO pluginDTO = new PluginDTO();
- pluginDTO.setId("123");
pluginDTO.setName("test");
pluginDTO.setEnabled(true);
pluginDTO.setRole("1");
pluginDTO.setSort(100);
-
when(SpringBeanUtils.getInstance().getBean(PluginNameProvider.class)).thenReturn(nameProvider);
when(SpringBeanUtils.getInstance().getBean(PluginMapper.class)).thenReturn(pluginMapper);
-
- when(nameProvider.existed(pluginDTO.getName())).thenReturn(null);
- when(pluginMapper.existed(pluginDTO.getId())).thenReturn(true);
-
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(StringUtils.EMPTY);
+
+
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(ShenyuResultMessage.CREATE_SUCCESS);
this.mockMvc.perform(MockMvcRequestBuilders.post("/plugin/")
.contentType(MediaType.APPLICATION_JSON)
.content(GsonUtils.getInstance().toJson(pluginDTO)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.message",
is(ShenyuResultMessage.CREATE_SUCCESS)))
.andReturn();
- when(nameProvider.existed(pluginDTO.getName())).thenReturn(true);
+ // update success
+ pluginDTO.setId("123");
+ when(pluginMapper.existed(pluginDTO.getId())).thenReturn(true);
+
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(ShenyuResultMessage.UPDATE_SUCCESS);
this.mockMvc.perform(MockMvcRequestBuilders.post("/plugin/")
.contentType(MediaType.APPLICATION_JSON)
.content(GsonUtils.getInstance().toJson(pluginDTO)))
.andExpect(status().isOk())
- .andExpect(jsonPath("$.message", is("Request error! invalid
argument [name: The plugin name already exists and can't be added
repeatedly!]")))
+ .andExpect(jsonPath("$.message",
is(ShenyuResultMessage.UPDATE_SUCCESS)))
.andReturn();
- when(nameProvider.existed(pluginDTO.getName())).thenReturn(false);
+ // update fail
when(pluginMapper.existed(pluginDTO.getId())).thenReturn(false);
this.mockMvc.perform(MockMvcRequestBuilders.post("/plugin/")
.contentType(MediaType.APPLICATION_JSON)
@@ -181,32 +176,29 @@ public final class PluginControllerTest {
pluginDTO.setEnabled(true);
pluginDTO.setRole("1");
pluginDTO.setSort(100);
-
when(SpringBeanUtils.getInstance().getBean(PluginNameProvider.class)).thenReturn(nameProvider);
when(SpringBeanUtils.getInstance().getBean(PluginMapper.class)).thenReturn(pluginMapper);
- when(nameProvider.existed(pluginDTO.getName())).thenReturn(false);
when(pluginMapper.existed(pluginDTO.getId())).thenReturn(true);
-
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(StringUtils.EMPTY);
- this.mockMvc.perform(MockMvcRequestBuilders.put("/plugin/{id}", "123")
+
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(ShenyuResultMessage.UPDATE_SUCCESS);
+ this.mockMvc.perform(MockMvcRequestBuilders.put("/plugin/{id}",
pluginDTO.getId())
.contentType(MediaType.APPLICATION_JSON)
.content(GsonUtils.getInstance().toJson(pluginDTO)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.message",
is(ShenyuResultMessage.UPDATE_SUCCESS)))
.andReturn();
-
-
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(AdminConstants.PLUGIN_NAME_IS_EXIST);
- this.mockMvc.perform(MockMvcRequestBuilders.put("/plugin/{id}", "123")
+ when(pluginMapper.existed(pluginDTO.getId())).thenReturn(null);
+ this.mockMvc.perform(MockMvcRequestBuilders.put("/plugin/{id}",
pluginDTO.getId())
.contentType(MediaType.APPLICATION_JSON)
.content(GsonUtils.getInstance().toJson(pluginDTO)))
.andExpect(status().isOk())
- .andExpect(jsonPath("$.message",
is(AdminConstants.PLUGIN_NAME_IS_EXIST)))
+ .andExpect(jsonPath("$.message", is("Request error! invalid
argument [id: the plugin is not exited]")))
.andReturn();
-
-
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(AdminConstants.PLUGIN_NAME_NOT_EXIST);
- this.mockMvc.perform(MockMvcRequestBuilders.put("/plugin/{id}", "123")
+ when(pluginMapper.existed(pluginDTO.getId())).thenReturn(true);
+
given(this.pluginService.createOrUpdate(pluginDTO)).willReturn(ShenyuResultMessage.CREATE_SUCCESS);
+ this.mockMvc.perform(MockMvcRequestBuilders.put("/plugin/{id}",
pluginDTO.getId())
.contentType(MediaType.APPLICATION_JSON)
.content(GsonUtils.getInstance().toJson(pluginDTO)))
.andExpect(status().isOk())
- .andExpect(jsonPath("$.message",
is(AdminConstants.PLUGIN_NAME_NOT_EXIST)))
+ .andExpect(jsonPath("$.message",
is(ShenyuResultMessage.CREATE_SUCCESS)))
.andReturn();
}
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
index b451098..0346596 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
@@ -27,6 +27,7 @@ import org.apache.shenyu.admin.model.page.PageParameter;
import org.apache.shenyu.admin.model.query.MetaDataQuery;
import org.apache.shenyu.admin.model.vo.MetaDataVO;
import org.apache.shenyu.admin.service.impl.MetaDataServiceImpl;
+import org.apache.shenyu.admin.utils.ShenyuResultMessage;
import org.apache.shenyu.common.constant.AdminConstants;
import org.apache.shenyu.common.dto.MetaData;
import org.apache.shenyu.register.common.dto.MetaDataRegisterDTO;
@@ -45,6 +46,7 @@ import org.springframework.context.ApplicationEventPublisher;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -243,8 +245,9 @@ public final class MetaDataServiceTest {
private void testCreateOrUpdateForInsert() {
when(metaDataDTO.getId()).thenReturn(null);
when(metaDataMapper.insert(any())).thenReturn(1);
+ when(metaDataMapper.pathExisted(any())).thenReturn(null);
String msg = metaDataService.createOrUpdate(metaDataDTO);
- assertEquals(StringUtils.EMPTY, msg);
+ assertEquals(ShenyuResultMessage.CREATE_SUCCESS, msg);
}
/**
@@ -254,10 +257,12 @@ public final class MetaDataServiceTest {
private void testCreateOrUpdateForUpdate() {
MetaDataDO metaDataDO = MetaDataDO.builder().build();
when(metaDataDTO.getId()).thenReturn("id");
-
when(metaDataMapper.selectById("id")).thenReturn(null).thenReturn(metaDataDO);
+ when(metaDataDTO.getPath()).thenReturn("path");
+ when(metaDataMapper.pathExistedExclude("path",
Collections.singletonList("id"))).thenReturn(null);
+ when(metaDataMapper.selectById("id")).thenReturn(metaDataDO);
when(metaDataMapper.update(any())).thenReturn(1);
String msg = metaDataService.createOrUpdate(metaDataDTO);
- assertEquals(StringUtils.EMPTY, msg);
+ assertEquals(ShenyuResultMessage.UPDATE_SUCCESS, msg);
}
private void assertEquals(final String expected, final String actual) {
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PluginServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PluginServiceTest.java
index 95020a5..2b527e0 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PluginServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PluginServiceTest.java
@@ -33,6 +33,7 @@ import org.apache.shenyu.admin.model.page.PageParameter;
import org.apache.shenyu.admin.model.query.PluginQuery;
import org.apache.shenyu.admin.model.vo.PluginVO;
import org.apache.shenyu.admin.service.impl.PluginServiceImpl;
+import org.apache.shenyu.admin.utils.ShenyuResultMessage;
import org.apache.shenyu.common.constant.AdminConstants;
import org.apache.shenyu.common.dto.PluginData;
import org.assertj.core.util.Lists;
@@ -67,71 +68,71 @@ import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
public final class PluginServiceTest {
-
+
@InjectMocks
private PluginServiceImpl pluginService;
-
+
@Mock
private PluginMapper pluginMapper;
-
+
@Mock
private PluginHandleMapper pluginHandleMapper;
-
+
@Mock
private SelectorMapper selectorMapper;
-
+
@Mock
private RuleMapper ruleMapper;
-
+
@Mock
private RuleConditionMapper ruleConditionMapper;
-
+
@Mock
private SelectorConditionMapper selectorConditionMapper;
-
+
@Mock
private ApplicationEventPublisher eventPublisher;
-
+
@Mock
private ResourceService resourceService;
-
+
@BeforeEach
public void setUp() {
pluginService = new PluginServiceImpl(pluginMapper,
pluginHandleMapper, selectorMapper, selectorConditionMapper,
ruleMapper, ruleConditionMapper, eventPublisher,
resourceService);
}
-
+
@Test
public void testCreateOrUpdate() {
publishEvent();
testCreate();
testUpdate();
}
-
+
@Test
public void testDelete() {
List<PluginDO> plugins =
Collections.singletonList(buildPluginDO("123"));
when(pluginMapper.selectByIds(Collections.singletonList("123"))).thenReturn(plugins);
when(pluginMapper.deleteByIds(Collections.singletonList("123"))).thenReturn(1);
-
+
final List<SelectorDO> selectorDOList = new ArrayList<>();
selectorDOList.add(SelectorDO.builder().id("101").build());
when(selectorMapper.findByPluginIds(Collections.singletonList("101"))).thenReturn(selectorDOList);
assertEquals(StringUtils.EMPTY,
pluginService.delete(Collections.singletonList("123")));
}
-
+
@Test
public void testDeleteShouldSysPluginIdNotExist() {
when(pluginMapper.selectById(any())).thenReturn(null);
-
+
PluginDO pluginDO = buildPluginDO("123");
final List<String> ids = Collections.singletonList(pluginDO.getId());
assertEquals(AdminConstants.SYS_PLUGIN_ID_NOT_EXIST,
pluginService.delete(ids));
}
-
+
@Test
public void testEnable() {
-
+
List<String> idList = Lists.list("123", "1234");
publishEvent();
BatchCommonDTO batchCommonDTO = new BatchCommonDTO();
@@ -140,20 +141,20 @@ public final class PluginServiceTest {
given(this.pluginMapper.selectByIds(idList)).willReturn(Lists.list(buildPluginDO(),
buildPluginDO()));
assertThat(this.pluginService.enabled(batchCommonDTO.getIds(),
batchCommonDTO.getEnabled()), equalTo(StringUtils.EMPTY));
}
-
+
@Test
public void testEnableShouldSysPluginIdNotExist() {
when(pluginMapper.selectById(any())).thenReturn(null);
-
+
BatchCommonDTO batchCommonDTO = new BatchCommonDTO();
batchCommonDTO.setEnabled(false);
batchCommonDTO.setIds(Collections.singletonList("123"));
-
+
given(this.pluginMapper.updateEnable(any())).willReturn(1);
-
+
assertThat(this.pluginService.enabled(batchCommonDTO.getIds(),
batchCommonDTO.getEnabled()), equalTo(AdminConstants.SYS_PLUGIN_ID_NOT_EXIST));
}
-
+
@Test
public void testFindById() {
PluginDO pluginDO = buildPluginDO();
@@ -162,7 +163,7 @@ public final class PluginServiceTest {
assertNotNull(pluginVO);
assertEquals(pluginDO.getId(), pluginVO.getId());
}
-
+
@Test
public void testListByPage() {
PageParameter pageParameter = new PageParameter();
@@ -179,7 +180,7 @@ public final class PluginServiceTest {
final CommonPager<PluginVO> pluginDOCommonPager =
this.pluginService.listByPage(pluginQuery);
assertEquals(pluginDOCommonPager.getDataList().size(),
pluginDOList.size());
}
-
+
@Test
public void testListAll() {
PluginDO pluginDO = buildPluginDO("123");
@@ -189,33 +190,35 @@ public final class PluginServiceTest {
assertNotNull(dataList);
assertEquals(pluginDOList.size(), dataList.size());
}
-
+
private void publishEvent() {
PluginDO pluginDO = buildPluginDO();
given(this.pluginMapper.selectById("123")).willReturn(pluginDO);
}
-
+
private void testCreate() {
PluginDTO pluginDTO = buildPluginDTO("");
+ when(pluginMapper.nameExisted(pluginDTO.getName())).thenReturn(null);
when(pluginMapper.insert(any())).thenReturn(1);
- assertEquals(StringUtils.EMPTY,
this.pluginService.createOrUpdate(pluginDTO));
+ assertEquals(ShenyuResultMessage.CREATE_SUCCESS,
this.pluginService.createOrUpdate(pluginDTO));
}
-
+
private void testUpdate() {
PluginDO pluginDO = buildPluginDO();
when(pluginMapper.selectByName(any())).thenReturn(pluginDO);
-
+
PluginDTO pluginDTO = new PluginDTO();
pluginDTO.setId("123");
pluginDTO.setName("test");
+ when(pluginMapper.nameExistedExclude(pluginDTO.getName(),
Collections.singletonList(pluginDO.getId()))).thenReturn(null);
when(pluginMapper.update(any())).thenReturn(1);
- assertEquals(StringUtils.EMPTY,
this.pluginService.createOrUpdate(pluginDTO));
+ assertEquals(ShenyuResultMessage.UPDATE_SUCCESS,
this.pluginService.createOrUpdate(pluginDTO));
}
private PluginDTO buildPluginDTO() {
return buildPluginDTO("123");
}
-
+
private PluginDTO buildPluginDTO(final String id) {
PluginDTO pluginDTO = new PluginDTO();
if (StringUtils.isNotBlank(id)) {
@@ -227,7 +230,7 @@ public final class PluginServiceTest {
pluginDTO.setEnabled(true);
return pluginDTO;
}
-
+
private PluginDO buildPluginDO() {
PluginDO pluginDO = PluginDO.buildPluginDO(buildPluginDTO());
Timestamp now = Timestamp.valueOf(LocalDateTime.now());
@@ -235,7 +238,7 @@ public final class PluginServiceTest {
pluginDO.setDateUpdated(now);
return pluginDO;
}
-
+
private PluginDO buildPluginDO(final String id) {
PluginDTO pluginDTO = new PluginDTO();
if (StringUtils.isNotBlank(id)) {