Updated RFC6455 handshaker to check values case insensitively Made sure RFC6455 handshaker matches encoding properly Added mbstring as a requirement for Ratchet Refs #28, #30
		
			
				
	
	
		
			170 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace Ratchet\Tests\WebSocket\Version\RFC6455;
 | 
						|
use Ratchet\WebSocket\Version\RFC6455\HandshakeVerifier;
 | 
						|
 | 
						|
/**
 | 
						|
 * @covers Ratchet\WebSocket\Version\RFC6455\HandshakeVerifier
 | 
						|
 */
 | 
						|
class HandshakeVerifierTest extends \PHPUnit_Framework_TestCase {
 | 
						|
    /**
 | 
						|
     * @var Ratchet\WebSocket\Version\RFC6455\HandshakeVerifier
 | 
						|
     */
 | 
						|
    protected $_v;
 | 
						|
 | 
						|
    public function setUp() {
 | 
						|
        $this->_v = new HandshakeVerifier;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function methodProvider() {
 | 
						|
        return array(
 | 
						|
            array(true,  'GET')
 | 
						|
          , array(true,  'get')
 | 
						|
          , array(true,  'Get')
 | 
						|
          , array(false, 'POST')
 | 
						|
          , array(false, 'DELETE')
 | 
						|
          , array(false, 'PUT')
 | 
						|
          , array(false, 'PATCH')
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider methodProvider
 | 
						|
     */
 | 
						|
    public function testMethodMustBeGet($result, $in) {
 | 
						|
        $this->assertEquals($result, $this->_v->verifyMethod($in));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function httpVersionProvider() {
 | 
						|
        return array(
 | 
						|
            array(true,  1.1)
 | 
						|
          , array(true,  '1.1')
 | 
						|
          , array(true,  1.2)
 | 
						|
          , array(true,  '1.2')
 | 
						|
          , array(true,  2)
 | 
						|
          , array(true,  '2')
 | 
						|
          , array(true,  '2.0')
 | 
						|
          , array(false, '1.0')
 | 
						|
          , array(false, 1)
 | 
						|
          , array(false, '0.9')
 | 
						|
          , array(false, '')
 | 
						|
          , array(false, 'hello')
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider httpVersionProvider
 | 
						|
     */
 | 
						|
    public function testHttpVersionIsAtLeast1Point1($expected, $in) {
 | 
						|
        $this->assertEquals($expected, $this->_v->verifyHTTPVersion($in));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function uRIProvider() {
 | 
						|
        return array(
 | 
						|
            array(true, '/chat')
 | 
						|
          , array(true, '/hello/world?key=val')
 | 
						|
          , array(false, '/chat#bad')
 | 
						|
          , array(false, 'nope')
 | 
						|
          , array(false, '/ ಠ_ಠ ')
 | 
						|
          , array(false, '/✖')
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider URIProvider
 | 
						|
     */
 | 
						|
    public function testRequestUri($expected, $in) {
 | 
						|
        $this->assertEquals($expected, $this->_v->verifyRequestURI($in));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function hostProvider() {
 | 
						|
        return array(
 | 
						|
            array(true, 'server.example.com')
 | 
						|
          , array(false, null)
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider HostProvider
 | 
						|
     */
 | 
						|
    public function testVerifyHostIsSet($expected, $in) {
 | 
						|
        $this->assertEquals($expected, $this->_v->verifyHost($in));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function upgradeProvider() {
 | 
						|
        return array(
 | 
						|
            array(true,  'websocket')
 | 
						|
          , array(true,  'Websocket')
 | 
						|
          , array(true,  'webSocket')
 | 
						|
          , array(false, null)
 | 
						|
          , array(false, '')
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider upgradeProvider
 | 
						|
     */
 | 
						|
    public function testVerifyUpgradeIsWebSocket($expected, $val) {
 | 
						|
        $this->assertEquals($expected, $this->_v->verifyUpgradeRequest($val));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function connectionProvider() {
 | 
						|
        return array(
 | 
						|
            array(true,  'Upgrade')
 | 
						|
          , array(true,  'upgrade')
 | 
						|
          , array(true,  'keep-alive, Upgrade')
 | 
						|
          , array(true,  'Upgrade, keep-alive')
 | 
						|
          , array(true,  'keep-alive, Upgrade, something')
 | 
						|
          , array(false, '')
 | 
						|
          , array(false, null)
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider connectionProvider
 | 
						|
     */
 | 
						|
    public function testConnectionHeaderVerification($expected, $val) {
 | 
						|
        $this->assertEquals($expected, $this->_v->verifyConnection($val));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function keyProvider() {
 | 
						|
        return array(
 | 
						|
            array(true,  'hkfa1L7uwN6DCo4IS3iWAw==')
 | 
						|
          , array(true,  '765vVoQpKSGJwPzJIMM2GA==')
 | 
						|
          , array(true,  'AQIDBAUGBwgJCgsMDQ4PEC==')
 | 
						|
          , array(true,  'axa2B/Yz2CdpfQAY2Q5P7w==')
 | 
						|
          , array(false, 0)
 | 
						|
          , array(false, 'Hello World')
 | 
						|
          , array(false, '1234567890123456')
 | 
						|
          , array(false, '123456789012345678901234')
 | 
						|
          , array(true,  base64_encode('UTF8allthngs+✓'))
 | 
						|
          , array(true,  'dGhlIHNhbXBsZSBub25jZQ==')
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider keyProvider
 | 
						|
     */
 | 
						|
    public function testKeyIsBase64Encoded16BitNonce($expected, $val) {
 | 
						|
        $this->assertEquals($expected, $this->_v->verifyKey($val));
 | 
						|
    }
 | 
						|
 | 
						|
    public static function versionProvider() {
 | 
						|
        return array(
 | 
						|
            array(true,  13)
 | 
						|
          , array(true,  '13')
 | 
						|
          , array(false, 12)
 | 
						|
          , array(false, 14)
 | 
						|
          , array(false, '14')
 | 
						|
          , array(false, 'hi')
 | 
						|
          , array(false, '')
 | 
						|
          , array(false, null)
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @dataProvider versionProvider
 | 
						|
     */
 | 
						|
    public function testVersionEquals13($expected, $in) {
 | 
						|
        $this->assertEquals($expected, $this->_v->verifyVersion($in));
 | 
						|
    }
 | 
						|
} |