Ошибка BlazeDS при выполнении тестов Flexunit: обнаружены повторяющиеся сеансы FlexSessions на основе HTTP.

Я использую подключаемый модуль Maven Flexmojos для запуска некоторых интеграционных тестов FlexUnit4 в командной строке с серверной частью Jetty/Java/Spring Security/BlazeDS. Эти интеграционные тесты выполняются в автономной версии flash player. Один из этих тестов пытается использовать несколько различных сценариев входа в систему следующим образом:

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

Это также происходит, если я дважды пытаюсь войти/выйти из системы. Все методы входа и выхода основаны на ChannelSet.login и ChannelSet.logout, которые используют AMFChannelSet.

Обновление: кажется, я нашел источник проблемы. Автономный проигрыватель не использует файлы cookie и, следовательно, сбивает с толку серверную часть BlazeDS. См. здесь: http://www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/


person HDave    schedule 26.10.2010    source источник


Ответы (1)


Периодический характер проблемы заставил меня предположить, что происходит состояние гонки. Используя утилиту отладки прокси-протокола Charles, я смог увидеть сообщения запроса/ответа AMF. Я не был (и до сих пор не уверен), но я предположил, что вторая попытка входа в систему была предпринята до того, как у сервера была возможность полностью отключить предыдущую FlexSession.

Итак, чтобы «выиграть время» между попытками входа в систему, я разделил тестовые методы на разные тестовые классы и альт... все это просто сработало.

Возможно, послетестовый сон/задержка также помогли бы, но я не смог найти функцию сна ActionScript.

person HDave    schedule 27.10.2010
comment
попробуйте установить уровень лога при отладке в blazeds; это довольно многословно - person Cornel Creanga; 27.10.2010