1--TEST--
2swoole_server/task: task callback is null
3--SKIPIF--
4<?php require __DIR__ . '/../../include/skipif.inc'; ?>
5--FILE--
6<?php
7require __DIR__ . '/../../include/bootstrap.php';
8
9use Swoole\Server;
10
11$pm = new SwooleTest\ProcessManager;
12
13$pm->parentFunc = function ($pid) use ($pm) {
14    $cli = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
15    $cli->set(['open_eof_check' => true, "package_eof" => "\r\n\r\n"]);
16    $cli->connect('127.0.0.1', $pm->getFreePort(), 0.5) or die("ERROR");
17
18    $cli->send("task-01") or die("ERROR");
19    $res = json_decode(trim($cli->recv()), true);
20    Assert::same($res['code'], 0);
21    Assert::same($res['message'], 'hello world');
22    echo "SUCCESS\n";
23
24    $pm->kill();
25};
26
27$pm->childFunc = function () use ($pm) {
28    ini_set('swoole.display_errors', 'Off');
29    $serv = new Server('127.0.0.1', $pm->getFreePort());
30    $serv->set(array(
31        "worker_num" => 1,
32        'task_worker_num' => 2,
33        'log_file' => '/dev/null',
34    ));
35    $serv->on("WorkerStart", function (Server $serv) use ($pm) {
36        $pm->wakeup();
37    });
38    $serv->on('receive', function (Server $serv, $fd, $rid, $data) {
39        $serv->task(['type' => 'array', 'value' => $data, 'fd' => $fd], -1, null);
40    });
41    $serv->on('task', function (Server $serv, $task_id, $worker_id, $data) {
42        return array("code" => 0, 'message' => 'hello world', 'sid' => uniqid(), 'fd' => $data['fd']);
43    });
44    $serv->on('finish', function (Server $serv, $task_id, $data) {
45        $serv->send($data['fd'], json_encode($data) . "\r\n\r\n");
46    });
47    $serv->start();
48};
49
50$pm->childFirst();
51$pm->run();
52?>
53--EXPECT--
54SUCCESS
55