-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathMultiRunnerTest.php
91 lines (75 loc) · 1.99 KB
/
MultiRunnerTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
declare(strict_types=1);
namespace Http\Client\Curl\Tests\Integration;
use donatj\MockWebServer\MockWebServer;
use Http\Client\Curl\MultiRunner;
use Http\Client\Curl\PromiseCore;
use PHPUnit\Framework\TestCase;
/**
* Tests for Http\Client\Curl\MultiRunner.
*
* @covers \Http\Client\Curl\MultiRunner
*/
class MultiRunnerTest extends TestCase
{
/**
* Test HTTP server.
*
* @var MockWebServer
*/
private static $server;
/**
* Prepare environment for all tests.
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::$server = new MockWebServer();
self::$server->start();
}
/**
* Cleanup environment after all tests.
*/
public static function tearDownAfterClass(): void
{
self::$server->stop();
parent::tearDownAfterClass();
}
public function testWait(): void
{
$runner = new MultiRunner();
$handle = $this->createCurlHandle('/');
$core1 = $this->createConfiguredMock(PromiseCore::class, ['getHandle' => $handle]);
$core1
->expects(self::once())
->method('fulfill');
$handle = $this->createCurlHandle('/');
$core2 = $this->createConfiguredMock(PromiseCore::class, ['getHandle' => $handle]);
$core2
->expects(self::once())
->method('fulfill');
$runner->add($core1);
$runner->add($core2);
$runner->wait($core1);
$runner->wait($core2);
}
/**
* Create cURL handle with given parameters.
*
* @param string $url Request URL relative to server root.
*
* @return resource
*/
private function createCurlHandle(string $url)
{
$handle = curl_init();
self::assertNotFalse($handle);
curl_setopt_array(
$handle,
[
CURLOPT_URL => self::$server->getServerRoot() . $url
]
);
return $handle;
}
}