From a491348d442ab8e6cd2fa403d4365cdad78e52ce Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Thu, 21 Jun 2018 14:13:41 -0700 Subject: Vendoring deprecated composer libs --- libs/jsonrpc/tests/ServerTest.php | 258 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 libs/jsonrpc/tests/ServerTest.php (limited to 'libs/jsonrpc/tests/ServerTest.php') diff --git a/libs/jsonrpc/tests/ServerTest.php b/libs/jsonrpc/tests/ServerTest.php new file mode 100644 index 00000000..87f37c2d --- /dev/null +++ b/libs/jsonrpc/tests/ServerTest.php @@ -0,0 +1,258 @@ + base64_encode('myuser:mypassword'), + ); + + $server = new Server($this->payload, $env); + $server->setAuthenticationHeader('X-Auth'); + $this->assertEquals('myuser', $server->getUsername()); + $this->assertEquals('mypassword', $server->getPassword()); + } + + public function testCustomAuthenticationHeaderWithEmptyValue() + { + $server = new Server($this->payload); + $server->setAuthenticationHeader('X-Auth'); + $this->assertNull($server->getUsername()); + $this->assertNull($server->getPassword()); + } + + public function testGetUsername() + { + $server = new Server($this->payload); + $this->assertNull($server->getUsername()); + + $server = new Server($this->payload, array('PHP_AUTH_USER' => 'username')); + $this->assertEquals('username', $server->getUsername()); + } + + public function testGetPassword() + { + $server = new Server($this->payload); + $this->assertNull($server->getPassword()); + + $server = new Server($this->payload, array('PHP_AUTH_PW' => 'password')); + $this->assertEquals('password', $server->getPassword()); + } + + public function testExecute() + { + $server = new Server($this->payload); + $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) { + return $a + $b + $c; + }); + + self::$functions + ->expects($this->once()) + ->method('header') + ->with('Content-Type: application/json'); + + $this->assertEquals('{"jsonrpc":"2.0","result":7,"id":"1"}', $server->execute()); + } + + public function testExecuteRequestParserOverride() + { + $requestParser = $this->getMockBuilder('JsonRPC\Request\RequestParser') + ->getMock(); + + $requestParser->method('withPayload')->willReturn($requestParser); + $requestParser->method('withProcedureHandler')->willReturn($requestParser); + $requestParser->method('withMiddlewareHandler')->willReturn($requestParser); + $requestParser->method('withLocalException')->willReturn($requestParser); + + $server = new Server($this->payload, array(), null, $requestParser); + + $requestParser->expects($this->once()) + ->method('parse'); + + $server->execute(); + } + + public function testExecuteBatchRequestParserOverride() + { + $batchRequestParser = $this->getMockBuilder('JsonRPC\Request\BatchRequestParser') + ->getMock(); + + $batchRequestParser->method('withPayload')->willReturn($batchRequestParser); + $batchRequestParser->method('withProcedureHandler')->willReturn($batchRequestParser); + $batchRequestParser->method('withMiddlewareHandler')->willReturn($batchRequestParser); + $batchRequestParser->method('withLocalException')->willReturn($batchRequestParser); + + $server = new Server('["...", "..."]', array(), null, null, $batchRequestParser); + + $batchRequestParser->expects($this->once()) + ->method('parse'); + + $server->execute(); + } + + public function testExecuteResponseBuilderOverride() + { + $responseBuilder = $this->getMockBuilder('JsonRPC\Response\ResponseBuilder') + ->getMock(); + + $responseBuilder->expects($this->once()) + ->method('sendHeaders'); + + $server = new Server($this->payload, array(), $responseBuilder); + $server->execute(); + } + + public function testExecuteProcedureHandlerOverride() + { + $batchRequestParser = $this->getMockBuilder('JsonRPC\Request\BatchRequestParser') + ->getMock(); + + $procedureHandler = $this->getMockBuilder('JsonRPC\ProcedureHandler') + ->getMock(); + + $batchRequestParser->method('withPayload')->willReturn($batchRequestParser); + $batchRequestParser->method('withProcedureHandler')->willReturn($batchRequestParser); + $batchRequestParser->method('withMiddlewareHandler')->willReturn($batchRequestParser); + $batchRequestParser->method('withLocalException')->willReturn($batchRequestParser); + + $server = new Server('["...", "..."]', array(), null, null, $batchRequestParser, $procedureHandler); + + $batchRequestParser->expects($this->once()) + ->method('parse'); + + $batchRequestParser->expects($this->once()) + ->method('withProcedureHandler') + ->with($this->identicalTo($procedureHandler)); + + $server->execute(); + } + + public function testWhenCallbackRaiseForbiddenException() + { + $server = new Server($this->payload); + $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) { + throw new AccessDeniedException(); + }); + + self::$functions + ->expects($this->at(0)) + ->method('header') + ->with('HTTP/1.0 403 Forbidden'); + + self::$functions + ->expects($this->at(1)) + ->method('header') + ->with('Content-Type: application/json'); + + $this->assertEquals('{"jsonrpc":"2.0","error":{"code":403,"message":"Forbidden"},"id":null}', $server->execute()); + } + + public function testWhenCallbackRaiseUnauthorizedException() + { + $server = new Server($this->payload); + $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) { + throw new AuthenticationFailureException(); + }); + + self::$functions + ->expects($this->at(0)) + ->method('header') + ->with('HTTP/1.0 401 Unauthorized'); + + self::$functions + ->expects($this->at(1)) + ->method('header') + ->with('Content-Type: application/json'); + + $this->assertEquals('{"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":null}', $server->execute()); + } + + public function testWhenMiddlewareRaiseUnauthorizedException() + { + $server = new Server($this->payload); + $server->getMiddlewareHandler()->withMiddleware(new DummyMiddleware()); + $server->getProcedureHandler()->withCallback('sum', function($a, $b) { + return $a + $b; + }); + + self::$functions + ->expects($this->at(0)) + ->method('header') + ->with('HTTP/1.0 401 Unauthorized'); + + self::$functions + ->expects($this->at(1)) + ->method('header') + ->with('Content-Type: application/json'); + + $this->assertEquals('{"jsonrpc":"2.0","error":{"code":401,"message":"Unauthorized"},"id":null}', $server->execute()); + } + + public function testFilterRelayExceptions() + { + $server = new Server($this->payload); + $server->withLocalException('MyException'); + $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) { + throw new MyException('test'); + }); + + $this->setExpectedException('MyException'); + $server->execute(); + } + + public function testCustomExceptionAreRelayedToClient() + { + $server = new Server($this->payload); + $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) { + throw new MyException('test'); + }); + + self::$functions + ->expects($this->once()) + ->method('header') + ->with('Content-Type: application/json'); + + $this->assertEquals('{"jsonrpc":"2.0","error":{"code":0,"message":"test"},"id":"1"}', $server->execute()); + } + + public function testCustomResponseException() + { + $server = new Server($this->payload); + $server->getProcedureHandler()->withCallback('sum', function($a, $b, $c) { + throw new ResponseException('test', 123, null, 'more info'); + }); + + self::$functions + ->expects($this->once()) + ->method('header') + ->with('Content-Type: application/json'); + + $this->assertEquals('{"jsonrpc":"2.0","error":{"code":123,"message":"test","data":"more info"},"id":"1"}', $server->execute()); + } +} -- cgit v1.2.3