1--TEST--
2swoole_server: http request & response
3--SKIPIF--
4<?php
5require __DIR__ . '/../include/skipif.inc';
6?>
7--FILE--
8<?php
9require __DIR__ . '/../include/bootstrap.php';
10
11use Swoole\Server;
12use Swoole\Constant;
13use Swoole\Http\Request;
14use Swoole\Http\Response;
15use Swoole\Coroutine\Http\Client;
16use function Swoole\Coroutine\run;
17
18define('GREETER', 'hello world');
19
20$pm = new SwooleTest\ProcessManager;
21
22$pm->parentFunc = function ($pid) use ($pm) {
23    run(function () use ($pm) {
24        $httpClient = new Client(HTTP_SERVER_HOST, $pm->getFreePort(), false);
25        $httpClient->setMethod("POST");
26        $httpClient->setData("HELLO");
27        $ok = $httpClient->execute("/rawcookie?hello=world&value=1");
28        Assert::assert($ok);
29        Assert::same($httpClient->statusCode, 200);
30        Assert::same($httpClient->errCode, 0);
31        Assert::eq($httpClient->getHeaders()['x-server'], 'swoole');
32        Assert::same($httpClient->getBody(), GREETER);
33        echo "DONE\n";
34    });
35    $pm->kill();
36};
37
38$pm->childFunc = function () use ($pm) {
39    $serv = new Server('127.0.0.1', $pm->getFreePort(), SERVER_MODE_RANDOM);
40    $serv->set([
41        'worker_num' => 1,
42        'log_file' => '/dev/null',
43        'open_http_protocol' => true,
44    ]);
45    $serv->on("Start", function ($serv) use ($pm) {
46        $pm->wakeup();
47    });
48    $serv->on('receive', function (Server $serv, $fd, $reactor_id, $data) {
49        $req = Request::create();
50        Assert::eq($req->parse($data), strlen($data));
51
52        $resp = Response::create([$serv, $req], $fd);
53        $resp->header('X-Server', 'swoole');
54        $resp->end(GREETER);
55        Assert::eq($resp->fd, $fd);
56        Assert::eq($req->fd, $fd);
57    });
58    $serv->on(Constant::EVENT_CLOSE, function (Server $serv, $fd, $reactor_id) {
59    });
60    $serv->start();
61};
62
63$pm->childFirst();
64$pm->run();
65?>
66--EXPECT--
67DONE
68