خطأ blazeds عند تشغيل اختبارات Flexunit: تم اكتشاف Flexsessions المستندة إلى HTTP
-
26-09-2019 - |
سؤال
أنا أستخدم المكون الإضافي 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.