1--TEST--
2swoole_socket_coro: recv bad packet
3--SKIPIF--
4<?php
5require __DIR__ . '/../include/skipif.inc';
6?>
7--FILE--
8<?php
9require __DIR__ . '/../include/bootstrap.php';
10
11const SIZE = 2 * 1024 * 1024;
12
13$pm = new SwooleTest\ProcessManager;
14
15$pm->parentFunc = function ($pid) use ($pm) {
16    for ($i = 0; $i < MAX_CONCURRENCY_MID; $i++) {
17        go(function () use ($pm, $i) {
18            $cli = new Co\Socket(AF_INET, SOCK_STREAM, 0);
19            $cli->setProtocol([
20                'open_length_check' => true,
21                'package_max_length' => 4 * 1024 * 1024,
22                'package_length_type' => 'N',
23                'package_length_offset' => 0,
24                'package_body_offset' => 4,
25            ]);
26            if ($cli->connect('127.0.0.1', $pm->getFreePort()) == false) {
27                echo "ERROR\n";
28                return;
29            }
30            for ($i = 0; $i < 3; $i++) {
31                $sid = strval(rand(100000, 999999));
32                $send_data = str_repeat('A', 1000) . $sid;
33                $cli->send(pack('N', strlen($send_data)) . $send_data);
34                $data = $cli->recvPacket(0.2);
35                Assert::isEmpty($data);
36            }
37        });
38    }
39    Swoole\Event::wait();
40    $pm->kill();
41};
42
43$pm->childFunc = function () use ($pm) {
44    $serv = new Swoole\Server('127.0.0.1', $pm->getFreePort(), SWOOLE_PROCESS);
45    $serv->set(array(
46        "worker_num" => 4,
47        'log_level' => SWOOLE_LOG_ERROR,
48        'open_length_check' => true,
49        'package_max_length' => 4 * 1024 * 1024,
50        'package_length_type' => 'N',
51        'package_length_offset' => 0,
52        'package_body_offset' => 4,
53    ));
54    $serv->on("WorkerStart", function (Swoole\Server $serv) use ($pm) {
55        $pm->wakeup();
56    });
57    $serv->on('receive', function (Swoole\Server $serv, $fd, $rid, $data) {
58        $len = rand(1024, 8192);
59        $send_data = str_repeat('A', $len);
60        //bad packet
61        $serv->send($fd, pack('N', SIZE) . $send_data);
62    });
63    $serv->start();
64};
65
66$pm->childFirst();
67$pm->run();
68?>
69--EXPECT--
70