From eb5ce8b4ec6f37556919410db10316fc002865a5 Mon Sep 17 00:00:00 2001 From: Sergii Khrystenko Date: Thu, 15 Feb 2024 13:50:09 +0100 Subject: [PATCH] Trigger ssl_protocol deprecation when it is really not null and not AMQPConnectionConfig instance --- .../Connection/AMQPStreamConnection.php | 2 +- .../Connection/AMQPStreamConnectionTest.php | 45 ++++++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/PhpAmqpLib/Connection/AMQPStreamConnection.php b/PhpAmqpLib/Connection/AMQPStreamConnection.php index f9f5c377f..3480d1122 100644 --- a/PhpAmqpLib/Connection/AMQPStreamConnection.php +++ b/PhpAmqpLib/Connection/AMQPStreamConnection.php @@ -45,7 +45,7 @@ public function __construct( $ssl_protocol = null, ?AMQPConnectionConfig $config = null ) { - if (func_num_args() === 17 || ($ssl_protocol !== null && $ssl_protocol instanceof AMQPConnectionConfig === false)) { + if ($ssl_protocol !== null && $ssl_protocol instanceof AMQPConnectionConfig === false) { trigger_error( '$ssl_protocol parameter is deprecated, use stream_context_set_option($context, \'ssl\', \'crypto_method\', $ssl_protocol) instead (see https://www.php.net/manual/en/function.stream-socket-enable-crypto.php for possible values)', E_USER_DEPRECATED diff --git a/tests/Unit/Connection/AMQPStreamConnectionTest.php b/tests/Unit/Connection/AMQPStreamConnectionTest.php index fad5b8626..8ea267924 100644 --- a/tests/Unit/Connection/AMQPStreamConnectionTest.php +++ b/tests/Unit/Connection/AMQPStreamConnectionTest.php @@ -2,6 +2,7 @@ namespace PhpAmqpLib\Tests\Unit\Connection; +use InvalidArgumentException; use PhpAmqpLib\Connection\AMQPStreamConnection; use PHPUnit\Framework\TestCase; @@ -10,9 +11,9 @@ class AMQPStreamConnectionTest extends TestCase /** * @test */ - public function channel_rpc_timeout_should_be_invalid_if_greater_than_read_write_timeout() + public function channel_rpc_timeout_should_be_invalid_if_greater_than_read_write_timeout(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('channel RPC timeout must not be greater than I/O read-write timeout'); new AMQPStreamConnection( @@ -33,4 +34,44 @@ public function channel_rpc_timeout_should_be_invalid_if_greater_than_read_write 5.0 ); } + + /** + * @test + * Generate deprecation warning if ssl_protocol is set + */ + public function trigger_deprecation_is_ssl_protocol_set(): void + { + $deprecationMessage = ''; + $deprecationCode = ''; + set_error_handler( + static function ($errno, $errstr) use (&$deprecationMessage, &$deprecationCode) { + $deprecationMessage = $errstr; + $deprecationCode = $errno; + }, + E_USER_DEPRECATED + ); + + new AMQPStreamConnection( + HOST, + PORT, + USER, + PASS, + VHOST, + false, + 'AMQPLAIN', + null, + 'en_US', + 3.0, + 3.0, + null, + false, + 0, + 3.0, + 'test_ssl_protocol' + ); + + restore_error_handler(); + $this->assertEquals(E_USER_DEPRECATED, $deprecationCode); + $this->assertEquals('$ssl_protocol parameter is deprecated, use stream_context_set_option($context, \'ssl\', \'crypto_method\', $ssl_protocol) instead (see https://www.php.net/manual/en/function.stream-socket-enable-crypto.php for possible values)', $deprecationMessage); + } }