package com.ruoyi.device.bts; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import java.time.Duration; import java.time.ZoneId; import org.junit.jupiter.api.Test; import com.ruoyi.device.model.DeviceWorkStatus; import com.ruoyi.device.simulator.InMemoryBtsSimulatorStateStore; /** Ticket13:开发检测柜历史合同与实时快照保持两条独立路径。 */ class BtsDevelopmentSimulatorHistoryContractTest { @Test void workingObservationProducesPagedHistoryWithoutControlCommand() throws Exception { try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0, new InMemoryBtsSimulatorStateStore())) { simulator.updateChannel(1, 1, true, DeviceWorkStatus.WORKING); try (BtsDeviceAdapter adapter = new BtsDeviceAdapter("dev-sim", new BtsTcpTransport("127.0.0.1", simulator.port(), Duration.ofSeconds(2), Duration.ofSeconds(2)), new BtsXmlCodec("dev-sim", ZoneId.of("Asia/Hong_Kong")))) { var channel = adapter.discoverChannels().stream().filter(item -> item.identity().chlid() == 1).findFirst().orElseThrow(); adapter.inquire(java.util.Set.of(channel.identity())); var availability = adapter.inquireHistory(java.util.Set.of(channel.identity())).get(0); assertFalse(availability.btsTestId().isBlank()); var page = adapter.downloadHistory(channel.identity(), availability.btsTestId(), 1, 1); assertEquals(1, page.samples().size()); assertEquals(1, page.samples().get(0).sequenceId()); } } } @Test void historySurvivesSimulatorRestartForResume() throws Exception { InMemoryBtsSimulatorStateStore store = new InMemoryBtsSimulatorStateStore(); try (BtsDevelopmentSimulator simulator = new BtsDevelopmentSimulator(0, store)) { simulator.updateChannel(1, 1, true, DeviceWorkStatus.WORKING); try (BtsDeviceAdapter adapter = new BtsDeviceAdapter("dev-sim", new BtsTcpTransport("127.0.0.1", simulator.port(), Duration.ofSeconds(2), Duration.ofSeconds(2)), new BtsXmlCodec("dev-sim", ZoneId.of("Asia/Hong_Kong")))) { adapter.inquire(java.util.Set.of(adapter.discoverChannels().get(0).identity())); } } try (BtsDevelopmentSimulator restarted = new BtsDevelopmentSimulator(0, store); BtsDeviceAdapter adapter = new BtsDeviceAdapter("dev-sim", new BtsTcpTransport("127.0.0.1", restarted.port(), Duration.ofSeconds(2), Duration.ofSeconds(2)), new BtsXmlCodec("dev-sim", ZoneId.of("Asia/Hong_Kong")))) { var channel = adapter.discoverChannels().get(0); assertEquals(1, adapter.inquireHistory(java.util.Set.of(channel.identity())).get(0).availableRecordCount()); } } }