Added subprotocol check for client, test fixes

This commit is contained in:
Chris Boden 2016-02-08 21:43:17 -05:00
parent 0f4df7fed5
commit 9f405beccb
5 changed files with 46 additions and 9 deletions

View File

@ -14,8 +14,12 @@ class ResponseVerifier {
$response->getHeader('Sec-WebSocket-Accept')
, $request->getHeader('Sec-WebSocket-Key')
);
$passes += (int)$this->verifySubProtocol(
$request->getHeader('Sec-WebSocket-Protocol')
, $response->getHeader('Sec-WebSocket-Protocol')
);
return (4 === $passes);
return (5 === $passes);
}
public function verifyStatus($status) {
@ -41,4 +45,8 @@ class ResponseVerifier {
public function sign($key) {
return base64_encode(sha1($key . NegotiatorInterface::GUID, true));
}
public function verifySubProtocol(array $requestHeader, array $responseHeader) {
return 0 === count($responseHeader) || count(array_intersect($responseHeader, $requestHeader)) > 0;
}
}

View File

@ -1,11 +1,9 @@
<?php
namespace Ratchet\RFC6455\Test\Unit\Handshake;
use Ratchet\RFC6455\Handshake\RequestVerifier;
/**
* covers Ratchet\WebSocket\Version\RFC6455\HandshakeVerifier
* @covers Ratchet\RFC6455\Handshake\RequestVerifier
*/
class RequestVerifierTest extends \PHPUnit_Framework_TestCase {
/**

View File

@ -0,0 +1,34 @@
<?php
namespace Ratchet\RFC6455\Test\Unit\Handshake;
use Ratchet\RFC6455\Handshake\ResponseVerifier;
/**
* @covers Ratchet\WebSocket\Version\RFC6455\ResponseVerifier
*/
class ResponseVerifierTest extends \PHPUnit_Framework_TestCase {
/**
* @var ResponseVerifier
*/
protected $_v;
public function setUp() {
$this->_v = new ResponseVerifier;
}
public static function subProtocolsProvider() {
return [
[true, ['a'], ['a']]
, [true, ['b', 'a'], ['c', 'd', 'a']]
, [false, ['a', 'b', 'c'], ['d']]
, [true, [], []]
, [true, ['a', 'b'], []]
];
}
/**
* @dataProvider subProtocolsProvider
*/
public function testVerifySubProtocol($expected, $response, $request) {
$this->assertEquals($expected, $this->_v->verifySubProtocol($response, $request));
}
}

View File

@ -1,10 +1,9 @@
<?php
namespace Ratchet\RFC6455\Test\Unit\Messaging\Protocol;
use Ratchet\RFC6455\Messaging\Protocol\Frame;
/**
* @covers Ratchet\RFC6455\Messaging\Protocol\Frame
* @todo getMaskingKey, getPayloadStartingByte don't have tests yet
* @todo Could use some clean up in general, I had to rush to fix a bug for a deadline, sorry.
*/

View File

@ -1,12 +1,10 @@
<?php
namespace Ratchet\RFC6455\Test\Unit\Messaging\Protocol;
use Ratchet\RFC6455\Messaging\Protocol\Frame;
use Ratchet\RFC6455\Messaging\Protocol\Message;
/**
* covers Ratchet\WebSocket\Version\RFC6455\Message
* @covers Ratchet\RFC6455\Messaging\Protocol\Message
*/
class MessageTest extends \PHPUnit_Framework_TestCase {
/** @var Message */