8000 Merge pull request #131 from clue-labs/timeout-tests · reactphp/http-client@2e6ed6d · GitHub
[go: up one dir, main page]

Skip to content

Commit 2e6ed6d

Browse files
authored
Merge pull request #131 from clue-labs/timeout-tests
Apply maximum test timeouts for integration tests
2 parents 22e87bc + 7293f8d commit 2e6ed6d

File tree

2 files changed

+41
-18
lines changed

2 files changed

+41
-18
lines changed

composer.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
"ringcentral/psr7": "^1.2"
1414
},
1515
"require-dev": {
16-
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
16+
"clue/block-react": "^1.2",
17+
"phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35",
18+
"react/promise-stream": "^1.1"
1719
},
1820
"autoload": {
1921
"psr-4": {

tests/FunctionalIntegrationTest.php

< 8000 span class="prc-TooltipV2-Tooltip-cYMVY" data-direction="s" role="tooltip" aria-hidden="true" id=":Rhndlab:">Expand all lines: tests/FunctionalIntegrationTest.php
Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,37 @@
22

33
namespace React\Tests\HttpClient;
44

5+
use Clue\React\Block;
56
use React\EventLoop\Factory;
67
use React\HttpClient\Client;
78
use React\HttpClient\Response;
9+
use React\Promise\Deferred;
10+
use React\Promise\Stream;
811
use React\Socket\Server;
912
use React\Socket\ConnectionInterface;
1013

1114
class FunctionalIntegrationTest extends TestCase
1215
{
16+
/**
17+
* Test timeout to use for local tests.
18+
*
19+
* In practice this would be near 0.001s, but let's leave some time in case
20+
* the local system is currently busy.
21+
*
22+
* @var float
23+
*/
24+
const TIMEOUT_LOCAL = 1.0;
25+
26+
/**
27+
* Test timeout to use for remote (internet) tests.
28+
*
29+
* In pratice this should be below 1s, but this relies on infrastructure
30+
* outside our control, so consider this a maximum to avoid running for hours.
31+
*
32+
* @var float
33+
*/
34+
const TIMEOUT_REMOTE = 10.0;
35+
1336
public function testRequestToLocalhostEmitsSingleRemoteConnection()
1437
{
1538
$loop = Factory::create();
@@ -24,9 +47,11 @@ public function testRequestToLocalhostEmitsSingleRemoteConnection()
2447

2548
$client = new Client($loop);
2649
$request = $client->request('GET', 'http://localhost:' . $port);
50+
51+
$promise = Stream\first($request, 'close');
2752 8000
$request->end();
2853

29-
$loop->run();
54+
Block\await($promise, $loop, self::TIMEOUT_LOCAL);
3055
}
3156

3257
public function testRequestLegacyHttpServerWithOnlyLineFeedReturnsSuccessfulResponse()
@@ -47,9 +72,10 @@ public function testRequestLegacyHttpServerWithOnlyLineFeedReturnsSuccessfulResp
4772
$response->on('data', $once);
4873
});
4974

75+
$promise = Stream\first($request, 'close');
5076
$request->end();
5177

52-
$loop->run();
78+
Block\await($promise, $loop, self::TIMEOUT_LOCAL);
5379
}
5480

5581
/** @group internet */
@@ -65,9 +91,10 @@ public function testSuccessfulResponseEmitsEnd()
6591
$response->on('end', $once);
6692
});
6793

94+
$promise = Stream\first($request, 8000 'close');
6895
$request->end();
6996

70-
$loop->run();
97+
Block\await($promise, $loop, self::TIMEOUT_REMOTE);
7198
}
7299

73100
/** @group internet */
@@ -79,19 +106,17 @@ public function testPostDataReturnsData()
79106
$data = str_repeat('.', 33000);
80107
$request = $client->request('POST', 'https://' . (mt_rand(0, 1) === 0 ? 'eu.' : '') . 'httpbin.org/post', array('Content-Length' => strlen($data)));
81108

82-
$buffer = '';
83-
$request->on('response', function (Response $response) use (&$buffer) {
84-
$response->on('data', function ($chunk) use (&$buffer) {
85-
$buffer .= $chunk;
86-
});
109+
$deferred = new Deferred();
110+
$request->on('response', function (Response $response) use ($deferred) {
111+
$deferred->resolve(Stream\buffer($response));
87112
});
88113

89114
$request->on('error', 'printf');
90115
$request->on('error', $this->expectCallableNever());
91116

92117
$request->end($data);
93118

94-
$loop->run();
119+
$buffer = Block\await($deferred->promise(), $loop, self::TIMEOUT_REMOTE);
95120

96121
$this->assertNotEquals('', $buffer);
97122

@@ -110,19 +135,17 @@ public function testPostJsonReturnsData()
110135
$data = json_encode(array('numbers' => range(1, 50)));
111136
$request = $client->request('POST', 'https://httpbin.org/post', array('Content-Length' => strlen($data), 'Content-Type' => 'application/json'));
112137

113-
$buffer = '';
114-
$request->on('response', function (Response $response) use (&$buffer) {
115-
$response->on('data', function ($chunk) use (&$buffer) {
116-
$buffer .= $chunk;
117-
});
138+
$deferred = new Deferred();
139+
$request->on('response', function (Response $response) use ($deferred) {
140+
$deferred->resolve(Stream\buffer($response));
118141
});
119142

120143
$request->on('error', 'printf');
121144
$request->on('error', $this->expectCallableNever());
122145

123146
$request->end($data);
124147

125-
$loop->run();
148+
$buffer = Block\await($deferred->promise(), $loop, self::TIMEOUT_REMOTE);
126149

127150
$this->assertNotEquals('', $buffer);
128151

@@ -142,7 +165,5 @@ public function testCancelPendingConnectionEmitsClose()
142165
$request->on('close', $this->expectCallableOnce());
143166
$request->end();
144167
$request->close();
145-
146-
$loop->run();
147168
}
148169
}

0 commit comments

Comments
 (0)
0