/** * 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 differentTests() { $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts/info@cundd.net')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts/info@cundd.net')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts/info@cundd.net')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts/info@cundd.net')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts/info@cundd.net')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts/')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts/')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts/')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts/')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts/')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertNull($requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts/my-info-path')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts/my-info-path')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts/my-info-path')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts/my-info-path')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts/my-info-path')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts-database/my-info-path')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts-database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts-database/my-info-path')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts-database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts-database/my-info-path')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts-database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts-database/my-info-path')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts-database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts-database/my-info-path')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts-database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my-info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts_database/my_info-path')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my_info-path', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts_database/my_info-path')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my_info-path', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts_database/my_info-path')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my_info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts_database/my_info-path')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my_info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts_database/my_info-path')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('my_info-path', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts_database/my-super_email@a-smthng.com')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts_database/my-super_email@a-smthng.com')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts_database/my-super_email@a-smthng.com')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts_database/my-super_email@a-smthng.com')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts_database/my-super_email@a-smthng.com')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/contacts_database/my-super_email@a-smthng.com/something-more')); $this->assertEquals('GET', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('HEAD', '/contacts_database/my-super_email@a-smthng.com/something-more')); $this->assertEquals('HEAD', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertTrue($requestInfo->isReadRequest()); $this->assertFalse($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('POST', '/contacts_database/my-super_email@a-smthng.com/something-more')); $this->assertEquals('POST', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('PUT', '/contacts_database/my-super_email@a-smthng.com/something-more')); $this->assertEquals('PUT', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('DELETE', '/contacts_database/my-super_email@a-smthng.com/something-more')); $this->assertEquals('DELETE', $requestInfo->getMethod()); $this->assertEquals('contacts_database', $requestInfo->getDatabaseIdentifier()); $this->assertEquals('*****@*****.**', $requestInfo->getDataIdentifier()); $this->assertFalse($requestInfo->isReadRequest()); $this->assertTrue($requestInfo->isWriteRequest()); $this->assertNull($requestInfo->getSpecialHandlerAction()); }
/** * @test */ public function getStatsActionTest() { $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/_stats/')); $handlerResult = $this->fixture->getStatsAction($requestInfo); $this->assertInstanceOf('Cundd\\PersistentObjectStore\\Server\\Handler\\HandlerResultInterface', $handlerResult); }