Pregunta

Estoy utilizando el Maven Flexmojos plug-in para ejecutar algunas pruebas de integración FlexUnit4 en la línea de comandos contra un / Java / Spring Security embarcadero / BlazeDS backend. Estas pruebas de integración se ejecutan en una versión independiente del reproductor flash. Una de estas pruebas intentos unos diferentes escenarios de inicio de sesión como sigue:

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

Cualquiera de estas pruebas al 100% por sí mismo, pero ellos corriendo tanto uno después de cada otro que soy intermitentemente (aproximadamente el 75% del tiempo) obteniendo un error:

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.

Esto también ocurre si intento de inicio de sesión / cierre de sesión dos veces. Todos los métodos de inicio de sesión y de cierre de sesión se basan en un ChannelSet.login y ChannelSet.logout que están haciendo uso de un AMFChannelSet.

Actualización: Creo que he encontrado la fuente del problema. El reproductor independiente no hace uso de cookies y, por tanto, está confundiendo el backend BlazeDS. Ver aquí: http : //www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

¿Fue útil?

Solución

La naturaleza intermitente del problema, me llevó a suponer que una condición de carrera estaba sucediendo. Utilizando el protocolo del servidor proxy de depuración Charles utilidad, yo era capaz de ver los mensajes de petición / respuesta de AMF. No (no y todavía estoy) estaba seguro, pero mi mejor suposición era que el segundo intento de inicio de sesión estaba ocurriendo antes de que el servidor tuvo la oportunidad de desactivar por completo la FlexSession anterior.

Así que para "ganar tiempo" entre intentos de conexión que separa los métodos de ensayo en diferentes clases de prueba y viola ... todo acaba de realizar.

Tal vez un sueño post-test / retardo también habría hecho el truco, pero no pude encontrar una función de apagado automático de ActionScript.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top