This is an automated email from the ASF dual-hosted git repository.
liuhongyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new c39506e97c Fix: loggion console add rule bug (#6291)
c39506e97c is described below
commit c39506e97ceef9490a97c736fd5098ce97d6f3a0
Author: yangyx107 <[email protected]>
AuthorDate: Sat Feb 28 16:34:59 2026 +0800
Fix: loggion console add rule bug (#6291)
* fix: loggionConsole-addRule-bug
* fix: loggionConsole-addRule-bug
* fix: loggionConsole-addRule-bug
* fix: loggionConsole-addRule-bug
---------
Co-authored-by: aias00 <[email protected]>
---
.../shenyu/admin/service/impl/RuleServiceImpl.java | 35 +++++++---
.../src/main/resources/mappers/rule-sqlmap.xml | 1 -
.../shenyu/admin/service/RuleServiceTest.java | 75 ++++++++++++++++++++++
3 files changed, 100 insertions(+), 11 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
index 0e903a943b..dabcc4fe10 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java
@@ -67,6 +67,7 @@ import
org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -112,12 +113,26 @@ public class RuleServiceImpl implements RuleService {
}
}
+
@Override
public PageInfo<RuleVO> searchByPage(final
PageCondition<RuleQueryCondition> pageCondition) {
RuleQueryCondition condition = pageCondition.getCondition();
doConditionPreProcessing(condition);
- PageHelper.startPage(pageCondition.getPageNum(),
pageCondition.getPageSize());
condition.init();
+ List<String> namespaceSelectors =
Optional.ofNullable(selectorMapper.selectAllByNamespaceId(condition.getNamespaceId()))
+ .map(list ->
list.stream().map(SelectorDO::getId).collect(Collectors.toList()))
+ .orElse(Collections.emptyList());
+
+ List<String> finalSelectors =
Optional.ofNullable(condition.getSelectors())
+ .orElseGet(Collections::emptyList);
+
+ if (!namespaceSelectors.isEmpty()) {
+ Set<String> selectorSet = new LinkedHashSet<>(finalSelectors);
+ selectorSet.addAll(namespaceSelectors);
+ finalSelectors = new ArrayList<>(selectorSet);
+ }
+ condition.setSelectors(finalSelectors);
+ PageHelper.startPage(pageCondition.getPageNum(),
pageCondition.getPageSize());
final Page<RuleDO> doList =
CastUtils.cast(ruleMapper.selectByCondition(condition));
PageInfo<RuleVO> doPageInfo = doList.toPageInfo(RuleVO::buildRuleVO);
for (RuleVO rule : doPageInfo.getList()) {
@@ -253,12 +268,12 @@ public class RuleServiceImpl implements RuleService {
public List<RuleVO> listAllData() {
return this.buildRuleVOList(ruleMapper.selectAll());
}
-
+
@Override
public List<RuleVO> listAllDataByNamespaceId(final String namespaceId) {
return
this.buildRuleVOList(ruleMapper.selectAllByNamespaceId(namespaceId));
}
-
+
@Override
public List<RuleData> findBySelectorId(final String selectorId) {
return this.buildRuleDataList(ruleMapper.findBySelectorId(selectorId));
@@ -322,7 +337,7 @@ public class RuleServiceImpl implements RuleService {
}
return ConfigImportResult.success(successCount);
}
-
+
@Override
@Transactional(rollbackFor = Exception.class)
public ConfigImportResult importData(final String namespace, final
List<RuleDTO> ruleList, final ConfigsImportContext context) {
@@ -334,7 +349,7 @@ public class RuleServiceImpl implements RuleService {
.selectAllByNamespaceId(namespace)
.stream()
.collect(Collectors.groupingBy(RuleDO::getSelectorId));
-
+
int successCount = 0;
StringBuilder errorMsgBuilder = new StringBuilder();
for (RuleDTO ruleDTO : ruleList) {
@@ -353,7 +368,7 @@ public class RuleServiceImpl implements RuleService {
.stream()
.map(RuleDO::getRuleName)
.collect(Collectors.toSet());
-
+
if (existRuleNameSet.contains(ruleName)) {
errorMsgBuilder
.append(ruleName)
@@ -367,10 +382,10 @@ public class RuleServiceImpl implements RuleService {
RuleDO ruleDO = RuleDO.buildRuleDO(ruleDTO);
final int ruleCount = ruleMapper.insertSelective(ruleDO);
Optional.ofNullable(ruleDTO.getRuleConditions())
- .orElse(Collections.emptyList()).forEach(c -> {
- c.setRuleId(ruleId);
- c.setId(null);
- });
+ .orElse(Collections.emptyList()).forEach(c -> {
+ c.setRuleId(ruleId);
+ c.setId(null);
+ });
addCondition(ruleDO, ruleDTO.getRuleConditions());
if (ruleCount > 0) {
successCount++;
diff --git a/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml
b/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml
index 56cccb983a..3c250a09eb 100644
--- a/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml
+++ b/shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml
@@ -193,7 +193,6 @@
</if>
</where>
</select>
-
<select id="getPluginNameBySelectorId" resultType="java.lang.String">
select p.name
from plugin p
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
index 518c52238f..6810d962e1 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java
@@ -17,6 +17,8 @@
package org.apache.shenyu.admin.service;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
@@ -35,9 +37,11 @@ import org.apache.shenyu.admin.model.entity.RuleConditionDO;
import org.apache.shenyu.admin.model.entity.RuleDO;
import org.apache.shenyu.admin.model.entity.SelectorDO;
import org.apache.shenyu.admin.model.page.CommonPager;
+import org.apache.shenyu.admin.model.page.PageCondition;
import org.apache.shenyu.admin.model.page.PageParameter;
import org.apache.shenyu.admin.model.query.RuleConditionQuery;
import org.apache.shenyu.admin.model.query.RuleQuery;
+import org.apache.shenyu.admin.model.query.RuleQueryCondition;
import org.apache.shenyu.admin.model.result.ConfigImportResult;
import org.apache.shenyu.admin.model.vo.RuleVO;
import org.apache.shenyu.admin.service.impl.RuleServiceImpl;
@@ -57,6 +61,7 @@ import org.mockito.stubbing.Answer;
import java.sql.Timestamp;
import java.time.LocalDateTime;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -67,9 +72,11 @@ import java.util.stream.IntStream;
import static
org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.greaterThan;
+import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
@@ -257,6 +264,74 @@ public final class RuleServiceTest {
assertEquals(ruleDOList.size(), dataList.size());
}
+ @Test
+ public void testSearchByPage() {
+ testSelectorMergeScenario(
+ null,
+ Arrays.asList(buildSelectorDO()),
+ 1,
+ Collections.singletonList(buildSelectorDO().getId())
+ );
+
+ SelectorDO selectorDO1 = SelectorDO.builder().id("s1").build();
+ SelectorDO selectorDO2 = SelectorDO.builder().id("s2").build();
+ testSelectorMergeScenario(
+ new ArrayList<>(Arrays.asList("s1", "s3")),
+ Arrays.asList(selectorDO1, selectorDO2),
+ 3,
+ Arrays.asList("s1", "s2", "s3")
+ );
+
+ testSelectorMergeScenario(
+ new ArrayList<>(Arrays.asList("s1", "s2")),
+ Collections.emptyList(),
+ 2,
+ Arrays.asList("s1", "s2")
+ );
+
+ testSelectorMergeScenario(
+ new ArrayList<>(Arrays.asList("s1", "s2")),
+ null,
+ 2,
+ Arrays.asList("s1", "s2")
+ );
+ }
+
+ private void testSelectorMergeScenario(final List<String> userSelectors,
+ final List<SelectorDO>
namespaceSelectorDOs,
+ final int expectedSize,
+ final List<String>
expectedContains) {
+ Page<RuleDO> emptyPage = new Page<>();
+ // 1. 构建分页条件
+ PageCondition<RuleQueryCondition> pageCondition = buildPageCondition();
+ RuleQueryCondition condition = pageCondition.getCondition();
+ condition.setSelectors(userSelectors);
+
+ // 2. Mock依赖行为
+
given(this.selectorMapper.selectAllByNamespaceId(anyString())).willReturn(namespaceSelectorDOs);
+
given(this.ruleMapper.selectByCondition(any(RuleQueryCondition.class))).willReturn(emptyPage);
+
+ // 3. 执行测试方法
+ PageInfo<RuleVO> result = ruleService.searchByPage(pageCondition);
+
+ // 4. 统一验证
+ assertNotNull(result);
+ List<String> finalSelectors = condition.getSelectors();
+ assertEquals(expectedSize, finalSelectors.size());
+ assertTrue(finalSelectors.containsAll(expectedContains));
+ }
+
+
+ private PageCondition<RuleQueryCondition> buildPageCondition() {
+ RuleQueryCondition condition = new RuleQueryCondition();
+ condition.setNamespaceId("test-namespace");
+ PageCondition<RuleQueryCondition> pageCondition = new
PageCondition<>();
+ pageCondition.setCondition(condition);
+ pageCondition.setPageNum(1);
+ pageCondition.setPageSize(10);
+ return pageCondition;
+ }
+
private void publishEvent() {
PluginDO pluginDO = buildPluginDO();
SelectorDO selectorDO = buildSelectorDO();