Skip to content

Commit c39506e

Browse files
yangyx107Aias00
andauthored
Fix: loggion console add rule bug (apache#6291)
* fix: loggionConsole-addRule-bug * fix: loggionConsole-addRule-bug * fix: loggionConsole-addRule-bug * fix: loggionConsole-addRule-bug --------- Co-authored-by: aias00 <liuhongyu@apache.org>
1 parent c2efae1 commit c39506e

File tree

3 files changed

+100
-11
lines changed

3 files changed

+100
-11
lines changed

shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import java.util.ArrayList;
6868
import java.util.Collections;
6969
import java.util.HashSet;
70+
import java.util.LinkedHashSet;
7071
import java.util.List;
7172
import java.util.Map;
7273
import java.util.Objects;
@@ -112,12 +113,26 @@ public void doConditionPreProcessing(final RuleQueryCondition condition) {
112113
}
113114
}
114115

116+
115117
@Override
116118
public PageInfo<RuleVO> searchByPage(final PageCondition<RuleQueryCondition> pageCondition) {
117119
RuleQueryCondition condition = pageCondition.getCondition();
118120
doConditionPreProcessing(condition);
119-
PageHelper.startPage(pageCondition.getPageNum(), pageCondition.getPageSize());
120121
condition.init();
122+
List<String> namespaceSelectors = Optional.ofNullable(selectorMapper.selectAllByNamespaceId(condition.getNamespaceId()))
123+
.map(list -> list.stream().map(SelectorDO::getId).collect(Collectors.toList()))
124+
.orElse(Collections.emptyList());
125+
126+
List<String> finalSelectors = Optional.ofNullable(condition.getSelectors())
127+
.orElseGet(Collections::emptyList);
128+
129+
if (!namespaceSelectors.isEmpty()) {
130+
Set<String> selectorSet = new LinkedHashSet<>(finalSelectors);
131+
selectorSet.addAll(namespaceSelectors);
132+
finalSelectors = new ArrayList<>(selectorSet);
133+
}
134+
condition.setSelectors(finalSelectors);
135+
PageHelper.startPage(pageCondition.getPageNum(), pageCondition.getPageSize());
121136
final Page<RuleDO> doList = CastUtils.cast(ruleMapper.selectByCondition(condition));
122137
PageInfo<RuleVO> doPageInfo = doList.toPageInfo(RuleVO::buildRuleVO);
123138
for (RuleVO rule : doPageInfo.getList()) {
@@ -253,12 +268,12 @@ public List<RuleData> listAllByNamespaceId(final String namespaceId) {
253268
public List<RuleVO> listAllData() {
254269
return this.buildRuleVOList(ruleMapper.selectAll());
255270
}
256-
271+
257272
@Override
258273
public List<RuleVO> listAllDataByNamespaceId(final String namespaceId) {
259274
return this.buildRuleVOList(ruleMapper.selectAllByNamespaceId(namespaceId));
260275
}
261-
276+
262277
@Override
263278
public List<RuleData> findBySelectorId(final String selectorId) {
264279
return this.buildRuleDataList(ruleMapper.findBySelectorId(selectorId));
@@ -322,7 +337,7 @@ public ConfigImportResult importData(final List<RuleDTO> ruleList) {
322337
}
323338
return ConfigImportResult.success(successCount);
324339
}
325-
340+
326341
@Override
327342
@Transactional(rollbackFor = Exception.class)
328343
public ConfigImportResult importData(final String namespace, final List<RuleDTO> ruleList, final ConfigsImportContext context) {
@@ -334,7 +349,7 @@ public ConfigImportResult importData(final String namespace, final List<RuleDTO>
334349
.selectAllByNamespaceId(namespace)
335350
.stream()
336351
.collect(Collectors.groupingBy(RuleDO::getSelectorId));
337-
352+
338353
int successCount = 0;
339354
StringBuilder errorMsgBuilder = new StringBuilder();
340355
for (RuleDTO ruleDTO : ruleList) {
@@ -353,7 +368,7 @@ public ConfigImportResult importData(final String namespace, final List<RuleDTO>
353368
.stream()
354369
.map(RuleDO::getRuleName)
355370
.collect(Collectors.toSet());
356-
371+
357372
if (existRuleNameSet.contains(ruleName)) {
358373
errorMsgBuilder
359374
.append(ruleName)
@@ -367,10 +382,10 @@ public ConfigImportResult importData(final String namespace, final List<RuleDTO>
367382
RuleDO ruleDO = RuleDO.buildRuleDO(ruleDTO);
368383
final int ruleCount = ruleMapper.insertSelective(ruleDO);
369384
Optional.ofNullable(ruleDTO.getRuleConditions())
370-
.orElse(Collections.emptyList()).forEach(c -> {
371-
c.setRuleId(ruleId);
372-
c.setId(null);
373-
});
385+
.orElse(Collections.emptyList()).forEach(c -> {
386+
c.setRuleId(ruleId);
387+
c.setId(null);
388+
});
374389
addCondition(ruleDO, ruleDTO.getRuleConditions());
375390
if (ruleCount > 0) {
376391
successCount++;

shenyu-admin/src/main/resources/mappers/rule-sqlmap.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@
193193
</if>
194194
</where>
195195
</select>
196-
197196
<select id="getPluginNameBySelectorId" resultType="java.lang.String">
198197
select p.name
199198
from plugin p

shenyu-admin/src/test/java/org/apache/shenyu/admin/service/RuleServiceTest.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
package org.apache.shenyu.admin.service;
1919

20+
import com.github.pagehelper.Page;
21+
import com.github.pagehelper.PageInfo;
2022
import com.google.common.collect.Lists;
2123
import com.google.common.collect.Sets;
2224
import org.apache.commons.lang3.StringUtils;
@@ -35,9 +37,11 @@
3537
import org.apache.shenyu.admin.model.entity.RuleDO;
3638
import org.apache.shenyu.admin.model.entity.SelectorDO;
3739
import org.apache.shenyu.admin.model.page.CommonPager;
40+
import org.apache.shenyu.admin.model.page.PageCondition;
3841
import org.apache.shenyu.admin.model.page.PageParameter;
3942
import org.apache.shenyu.admin.model.query.RuleConditionQuery;
4043
import org.apache.shenyu.admin.model.query.RuleQuery;
44+
import org.apache.shenyu.admin.model.query.RuleQueryCondition;
4145
import org.apache.shenyu.admin.model.result.ConfigImportResult;
4246
import org.apache.shenyu.admin.model.vo.RuleVO;
4347
import org.apache.shenyu.admin.service.impl.RuleServiceImpl;
@@ -57,6 +61,7 @@
5761

5862
import java.sql.Timestamp;
5963
import java.time.LocalDateTime;
64+
import java.util.ArrayList;
6065
import java.util.Arrays;
6166
import java.util.Collections;
6267
import java.util.List;
@@ -67,9 +72,11 @@
6772
import static org.apache.shenyu.common.constant.Constants.SYS_DEFAULT_NAMESPACE_ID;
6873
import static org.hamcrest.MatcherAssert.assertThat;
6974
import static org.hamcrest.Matchers.greaterThan;
75+
import static org.junit.Assert.assertTrue;
7076
import static org.junit.jupiter.api.Assertions.assertEquals;
7177
import static org.junit.jupiter.api.Assertions.assertNotNull;
7278
import static org.mockito.ArgumentMatchers.any;
79+
import static org.mockito.ArgumentMatchers.anyString;
7380
import static org.mockito.BDDMockito.given;
7481
import static org.mockito.Mockito.mockStatic;
7582
import static org.mockito.Mockito.when;
@@ -257,6 +264,74 @@ public void testFindBySelectorIdList() {
257264
assertEquals(ruleDOList.size(), dataList.size());
258265
}
259266

267+
@Test
268+
public void testSearchByPage() {
269+
testSelectorMergeScenario(
270+
null,
271+
Arrays.asList(buildSelectorDO()),
272+
1,
273+
Collections.singletonList(buildSelectorDO().getId())
274+
);
275+
276+
SelectorDO selectorDO1 = SelectorDO.builder().id("s1").build();
277+
SelectorDO selectorDO2 = SelectorDO.builder().id("s2").build();
278+
testSelectorMergeScenario(
279+
new ArrayList<>(Arrays.asList("s1", "s3")),
280+
Arrays.asList(selectorDO1, selectorDO2),
281+
3,
282+
Arrays.asList("s1", "s2", "s3")
283+
);
284+
285+
testSelectorMergeScenario(
286+
new ArrayList<>(Arrays.asList("s1", "s2")),
287+
Collections.emptyList(),
288+
2,
289+
Arrays.asList("s1", "s2")
290+
);
291+
292+
testSelectorMergeScenario(
293+
new ArrayList<>(Arrays.asList("s1", "s2")),
294+
null,
295+
2,
296+
Arrays.asList("s1", "s2")
297+
);
298+
}
299+
300+
private void testSelectorMergeScenario(final List<String> userSelectors,
301+
final List<SelectorDO> namespaceSelectorDOs,
302+
final int expectedSize,
303+
final List<String> expectedContains) {
304+
Page<RuleDO> emptyPage = new Page<>();
305+
// 1. 构建分页条件
306+
PageCondition<RuleQueryCondition> pageCondition = buildPageCondition();
307+
RuleQueryCondition condition = pageCondition.getCondition();
308+
condition.setSelectors(userSelectors);
309+
310+
// 2. Mock依赖行为
311+
given(this.selectorMapper.selectAllByNamespaceId(anyString())).willReturn(namespaceSelectorDOs);
312+
given(this.ruleMapper.selectByCondition(any(RuleQueryCondition.class))).willReturn(emptyPage);
313+
314+
// 3. 执行测试方法
315+
PageInfo<RuleVO> result = ruleService.searchByPage(pageCondition);
316+
317+
// 4. 统一验证
318+
assertNotNull(result);
319+
List<String> finalSelectors = condition.getSelectors();
320+
assertEquals(expectedSize, finalSelectors.size());
321+
assertTrue(finalSelectors.containsAll(expectedContains));
322+
}
323+
324+
325+
private PageCondition<RuleQueryCondition> buildPageCondition() {
326+
RuleQueryCondition condition = new RuleQueryCondition();
327+
condition.setNamespaceId("test-namespace");
328+
PageCondition<RuleQueryCondition> pageCondition = new PageCondition<>();
329+
pageCondition.setCondition(condition);
330+
pageCondition.setPageNum(1);
331+
pageCondition.setPageSize(10);
332+
return pageCondition;
333+
}
334+
260335
private void publishEvent() {
261336
PluginDO pluginDO = buildPluginDO();
262337
SelectorDO selectorDO = buildSelectorDO();

0 commit comments

Comments
 (0)