2011-12-15 4 views
2

Symfony2 인증 메커니즘을 통해 보안이 설정된 컨트롤러에 대한 기능 테스트를 작성하고 싶습니다. 나는 그것을 설명하는 튜토리얼을 많이 읽을 수는 있지만 불행하게도 그들 모두는 현재 Symfony2의 (2.0.7에 2.0.4 테스트) 버전Symfony2 유닛 테스트에서의 인증 처리

내가 지금까지했던 어떤 나를 위해 작동하지 않습니다

추가 config_test.yml에서 보안 설정

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

    providers: 
     main: 
      users: 
       admin: { password: adminsmurf, roles: [ 'ROLE_USER' ] } 
       inventory: { password: inventorysmurf, roles: [ 'ROLE_ADMIN', 'ROLE_USER', 'ROLE_INVENTORY' ] } 
       andon: { password: andonsmurf, roles: [ 'ROLE_ADMIN', 'ROLE_ANDON' ] } 

    firewalls: 
     main: 
      pattern: /.* 
      http_basic: 
       realm: "Secured Area" 
       provider: main 
      logout:  true 
      security: true 
      stateless: true 
      anonymous: true 

단위 테스트

class DefaultControllerTest extends WebTestCase 
{ 

    public function testCorrectAuthentificationCredentials() 
    { 
     $client = static::createClient(); 

     $crawler = $client->request('GET', '/inventory/index', array(), array(), 
            array(
              'PHP_AUTH_USER' => 'admin', 
              'PHP_AUTH_PW' => 'adminsmurf' 
             )); 

     $response = $client->getResponse(); 

     $this->assertEquals(200, $response->getStatusCode()); 
    } 
} 

이 테스트는 실패합니다 (예상 200, 302 가져 오기). 아무도 내가 잘못하고있는 것을 도울 수 있습니까?

업데이트 16/12

나는 한 단계 더 얻었다. 내 일반 보안 파일에 양식 로그인을 사용하고 있습니다. Symfony는 방금 방화벽에 http_basic 로그인을 추가했습니다. 이것이 리디렉션 (302)의 이유입니다. 방금

form_login: false 

을 테스트 보안 설정에 추가했습니다. 이제는 리디렉션이 없지만 결과적으로 401 상태 코드가 표시됩니다.

+0

302는 리디렉션입니다. 어디로 리디렉션되었는지 확인할 수 있습니까? –

+0

@kuba 로그인 양식으로 리디렉션됩니다 (양식 로그인은 내 앱 인증을위한 일반적인 방법입니다). – Timo

+0

리디렉션 문제를 해결했지만 이제 상태 코드 401이 있습니다. – Timo

답변

3

HTTP 기본 인증이 요청하는 네 번째 인수가 아닌 5 번째가되어야 함을 보여줍니다. 소스가 문서입니다 - 작동하지 않으면 업데이트해야합니다. 하지만 알려주세요 :

http://symfony.com/doc/2.0/cookbook/testing/http_authentication.html

을 또한,이 제대로 작동 일단 심포니는 폼의 진입 점 (< 사용 할 이유가 없습니다, 당신은, 다시 폼 인증을 설정할 수 있습니다 - 공상 word :))를 사용하여 리디렉션 할 수 있습니다.

희망 하시겠습니까?

1

필자의 경우 테스트 환경은 별도의 데이터베이스를 사용하지만 사용자에게 입력하는 것을 잊어 버리는 것이 문제였습니다. m)

아시다시피이 문제는 실제로 문제에 대한 해결책은 아니지만 같은 문제가있는 사람들이 모두 상향 조정하면 얼마나 많은 상향 신호가 발생하는지 봅시다. 아무도하지 않는다면, 나는 바보 인 유일한 사람입니다.

그런데 데이터베이스 문제 등으로 인해 인증이 실패했는지 확인하기 위해 메모리 제공 업체에 문의 할 수 있습니다. 그것이 내가 내 문제가 무엇인지를 발견 한 방법입니다.