diff options
Diffstat (limited to 'assets/php/vendor/react/socket/tests/LimitingServerTest.php')
-rw-r--r-- | assets/php/vendor/react/socket/tests/LimitingServerTest.php | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/assets/php/vendor/react/socket/tests/LimitingServerTest.php b/assets/php/vendor/react/socket/tests/LimitingServerTest.php new file mode 100644 index 0000000..2cc9a58 --- /dev/null +++ b/assets/php/vendor/react/socket/tests/LimitingServerTest.php @@ -0,0 +1,195 @@ +<?php + +namespace React\Tests\Socket; + +use React\Socket\LimitingServer; +use React\Socket\TcpServer; +use React\EventLoop\Factory; +use Clue\React\Block; + +class LimitingServerTest extends TestCase +{ + public function testGetAddressWillBePassedThroughToTcpServer() + { + $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock(); + $tcp->expects($this->once())->method('getAddress')->willReturn('127.0.0.1:1234'); + + $server = new LimitingServer($tcp, 100); + + $this->assertEquals('127.0.0.1:1234', $server->getAddress()); + } + + public function testPauseWillBePassedThroughToTcpServer() + { + $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock(); + $tcp->expects($this->once())->method('pause'); + + $server = new LimitingServer($tcp, 100); + + $server->pause(); + } + + public function testPauseTwiceWillBePassedThroughToTcpServerOnce() + { + $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock(); + $tcp->expects($this->once())->method('pause'); + + $server = new LimitingServer($tcp, 100); + + $server->pause(); + $server->pause(); + } + + public function testResumeWillBePassedThroughToTcpServer() + { + $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock(); + $tcp->expects($this->once())->method('resume'); + + $server = new LimitingServer($tcp, 100); + + $server->pause(); + $server->resume(); + } + + public function testResumeTwiceWillBePassedThroughToTcpServerOnce() + { + $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock(); + $tcp->expects($this->once())->method('resume'); + + $server = new LimitingServer($tcp, 100); + + $server->pause(); + $server->resume(); + $server->resume(); + } + + public function testCloseWillBePassedThroughToTcpServer() + { + $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock(); + $tcp->expects($this->once())->method('close'); + + $server = new LimitingServer($tcp, 100); + + $server->close(); + } + + public function testSocketErrorWillBeForwarded() + { + $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock(); + + $tcp = new TcpServer(0, $loop); + + $server = new LimitingServer($tcp, 100); + + $server->on('error', $this->expectCallableOnce()); + + $tcp->emit('error', array(new \RuntimeException('test'))); + } + + public function testSocketConnectionWillBeForwarded() + { + $connection = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock(); + + $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock(); + + $tcp = new TcpServer(0, $loop); + + $server = new LimitingServer($tcp, 100); + $server->on('connection', $this->expectCallableOnceWith($connection)); + $server->on('error', $this->expectCallableNever()); + + $tcp->emit('connection', array($connection)); + + $this->assertEquals(array($connection), $server->getConnections()); + } + + public function testSocketConnectionWillBeClosedOnceLimitIsReached() + { + $first = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock(); + $first->expects($this->never())->method('close'); + $second = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock(); + $second->expects($this->once())->method('close'); + + $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock(); + + $tcp = new TcpServer(0, $loop); + + $server = new LimitingServer($tcp, 1); + $server->on('connection', $this->expectCallableOnceWith($first)); + $server->on('error', $this->expectCallableOnce()); + + $tcp->emit('connection', array($first)); + $tcp->emit('connection', array($second)); + } + + public function testPausingServerWillBePausedOnceLimitIsReached() + { + $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock(); + $loop->expects($this->once())->method('addReadStream'); + $loop->expects($this->once())->method('removeReadStream'); + + $tcp = new TcpServer(0, $loop); + + $connection = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock(); + + $server = new LimitingServer($tcp, 1, true); + + $tcp->emit('connection', array($connection)); + } + + public function testSocketDisconnectionWillRemoveFromList() + { + $loop = Factory::create(); + + $tcp = new TcpServer(0, $loop); + + $socket = stream_socket_client($tcp->getAddress()); + fclose($socket); + + $server = new LimitingServer($tcp, 100); + $server->on('connection', $this->expectCallableOnce()); + $server->on('error', $this->expectCallableNever()); + + Block\sleep(0.1, $loop); + + $this->assertEquals(array(), $server->getConnections()); + } + + public function testPausingServerWillEmitOnlyOneButAcceptTwoConnectionsDueToOperatingSystem() + { + $loop = Factory::create(); + + $server = new TcpServer(0, $loop); + $server = new LimitingServer($server, 1, true); + $server->on('connection', $this->expectCallableOnce()); + $server->on('error', $this->expectCallableNever()); + + $first = stream_socket_client($server->getAddress()); + $second = stream_socket_client($server->getAddress()); + + Block\sleep(0.1, $loop); + + fclose($first); + fclose($second); + } + + public function testPausingServerWillEmitTwoConnectionsFromBacklog() + { + $loop = Factory::create(); + + $twice = $this->createCallableMock(); + $twice->expects($this->exactly(2))->method('__invoke'); + + $server = new TcpServer(0, $loop); + $server = new LimitingServer($server, 1, true); + $server->on('connection', $twice); + $server->on('error', $this->expectCallableNever()); + + $first = stream_socket_client($server->getAddress()); + fclose($first); + $second = stream_socket_client($server->getAddress()); + fclose($second); + + Block\sleep(0.1, $loop); + } +} |