Pergunta

Estou usando o plug-in do Maven FlexMOJOS para executar alguns testes de integração FlexUnit4 na linha de comando contra um back-end de segurança/java/spring security/Blazeds. Esses testes de integração são executados em uma versão independente do flash player. Um desses testes tenta alguns cenários de login diferentes da seguinte forma:

    [Test(async)]   
    public function userLogin_badCredentials_FailedLogin():void {
        var username:String = "guest";
        var password:String = "not_the_right_password";

        var token:AsyncToken = authenticationService.userLogin(username, password);
        token.addResponder(Async.asyncResponder(this, new TestResponder(handleRemoteObjectNoExpectedResult, handleRemoteObjectExpectedFaultBadCredentials), TIMEOUT, username, handleTestTimeout));
    }


    [Test(async)]
    public function userLoginLogout_UserLoggedIn_SuccessfulLoginLogout():void {
        var username:String = "admin";
        var password:String = "admin";

        var token:AsyncToken = authenticationService.userLogin(username, password);;
        token.addResponder(Async.asyncResponder(this, new TestResponder(userLoginLogout2_UserLoggedIn_SuccessfulLoginLogout, handleUnexpectedFault), TIMEOUT, username, handleTestTimeout));
    }
    public function userLoginLogout2_UserLoggedIn_SuccessfulLoginLogout(event:ResultEvent, passThroughData:Object):void {
        // Must have logged in correctly
        assertTrue(serviceManager.channelSet.authenticated);

        // Now lets test logout
        var token:AsyncToken = authenticationService.userLogout();
        token.addResponder(Async.asyncResponder(this, new TestResponder(handleExpectedResult, handleUnexpectedFault), TIMEOUT, null, handleTestTimeout));
    }

Qualquer um desses testes passa 100% por si só, mas executando os dois após o outro, sou intermitentemente (cerca de 75% das vezes) recebendo um erro:

Channel.Ping.Failed error Detected duplicate HTTP-based FlexSessions, generally
 due to the remote host disabling session cookies. Session cookies must be enabled
 to manage the client connection correctly.

Isso também acontece se eu tentar fazer login/logout duas vezes. Todos os métodos de login e logout são baseados em um canalleset.login e canalleset.logout que estão usando um amfChannelset.

Atualizar: Acredito que encontrei a fonte do problema. O jogador independente não faz uso de cookies e, portanto, está confundindo o back -end dos Blazeds. Veja aqui: http://www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

Foi útil?

Solução

A natureza intermitente do problema me levou a adivinhar que uma condição de corrida estava acontecendo. Usando o utilitário de depuração do proxy Charles Proxy, pude ver as mensagens de solicitação/resposta AMF. Eu não tinha (e ainda não tenho) certeza, mas meu melhor palpite era que a segunda tentativa de login estava acontecendo antes que o servidor tivesse a chance de desativar completamente a flexão anterior.

Então, para "comprar tempo" entre as tentativas de login, separei os métodos de teste em diferentes classes de teste e viola ... tudo funcionou.

Talvez um sono/atraso pós-teste também tenha feito o truque, mas não consegui encontrar uma função de sono do ActionScript.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top