From: Michael Wallner Date: Wed, 11 Feb 2015 11:12:26 +0000 (+0100) Subject: add pipelining test X-Git-Tag: RELEASE_2_3_0_RC1~44 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=0fa4750d5cfe59f7471f35c9e026af7d771eace8 add pipelining test --- diff --git a/tests/pipeline.inc b/tests/pipeline.inc new file mode 100644 index 0000000..815b463 --- /dev/null +++ b/tests/pipeline.inc @@ -0,0 +1,25 @@ +setEnvRequest($msg) + ->setHeader("X-Req", $msg->getRequestUrl()) + ->send($client); +} + +serve(function($client) { + $count = trim(fgets(STDIN)); + + /* the peek message */ + respond($client, new http\Message($client, false)); + + /* pipelined messages */ + $req = array(); + for ($i=0; $i < $count; ++ $i) { + $req[] = new http\Message($client, false); + } + foreach ($req as $msg) { + respond($client, $msg); + } +}); diff --git a/tests/pipeline001.phpt b/tests/pipeline001.phpt new file mode 100644 index 0000000..54707df --- /dev/null +++ b/tests/pipeline001.phpt @@ -0,0 +1,56 @@ +--TEST-- +pipelining +--SKIPIF-- + +--FILE-- +configure(["pipelining" => true, "max_host_connections" => 0]); + + /* this is just to let curl know the server may be capable of pipelining */ + $client->enqueue(new http\Client\Request("GET", "http://localhost:$port")); + $client->send(); + + $client->enqueue(new http\Client\Request("GET", "http://localhost:$port/1")); + $client->enqueue(new http\Client\Request("GET", "http://localhost:$port/2")); + $client->enqueue(new http\Client\Request("GET", "http://localhost:$port/3")); + $client->send(); + + while (($response = $client->getResponse())) { + echo $response; + } +}); + +?> +===DONE=== +--EXPECT-- +Test +HTTP/1.1 200 OK +X-Req: /3 +Etag: "" +X-Original-Transfer-Encoding: chunked +HTTP/1.1 200 OK +X-Req: /2 +Etag: "" +X-Original-Transfer-Encoding: chunked +HTTP/1.1 200 OK +X-Req: /1 +Etag: "" +X-Original-Transfer-Encoding: chunked +HTTP/1.1 200 OK +X-Req: / +Etag: "" +X-Original-Transfer-Encoding: chunked +===DONE=== diff --git a/tests/proxy.inc b/tests/proxy.inc index d6803db..61b20dd 100644 --- a/tests/proxy.inc +++ b/tests/proxy.inc @@ -1,25 +1,21 @@ getHeader("Proxy-Connection")) { - $response = new http\Env\Response; - $response->send($client); - - /* soak up the request following the connect */ - new http\Message($client, false); - } - - /* return the initial message as response body */ - $response = new http\Env\Response; - $response->getBody()->append($request); - $response->send($client); - } - return; +include "server.inc"; + +serve(function($client) { + /* this might be a proxy connect or a standard request */ + $request = new http\Message($client, false); + + if ($request->getHeader("Proxy-Connection")) { + $response = new http\Env\Response; + $response->send($client); + + /* soak up the request following the connect */ + new http\Message($client, false); } -} \ No newline at end of file + + /* return the initial message as response body */ + $response = new http\Env\Response; + $response->getBody()->append($request); + $response->send($client); +}); diff --git a/tests/proxy001.phpt b/tests/proxy001.phpt index c8a2e63..c3a5905 100644 --- a/tests/proxy001.phpt +++ b/tests/proxy001.phpt @@ -8,20 +8,21 @@ skip_client_test(); --FILE-- setOptions(array( - "timeout" => 3, - "proxytunnel" => true, - "proxyheader" => array("Hello" => "there!"), - "proxyhost" => "localhost", - "proxyport" => $port, + "timeout" => 3, + "proxytunnel" => true, + "proxyheader" => array("Hello" => "there!"), + "proxyhost" => "localhost", + "proxyport" => $port, )); try { $c->enqueue($r)->send(); @@ -29,11 +30,9 @@ if (($proc = proc_open(PHP_BINARY . " proxy.inc", $spec, $pipes, __DIR__))) { echo $e; } echo $c->getResponse()->getBody(); - while (!feof($pipes[1])) { - echo fgets($pipes[1]); - } unset($r, $client); -} +}); + ?> ===DONE=== --EXPECTF-- diff --git a/tests/server.inc b/tests/server.inc new file mode 100644 index 0000000..304e393 --- /dev/null +++ b/tests/server.inc @@ -0,0 +1,28 @@ +