1--TEST--
2swoole_server/task: finish timeout
3--SKIPIF--
4<?php require __DIR__ . '/../../include/skipif.inc'; ?>
5--FILE--
6<?php
7require __DIR__ . '/../../include/bootstrap.php';
8
9use Swoole\Server;
10use Swoole\Client;
11
12define('TMP_LOG_FILE', __DIR__ . '/log_file');
13ftruncate(fopen(TMP_LOG_FILE, 'w+'), 0);
14
15$pm = new SwooleTest\ProcessManager;
16$pm->parentFunc = function ($pid) use ($pm) {
17    $cli = new Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
18    $cli->connect('127.0.0.1', $pm->getFreePort(), 10) or die("ERROR");
19    $cli->send("task-01") or die("ERROR");
20    Assert::same($cli->recv(), "hello world");
21    $cli->close();
22    echo file_get_contents(TMP_LOG_FILE);
23    $pm->kill();
24};
25
26$pm->childFunc = function () use ($pm) {
27    $server = new Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS);
28    $server->set(
29        [
30            'log_file' => TMP_LOG_FILE,
31            'log_level' => SWOOLE_LOG_NOTICE,
32            'task_worker_num' => 1,
33            'socket_send_timeout' => 1.0,
34            'worker_num' => 1,
35            'enable_coroutine' => false,
36        ]
37    );
38    $server->on('workerStart', function () use ($pm) {
39        $pm->wakeup();
40    });
41    $server->on('receive', function (Server $server, $fd, $tid, $data) {
42        $server->task($fd);
43        usleep(1100000);
44    });
45    $server->on(
46        'task',
47        function ($server, $task_id, $worker_id, string $fd) {
48            $n = 200;
49            while ($n--) {
50                if (!$server->finish(str_repeat('A', 8000))) {
51                    break;
52                }
53            }
54            $server->send($fd, "hello world");
55        }
56    );
57    $server->on('finish', function () { });
58    $server->on('close', function () { });
59    $server->start();
60};
61$pm->childFirst();
62$pm->run();
63unlink(TMP_LOG_FILE);
64?>
65--EXPECTF--
66[%s]	WARNING	Socket::send_blocking(): send %d bytes failed, Error: Resource temporarily unavailable[11]
67[%s]	WARNING	Server::reply_task_result(): send result to worker timed out
68