From 1c26cdb81070af7f29df4462d3bfc1ae588ff8f3 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期日, 30 八月 2026 14:11:34 +0800
Subject: [PATCH] 模拟器优化

---
 ruoyi-device/src/test/java/com/ruoyi/device/contract/SimulatorPublicContractTest.java |   62 +++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/ruoyi-device/src/test/java/com/ruoyi/device/contract/SimulatorPublicContractTest.java b/ruoyi-device/src/test/java/com/ruoyi/device/contract/SimulatorPublicContractTest.java
index 83c40aa..df11a42 100644
--- a/ruoyi-device/src/test/java/com/ruoyi/device/contract/SimulatorPublicContractTest.java
+++ b/ruoyi-device/src/test/java/com/ruoyi/device/contract/SimulatorPublicContractTest.java
@@ -1,6 +1,7 @@
 package com.ruoyi.device.contract;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -303,6 +304,67 @@
     }
 
     @Test
+    void developmentSimulatorSupportsNewareProfilesAndDynamicObservation() throws Exception
+    {
+        try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0);
+             BtsTcpTransport transport = new BtsTcpTransport("127.0.0.1", simulator.port(),
+                     Duration.ofSeconds(1), Duration.ofSeconds(1));
+             DeviceAdapter adapter = new BtsDeviceAdapter("dev-sim", transport,
+                     new BtsXmlCodec("dev-sim", ZoneId.of("Asia/Hong_Kong"))))
+        {
+            int tDevice = simulator.addNewareDevice("127.0.0.8", "CT-4008T-5V6A-S1-F");
+            int tnDevice = simulator.addNewareDevice("127.0.0.9", "CT-4008Tn-5V12A-S1-F");
+            simulator.updateChannel(tDevice, 1, true, DeviceWorkStatus.WORKING);
+
+            var discovered = adapter.discoverChannels();
+            var tChannels = discovered.stream().filter(channel -> channel.serverIp().equals("127.0.0.8")).toList();
+            var tnChannels = discovered.stream().filter(channel -> channel.serverIp().equals("127.0.0.9")).toList();
+
+            assertEquals(4, discovered.stream().filter(channel -> channel.serverIp().equals("127.0.0.2")).count());
+            assertEquals(8, tChannels.size());
+            assertEquals(8, tnChannels.size());
+            assertEquals("新威", tChannels.get(0).deviceMetadata().manufacturer());
+            assertEquals("CT-4008T-5V6A-S1-F", tChannels.get(0).deviceMetadata().model());
+            assertEquals("CT-4008Tn-5V12A-S1-F", tnChannels.get(0).deviceMetadata().model());
+            assertEquals(8, simulator.snapshot().devices().stream()
+                    .filter(device -> device.deviceId() == tDevice || device.deviceId() == tnDevice)
+                    .mapToInt(device -> device.channels().size()).sum() / 2);
+
+            Set<com.ruoyi.device.model.ChannelIdentity> channel = tChannels.stream()
+                    .map(DetectedChannel::identity).filter(identity -> identity.chlid() == 1)
+                    .collect(java.util.stream.Collectors.toSet());
+            var first = adapter.inquire(channel).values().iterator().next();
+            var second = adapter.inquire(channel).values().iterator().next();
+            assertEquals(DeviceWorkStatus.WORKING, first.workStatus());
+            assertNotEquals(first.currentA(), second.currentA());
+            assertTrue(first.voltageV().doubleValue() >= 0.0 && first.voltageV().doubleValue() <= 5.0);
+        }
+    }
+
+    @Test
+    void developmentSimulatorPersistsNewareProfileMetadata() throws Exception
+    {
+        InMemoryBtsSimulatorStateStore store = new InMemoryBtsSimulatorStateStore();
+        try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0, store))
+        {
+            simulator.addNewareDevice("127.0.0.8", "CT-4008Tn-5V12A-S1-F");
+        }
+
+        try (BtsDevelopmentSimulator restored = new BtsDevelopmentSimulator(0, store);
+             BtsTcpTransport transport = new BtsTcpTransport("127.0.0.1", restored.port(),
+                     Duration.ofSeconds(1), Duration.ofSeconds(1));
+             DeviceAdapter adapter = new BtsDeviceAdapter("dev-sim", transport,
+                     new BtsXmlCodec("dev-sim", ZoneId.of("Asia/Hong_Kong"))))
+        {
+            var profileChannels = adapter.discoverChannels().stream()
+                    .filter(channel -> channel.serverIp().equals("127.0.0.8")).toList();
+            assertEquals(8, profileChannels.size());
+            assertEquals("CT-4008Tn-5V12A-S1-F", profileChannels.get(0).deviceMetadata().model());
+            assertEquals("新威", profileChannels.get(0).deviceMetadata().manufacturer());
+        }
+    }
+
+    @Test
     void developmentSimulatorPublishesOperatorControlledChannelFacts() throws Exception
     {
         try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0);

--
Gitblit v1.7.1