运行Flexunit测试时出现BlazeDS错误:检测到重复的基于HTTP的FlexSession

时间:2010-10-26 04:14:15

标签: java flex spring-security blazeds flexunit4

我正在使用Maven Flexmojos插件在Jetty / Java / Spring Security / BlazeDS后端的命令行上运行一些FlexUnit4集成测试。这些集成测试在独立版本的Flash播放器中运行。其中一个测试尝试了几种不同的登录方案,如下所示:

    [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.

如果我尝试登录/退出两次,也会发生这种情况。所有登录和注销方法都基于使用AMFChannelSet的ChannelSet.login和ChannelSet.logout。

更新:我相信我找到了问题的根源。独立播放器不使用cookie,因此混淆了BlazeDS后端。见这里:http://www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

1 个答案:

答案 0 :(得分:1)

问题的间歇性导致我猜测竞争状况正在发生。使用Charles代理协议调试实用程序,我能够看到AMF请求/响应消息。我不是(现在仍然不确定),但我最好的猜测是,在服务器有机会完全禁用之前的FlexSession之前,第二次登录尝试正在进行。

因此,在登录尝试之间“购买时间”我将测试方法分成不同的测试类和中提琴......这一切都刚刚工作。

也许测试后的睡眠/延迟也可以完成,但我找不到ActionScript睡眠功能。