KTV/tests/Feature/TcpSocketClientTest.php
allen.yan ae5ed4aa1f Swagger 都改到ApiResponse 輸出
Swagger Room加入TcpSocketClient
Swagger room 加入 設備註冊,設備開關
Swagger room 有異動需要寫記錄
20250519
2025-05-19 16:08:35 +08:00

43 lines
1.3 KiB
PHP

<?php
// tests/Feature/TcpSocketClientTest.php
namespace Tests\Feature;
use Tests\TestCase;
use App\Services\TcpSocketClient;
class TcpSocketClientTest extends TestCase
{
public function testCanSendAndReceiveTcpMessage()
{
$host = '127.0.0.1';
$port = 12345;
// 建立一個假的 TCP server (background)
$pid = pcntl_fork();
if ($pid == -1) {
$this->fail("Unable to fork process for mock TCP server.");
} elseif ($pid == 0) {
// 子處理序:啟動簡單 TCP server
$socket = stream_socket_server("tcp://$host:$port", $errno, $errstr);
if (!$socket) {
exit(1);
}
$conn = stream_socket_accept($socket);
$data = fread($conn, 1024); // 收資料
fwrite($conn, "Echo: " . $data); // 回傳資料
fclose($conn);
fclose($socket);
exit(0);
} else {
// 父處理序:給 server 一點時間啟動
usleep(100_000); // 0.1 秒
$client = new TcpSocketClient($host, $port);
$response = $client->send("hello test\n");
$this->assertEquals("Echo: hello test\n", $response);
pcntl_wait($status); // 等子程序結束
}
}
}