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