1--TEST--
2swoole_server/task: invalid packet
3--SKIPIF--
4<?php require __DIR__ . '/../../include/skipif.inc';
5skip_if_function_not_exist('msg_get_queue');
6?>
7--FILE--
8<?php
9require __DIR__ . '/../../include/bootstrap.php';
10const MSGQ_KEY = 0x70001001;
11
12$file = __DIR__.'/tmp.log';
13use Swoole\Server;
14
15$result = new Swoole\Atomic(0);
16$pm = new SwooleTest\ProcessManager;
17
18$pm->parentFunc = function ($pid) use ($pm) {
19    $data = '{"tid":17732683638813521,"out_trade_no":"dm5601993521","runMethod":"\\Action\\Mpay\\Uni\\UniApiV3Act:jsonDrive"}';
20    $queueId = msg_get_queue(MSGQ_KEY);
21    if ($queueId === false) {
22        throw new \Swoole\Exception("msg_get_queue() failed.");
23    }
24    Assert::true(msg_send($queueId, 1, $data));
25    Assert::true(msg_send($queueId, 1, Swoole\Server\Task::pack($data), false));
26    $pm->wait();
27    $pm->kill();
28};
29
30$pm->childFunc = function () use ($pm, $file, $result) {
31    ini_set('swoole.display_errors', 'Off');
32    $serv = new Server('127.0.0.1', $pm->getFreePort(), SWOOLE_BASE);
33    $serv->set(array(
34        "worker_num" => 2,
35        'task_worker_num' => 1,
36        'task_ipc_mode' => 3,
37        'message_queue_key' => MSGQ_KEY,
38        'log_file' => $file,
39    ));
40    $serv->on("WorkerStart", function (Server $serv) use ($pm) {
41        $pm->wakeup();
42    });
43    $serv->on('receive', function (Server $serv, $fd, $rid, $data) {
44
45    });
46    $serv->on('task', function (Server $serv, $task_id, $worker_id, $data) use ($pm, $result) {
47        $pm->wakeup();
48        $result->add(1);
49    });
50
51    $serv->start();
52};
53
54$pm->childFirst();
55$pm->run();
56
57// echo file_get_contents($file);
58Assert::true(swoole_string(file_get_contents($file))->contains('ProcessPool_worker_loop: bad task packet'));
59unlink($file);
60Assert::eq($result->get(), 1);
61?>
62--EXPECT--
63