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]

Reply via email to