java - 运行 Flexunit 测试时 BlazeDS 错误 : Detected duplicate HTTP-based FlexSessions

标签 java apache-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/

最佳答案

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

因此,为了在登录尝试之间“争取时间”,我将测试方法分为不同的测试类和中提琴......一切都正常。

也许测试后 sleep /延迟也能达到目的,但我找不到 ActionScript sleep 函数。

关于java - 运行 Flexunit 测试时 BlazeDS 错误 : Detected duplicate HTTP-based FlexSessions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020652/

相关文章:

java - 如何将 JTable 放入 JScrollPane 中?

apache-flex - 将绘制的flash/flex UIComponent导出到基于矢量的打印文件的方法

php - Flex - 增加 PHP 服务函数调用的超时

spring - org.springframework.security.authentication.AuthenticationManager 类型无法解析。它是从所需的 .class 文件间接引用的

java - Swagger + Spring安全性-基于角色的隐藏方法

spring-security - 更改 Spring Security SAML2 登录的 URL

Java SSL 工厂连接到 SSL 服务器(仅使用公钥和证书)

c# - 为什么在赋值声明中,左边声明一个接口(interface),右边声明一个实现类?

java - 如何使用 HTTPClient 的 HEAD 方法获取所有 header

apache-flex - 如何让 Flex Spark 皮肤垂直居中?