_v = new RequestVerifier(); } 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, []) ); } /** * @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, []), 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']), // as seen in Firefox 47.0.1 - see https://github.com/ratchetphp/RFC6455/issues/14 array(true, ['keep-alive, Upgrade']), array(true, ['Upgrade, keep-alive']), array(true, ['keep-alive, Upgrade, something']), array(true, ['keep-alive, Upgrade', 'something']), array(false, ['']), array(false, []) ); } /** * @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==']), array(false, []), array(false, ['dGhlIHNhbXBsZSBub25jZQ==', 'Some other value']), array(false, ['Some other value', '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, []) ); } /** * @dataProvider versionProvider */ public function testVersionEquals13($expected, $in) { $this->assertEquals($expected, $this->_v->verifyVersion($in)); } }