/** * Handle the given request * * @param \React\Http\Request $request * @param \React\Http\Response $response */ public function handle($request, $response) { try { $serverAction = RequestInfoFactory::getServerActionForRequest($request); if ($serverAction) { // Handle a very special server action $this->handleServerAction($serverAction, $request, $response); return; } $delayedRequest = FALSE; $handler = $this->getHandlerForRequest($request); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest($request); $specialHandlerAction = RequestInfoFactory::getHandlerActionForRequest($request); $requestResult = FALSE; if ($specialHandlerAction) { // Handle a special handler action $requestResult = call_user_func(array($handler, $specialHandlerAction), $requestInfo); } else { if (!$requestInfo->getDatabaseIdentifier()) { // Show the welcome message $requestResult = $handler->noRoute($requestInfo); } else { // Run normal methods $method = $request->getMethod(); switch ($method) { case 'POST': case 'PUT': $delayedRequest = TRUE; $this->waitForBodyAndPerformAction($request, $response, $requestInfo); break; case 'GET': $requestResult = $handler->read($requestInfo); break; case 'DELETE': $requestResult = $handler->delete($requestInfo); break; default: $requestResult = new HandlerResult(405, new InvalidRequestMethodException(sprintf('Request method "%s" not valid', $method)), 1413033763); } } } if (!$delayedRequest) { $this->handleResult($requestResult, $request, $response); } } catch (LogicException $exception) { $this->handleError($exception, $request, $response); } catch (RuntimeException $exception) { $this->handleError($exception, $request, $response); } catch (\Exception $exception) { $this->writeln('Caught exception #%d: %s', $exception->getCode(), $exception->getMessage()); $this->writeln($exception->getTraceAsString()); } }
/** * @test */ public function getHandlerActionForRequestTest() { $this->assertEquals('getStatsAction', RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_stats'))); $this->assertEquals('getStatsAction', RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_stats/'))); $this->assertEquals('getStatsAction', RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_stats/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_stats'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_stats/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_stats/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_stats'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_stats/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_stats/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_stats'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_stats/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_stats/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_stats'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_stats/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_stats/something'))); $this->assertEquals('getAllDbsAction', RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_all_dbs'))); $this->assertEquals('getAllDbsAction', RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_all_dbs/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_all_dbs'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_all_dbs/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_all_dbs'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_all_dbs/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_all_dbs'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_all_dbs/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_all_dbs'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_all_dbs/'))); // $this->assertEquals('postRestartAction', RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_restart'))); // $this->assertEquals('postRestartAction', RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_restart/'))); // $this->assertEquals('postRestartAction', RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/_restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('POST', '/restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('GET', '/restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('PUT', '/restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('DELETE', '/restart/something'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/restart'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/restart/'))); $this->assertFalse(RequestInfoFactory::getHandlerActionForRequest(new Request('HEAD', '/restart/something'))); }
/** * @test */ public function getStatsActionTest() { $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/_stats/')); $handlerResult = $this->fixture->getStatsAction($requestInfo); $this->assertInstanceOf('Cundd\\PersistentObjectStore\\Server\\Handler\\HandlerResultInterface', $handlerResult); }