Domanda

Sto usando il Maven Flexmojos plug-in per eseguire alcuni test di integrazione FlexUnit4 sulla riga di comando contro un molo / Java / Primavera di sicurezza / BlazeDS backend. Questi test di integrazione eseguiti in una versione stand-alone del flash player. Uno di questi test tentativi alcuni scenari d'accesso differenti come segue:

    [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));
    }

Uno di questi test di passaggio al 100% da solo, ma in esecuzione entrambi uno dopo l'altro sono a intermittenza (circa il 75% del tempo) ottenendo un errore:

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.

Questo accade anche se cerco di login / logout due volte. Tutti i metodi di login e logout si basano su un ChannelSet.login e ChannelSet.logout che stanno facendo uso di un AMFChannelSet.

Aggiornamento: Credo di aver trovato la fonte del problema. Il lettore standalone non fa uso di cookies e quindi confonde il backend BlazeDS. Vedi qui: http : //www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

È stato utile?

Soluzione

La natura intermittente del problema, mi ha portato a immaginare che una condizione di competizione che stava accadendo. Utilizzando il protocollo proxy Charles debug di utilità, sono stato in grado di vedere i messaggi di richiesta / risposta AMF. Non ero (e lo sono ancora meno) sicuro, ma la mia migliore ipotesi era che il secondo tentativo di accesso stava accadendo prima che il server ha avuto la possibilità di disattivare completamente il FlexSession precedente.

Quindi, per "guadagnare tempo" tra i tentativi di accesso che separava i metodi di prova in diverse classi di test e viola ... tutto appena finito di lavorare.

Forse un sonno post-test / ritardo avrebbe anche fatto il trucco, ma non riuscivo a trovare una funzione sleep ActionScript.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top