From 210663040bf65ee00b5f86545fdc31bd0356fddf Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 27 八月 2026 16:31:53 +0800
Subject: [PATCH] feat(device): persist simulator discovery in redis

---
 ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/CollectorDiscoveryServiceImplTest.java |   79 ++++++++++++++++++++++++++++++++-------
 1 files changed, 64 insertions(+), 15 deletions(-)

diff --git a/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/CollectorDiscoveryServiceImplTest.java b/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/CollectorDiscoveryServiceImplTest.java
index 06b186e..4133bba 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/CollectorDiscoveryServiceImplTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/CollectorDiscoveryServiceImplTest.java
@@ -1,38 +1,87 @@
 package com.ruoyi.system.service.impl;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 import java.util.List;
+import java.util.Set;
 import org.junit.jupiter.api.Test;
+import com.ruoyi.config.DevelopmentCollectorDiscoveryService;
+import com.ruoyi.config.DevelopmentCollectorStatusSynchronizer;
+import com.ruoyi.device.bts.BtsDevelopmentSimulator;
+import com.ruoyi.device.discovery.InMemoryDeviceDiscoveryCandidateStore;
 import com.ruoyi.system.domain.vo.DiscoveredCollectorVo;
+import com.ruoyi.system.service.ITCollectorService;
 
 /**
  * 采集器设备发现服务测试。
  */
 public class CollectorDiscoveryServiceImplTest
 {
-    private final CollectorDiscoveryServiceImpl service = new CollectorDiscoveryServiceImpl();
-
     @Test
-    public void shouldReturnExpectedTestDevices()
+    public void shouldReturnCollectorsWithoutMixingCabinets() throws Exception
     {
-        List<DiscoveredCollectorVo> result = service.selectDiscoveredCollectorList();
+        try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0))
+        {
+            ITCollectorService collectorService = mock(ITCollectorService.class);
+            when(collectorService.selectRegisteredCollectorCodes()).thenReturn(Set.of());
+            InMemoryDeviceDiscoveryCandidateStore store = new InMemoryDeviceDiscoveryCandidateStore();
+            DevelopmentCollectorDiscoveryService service =
+                    new DevelopmentCollectorDiscoveryService(store, collectorService);
+            simulator.addDevice("127.0.0.8", 2);
+            simulator.addCollector("127.0.1.3", 6);
+            new DevelopmentCollectorStatusSynchronizer(simulator, store).synchronizeOnlineStatus();
 
-        assertEquals(6, result.size());
-        DiscoveredCollectorVo first = result.get(0);
-        assertEquals("45643176", first.getDeviceCode());
-        assertEquals("192.1.1.162", first.getIp());
-        assertEquals("00:1A:2B:3C:4D:01", first.getMac());
-        assertEquals("在线", first.getOnlineStatus());
+            List<DiscoveredCollectorVo> result = service.selectDiscoveredCollectorList();
+
+            assertEquals(2, result.size());
+            DiscoveredCollectorVo first = result.get(0);
+            assertEquals("dev-sim-collector-1", first.getDeviceCode());
+            assertEquals("127.0.1.2", first.getIp());
+            assertEquals("02:43:00:00:00:01", first.getMac());
+            assertEquals("dev-sim 采集器 1", first.getName());
+            assertEquals("开发模拟器", first.getManufacturer());
+            assertEquals("Virtual Collector", first.getModel());
+            assertEquals(4, first.getChannelCount());
+            assertEquals("在线", first.getOnlineStatus());
+        }
     }
 
     @Test
-    public void shouldReturnIndependentListContainers()
+    public void shouldHideOfflineCollectors() throws Exception
     {
-        List<DiscoveredCollectorVo> firstResult = service.selectDiscoveredCollectorList();
-        firstResult.clear();
+        try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0))
+        {
+            ITCollectorService collectorService = mock(ITCollectorService.class);
+            when(collectorService.selectRegisteredCollectorCodes()).thenReturn(Set.of());
+            InMemoryDeviceDiscoveryCandidateStore store = new InMemoryDeviceDiscoveryCandidateStore();
+            DevelopmentCollectorDiscoveryService service =
+                    new DevelopmentCollectorDiscoveryService(store, collectorService);
+            simulator.updateCollector(1, "127.0.1.9", 8, false);
+            new DevelopmentCollectorStatusSynchronizer(simulator, store).synchronizeOnlineStatus();
 
-        List<DiscoveredCollectorVo> secondResult = service.selectDiscoveredCollectorList();
+            List<DiscoveredCollectorVo> result = service.selectDiscoveredCollectorList();
 
-        assertEquals(6, secondResult.size());
+            assertEquals(0, result.size());
+        }
+    }
+
+    @Test
+    public void shouldExcludeRegisteredCollectorAndReturnItAfterDeletion() throws Exception
+    {
+        try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0))
+        {
+            ITCollectorService collectorService = mock(ITCollectorService.class);
+            InMemoryDeviceDiscoveryCandidateStore store = new InMemoryDeviceDiscoveryCandidateStore();
+            DevelopmentCollectorDiscoveryService service =
+                    new DevelopmentCollectorDiscoveryService(store, collectorService);
+            new DevelopmentCollectorStatusSynchronizer(simulator, store).synchronizeOnlineStatus();
+            when(collectorService.selectRegisteredCollectorCodes())
+                    .thenReturn(Set.of("dev-sim-collector-1"))
+                    .thenReturn(Set.of());
+
+            assertEquals(0, service.selectDiscoveredCollectorList().size());
+            assertEquals(1, service.selectDiscoveredCollectorList().size());
+        }
     }
 }

--
Gitblit v1.7.1