Explorar el Código

udp connection test

jhdxr hace 2 años
padre
commit
f087ebb205
Se han modificado 2 ficheros con 44 adiciones y 29 borrados
  1. 43 28
      tests/Feature/UdpConnectionTest.php
  2. 1 1
      tests/Pest.php

+ 43 - 28
tests/Feature/UdpConnectionTest.php

@@ -1,31 +1,46 @@
 <?php
-//example from manual
-use Workerman\Connection\AsyncUdpConnection;
-use Workerman\Timer;
+
+use Symfony\Component\Process\PhpProcess;
 use Workerman\Worker;
 
-it('tests udp connection', function () {
-    /** @noinspection PhpObjectFieldsAreOnlyWrittenInspection */
-    $server = new Worker('udp://0.0.0.0:9292');
-    $server->onMessage = function ($connection, $data) {
-        expect($data)->toBe('hello');
-        $connection->send('xiami');
-    };
-    $server->onWorkerStart = function () {
-        //client
-        Timer::add(1, function () {
-            $client = new AsyncUdpConnection('udp://127.0.0.1:1234');
-            $client->onConnect = function ($client) {
-                $client->send('hello');
-            };
-            $client->onMessage = function ($client, $data) {
-                expect($data)->toBe('xiami');
-                //terminal this test
-                terminate_current_test();
-            };
-            $client->connect();
-        }, null, false);
-    };
-    Worker::runAll();
-})->skipOnWindows() //require posix, multiple workers
-->skip(message: 'this test needs to run isolated process while pest not support doing so yet');
+$serverAddress = 'udp://127.0.0.1:6789';
+beforeAll(function () use ($serverAddress) {
+    $process = new PhpProcess(<<<PHP
+        <?php    
+        if(!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
+        if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
+        if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));
+        require './vendor/autoload.php';
+        use Workerman\Worker;
+        
+        \$server = new Worker('$serverAddress');
+        \$server->onMessage = function (\$connection, \$data) {
+            if(str_starts_with(\$data, 'bye')) {
+                terminate_current_process();
+            }
+            \$connection->send('received: '.\$data);
+        };
+        global \$argv;
+        \$argv = ['', 'start'];
+        Worker::runAll();
+    PHP
+    );
+    $process->start();
+    sleep(5);
+});
+
+afterAll(function () use ($serverAddress) {
+    $socket = stream_socket_client(self::$serverAddress, timeout: 1);
+    fwrite($socket, 'bye');
+    fclose($socket);
+});
+
+it('tests udp connection', function () use ($serverAddress) {
+    $socket = stream_socket_client($serverAddress, $errno, $errstr, 1);
+    expect($errno)->toBeInt(0);
+    fwrite($socket, 'xiami');
+    $data = fread($socket, 1024);
+    expect($data)->toBeString('received: xiami');
+    fclose($socket);
+})
+    ->skipOnWindows(); //require posix

+ 1 - 1
tests/Pest.php

@@ -59,7 +59,7 @@ function testWithConnectionClose(Closure $closure, string $dataContains = null,
     }
 }
 
-function terminate_current_test()
+function terminate_current_process()
 {
     posix_kill(posix_getppid(), SIGINT);
 }