From 079da38cbd7aed97e62fd2b99d652b2397637db9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20L=C3=BCck?= Date: Sun, 12 Jun 2022 18:56:25 +0200 Subject: [PATCH] Forward compatibility with upcoming Promise v3 --- .github/workflows/ci.yml | 3 ++ composer.json | 32 +++++++++++++++---- src/Io/StreamingServer.php | 3 +- tests/Io/MiddlewareRunnerTest.php | 3 +- .../LimitConcurrentRequestsMiddlewareTest.php | 8 ++--- 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 27577838..84dc0c38 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,8 @@ jobs: with: php-version: ${{ matrix.php }} coverage: xdebug + env: + COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: composer install - run: vendor/bin/phpunit --coverage-text if: ${{ matrix.php >= 7.3 }} @@ -38,6 +40,7 @@ jobs: name: PHPUnit (HHVM) runs-on: ubuntu-18.04 continue-on-error: true + if: false # temporarily skipped until https://github.com/azjezz/setup-hhvm/issues/3 is addressed steps: - uses: actions/checkout@v2 - uses: azjezz/setup-hhvm@v1 diff --git a/composer.json b/composer.json index 4c9a0383..28e82ca7 100644 --- a/composer.json +++ b/composer.json @@ -31,17 +31,17 @@ "fig/http-message-util": "^1.1", "psr/http-message": "^1.0", "react/event-loop": "^1.2", - "react/promise": "^2.3 || ^1.2.1", - "react/promise-stream": "^1.1", - "react/socket": "^1.9", + "react/promise": "^3@dev || ^2.1 || ^1.2.1", + "react/promise-stream": "^1.4", + "react/socket": "dev-promise-3 as 1.12.0", "react/stream": "^1.2", "ringcentral/psr7": "^1.2" }, "require-dev": { "clue/block-react": "^1.5", - "clue/http-proxy-react": "^1.7", - "clue/reactphp-ssh-proxy": "^1.3", - "clue/socks-react": "^1.3", + "clue/http-proxy-react": "dev-promise-v3 as 1.8.0", + "clue/reactphp-ssh-proxy": "dev-promise-v3 as 1.4.0", + "clue/socks-react": "dev-promise-v3 as 1.4.0", "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" }, "autoload": { @@ -49,5 +49,23 @@ }, "autoload-dev": { "psr-4": { "React\\Tests\\Http\\": "tests" } - } + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/WyriHaximus-labs/socket" + }, + { + "type": "vcs", + "url": "https://github.com/clue-labs/reactphp-http-proxy" + }, + { + "type": "vcs", + "url": "https://github.com/clue-labs/reactphp-socks" + }, + { + "type": "vcs", + "url": "https://github.com/clue-labs/reactphp-ssh-proxy" + } + ] } diff --git a/src/Io/StreamingServer.php b/src/Io/StreamingServer.php index a054be3d..13f0b0c4 100644 --- a/src/Io/StreamingServer.php +++ b/src/Io/StreamingServer.php @@ -9,7 +9,6 @@ use React\Http\Message\Response; use React\Http\Message\ServerRequest; use React\Promise; -use React\Promise\CancellablePromiseInterface; use React\Promise\PromiseInterface; use React\Socket\ConnectionInterface; use React\Socket\ServerInterface; @@ -158,7 +157,7 @@ public function handleRequest(ConnectionInterface $conn, ServerRequestInterface } // cancel pending promise once connection closes - if ($response instanceof CancellablePromiseInterface) { + if ($response instanceof PromiseInterface && \method_exists($response, 'cancel')) { $conn->on('close', function () use ($response) { $response->cancel(); }); diff --git a/tests/Io/MiddlewareRunnerTest.php b/tests/Io/MiddlewareRunnerTest.php index d8f5f232..d038c7ea 100644 --- a/tests/Io/MiddlewareRunnerTest.php +++ b/tests/Io/MiddlewareRunnerTest.php @@ -9,7 +9,6 @@ use React\Http\Io\MiddlewareRunner; use React\Http\Message\ServerRequest; use React\Promise; -use React\Promise\CancellablePromiseInterface; use React\Promise\PromiseInterface; use React\Tests\Http\Middleware\ProcessStack; use React\Tests\Http\TestCase; @@ -480,7 +479,7 @@ function (RequestInterface $request) use ($once) { $promise = $middleware($request); - $this->assertTrue($promise instanceof CancellablePromiseInterface); + $this->assertTrue($promise instanceof PromiseInterface && \method_exists($promise, 'cancel')); $promise->cancel(); } } diff --git a/tests/Middleware/LimitConcurrentRequestsMiddlewareTest.php b/tests/Middleware/LimitConcurrentRequestsMiddlewareTest.php index 7e537391..6c63a94f 100644 --- a/tests/Middleware/LimitConcurrentRequestsMiddlewareTest.php +++ b/tests/Middleware/LimitConcurrentRequestsMiddlewareTest.php @@ -79,7 +79,7 @@ public function testLimitOneRequestConcurrently() /** * Ensure resolve frees up a slot */ - $deferredA->resolve(); + $deferredA->resolve(null); $this->assertTrue($calledA); $this->assertTrue($calledB); @@ -88,7 +88,7 @@ public function testLimitOneRequestConcurrently() /** * Ensure reject also frees up a slot */ - $deferredB->reject(); + $deferredB->reject(new \RuntimeException()); $this->assertTrue($calledA); $this->assertTrue($calledB); @@ -194,7 +194,7 @@ public function testStreamDoesPauseAndThenResumeWhenDequeued() $limitHandlers(new ServerRequest('GET', 'https://example.com/', array(), $body), function () {}); - $deferred->reject(); + $deferred->reject(new \RuntimeException()); } public function testReceivesBufferedRequestSameInstance() @@ -452,7 +452,7 @@ public function testReceivesStreamingBodyChangesInstanceWithCustomBodyButSameDat $req = $request; }); - $deferred->reject(); + $deferred->reject(new \RuntimeException()); $this->assertNotSame($request, $req); $this->assertInstanceOf('Psr\Http\Message\ServerRequestInterface', $req);