Skip to content

Commit f087ebb

Browse files
committed
udp connection test
1 parent 5935ff5 commit f087ebb

File tree

2 files changed

+44
-29
lines changed

2 files changed

+44
-29
lines changed

tests/Feature/UdpConnectionTest.php

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,46 @@
11
<?php
2-
//example from manual
3-
use Workerman\Connection\AsyncUdpConnection;
4-
use Workerman\Timer;
2+
3+
use Symfony\Component\Process\PhpProcess;
54
use Workerman\Worker;
65

7-
it('tests udp connection', function () {
8-
/** @noinspection PhpObjectFieldsAreOnlyWrittenInspection */
9-
$server = new Worker('udp://0.0.0.0:9292');
10-
$server->onMessage = function ($connection, $data) {
11-
expect($data)->toBe('hello');
12-
$connection->send('xiami');
13-
};
14-
$server->onWorkerStart = function () {
15-
//client
16-
Timer::add(1, function () {
17-
$client = new AsyncUdpConnection('udp://127.0.0.1:1234');
18-
$client->onConnect = function ($client) {
19-
$client->send('hello');
20-
};
21-
$client->onMessage = function ($client, $data) {
22-
expect($data)->toBe('xiami');
23-
//terminal this test
24-
terminate_current_test();
25-
};
26-
$client->connect();
27-
}, null, false);
28-
};
29-
Worker::runAll();
30-
})->skipOnWindows() //require posix, multiple workers
31-
->skip(message: 'this test needs to run isolated process while pest not support doing so yet');
6+
$serverAddress = 'udp://127.0.0.1:6789';
7+
beforeAll(function () use ($serverAddress) {
8+
$process = new PhpProcess(<<<PHP
9+
<?php
10+
if(!defined('STDIN')) define('STDIN', fopen('php://stdin', 'r'));
11+
if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
12+
if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));
13+
require './vendor/autoload.php';
14+
use Workerman\Worker;
15+
16+
\$server = new Worker('$serverAddress');
17+
\$server->onMessage = function (\$connection, \$data) {
18+
if(str_starts_with(\$data, 'bye')) {
19+
terminate_current_process();
20+
}
21+
\$connection->send('received: '.\$data);
22+
};
23+
global \$argv;
24+
\$argv = ['', 'start'];
25+
Worker::runAll();
26+
PHP
27+
);
28+
$process->start();
29+
sleep(5);
30+
});
31+
32+
afterAll(function () use ($serverAddress) {
33+
$socket = stream_socket_client(self::$serverAddress, timeout: 1);
34+
fwrite($socket, 'bye');
35+
fclose($socket);
36+
});
37+
38+
it('tests udp connection', function () use ($serverAddress) {
39+
$socket = stream_socket_client($serverAddress, $errno, $errstr, 1);
40+
expect($errno)->toBeInt(0);
41+
fwrite($socket, 'xiami');
42+
$data = fread($socket, 1024);
43+
expect($data)->toBeString('received: xiami');
44+
fclose($socket);
45+
})
46+
->skipOnWindows(); //require posix

tests/Pest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ function testWithConnectionClose(Closure $closure, string $dataContains = null,
5959
}
6060
}
6161

62-
function terminate_current_test()
62+
function terminate_current_process()
6363
{
6464
posix_kill(posix_getppid(), SIGINT);
6565
}

0 commit comments

Comments
 (0)