Skip to content

Commit b40ab7a

Browse files
authored
Merge pull request #30 from php-http/Nyholm-patch-1
Sleep more
2 parents bd07d7e + 86d962a commit b40ab7a

10 files changed

+72
-12
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: php
22

3-
sudo: false
3+
sudo: required
44

55
cache:
66
directories:

tests/BaseTestCase.php

+7
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ public function startServer($name)
1212
{
1313
$filename = __DIR__ . '/server/' . $name . '.php';
1414
$pipes = [];
15+
16+
if (!Semaphore::acquire()) {
17+
$this->fail('Could not connect to server');
18+
}
19+
1520
$this->servers[$name] = proc_open('php '. $filename, [], $pipes);
1621
sleep(1);
1722
}
@@ -28,5 +33,7 @@ public function tearDown()
2833
foreach (array_keys($this->servers) as $name) {
2934
$this->stopServer($name);
3035
}
36+
37+
Semaphore::release();
3138
}
3239
}

tests/Semaphore.php

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Http\Client\Socket\Tests;
4+
5+
/**
6+
* @author Tobias Nyholm <[email protected]>
7+
*/
8+
final class Semaphore
9+
{
10+
private static $openConnections = 0;
11+
12+
/**
13+
* Busy waiting for my turn to go.
14+
*
15+
* @return bool
16+
*/
17+
public static function acquire()
18+
{
19+
$tries = 1;
20+
while (self::$openConnections > 0) {
21+
sleep($tries++);
22+
if ($tries > 5) {
23+
return false;
24+
}
25+
}
26+
self::$openConnections++;
27+
28+
return true;
29+
}
30+
31+
/**
32+
* Signal that you are done.
33+
*/
34+
public static function release()
35+
{
36+
// Do no be too quick
37+
usleep(500000);
38+
self::$openConnections--;
39+
}
40+
}

tests/StreamTest.php

+6-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Http\Client\Socket\Tests;
44

5+
use Http\Client\Socket\Exception\TimeoutException;
56
use Http\Client\Socket\Stream;
67
use PHPUnit\Framework\TestCase;
78

@@ -108,18 +109,16 @@ public function testIsReadable()
108109
$this->assertTrue($stream->isReadable());
109110
}
110111

112+
/**
113+
* @expectedException \Http\Client\Socket\Exception\TimeoutException
114+
*/
111115
public function testTimeout()
112116
{
113117
$socket = fsockopen("php.net", 80);
114118
socket_set_timeout($socket, 0, 100);
115119

116-
$stream = new Stream($socket);
117-
118-
try {
119-
$stream->getContents();
120-
} catch (\Exception $e) {
121-
$this->assertInstanceOf('Http\Socket\Exception\TimeoutException', $e);
122-
}
120+
$stream = new Stream($socket, 50);
121+
$stream->getContents();
123122
}
124123

125124
public function testMetadatas()

tests/server/ssl/file.srl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2D
1+
2F

tests/server/tcp-bugous-server.php

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<?php
22

3+
require_once __DIR__."/../Semaphore.php";
4+
35
$socketServer = stream_socket_server('127.0.0.1:19999');
46
$client = stream_socket_accept($socketServer);
57

68
fclose($client);
9+
\Http\Client\Socket\Tests\Semaphore::release();

tests/server/tcp-server.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
<?php
22

3+
require_once __DIR__."/../Semaphore.php";
4+
35
$socketServer = stream_socket_server('127.0.0.1:19999');
4-
$client = stream_socket_accept($socketServer);
6+
$client = stream_socket_accept($socketServer);
57

68
fwrite($client, str_replace("\n", "\r\n", <<<EOR
79
HTTP/1.1 200 OK
@@ -14,3 +16,4 @@
1416
while (!@feof($client)) {
1517
@fread($client, 1000);
1618
}
19+
\Http\Client\Socket\Tests\Semaphore::release();

tests/server/tcp-ssl-server-client.php

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
require_once __DIR__."/../Semaphore.php";
4+
35
$context = stream_context_create([
46
'ssl' => [
57
'local_cert' => __DIR__ . '/ssl/server-and-key.pem',
@@ -44,3 +46,4 @@
4446
while (!@feof($client)) {
4547
@fread($client, 1000);
4648
}
49+
\Http\Client\Socket\Tests\Semaphore::release();

tests/server/tcp-ssl-server.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
require_once __DIR__."/../Semaphore.php";
4+
35
$context = stream_context_create([
46
'ssl' => [
57
'local_cert' => __DIR__ . '/ssl/server-and-key.pem'
@@ -30,8 +32,8 @@
3032
}
3133

3234

33-
34-
3535
while (!@feof($client)) {
3636
@fread($client, 1000);
3737
}
38+
39+
\Http\Client\Socket\Tests\Semaphore::release();

tests/server/unix-domain-server.php

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
require_once __DIR__."/../Semaphore.php";
4+
35
if (file_exists(__DIR__.'/server.sock')) {
46
unlink(__DIR__.'/server.sock');
57
}
@@ -20,3 +22,4 @@
2022
}
2123

2224
unlink(__DIR__.'/server.sock');
25+
\Http\Client\Socket\Tests\Semaphore::release();

0 commit comments

Comments
 (0)