Flexunit テスト実行時の BlazeDS エラー:重複した HTTP ベースの FlexSessions が検出されました

StackOverflow https://stackoverflow.com/questions/4020652

質問

Maven Flexmojos プラグインを使用して、Jetty/Java/Spring Security/BlazeDS バックエンドに対してコマンド ラインで FlexUnit4 統合テストを実行しています。これらの統合テストは、Flash Player のスタンドアロン バージョンで実行されます。これらのテストの 1 つは、次のようないくつかの異なるログイン シナリオを試みます。

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

これらのテストのどちらか一方は単独では 100% 合格しますが、両方のテストを交互に実行すると、断続的に (約 75% の確率で) エラーが発生します。

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.

これは、ログイン/ログアウトを 2 回試行した場合にも発生します。すべてのログインおよびログアウト メソッドは、AMFChannelSet を使用する ChannelSet.login および ChannelSet.logout に基づいています。

アップデート: 問題の原因が見つかったと思います。スタンドアロン プレーヤーは Cookie を使用しないため、BlazeDS バックエンドを混乱させます。ここを参照してください: http://www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

役に立ちましたか?

解決

問題が断続的に発生することから、競合状態が発生しているのではないかと推測しました。Charles プロキシ プロトコル デバッグ ユーティリティを使用すると、AMF リクエスト/レスポンス メッセージを確認できました。私には確信がありませんでした (そして今でも確信はありません) が、サーバーが前の FlexSession を完全に無効にする前に 2 回目のログイン試行が行われたのではないかと推測しました。

そこで、ログイン試行間の「時間を稼ぐ」ために、テストメソッドをさまざまなテストクラスとビオラに分割しました...すべてうまくいきました。

おそらく、テスト後のスリープ/遅延でもうまくいくかもしれませんが、ActionScript のスリープ関数は見つかりませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top