خطأ blazeds عند تشغيل اختبارات Flexunit: تم اكتشاف Flexsessions المستندة إلى HTTP

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

سؤال

أنا أستخدم المكون الإضافي Maven FlexMojos لتشغيل بعض اختبارات تكامل FlexUnit4 على سطر الأوامر مقابل الواجهة الخلفية للأمن/Java/Spring/Blazeds. يتم تشغيل اختبارات التكامل هذه في نسخة مستقلة من مشغل 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.

يحدث هذا أيضًا إذا حاولت تسجيل الدخول/تسجيل الدخول مرتين. تعتمد جميع طرق تسجيل الدخول والتسجيل على قناة channelset.login و channelset.logout التي تستخدم amfchannelset.

تحديث: أعتقد أنني وجدت مصدر المشكلة. اللاعب المستقل لا يستفيد من ملفات تعريف الارتباط وبالتالي يربك الواجهة الخلفية. انظر هنا: http://www.webappsolution.com/wordpress/2009/11/25/flexunit-4-testing-services-in-flash-player-issue/

هل كانت مفيدة؟

المحلول

دفعتني الطبيعة المتقطعة للمشكلة إلى تخمين أن حالة السباق كانت تحدث. باستخدام الأداة المساعدة لبروتوكول بروتوكول تشارلز ، تمكنت من رؤية رسائل طلب/استجابة AMF. لم أكن (وما زلت لست متأكدًا) ، لكن أفضل تخمين لي هو أن محاولة تسجيل الدخول الثانية كانت تحدث قبل أن تتاح للخادم فرصة تعطيل المرونة السابقة تمامًا.

حتى "شراء الوقت" بين محاولات تسجيل الدخول ، قمت بفصل طرق الاختبار إلى فئات اختبار مختلفة و Viola ... كل شيء نجح.

ربما كان من الممكن أيضًا إجراء عملية نوم/تأخير ما بعد الاختبار ، لكنني لم أتمكن من العثور على وظيفة نوم Actionscript.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top