Skip to content

Commit 8fa75ca

Browse files
authored
Merge pull request #907 from jhdxr/feature/feature-tests
behavior tests
2 parents f0994fb + f087ebb commit 8fa75ca

File tree

3 files changed

+46
-30
lines changed

3 files changed

+46
-30
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55
branches:
66
- master
77
- feature/tests
8+
- feature/feature-tests
89
pull_request:
910
schedule:
1011
- cron: '0 0 * * *'
@@ -29,7 +30,7 @@ jobs:
2930
uses: shivammathur/setup-php@v2
3031
with:
3132
php-version: ${{ matrix.php }}
32-
extensions: json
33+
extensions: json, posix, pcntl
3334
ini-values: error_reporting=E_ALL
3435
tools: composer:v2
3536
coverage: xdebug

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)