Frage

Ich bin mit der Maven Flexmojos Plug-in einigen FlexUnit4 Integrationstests auf der Kommandozeile gegen einen Landungssteg / Java / Spring Security ausführen / BlazeDS Backend. Diese Integrationstests in einer Stand-alone-Version des Flash Players laufen. Einer dieser Tests versucht ein paar verschiedene Login-Szenarien wie folgt:

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

Eine dieser Prüfungen bestehen aus 100% für sich, aber sie beide eine hintereinander laufen I intermittierend bin (etwa 75% der Zeit) immer ein Fehler:

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.

Dies geschieht auch, wenn ich versuche, Login / Logout zweimal. Alle An- und Abmeldeverfahren basieren auf einer ChannelSet.login und ChannelSet.logout die Verwendung eines AMFChannelSet machen.

Update: Ich glaube, ich die Ursache des Problems gefunden. Der Standalone-Player nicht die Verwendung von Cookies Gebrauch machen und deshalb ist verwirrend das BlazeDS Backend. Siehe hier: http : //www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

War es hilfreich?

Lösung

Die intermittierende Natur des Problems, führte mich zu erraten, dass eine Race-Bedingung vorging. Unter Verwendung des Charles-Proxy-Protokoll-Utility debuggen, konnte ich die AMF Request / Response-Nachrichten sehen. Ich war nicht (und bin immer noch nicht) sicher, aber meine beste Vermutung war, dass der zweite Anmeldeversuch geschieht, bevor der Server die Möglichkeit, vollständig zu deaktivieren vorherige FlexSession hatte.

So zu „Zeit kaufen“ zwischendurch Login-Versuche ich die Testmethoden in verschiedene Testklassen getrennt und Viola ... es funktioniert einfach.

Vielleicht ein Post-Test Schlaf / Verzögerung würde auch den Trick getan hat, aber ich konnte eine Actionscript-Sleep-Funktion nicht finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top