Question

J'utilise les tests de plug-in pour exécuter une certaine intégration FlexUnit4 Maven Flexmojos sur la ligne de commande contre une jetée / Java / Spring Security / back-end BlazeDS. Ces tests d'intégration fonctionnent dans une version autonome du lecteur flash. Un de ces tests quelques tentatives différents scénarios de connexion comme suit:

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

Soit un de ces tests passent 100% par lui-même, mais les exécutant à la fois l'un après l'autre, je suis par intermittence (environ 75% du temps) obtenir une erreur:

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.

Cela se produit également si je tente de connexion / déconnexion deux fois. Toutes les méthodes de connexion et de déconnexion sont basés sur une ChannelSet.login et ChannelSet.logout qui font usage d'un AMFChannelSet.

Mise à jour: Je crois J'ai trouvé la source du problème. Le joueur autonome ne fait pas usage de cookies et est donc source de confusion le backend BlazeDS. Voir ici: http : //www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

Était-ce utile?

La solution

La nature intermittente du problème, m'a conduit à deviner qu'une condition de course se passait. Utilisation de l'utilitaire de débogage protocole proxy Charles, j'ai pu voir la demande de l'AMF messages / réponse. Je n'étais pas (et encore ne suis pas) sûr, mais ma meilleure estimation est que la deuxième tentative de connexion se passait avant que le serveur a eu la chance de désactiver complètement le FlexSession précédent.

Donc, pour « acheter du temps » entre les deux tentatives de connexion je me suis séparé les méthodes d'essai dans différentes classes de test et alto ... tout juste a marché.

Peut-être un aurait aussi fait le sommeil post-test / retard l'affaire, mais je ne pouvais pas trouver une fonction de veille ActionScript.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top