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 92 93 94 95 96 97 98 99 100 101 102
|
<?php
namespace PhpAmqpLib\Tests\Unit\Wire\IO;
use PhpAmqpLib\Exception\AMQPConnectionClosedException;
use PhpAmqpLib\Wire\IO\SocketIO;
use PHPUnit\Framework\Attributes\Depends;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
/**
* @group connection
*/
class SocketIOTest extends TestCase
{
#[Test]
public function connect()
{
$socketIO = new SocketIO(HOST, PORT, 20, true, 20, 9);
$socketIO->connect();
$ready = $socketIO->select(0, 0);
$this->assertEquals(0, $ready);
return $socketIO;
}
#[Test]
public function connect_ipv6()
{
$socketIO = new SocketIO(HOST6, PORT, 20, true, 20, 9);
$socketIO->connect();
$ready = $socketIO->select(0, 0);
$this->assertEquals(0, $ready);
}
#[Test]
public function connect_with_invalid_credentials()
{
$this->expectException(\PhpAmqpLib\Exception\AMQPIOException::class);
$socket = new SocketIO('invalid_host', 5672);
@$socket->connect();
}
// TODO FUTURE re-enable test
// php-amqplib/php-amqplib#648, php-amqplib/php-amqplib#666
// /**
// * @expectedException \InvalidArgumentException
// * @expectedExceptionMessage read_timeout must be greater than 2x the heartbeat
// */
// #[Test]
// public function read_timeout_must_be_greater_than_2x_the_heartbeat()
// {
// new SocketIO('localhost', 5512, 1);
// }
// /**
// * @expectedException \InvalidArgumentException
// * @expectedExceptionMessage send_timeout must be greater than 2x the heartbeat
// */
// #[Test]
// public function send_timeout_must_be_greater_than_2x_the_heartbeat()
// {
// new SocketIO('localhost', '5512', 30, true, 20, 10);
// }
#[Test]
#[Depends('connect')]
public function read_when_closed(SocketIO $socketIO)
{
$this->expectException(\PhpAmqpLib\Exception\AMQPSocketException::class);
$socketIO->close();
$socketIO->read(1);
}
#[Test]
#[Depends('connect')]
public function write_when_closed(SocketIO $socketIO)
{
$this->expectException(\PhpAmqpLib\Exception\AMQPSocketException::class);
$socketIO->write('data');
}
/**
* @group linux
* @requires OS Linux
*/
#[Test]
public function select_must_throw_io_exception()
{
$this->expectException(AMQPConnectionClosedException::class);
$property = new \ReflectionProperty(SocketIO::class, 'sock');
$property->setAccessible(true);
$socket = new SocketIO('0.0.0.0', PORT, 0.1, false, 0.1, 0);
$property->setValue($socket, null);
$socket->select(0, 0);
}
}
|