This is an automated email from the ASF dual-hosted git repository.
gongchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/master by this push:
new 90c027d6c [bugfix] disallow adding tag with same key same value (#2700)
90c027d6c is described below
commit 90c027d6cc4c3487cccfcaee8d8d6b5dfd86f304
Author: aias00 <[email protected]>
AuthorDate: Fri Sep 13 14:30:13 2024 +0800
[bugfix] disallow adding tag with same key same value (#2700)
Co-authored-by: shown <[email protected]>
---
.../manager/service/impl/TagServiceImpl.java | 9 ++++++
.../hertzbeat/manager/service/TagServiceTest.java | 34 +++++++++++++++-------
2 files changed, 32 insertions(+), 11 deletions(-)
diff --git
a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/TagServiceImpl.java
b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/TagServiceImpl.java
index b0508b5d7..4a457e635 100644
---
a/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/TagServiceImpl.java
+++
b/manager/src/main/java/org/apache/hertzbeat/manager/service/impl/TagServiceImpl.java
@@ -60,6 +60,10 @@ public class TagServiceImpl implements TagService {
public void addTags(List<Tag> tags) {
// Verify request data
tags = tags.stream().peek(tag -> {
+ Optional<Tag> tagOptional =
tagDao.findTagByNameAndTagValue(tag.getName(), tag.getTagValue());
+ if (tagOptional.isPresent()) {
+ throw new IllegalArgumentException("The tag already exists.");
+ }
tag.setType((byte) 1);
tag.setId(null);
}).distinct().collect(Collectors.toList());
@@ -70,6 +74,11 @@ public class TagServiceImpl implements TagService {
public void modifyTag(Tag tag) {
Optional<Tag> tagOptional = tagDao.findById(tag.getId());
if (tagOptional.isPresent()) {
+
+ Optional<Tag> tagExistOptional =
tagDao.findTagByNameAndTagValue(tag.getName(), tag.getTagValue());
+ if (tagExistOptional.isPresent() &&
!tagExistOptional.get().getId().equals(tag.getId())) {
+ throw new IllegalArgumentException("The tag with same key and
value already exists.");
+ }
tag.setTagValue(StringUtils.isEmpty(tag.getTagValue()) ? null :
tag.getTagValue());
tagDao.save(tag);
} else {
diff --git
a/manager/src/test/java/org/apache/hertzbeat/manager/service/TagServiceTest.java
b/manager/src/test/java/org/apache/hertzbeat/manager/service/TagServiceTest.java
index ada1c6595..3682e726b 100644
---
a/manager/src/test/java/org/apache/hertzbeat/manager/service/TagServiceTest.java
+++
b/manager/src/test/java/org/apache/hertzbeat/manager/service/TagServiceTest.java
@@ -20,14 +20,18 @@ package org.apache.hertzbeat.manager.service;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.anySet;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Optional;
+
import org.apache.hertzbeat.common.entity.manager.Tag;
import org.apache.hertzbeat.common.support.exception.CommonException;
import org.apache.hertzbeat.manager.dao.TagDao;
@@ -47,22 +51,30 @@ import org.springframework.data.jpa.domain.Specification;
*/
@ExtendWith(MockitoExtension.class)
class TagServiceTest {
-
+
@InjectMocks
private TagServiceImpl tagService;
-
+
@Mock
private TagDao tagDao;
-
+
@Mock
private TagMonitorBindDao tagMonitorBindDao;
-
+
@Test
void addTags() {
- when(tagDao.saveAll(anyList())).thenReturn(anyList());
- assertDoesNotThrow(() ->
tagService.addTags(Collections.singletonList(new Tag())));
+ // Prepare test data
+ List<Tag> tags = Collections.singletonList(
+
Tag.builder().id(1L).name("tagname").tagValue("tagvalue").build()
+ );
+ when(tagDao.findTagByNameAndTagValue(anyString(),
anyString())).thenReturn(Optional.empty());
+
+ tagService.addTags(tags);
+
+ verify(tagDao).saveAll(tags);
+
}
-
+
@Test
void modifyTag() {
Tag tag = Tag.builder().id(1L).build();
@@ -73,18 +85,18 @@ class TagServiceTest {
when(tagDao.findById(1L)).thenReturn(Optional.empty());
assertThrows(IllegalArgumentException.class, () ->
tagService.modifyTag(tag));
}
-
+
@Test
void getTags() {
when(tagDao.findAll(any(Specification.class),
any(PageRequest.class))).thenReturn(Page.empty());
assertNotNull(tagService.getTags(null, null, 1, 10));
}
-
+
@Test
void deleteTags() {
assertDoesNotThrow(() -> tagService.deleteTags(new HashSet<>(1)));
}
-
+
@Test
void deleteUsingTags() {
when(tagMonitorBindDao.countByTagIdIn(anySet())).thenReturn(1L);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]