package com.ruoyi.device.bts; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.Duration; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.junit.jupiter.api.Test; class BtsTcpTransportTest { @Test void framesRequestsAndSerializesConcurrentExchanges() throws Exception { try (ScriptedBtsTcpSimulator simulator = new ScriptedBtsTcpSimulator(); BtsTcpTransport transport = new BtsTcpTransport("127.0.0.1", simulator.port(), Duration.ofSeconds(1), Duration.ofSeconds(2))) { ExecutorService callers = Executors.newFixedThreadPool(2); try { simulator.enqueue("first_resp"); simulator.enqueue("second_resp"); Callable first = () -> transport.exchange("first"); Callable second = () -> transport.exchange("second"); Future firstResult = callers.submit(first); Future secondResult = callers.submit(second); Set responses = Set.of(firstResult.get(), secondResult.get()); assertEquals(Set.of("first_resp", "second_resp"), responses); assertEquals(2, simulator.requests().size()); assertTrue(simulator.requests().stream().allMatch(request -> request.startsWith(""))); } finally { callers.shutdownNow(); } } } }