Пример #1
0
 /**
  * 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());
     }
 }
Пример #2
0
 /**
  * @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());
 }
Пример #3
0
 /**
  * @test
  */
 public function getStatsActionTest()
 {
     $requestInfo = RequestInfoFactory::buildRequestInfoFromRequest(new Request('GET', '/_stats/'));
     $handlerResult = $this->fixture->getStatsAction($requestInfo);
     $this->assertInstanceOf('Cundd\\PersistentObjectStore\\Server\\Handler\\HandlerResultInterface', $handlerResult);
 }