|
5 | 5 | namespace Spiral\RoadRunner\Tests\Http\Unit; |
6 | 6 |
|
7 | 7 | use Nyholm\Psr7\Factory\Psr17Factory; |
| 8 | +use PHPUnit\Framework\Attributes\CoversClass; |
| 9 | +use PHPUnit\Framework\Attributes\RunClassInSeparateProcess; |
8 | 10 | use PHPUnit\Framework\TestCase; |
9 | | -use Spiral\RoadRunner\Http\HttpWorker; |
| 11 | +use Spiral\Goridge\Frame; |
| 12 | +use Spiral\RoadRunner\Http\GlobalState; |
10 | 13 | use Spiral\RoadRunner\Http\PSR7Worker; |
| 14 | +use Spiral\RoadRunner\Tests\Http\Unit\Stub\TestRelay; |
11 | 15 | use Spiral\RoadRunner\Worker; |
12 | 16 |
|
| 17 | + |
| 18 | +#[CoversClass(PSR7Worker::class)] |
| 19 | +#[CoversClass(GlobalState::class)] |
| 20 | +#[RunClassInSeparateProcess] |
13 | 21 | final class PSR7WorkerTest extends TestCase |
14 | 22 | { |
15 | | - public function testHttpWorkerIsAvailable(): void |
| 23 | + public function testStateServerLeak(): void |
16 | 24 | { |
17 | 25 | $psrFactory = new Psr17Factory(); |
18 | | - |
19 | | - $psrWorker = new PSR7Worker( |
20 | | - Worker::create(), |
| 26 | + $relay = new TestRelay(); |
| 27 | + $psrWorker = new PSR7Worker( |
| 28 | + new Worker($relay), |
21 | 29 | $psrFactory, |
22 | 30 | $psrFactory, |
23 | 31 | $psrFactory, |
24 | 32 | ); |
25 | 33 |
|
26 | | - self::assertInstanceOf(HttpWorker::class, $psrWorker->getHttpWorker()); |
| 34 | + //dataProvider is always random and we need to keep the order |
| 35 | + $fixtures = [ |
| 36 | + [ |
| 37 | + [ |
| 38 | + 'Content-Type' => ['application/html'], |
| 39 | + 'Connection' => ['keep-alive'] |
| 40 | + ], |
| 41 | + [ |
| 42 | + 'REQUEST_URI' => 'http://localhost', |
| 43 | + 'REMOTE_ADDR' => '127.0.0.1', |
| 44 | + 'REQUEST_METHOD' => 'GET', |
| 45 | + 'HTTP_USER_AGENT' => '', |
| 46 | + 'CONTENT_TYPE' => 'application/html', |
| 47 | + 'HTTP_CONNECTION' => 'keep-alive', |
| 48 | + ], |
| 49 | + ], |
| 50 | + [ |
| 51 | + [ |
| 52 | + 'Content-Type' => ['application/json'] |
| 53 | + ], |
| 54 | + [ |
| 55 | + 'REQUEST_URI' => 'http://localhost', |
| 56 | + 'REMOTE_ADDR' => '127.0.0.1', |
| 57 | + 'REQUEST_METHOD' => 'GET', |
| 58 | + 'HTTP_USER_AGENT' => '', |
| 59 | + 'CONTENT_TYPE' => 'application/json' |
| 60 | + ], |
| 61 | + ], |
| 62 | + ]; |
| 63 | + |
| 64 | + $_SERVER = []; |
| 65 | + foreach ($fixtures as [$headers, $expectedServer]) { |
| 66 | + $body = [ |
| 67 | + 'headers' => $headers, |
| 68 | + 'rawQuery' => '', |
| 69 | + 'remoteAddr' => '127.0.0.1', |
| 70 | + 'protocol' => 'HTTP/1.1', |
| 71 | + 'method' => 'GET', |
| 72 | + 'uri' => 'http://localhost', |
| 73 | + 'parsed' => false, |
| 74 | + ]; |
| 75 | + |
| 76 | + $head = (string)\json_encode($body, \JSON_THROW_ON_ERROR); |
| 77 | + $frame = new Frame($head .'test', [\strlen($head)]); |
| 78 | + |
| 79 | + $relay->addFrames($frame); |
| 80 | + |
| 81 | + $psrWorker->waitRequest(); |
| 82 | + |
| 83 | + unset($_SERVER['REQUEST_TIME']); |
| 84 | + unset($_SERVER['REQUEST_TIME_FLOAT']); |
| 85 | + |
| 86 | + self::assertEquals($expectedServer, $_SERVER); |
| 87 | + } |
27 | 88 | } |
28 | 89 |
|
| 90 | + |
29 | 91 | protected function tearDown(): void |
30 | 92 | { |
31 | 93 | // Clean all extra output buffers |
|
0 commit comments