1--TEST--
2swoole_server/task: scheduler warning
3--SKIPIF--
4<?php require __DIR__ . '/../../include/skipif.inc'; ?>
5--FILE--
6<?php
7require __DIR__ . '/../../include/bootstrap.php';
8
9use Swoole\Client;
10use Swoole\Server;
11
12const N = 3;
13const LOG_FILE =  __DIR__.'/test.log';
14
15$counter = new Swoole\Atomic(0);
16
17$pm = new SwooleTest\ProcessManager;
18$pm->parentFunc = function () use ($pm) {
19    $client = new Client(SWOOLE_SOCK_UDP, SWOOLE_SOCK_SYNC);
20    if (!$client->connect('127.0.0.1', $pm->getFreePort(), 2)) {
21        exit("connect failed\n");
22    }
23    $client->send("ping");
24    echo $client->recv();
25    sleep(2);
26    $pm->kill();
27};
28
29$pm->childFunc = function () use ($pm, $counter) {
30    $serv = new Server("127.0.0.1", $pm->getFreePort(), SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
31
32    $serv->set([
33        'worker_num' => 1,
34        'task_worker_num' => 2,
35        'log_file' => LOG_FILE,
36        'log_level' => SWOOLE_LOG_NOTICE,
37    ]);
38
39    $serv->on("WorkerStart", function (Server $serv) use ($pm) {
40        if ($serv->taskworker) {
41            $pm->wakeup();
42        }
43    });
44
45    $serv->on('Packet', function (Server $serv, string $data, array $clientInfo) {
46        $n = N;
47        while ($n--) {
48            $serv->task(['data' => $data, 'client' => $clientInfo]);
49            usleep(10000);
50        }
51    });
52
53    $serv->on('Task', function (Server $serv, $taskId, int $workerId, $data) use ($pm, $counter) {
54        static $sleep = false;
55        if (!$sleep) {
56            $sleep = true;
57            sleep(1);
58        }
59        if ($counter->add() == N) {
60            $serv->sendto($data['client']['address'], $data['client']['port'], "DONE\n");
61        }
62    });
63
64    $serv->start();
65};
66
67$pm->childFirst();
68$pm->run();
69
70echo file_get_contents(LOG_FILE);
71unlink(LOG_FILE);
72?>
73--EXPECTF--
74DONE
75[%s]	WARNING	Server::timer_callback() (ERRNO %d): No idle task worker is available
76