125 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace Ratchet\Tests\Server;
 | 
						|
use Ratchet\Server\IpBlackList;
 | 
						|
 | 
						|
/**
 | 
						|
 * @covers Ratchet\Server\IpBlackList
 | 
						|
 */
 | 
						|
class IpBlackListTest extends \PHPUnit_Framework_TestCase {
 | 
						|
    protected $blocker;
 | 
						|
    protected $mock;
 | 
						|
 | 
						|
    public function setUp() {
 | 
						|
        $this->mock = $this->getMock('\\Ratchet\\MessageComponentInterface');
 | 
						|
        $this->blocker = new IpBlackList($this->mock);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testOnOpen() {
 | 
						|
        $this->mock->expects($this->exactly(3))->method('onOpen');
 | 
						|
 | 
						|
        $conn1 = $this->newConn();
 | 
						|
        $conn2 = $this->newConn();
 | 
						|
        $conn3 = $this->newConn();
 | 
						|
 | 
						|
        $this->blocker->onOpen($conn1);
 | 
						|
        $this->blocker->onOpen($conn3);
 | 
						|
        $this->blocker->onOpen($conn2);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testBlockDoesNotTriggerOnOpen() {
 | 
						|
        $conn = $this->newConn();
 | 
						|
 | 
						|
        $this->blocker->blockAddress($conn->remoteAddress);
 | 
						|
 | 
						|
        $this->mock->expects($this->never())->method('onOpen');
 | 
						|
 | 
						|
        $ret = $this->blocker->onOpen($conn);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testBlockDoesNotTriggerOnClose() {
 | 
						|
        $conn = $this->newConn();
 | 
						|
 | 
						|
        $this->blocker->blockAddress($conn->remoteAddress);
 | 
						|
 | 
						|
        $this->mock->expects($this->never())->method('onClose');
 | 
						|
 | 
						|
        $ret = $this->blocker->onOpen($conn);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testOnMessageDecoration() {
 | 
						|
        $conn = $this->newConn();
 | 
						|
        $msg  = 'Hello not being blocked';
 | 
						|
 | 
						|
        $this->mock->expects($this->once())->method('onMessage')->with($conn, $msg);
 | 
						|
 | 
						|
        $this->blocker->onMessage($conn, $msg);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testOnCloseDecoration() {
 | 
						|
        $conn = $this->newConn();
 | 
						|
 | 
						|
        $this->mock->expects($this->once())->method('onClose')->with($conn);
 | 
						|
 | 
						|
        $this->blocker->onClose($conn);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testBlockClosesConnection() {
 | 
						|
        $conn = $this->newConn();
 | 
						|
        $this->blocker->blockAddress($conn->remoteAddress);
 | 
						|
 | 
						|
        $conn->expects($this->once())->method('close');
 | 
						|
 | 
						|
        $this->blocker->onOpen($conn);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testAddAndRemoveWithFluentInterfaces() {
 | 
						|
        $blockOne = '127.0.0.1';
 | 
						|
        $blockTwo = '192.168.1.1';
 | 
						|
        $unblock  = '75.119.207.140';
 | 
						|
 | 
						|
        $this->blocker
 | 
						|
            ->blockAddress($unblock)
 | 
						|
            ->blockAddress($blockOne)
 | 
						|
            ->unblockAddress($unblock)
 | 
						|
            ->blockAddress($blockTwo)
 | 
						|
        ;
 | 
						|
 | 
						|
        $this->assertEquals(array($blockOne, $blockTwo), $this->blocker->getBlockedAddresses());
 | 
						|
    }
 | 
						|
 | 
						|
    public function testDecoratorPassesErrors() {
 | 
						|
        $conn = $this->newConn();
 | 
						|
        $e    = new \Exception('I threw an error');
 | 
						|
 | 
						|
        $this->mock->expects($this->once())->method('onError')->with($conn, $e);
 | 
						|
 | 
						|
        $this->blocker->onError($conn, $e);
 | 
						|
    }
 | 
						|
 | 
						|
    public function addressProvider() {
 | 
						|
        return array(
 | 
						|
            array('127.0.0.1', '127.0.0.1')
 | 
						|
          , array('localhost', 'localhost')
 | 
						|
          , array('fe80::1%lo0', 'fe80::1%lo0')
 | 
						|
          , array('127.0.0.1', '127.0.0.1:6392')
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider addressProvider
 | 
						|
     */
 | 
						|
    public function testFilterAddress($expected, $input) {
 | 
						|
        $this->assertEquals($expected, $this->blocker->filterAddress($input));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testUnblockingSilentlyFails() {
 | 
						|
        $this->assertInstanceOf('\\Ratchet\\Server\\IpBlackList', $this->blocker->unblockAddress('localhost'));
 | 
						|
    }
 | 
						|
 | 
						|
    protected function newConn() {
 | 
						|
        $conn = $this->getMock('\\Ratchet\\ConnectionInterface');
 | 
						|
        $conn->remoteAddress = '127.0.0.1';
 | 
						|
 | 
						|
        return $conn;
 | 
						|
    }
 | 
						|
} |