Correct ResponseVerifier logic replaces #39

This commit is contained in:
Matt Bonneau 2020-05-14 10:56:29 -04:00
parent d8075617ac
commit d9df3419ba
2 changed files with 13 additions and 5 deletions

View File

@ -51,7 +51,13 @@ class ResponseVerifier {
} }
public function verifySubProtocol(array $requestHeader, array $responseHeader) { public function verifySubProtocol(array $requestHeader, array $responseHeader) {
return 0 === count($responseHeader) || count(array_intersect($responseHeader, $requestHeader)) > 0; if (0 === count($responseHeader)) {
return true;
}
$requestedProtocols = array_map('trim', explode(',', implode(',', $requestHeader)));
return count($responseHeader) === 1 && count(array_intersect($responseHeader, $requestedProtocols)) === 1;
} }
public function verifyExtensions(array $requestHeader, array $responseHeader) { public function verifyExtensions(array $requestHeader, array $responseHeader) {

View File

@ -21,17 +21,19 @@ class ResponseVerifierTest extends TestCase {
public static function subProtocolsProvider() { public static function subProtocolsProvider() {
return [ return [
[true, ['a'], ['a']] [true, ['a'], ['a']]
, [true, ['b', 'a'], ['c', 'd', 'a']] , [true, ['c', 'd', 'a'], ['a']]
, [false, ['a', 'b', 'c'], ['d']] , [true, ['c, a', 'd'], ['a']]
, [true, [], []] , [true, [], []]
, [true, ['a', 'b'], []] , [true, ['a', 'b'], []]
, [false, ['c', 'd', 'a'], ['b', 'a']]
, [false, ['a', 'b', 'c'], ['d']]
]; ];
} }
/** /**
* @dataProvider subProtocolsProvider * @dataProvider subProtocolsProvider
*/ */
public function testVerifySubProtocol($expected, $response, $request) { public function testVerifySubProtocol($expected, $request, $response) {
$this->assertEquals($expected, $this->_v->verifySubProtocol($response, $request)); $this->assertEquals($expected, $this->_v->verifySubProtocol($request, $response));
} }
} }