framework_gem 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/EXECUTION_ENGINE.md +282 -0
- data/lib/Gemfile +12 -0
- data/lib/README.md +138 -0
- data/lib/User_Lib/helpers/helpers.rb +13 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_text_rois.rb +48 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_color_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_text_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_video_rois.rb +7 -0
- data/lib/User_Lib/rois/black_rois.rb +33 -0
- data/lib/User_Lib/rois/color_rois.rb +38 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_black_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_color_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_image_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_text_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_video_rois.rb +9 -0
- data/lib/User_Lib/rois/image_rois.rb +38 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_black_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_color_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_image_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_text_rois.rb +13 -0
- data/lib/User_Lib/rois/mdn/mdn_video_rois.rb +9 -0
- data/lib/User_Lib/rois/mobile/android/android_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_image_rois.rb +43 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_image_rois.rb +54 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_color_rois.rb +12 -0
- data/lib/User_Lib/rois/mobile/mobile_image_rois.rb +38 -0
- data/lib/User_Lib/rois/mobile/mobile_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/mobile_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_video_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_video_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_color_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_text_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_video_rois.rb +7 -0
- data/lib/User_Lib/rois/rois.rb +22 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_black_rois.rb +37 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_color_rois.rb +336 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_image_rois.rb +235 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_rois.rb +23 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_text_rois.rb +1523 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_video_rois.rb +32 -0
- data/lib/User_Lib/rois/roku/roku_black_rois.rb +14 -0
- data/lib/User_Lib/rois/roku/roku_color_rois.rb +9 -0
- data/lib/User_Lib/rois/roku/roku_image_rois.rb +13 -0
- data/lib/User_Lib/rois/roku/roku_rois.rb +23 -0
- data/lib/User_Lib/rois/roku/roku_text_rois.rb +9 -0
- data/lib/User_Lib/rois/roku/roku_video_rois.rb +9 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_color_rois.rb +11 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_video_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_color_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_video_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_color_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_video_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_black_rois.rb +13 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_color_rois.rb +29 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_text_rois.rb +92 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_black_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_color_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_text_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_black_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_color_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_text_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_video_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_black_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_color_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_image_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_text_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_color_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_image_rois.rb +19 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_text_rois.rb +47 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_video_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_text_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_text_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_image_rois.rb +12 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_text_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_black_rois.rb +46 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_color_rois.rb +142 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_image_rois.rb +103 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_color_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_image_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_color_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_image_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_color_rois.rb +77 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_image_rois.rb +67 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_text_rois.rb +159 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_video_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_text_rois.rb +221 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_video_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/odn/odn_black_rois.rb +10 -0
- data/lib/User_Lib/rois/stb/odn/odn_color_rois.rb +10 -0
- data/lib/User_Lib/rois/stb/odn/odn_image_rois.rb +58 -0
- data/lib/User_Lib/rois/stb/odn/odn_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_text_rois.rb +70 -0
- data/lib/User_Lib/rois/stb/odn/odn_video_rois.rb +19 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_black_rois.rb +16 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_color_rois.rb +373 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_color_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_image_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_image_rois.rb +1592 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_color_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_image_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_text_rois.rb +2489 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_video_rois.rb +64 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_color_rois.rb +63 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_image_rois.rb +117 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_text_rois.rb +84 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_video_rois.rb +35 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_color_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_image_rois.rb +49 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_text_rois.rb +51 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/stb_text_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_video_rois.rb +9 -0
- data/lib/User_Lib/rois/template.txt +23 -0
- data/lib/User_Lib/rois/text_rois.rb +36 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_text_rois.rb +9 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_video_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_video_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_color_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_text_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_video_rois.rb +7 -0
- data/lib/User_Lib/rois/video_rois.rb +33 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_dvr.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_guide.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_library.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_live_tv.rb +17 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_login.rb +24 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_main_menu.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_movies.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_on_demand.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_product_page.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_screen.rb +23 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_search.rb +31 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_settings.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_video_store.rb +25 -0
- data/lib/User_Lib/screen/dta/dta_dvr.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_guide.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_library.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_live_tv.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_log_in.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_main_menu.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_movies.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_on_demand.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_product_page.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_screen.rb +24 -0
- data/lib/User_Lib/screen/dta/dta_search.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_settings.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_video_store.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_dvr.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_guide.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_library.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_live_tv.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_log_in.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_main_menu.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_movies.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_on_demand.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_product_page.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_screen.rb +24 -0
- data/lib/User_Lib/screen/mdn/mdn_search.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_settings.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_video_store.rb +26 -0
- data/lib/User_Lib/screen/mobile/android/android_devices.rb +35 -0
- data/lib/User_Lib/screen/mobile/android/android_dvr.rb +337 -0
- data/lib/User_Lib/screen/mobile/android/android_favorites.rb +164 -0
- data/lib/User_Lib/screen/mobile/android/android_guide.rb +256 -0
- data/lib/User_Lib/screen/mobile/android/android_live_tv.rb +372 -0
- data/lib/User_Lib/screen/mobile/android/android_login.rb +111 -0
- data/lib/User_Lib/screen/mobile/android/android_main_menu.rb +53 -0
- data/lib/User_Lib/screen/mobile/android/android_on_demand.rb +402 -0
- data/lib/User_Lib/screen/mobile/android/android_parental_controls.rb +73 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_dvr.rb +31 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_guide.rb +39 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_live_tv.rb +104 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_main_menu.rb +27 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_on_demand.rb +35 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_product_page.rb +7 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_search.rb +26 -0
- data/lib/User_Lib/screen/mobile/android/android_privacy_legal.rb +54 -0
- data/lib/User_Lib/screen/mobile/android/android_product_page.rb +484 -0
- data/lib/User_Lib/screen/mobile/android/android_screen.rb +56 -0
- data/lib/User_Lib/screen/mobile/android/android_search.rb +39 -0
- data/lib/User_Lib/screen/mobile/android/android_settings.rb +90 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_dvr.rb +58 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_guide.rb +24 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_live_tv.rb +24 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_main_menu.rb +19 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_on_demand.rb +16 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_product_page.rb +45 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_search.rb +14 -0
- data/lib/User_Lib/screen/mobile/devices_mobile.rb +53 -0
- data/lib/User_Lib/screen/mobile/dvr_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/favorites_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/guide_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/ios/ios_devices.rb +43 -0
- data/lib/User_Lib/screen/mobile/ios/ios_dvr.rb +231 -0
- data/lib/User_Lib/screen/mobile/ios/ios_favorites.rb +79 -0
- data/lib/User_Lib/screen/mobile/ios/ios_guide.rb +53 -0
- data/lib/User_Lib/screen/mobile/ios/ios_live_tv.rb +413 -0
- data/lib/User_Lib/screen/mobile/ios/ios_login.rb +76 -0
- data/lib/User_Lib/screen/mobile/ios/ios_main_menu.rb +38 -0
- data/lib/User_Lib/screen/mobile/ios/ios_on_demand.rb +371 -0
- data/lib/User_Lib/screen/mobile/ios/ios_parental_controls.rb +104 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_dvr.rb +14 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_live_tv.rb +36 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_main_menu.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_on_demand.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_search.rb +13 -0
- data/lib/User_Lib/screen/mobile/ios/ios_privacy_legal.rb +56 -0
- data/lib/User_Lib/screen/mobile/ios/ios_product_page.rb +441 -0
- data/lib/User_Lib/screen/mobile/ios/ios_screen.rb +60 -0
- data/lib/User_Lib/screen/mobile/ios/ios_search.rb +145 -0
- data/lib/User_Lib/screen/mobile/ios/ios_settings.rb +34 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_live_tv.rb +34 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_main_menu.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_on_demand.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_search.rb +13 -0
- data/lib/User_Lib/screen/mobile/live_tv_mobile.rb +73 -0
- data/lib/User_Lib/screen/mobile/login_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/main_menu_mobile.rb +83 -0
- data/lib/User_Lib/screen/mobile/mobile_screen.rb +232 -0
- data/lib/User_Lib/screen/mobile/on_demand_mobile.rb +70 -0
- data/lib/User_Lib/screen/mobile/parental_controls_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/privacy_legal_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/product_page_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/search_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/settings_mobile.rb +33 -0
- data/lib/User_Lib/screen/passport/passport_dvr.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_guide.rb +37 -0
- data/lib/User_Lib/screen/passport/passport_library.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_live_tv.rb +17 -0
- data/lib/User_Lib/screen/passport/passport_main_menu.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_movies.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_on_demand.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_product_page.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_screen.rb +23 -0
- data/lib/User_Lib/screen/passport/passport_search.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_settings.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_video_store.rb +25 -0
- data/lib/User_Lib/screen/roku/brs/roku_guide_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_home_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_live_tv_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_login_brs.rb +103 -0
- data/lib/User_Lib/screen/roku/brs/roku_main_menu_brs.rb +46 -0
- data/lib/User_Lib/screen/roku/brs/roku_on_demand_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_product_page_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_screen_brs.rb +9 -0
- data/lib/User_Lib/screen/roku/brs/roku_search_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_settings_brs.rb +42 -0
- data/lib/User_Lib/screen/roku/brs/roku_watch_later_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_welcome_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/roku_dvr.rb +7 -0
- data/lib/User_Lib/screen/roku/roku_guide.rb +590 -0
- data/lib/User_Lib/screen/roku/roku_home.rb +346 -0
- data/lib/User_Lib/screen/roku/roku_library.rb +26 -0
- data/lib/User_Lib/screen/roku/roku_live_tv.rb +210 -0
- data/lib/User_Lib/screen/roku/roku_login.rb +795 -0
- data/lib/User_Lib/screen/roku/roku_main_menu.rb +425 -0
- data/lib/User_Lib/screen/roku/roku_mini_guide.rb +7 -0
- data/lib/User_Lib/screen/roku/roku_on_demand.rb +479 -0
- data/lib/User_Lib/screen/roku/roku_product_page.rb +483 -0
- data/lib/User_Lib/screen/roku/roku_screen.rb +85 -0
- data/lib/User_Lib/screen/roku/roku_search.rb +229 -0
- data/lib/User_Lib/screen/roku/roku_settings.rb +304 -0
- data/lib/User_Lib/screen/roku/roku_watch_later.rb +51 -0
- data/lib/User_Lib/screen/roku/roku_welcome.rb +10 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_dvr.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_guide.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_home.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_library.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_live_tv.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_login.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_main_menu.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_mini_guide.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_on_demand.rb +26 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_product_page.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_screen.rb +7 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_search.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_settings.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_watch_later.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_welcome.rb +14 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_dvr.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_guide.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_library.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_live_tv.rb +21 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_login.rb +13 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_main_menu.rb +64 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_mini_guide.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_movies.rb +140 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_on_demand.rb +76 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_parental_controls.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_product_page.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_screen.rb +74 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_search.rb +29 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_settings.rb +189 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_tv_shows.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_video_store.rb +24 -0
- data/lib/User_Lib/screen/sara/sara_dvr.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_guide.rb +43 -0
- data/lib/User_Lib/screen/sara/sara_library.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_live_tv.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_log_in.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_main_menu.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_movies.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_on_demand.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_product_page.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_screen.rb +24 -0
- data/lib/User_Lib/screen/sara/sara_search.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_settings.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_video_store.rb +26 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_devices.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_dvr.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_favorites.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_guide.rb +39 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_home.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_library.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_live_tv.rb +59 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_login.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_main_menu.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_mini_guide.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_movies.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_on_demand.rb +531 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_parental_controls.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_privacy_legal.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_product_page.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_quick_menu.rb +7 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_screen.rb +21 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_search.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_settings.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_tv_shows.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_video_store.rb +10 -0
- data/lib/User_Lib/screen/stb/login_stb.rb +5 -0
- data/lib/User_Lib/screen/stb/odn/odn_dvr.rb +59 -0
- data/lib/User_Lib/screen/stb/odn/odn_favorites.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_guide.rb +177 -0
- data/lib/User_Lib/screen/stb/odn/odn_live_tv.rb +115 -0
- data/lib/User_Lib/screen/stb/odn/odn_login.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_main_menu.rb +175 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand.rb +1170 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand_kids.rb +23 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand_left_menu.rb +180 -0
- data/lib/User_Lib/screen/stb/odn/odn_parental_controls.rb +9 -0
- data/lib/User_Lib/screen/stb/odn/odn_product_page.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_screen.rb +111 -0
- data/lib/User_Lib/screen/stb/odn/odn_search.rb +167 -0
- data/lib/User_Lib/screen/stb/odn/odn_settings.rb +142 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_diagnostics.rb +27 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/screen_spectrum_docsis.rb +12 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_guide.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_main_menu.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_settings.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_dvr.rb +1781 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_guide.rb +841 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_library.rb +384 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_live_tv.rb +259 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_main_menu.rb +223 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_mini_guide.rb +404 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_movies.rb +420 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_netflix.rb +37 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_on_demand.rb +2137 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_parental_controls.rb +528 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_pay_per_view.rb +26 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_product_page.rb +58 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_screen.rb +48 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_search.rb +92 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_settings.rb +1657 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_tv_shows.rb +1532 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_video_store.rb +1598 -0
- data/lib/User_Lib/screen/stb/stb_screen.rb +7 -0
- data/lib/User_Lib/screen/tivo/tivo_dvr.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_guide.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_library.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_live_tv.rb +17 -0
- data/lib/User_Lib/screen/tivo/tivo_login.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_main_menu.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_movies.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_on_demand.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_product_page.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_screen.rb +20 -0
- data/lib/User_Lib/screen/tivo/tivo_search.rb +31 -0
- data/lib/User_Lib/screen/tivo/tivo_settings.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_video_store.rb +25 -0
- data/lib/config/ConfigParams.xml +96 -0
- data/lib/config/ImageROI.xml +45 -0
- data/lib/config/ROI.xml +150 -0
- data/lib/config/Userlog4j.xml +62 -0
- data/lib/config/schema-docs/mode.xsd +12 -0
- data/lib/config/schema-docs/processTestJobs.xsd +63 -0
- data/lib/config/schema-docs/rackip.xsd +24 -0
- data/lib/copy_ref_images.rb +199 -0
- data/lib/copy_repo.rb +136 -0
- data/lib/diagnostics/conductor/conductor_checkup.tmc +24 -0
- data/lib/diagnostics/db/mad_db_check.tmc +56 -0
- data/lib/diagnostics/db/mas_db_checkup.tmc +24 -0
- data/lib/diagnostics/db/mas_db_checkup_gem.tmc +20 -0
- data/lib/diagnostics/db/mas_db_checkup_jar.tmc +50 -0
- data/lib/diagnostics/iguide/iguide_nvram_reset.tmc +23 -0
- data/lib/diagnostics/iguide/iguide_prepare_stb.tmc +33 -0
- data/lib/diagnostics/iguide/iguide_prepare_stb_and_health_check.tmc +63 -0
- data/lib/diagnostics/iguide/iguide_stb_health_check.tmc +54 -0
- data/lib/diagnostics/prepare_stb.tmc +30 -0
- data/lib/diagnostics/prepare_stb_and_health_check.tmc +56 -0
- data/lib/diagnostics/script_options/options_checkup.tmc +145 -0
- data/lib/diagnostics/server_components_check.tmc +62 -0
- data/lib/diagnostics/ssh/dncs_checkup.tmc +24 -0
- data/lib/diagnostics/ssh/mas_checkup.tmc +24 -0
- data/lib/diagnostics/stb_health_check.tmc +46 -0
- data/lib/diagnostics/stb_ip_check.tmc +120 -0
- data/lib/diagnostics/webservices/mas_rest_services_checkup.tmc +24 -0
- data/lib/diagnostics/webservices/mas_soap_services_checkup.tmc +24 -0
- data/lib/dsllib/common/dncs/dncs_utils.rb +449 -0
- data/lib/dsllib/common/mas_db/mas_conductor.rb +1328 -0
- data/lib/dsllib/common/mas_db/mas_db.rb +154 -0
- data/lib/dsllib/common/mas_db/mas_publish.rb +2349 -0
- data/lib/dsllib/common/mas_db/mas_rest_services.rb +75 -0
- data/lib/dsllib/common/mas_db/mas_soap_services.rb +540 -0
- data/lib/dsllib/common/mas_db/mas_utils.rb +422 -0
- data/lib/dsllib/common/remote_diagnostics/mdn_remote_diagnostics.rb +1335 -0
- data/lib/dsllib/common/remote_diagnostics/odn_web_server.rb +269 -0
- data/lib/dsllib/common/utils/excel_export.rb +273 -0
- data/lib/dsllib/common/utils/excel_module.rb +890 -0
- data/lib/dsllib/common/utils/server_components_utils.rb +130 -0
- data/lib/dsllib/common/utils/stb_health_check_utils.rb +92 -0
- data/lib/dsllib/common/utils/sword_utils.rb +393 -0
- data/lib/dsllib/common/utils/tmc_utils.rb +2944 -0
- data/lib/dsllib/common/utils/virtual_keyboard_navigator.rb +208 -0
- data/lib/dsllib/common/utils/virtual_keyboard_vp_navigator.rb +195 -0
- data/lib/dsllib/performance/DTA/roi.rb +214 -0
- data/lib/dsllib/performance/DTA/utils.rb +96 -0
- data/lib/dsllib/performance/iguide_concurrent_test/ROI.rb +236 -0
- data/lib/dsllib/performance/iguide_concurrent_test/utils.rb +533 -0
- data/lib/dsllib/performance/measure_tune.rb +438 -0
- data/lib/dsllib/performance/perf_lib.rb +660 -0
- data/lib/end_iteration.rb +4 -0
- data/lib/lib/data_services/channel.rb +39 -0
- data/lib/lib/data_services/data_services.rb +14 -0
- data/lib/lib/data_services/guide.rb +104 -0
- data/lib/lib/data_services/lineup.rb +114 -0
- data/lib/lib/data_services/program.rb +48 -0
- data/lib/lib/data_services/schedule.rb +18 -0
- data/lib/lib/data_services/splunk_connector.rb +135 -0
- data/lib/lib/data_services/splunk_data_reader.rb +77 -0
- data/lib/lib/element/element.rb +79 -0
- data/lib/lib/extensions/array_extensions.rb +32 -0
- data/lib/lib/extensions/datetime_extensions.rb +8 -0
- data/lib/lib/extensions/extensions.rb +51 -0
- data/lib/lib/extensions/file_extensions.rb +32 -0
- data/lib/lib/extensions/float_extensions.rb +32 -0
- data/lib/lib/extensions/integer_extensions.rb +39 -0
- data/lib/lib/extensions/nethttp_extensions.rb +11 -0
- data/lib/lib/extensions/object_extensions.rb +7 -0
- data/lib/lib/extensions/string_extensions.rb +35 -0
- data/lib/lib/helpers/tmc_helpers/csv_helper/csv_helper.rb +85 -0
- data/lib/lib/helpers/tmc_helpers/email_helper/email_helper.rb +71 -0
- data/lib/lib/helpers/tmc_helpers/http_helper/http_helper.rb +133 -0
- data/lib/lib/helpers/tmc_helpers/roi_helper/roi_helper.rb +17 -0
- data/lib/lib/helpers/tmc_helpers/snmp_helper/snmp_helper.rb +71 -0
- data/lib/lib/helpers/tmc_helpers/ssh_helper/ssh_helper.rb +337 -0
- data/lib/lib/helpers/tmc_helpers/tmc_helpers.rb +1260 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_password_keyboard.rb +102 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_search_keyboard.rb +103 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_username_keyboard.rb +105 -0
- data/lib/lib/keyboard/keyboard.rb +504 -0
- data/lib/lib/keyboard/keyboard_layout.rb +51 -0
- data/lib/lib/keyboard/roku/roku_reset_pin_keyboard.rb +12 -0
- data/lib/lib/keyboard/roku/roku_rsg_search_keyboard.rb +67 -0
- data/lib/lib/keyboard/roku/roku_rsg_signin_keyboard.rb +106 -0
- data/lib/lib/keyboard/roku/roku_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/roku/roku_signin_keyboard.rb +42 -0
- data/lib/lib/keyboard/samsung_tv/samsung_tv_search_keyboard.rb +50 -0
- data/lib/lib/keyboard/samsung_tv/samsung_tv_signin_keyboard.rb +52 -0
- data/lib/lib/keyboard/stb/odn/odn_on_demand_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/stb/odn/odn_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_email_keyboard.rb +50 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_keyboard.rb +43 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_name_keyboard.rb +16 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_search_keyboard.rb +32 -0
- data/lib/lib/keyboard/tivo/tivo_password_keyboard.rb +0 -0
- data/lib/lib/keyboard/tivo/tivo_search_keyboard.rb +0 -0
- data/lib/lib/keyboard/tivo/tivo_username_keyboard.rb +0 -0
- data/lib/lib/keys/apple_tv/apple_tv_keys.rb +26 -0
- data/lib/lib/keys/base_keys.rb +14 -0
- data/lib/lib/keys/dta/dta_keys.rb +60 -0
- data/lib/lib/keys/mdn/mdn_keys.rb +60 -0
- data/lib/lib/keys/passport/passport_keys.rb +59 -0
- data/lib/lib/keys/roku/roku_keys.rb +31 -0
- data/lib/lib/keys/roku_tv/roku_tv_keys.rb +32 -0
- data/lib/lib/keys/samsung_tv/samsung_tv_keys.rb +58 -0
- data/lib/lib/keys/sara/sara_keys.rb +60 -0
- data/lib/lib/keys/stb/iguide/iguide_keys.rb +56 -0
- data/lib/lib/keys/stb/odn/odn_keys.rb +63 -0
- data/lib/lib/keys/stb/spectrum/spectrum_keys.rb +59 -0
- data/lib/lib/keys/stb/stb_keys.rb +13 -0
- data/lib/lib/keys/tivo/tivo_keys.rb +26 -0
- data/lib/lib/logger/multi_io.rb +14 -0
- data/lib/lib/logger/tmc_dut_logger.rb +251 -0
- data/lib/lib/logger/tmc_logger.rb +30 -0
- data/lib/lib/mixins/assignable.rb +19 -0
- data/lib/lib/mixins/can_have_special_methods.rb +50 -0
- data/lib/lib/mixins/enumish.rb +16 -0
- data/lib/lib/new_platform.rb +302 -0
- data/lib/lib/new_sub_platform.rb +90 -0
- data/lib/lib/platform/apple_tv/apple_tv.rb +33 -0
- data/lib/lib/platform/apple_tv/apple_tv_1080/apple_tv_1080.rb +54 -0
- data/lib/lib/platform/apple_tv/apple_tv_720/apple_tv_720.rb +14 -0
- data/lib/lib/platform/dta/dta.rb +35 -0
- data/lib/lib/platform/dta/dta_1080/dta_1080.rb +15 -0
- data/lib/lib/platform/dta/dta_720/dta_720.rb +15 -0
- data/lib/lib/platform/mdn/mdn.rb +35 -0
- data/lib/lib/platform/mdn/mdn_1080/mdn_1080.rb +15 -0
- data/lib/lib/platform/mdn/mdn_720/mdn_720.rb +15 -0
- data/lib/lib/platform/mobile/android/android.rb +23 -0
- data/lib/lib/platform/mobile/android/android_phone/android_phone.rb +23 -0
- data/lib/lib/platform/mobile/android/android_tablet/android_tablet.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios_phone/ios_phone.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios_tablet/ios_tablet.rb +23 -0
- data/lib/lib/platform/mobile/mobile.rb +102 -0
- data/lib/lib/platform/passport/passport.rb +41 -0
- data/lib/lib/platform/passport/passport1080/passport_1080.rb +15 -0
- data/lib/lib/platform/passport/passport_720/passport_720.rb +14 -0
- data/lib/lib/platform/platform.rb +884 -0
- data/lib/lib/platform/roku/roku.rb +96 -0
- data/lib/lib/platform/roku/roku_720/roku_720.rb +16 -0
- data/lib/lib/platform/roku_tv/roku_tv.rb +33 -0
- data/lib/lib/platform/roku_tv/roku_tv_1080/roku_tv_1080.rb +14 -0
- data/lib/lib/platform/roku_tv/roku_tv_720/roku_tv_720.rb +14 -0
- data/lib/lib/platform/samsung_tv/samsung_tv.rb +31 -0
- data/lib/lib/platform/samsung_tv/samsung_tv_1080/samsung_tv_1080.rb +14 -0
- data/lib/lib/platform/samsung_tv/samsung_tv_720/samsung_tv_720.rb +14 -0
- data/lib/lib/platform/sara/sara.rb +42 -0
- data/lib/lib/platform/sara/sara_1080/sara_1080.rb +15 -0
- data/lib/lib/platform/sara/sara_720/sara_720.rb +15 -0
- data/lib/lib/platform/stb/iguide/iguide.rb +18 -0
- data/lib/lib/platform/stb/iguide/iguide_1080/iguide_1080.rb +14 -0
- data/lib/lib/platform/stb/iguide/iguide_720/iguide_720.rb +14 -0
- data/lib/lib/platform/stb/odn/odn.rb +480 -0
- data/lib/lib/platform/stb/odn/odn_1080/odn_1080.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_moto/odn_720_moto.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_sa/odn_720_sa.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_samsung/odn_720_samsung.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum.rb +48 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis.rb +16 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch.rb +15 -0
- data/lib/lib/platform/stb/stb.rb +93 -0
- data/lib/lib/platform/template.txt +16 -0
- data/lib/lib/platform/tivo/tivo.rb +28 -0
- data/lib/lib/platform/tivo/tivo_1080/tivo_1080.rb +15 -0
- data/lib/lib/platform/tivo/tivo_720/tivo_720.rb +14 -0
- data/lib/lib/platform/web/web.rb +51 -0
- data/lib/lib/platform_libs/roku/roku_controller.rb +254 -0
- data/lib/lib/prereqs/prereqs.rb +17 -0
- data/lib/lib/prereqs/prereqs_for_dut.rb +14 -0
- data/lib/lib/prereqs/prereqs_for_test.rb +14 -0
- data/lib/lib/remotes/remotes.rb +8 -0
- data/lib/lib/remotes/stb/spectrum/spectrum_remotes.rb +22 -0
- data/lib/lib/roi/black/black_roi.rb +125 -0
- data/lib/lib/roi/color/color_roi.rb +138 -0
- data/lib/lib/roi/image/image_roi.rb +187 -0
- data/lib/lib/roi/roi.rb +1064 -0
- data/lib/lib/roi/template_roi.txt +9 -0
- data/lib/lib/roi/text/text_roi.rb +187 -0
- data/lib/lib/roi/video/video_roi.rb +98 -0
- data/lib/lib/screen/screen.rb +183 -0
- data/lib/lib/screen/template.txt +7 -0
- data/lib/lib/screen/template_screen.txt +10 -0
- data/lib/lib/screens/apple_tv/apple_tv_screens.rb +44 -0
- data/lib/lib/screens/dta/dta_screens.rb +49 -0
- data/lib/lib/screens/mdn/mdn_screens.rb +49 -0
- data/lib/lib/screens/mobile/android/android_phone/android_phone_screens.rb +28 -0
- data/lib/lib/screens/mobile/android/android_screens.rb +40 -0
- data/lib/lib/screens/mobile/android/android_tablet/android_tablet_screens.rb +29 -0
- data/lib/lib/screens/mobile/ios/ios_phone/ios_phone_screens.rb +22 -0
- data/lib/lib/screens/mobile/ios/ios_screens.rb +39 -0
- data/lib/lib/screens/mobile/ios/ios_tablet/ios_tablet_screens.rb +20 -0
- data/lib/lib/screens/mobile/mobile_screens.rb +18 -0
- data/lib/lib/screens/passport/passport_screens.rb +42 -0
- data/lib/lib/screens/roku/roku_screens.rb +72 -0
- data/lib/lib/screens/roku_tv/roku_tv_screens.rb +43 -0
- data/lib/lib/screens/samsung_tv/samsung_tv_screens.rb +44 -0
- data/lib/lib/screens/sara/sara_screens.rb +49 -0
- data/lib/lib/screens/screens.rb +23 -0
- data/lib/lib/screens/stb/iguide/iguide_1080/iguide_1080_screens.rb +56 -0
- data/lib/lib/screens/stb/iguide/iguide_720/iguide_720_screens.rb +56 -0
- data/lib/lib/screens/stb/iguide/iguide_screens.rb +54 -0
- data/lib/lib/screens/stb/odn/odn_screens.rb +40 -0
- data/lib/lib/screens/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_screens.rb +18 -0
- data/lib/lib/screens/stb/spectrum/spectrum_screens.rb +48 -0
- data/lib/lib/screens/stb/stb_screens.rb +13 -0
- data/lib/lib/screens/template.txt +52 -0
- data/lib/lib/screens/tivo/tivo_screens.rb +44 -0
- data/lib/lib/selenium/appium/appium.rb +388 -0
- data/lib/lib/selenium/selenium.rb +466 -0
- data/lib/lib/selenium/webdriver/webdriver.rb +254 -0
- data/lib/lib/test_case/boilerplate/functional.rb +7 -0
- data/lib/lib/test_case/boilerplate/performance.rb +7 -0
- data/lib/lib/test_case/ci_test.rb +47 -0
- data/lib/lib/test_case/functional_test_case.rb +27 -0
- data/lib/lib/test_case/make_boilerplate.rb +32 -0
- data/lib/lib/test_case/monitoring/apple_monitor.rb +104 -0
- data/lib/lib/test_case/monitoring/base_monitor.rb +140 -0
- data/lib/lib/test_case/monitoring/dta_monitor.rb +53 -0
- data/lib/lib/test_case/monitoring/iguide_monitor.rb +72 -0
- data/lib/lib/test_case/monitoring/mdn_monitor.rb +28 -0
- data/lib/lib/test_case/monitoring/monitoring_test.rb +111 -0
- data/lib/lib/test_case/monitoring/odn_monitor.rb +137 -0
- data/lib/lib/test_case/monitoring/passport_monitor.rb +50 -0
- data/lib/lib/test_case/monitoring/report_monitor.rb +178 -0
- data/lib/lib/test_case/monitoring/roku_monitor.rb +102 -0
- data/lib/lib/test_case/monitoring/sara_monitor.rb +33 -0
- data/lib/lib/test_case/monitoring/spec_monitor.rb +154 -0
- data/lib/lib/test_case/performance_test_case.rb +29 -0
- data/lib/lib/test_case/test_case.rb +1055 -0
- data/lib/lib/test_case/test_error.rb +29 -0
- data/lib/lib/test_case/test_exception.rb +9 -0
- data/lib/lib/test_case/test_status.rb +39 -0
- data/lib/lib/test_case/test_step.rb +156 -0
- data/lib/lib/test_case/test_trace.rb +80 -0
- data/lib/lib/test_data.rb +222 -0
- data/lib/lib/test_wrapper.rb +146 -0
- data/lib/misc/get_latest_android.sh +14 -0
- data/lib/misc/get_latest_ios.sh +14 -0
- data/lib/package-lock.json +3 -0
- data/lib/run_test.rb +4 -0
- data/lib/script_validator.rb +48 -0
- data/lib/syntax_eval.rb +151 -0
- data/lib/tools/convert_old_scripts.rb +100 -0
- data/lib/tools/find_duplicate_rois.rb +27 -0
- data/lib/tools/roku/inspector.rb +130 -0
- data/lib/tools/syntax_checker.rb +83 -0
- data/lib/upload_ref_images.rb +255 -0
- metadata +912 -0
@@ -0,0 +1,422 @@
|
|
1
|
+
#Test automation script version# TA-5.5.mdn released time stamp: 12-03-12 14:40:20
|
2
|
+
|
3
|
+
require './dsllib/common/utils/tmc_utils'
|
4
|
+
require './dsllib/common/mas_db/mas_conductor'
|
5
|
+
|
6
|
+
# Use it to verify whether mas commmand line is working or not
|
7
|
+
# * *Returns* :
|
8
|
+
# - Returns true if successful, else false
|
9
|
+
def mas_command_line_accessible?
|
10
|
+
begin
|
11
|
+
loginfo2 "Execution mdiags command ...",false
|
12
|
+
result = exec_mas_cmd "mdiags"
|
13
|
+
return (result.downcase.include?('mystro diagnostics'))
|
14
|
+
rescue StandardError => e
|
15
|
+
loginfo2 "MAS command error : #{e.message}",false
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Use it to change purchase pin from MAS
|
21
|
+
def change_purchase_pin_from_mas (purchase_pin='0000')
|
22
|
+
loginfo2 "Changing purchase pin to #{purchase_pin} from MAS"
|
23
|
+
mac_address = fetch_stb_mac_address
|
24
|
+
exec_mas_cmd "mdiags msg -m #{mac_address} purchasePINUpdate #{purchase_pin}"
|
25
|
+
loginfo2 "Purchase pin successfully changed"
|
26
|
+
end
|
27
|
+
|
28
|
+
# Use it to chnage parental control pin from MAS
|
29
|
+
def change_parental_control_pin_from_mas (parental_control_pin='0000')
|
30
|
+
loginfo2 "Chnaging parental control pin to #{parental_control_pin} from MAS"
|
31
|
+
mac_address = fetch_stb_mac_address
|
32
|
+
exec_mas_cmd "mdiags msg -m #{mac_address} parentalBlockPINUpdate #{parental_control_pin}"
|
33
|
+
loginfo2 "Parental control pin successfully changed"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Use it to reset factory settings from MAS
|
37
|
+
def reset_factory_settings_from_mas
|
38
|
+
loginfo2 'Resetting factory settings'
|
39
|
+
mac_address = fetch_stb_mac_address
|
40
|
+
cmd = "mdiags msg -m #{mac_address} resetFactoryDefaults"
|
41
|
+
loginfo2 "Executing MAS command: #{cmd}"
|
42
|
+
exec_mas_cmd cmd
|
43
|
+
loginfo2 "Waiting for 10 minutes to let box boot up."
|
44
|
+
sleep 10.min
|
45
|
+
press_power_sleep if stb_standby?
|
46
|
+
loginfo2 "Box sucessfully reset"
|
47
|
+
end
|
48
|
+
|
49
|
+
# Use it to interrupt a streaming OD session
|
50
|
+
def interrupt_od_session_from_mas
|
51
|
+
loginfo2 'Interrupting streaming OD session'
|
52
|
+
mac_address = fetch_stb_mac_address
|
53
|
+
cmd = "mdiags od teardown terminal '#{mac_address}' -02"
|
54
|
+
loginfo2 "Executing MAS command: #{cmd}"
|
55
|
+
output = exec_mas_cmd(cmd)
|
56
|
+
logdebug output
|
57
|
+
if output.include?('Destroying sessions by terminal name')
|
58
|
+
loginfo2 "Streaming OD session interrupted successfully"
|
59
|
+
return true
|
60
|
+
end
|
61
|
+
return false
|
62
|
+
end
|
63
|
+
|
64
|
+
# Use it to list default items on Enhance Menu
|
65
|
+
def list_default_items_available_in_enhanced_menu
|
66
|
+
enhanced_menu_items = []
|
67
|
+
cmd = "cat /usr/local/mystro/conf/EnhancedMenuTemplate.xml | grep -i nodeName= | cut -f2 -d'=' | cut -f2 -d '\"'"
|
68
|
+
loginfo2 "Executing MAS command: #{cmd}"
|
69
|
+
result = exec_mas_cmd cmd
|
70
|
+
menu_items = result.gsub("\r", '').split("\n")
|
71
|
+
# Removed last line from the result as it contains the prompt
|
72
|
+
menu_items.pop
|
73
|
+
menu_items.each do |item|
|
74
|
+
if(item != '')
|
75
|
+
enhanced_menu_items.push item
|
76
|
+
end
|
77
|
+
end
|
78
|
+
return enhanced_menu_items
|
79
|
+
end
|
80
|
+
|
81
|
+
# Use it schedule rdvr events for a program
|
82
|
+
# * *Args* :
|
83
|
+
# - program -> program on which recording should be scheduled
|
84
|
+
# - recording_type -> either SERIES or SINGLE
|
85
|
+
# - num_of_episodes: [ ONE, THREE, FIVE, SEVEN, ALL ]
|
86
|
+
# - save_options: [ SAVE_UNTIL_USER_DELETES, SAVE_UNTIL_SPACE_IS_NEEDED ]
|
87
|
+
# - repeat_options:[ ONLY_NEW_AND_SELECTED_AIR_TIME, ALL_EPISODES_AND_SELECTED_AIR_TIME, ONLY_NEW_AND_ALL_AIRINGS, ALL_EPISODES_AND_ALL_AIRINGS ]
|
88
|
+
# - priority: [ MIN, MAX ]
|
89
|
+
# * *Returns* :
|
90
|
+
# - Returns true if successfully scheduled, else false
|
91
|
+
def schedule_rdvr_event_from_mas (program, recording_type='SINGLE', number_of_episodes='ONE', save_options='SAVE_UNTIL_SPACE_IS_NEEDED', repeat_options='ALL_EPISODES_AND_ALL_AIRINGS', adjust_start='0', adjust_stop='0', priority='MIN')
|
92
|
+
loginfo2 "Scheduling RDVR events from MAS"
|
93
|
+
mas_time_zone_diff = mas_conductor_time_zone_diff_in_min
|
94
|
+
mac_address = fetch_stb_mac_address
|
95
|
+
|
96
|
+
program_service_id = program[17]
|
97
|
+
program_event_id = program[15]
|
98
|
+
program_start_time = (program[2] - (mas_time_zone_diff*60)).to_i
|
99
|
+
|
100
|
+
cmd = "mdiags rdvr scheduleEvent #{mac_address} #{program_service_id} #{program_event_id} #{program_start_time} #{recording_type} numEpisodes=#{number_of_episodes} saveOptions=#{save_options} repeatOptions=#{repeat_options} adjustStart=#{adjust_start} adjustStop=#{adjust_stop} priority=#{priority}"
|
101
|
+
loginfo2 "Executing MAS command: #{cmd}"
|
102
|
+
result = exec_mas_cmd cmd
|
103
|
+
logdebug "RESULT: #{result}"
|
104
|
+
if result.include?('TimeoutException_Exception')
|
105
|
+
loginfo2 "Timeout while executing command"
|
106
|
+
return false
|
107
|
+
end
|
108
|
+
success_message = "message=SUCCESS"
|
109
|
+
output = /(?:OUTPUT:\s\{\s)(.*)\s\}/.match(result)[1]
|
110
|
+
|
111
|
+
if output.include? success_message
|
112
|
+
loginfo2 'RDVR events scheduled successfully from MAS'
|
113
|
+
return true
|
114
|
+
else
|
115
|
+
loginfo2 "Error occurred in scheduling RDVR events from MAS: #{output}"
|
116
|
+
return false
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Use it to clear NVRAM from MAS using commnad line
|
121
|
+
def clear_nvram_from_mas
|
122
|
+
loginfo2 "Clearing NVRAM from MAS"
|
123
|
+
mac_address = fetch_stb_mac_address
|
124
|
+
cmd = "mdiags msg clearClientNVRAM -m #{mac_address}"
|
125
|
+
loginfo2 "Executing MAS command: #{cmd}"
|
126
|
+
result = exec_mas_cmd cmd
|
127
|
+
sleep 1.min
|
128
|
+
loginfo2 "Cleared NVRAM from MAS"
|
129
|
+
end
|
130
|
+
|
131
|
+
# Use it to reset NVRAM from MAS using commnad line
|
132
|
+
def reset_nvram_from_mas
|
133
|
+
loginfo2 "Resetting NVRAM from MAS"
|
134
|
+
mac_address = fetch_stb_mac_address
|
135
|
+
cmd = "mdiags msg resetClientNVRAM -m #{mac_address}"
|
136
|
+
loginfo2 "Executing MAS command: #{cmd}"
|
137
|
+
result = exec_mas_cmd cmd
|
138
|
+
loginfo2 "Reseted NVRAM from MAS"
|
139
|
+
end
|
140
|
+
|
141
|
+
# Use it to verify if UMPGatewayRDVR.log has given request and response in last log
|
142
|
+
# * *Args* :
|
143
|
+
# - request_ary -> Array of requests to be verified
|
144
|
+
# - response_ary -> Array of response to be verified
|
145
|
+
# * *Returns* :
|
146
|
+
# - Returns true if successfully verified, else false
|
147
|
+
def mas_umpgatewayrdvr_log_include? request_ary=[], response_ary=[]
|
148
|
+
mac = fetch_stb_mac_address.to_s
|
149
|
+
mac_address = mac.delete(":")
|
150
|
+
loginfo2 "Mac address of this box is #{mac_address}"
|
151
|
+
command = "tail -1000 #{fetch_option(:mas_log_folder)}/UMPGatewayRDVR.log | grep #{mac_address} -A 30"
|
152
|
+
loginfo2 "Command #{command}."
|
153
|
+
mas_string = exec_mas_cmd(command).to_s
|
154
|
+
loginfo2 "MAS command output [#{mas_string}]"
|
155
|
+
splitted_log = mas_string.split(mac_address)
|
156
|
+
if splitted_log.length < 4
|
157
|
+
loginfo2 "Failed to get logs for this box"
|
158
|
+
return false
|
159
|
+
end
|
160
|
+
request = splitted_log[-4].downcase
|
161
|
+
response = splitted_log[-1].downcase
|
162
|
+
logdebug "Request arr : #{request_ary}, Response arr : #{response_ary}"
|
163
|
+
loginfo2 "Request string [#{request}], Response string [#{response}]"
|
164
|
+
request_ary.each{|req|
|
165
|
+
unless request.delete(' ').include?(req.downcase.delete(' '))
|
166
|
+
loginfo2 "Failed to verify request include [#{req}]"
|
167
|
+
return false
|
168
|
+
end
|
169
|
+
}
|
170
|
+
response_ary.each{|res|
|
171
|
+
unless response.delete(' ').include?(res.downcase.delete(' '))
|
172
|
+
loginfo2 "Failed to verify request include [#{res}]"
|
173
|
+
return false
|
174
|
+
end
|
175
|
+
}
|
176
|
+
loginfo2 "Successfully verified all response and requests"
|
177
|
+
return true
|
178
|
+
end
|
179
|
+
|
180
|
+
# Use it to verify if TerminalRegistration.log has last boot time greater than given time
|
181
|
+
# * *Args* :
|
182
|
+
# - time -> Array of requests to be verified
|
183
|
+
# - mac_address -> Array of response to be verified
|
184
|
+
# * *Returns* :
|
185
|
+
# - Returns true if successfully verified, else false
|
186
|
+
def mas_verify_last_reboot_time_greater_than time, mac = fetch_stb_mac_address.to_s
|
187
|
+
|
188
|
+
if mac.length == 12
|
189
|
+
mac_address = "#{mac[0,2]}:#{mac[2,2]}:#{mac[4,2]}:#{mac[6,2]}:#{mac[8,2]}:#{mac[10,2]}" # Inserting colons in mac address
|
190
|
+
else
|
191
|
+
mac_address = mac
|
192
|
+
end
|
193
|
+
command = "tail -10000 #{fetch_option(:mas_log_folder)}/TerminalRegistration.log |grep #{mac_address}"
|
194
|
+
loginfo2 "Executing mas command [#{command}]"
|
195
|
+
mas_string = exec_mas_cmd(command).to_s
|
196
|
+
loginfo2 "MAS command output:#{mas_string}"
|
197
|
+
last_entry = mas_string.split(mac_address)[-1]
|
198
|
+
unless last_entry.include?('REBOOT_TIME')
|
199
|
+
loginfo2 'No entry found for this box'
|
200
|
+
return false
|
201
|
+
end
|
202
|
+
|
203
|
+
regex = Regexp.new(/(REBOOT_TIME=)(\d\d)(.)(\d\d)(.)(\d{4})(.)(\d\d)(.)(\d\d)(.)(\d\d)/)
|
204
|
+
#Regexp for reading date and time
|
205
|
+
matchdata = regex.match(last_entry)
|
206
|
+
unless matchdata
|
207
|
+
loginfo2 'Failed to get date and time of last entry in log'
|
208
|
+
return false
|
209
|
+
end
|
210
|
+
read_time = Time.local(matchdata[6],matchdata[2],matchdata[4],matchdata[8],matchdata[10],matchdata[12])
|
211
|
+
logdebug "Read time [#{read_time}], Boot time [#{time}]"
|
212
|
+
|
213
|
+
unless (read_time-time)>=0
|
214
|
+
loginfo2 "Failed to verify if last logged boot time is greater than given time"
|
215
|
+
return false
|
216
|
+
end
|
217
|
+
|
218
|
+
loginfo2 "Successfully verified that last logged boot time is greater than given time"
|
219
|
+
return true
|
220
|
+
end
|
221
|
+
|
222
|
+
# Use it schedule rdvr events for a program
|
223
|
+
# * *Args* :
|
224
|
+
# - program -> program on which recording should be scheduled
|
225
|
+
# - recording_type -> either SERIES or SINGLE
|
226
|
+
# - num_of_episodes: [ ONE, THREE, FIVE, SEVEN, ALL ]
|
227
|
+
# - save_options: [ SAVE_UNTIL_USER_DELETES, SAVE_UNTIL_SPACE_IS_NEEDED ]
|
228
|
+
# - repeat_options:[ ONLY_NEW_AND_SELECTED_AIR_TIME, ALL_EPISODES_AND_SELECTED_AIR_TIME, ONLY_NEW_AND_ALL_AIRINGS, ALL_EPISODES_AND_ALL_AIRINGS ]
|
229
|
+
# - priority: [ MIN, MAX ]
|
230
|
+
# * *Returns* :
|
231
|
+
# - Returns true if successfully scheduled, else false
|
232
|
+
def unschedule_rdvr_event_from_mas (program, recording_type='SINGLE')
|
233
|
+
loginfo2 "Scheduling RDVR events from MAS"
|
234
|
+
mas_time_zone_diff = mas_conductor_time_zone_diff_in_min
|
235
|
+
mac_address = fetch_stb_mac_address
|
236
|
+
|
237
|
+
program_service_id = program[17]
|
238
|
+
program_event_id = program[15]
|
239
|
+
program_start_time = (program[2] - (mas_time_zone_diff*60)).to_i
|
240
|
+
|
241
|
+
cmd = "mdiags rdvr unscheduleEvent #{mac_address} #{program_service_id} #{program_event_id} #{program_start_time} #{recording_type}"
|
242
|
+
loginfo2 "Executing MAS command: #{cmd}"
|
243
|
+
result = exec_mas_cmd cmd
|
244
|
+
logdebug "RESULT: #{result}"
|
245
|
+
if result.include?('TimeoutException_Exception')
|
246
|
+
loginfo2 "Timeout while executing command"
|
247
|
+
return false
|
248
|
+
end
|
249
|
+
success_message = "message=SUCCESS"
|
250
|
+
output = /(?:OUTPUT:\s\{\s)(.*)\s\}/.match(result)[1]
|
251
|
+
|
252
|
+
if output.include? success_message
|
253
|
+
loginfo2 'RDVR event unscheduled from MAS'
|
254
|
+
return true
|
255
|
+
else
|
256
|
+
loginfo2 "Error occurred in unscheduling RDVR events from MAS: #{output}"
|
257
|
+
return false
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
# Use it to verify if asset is purchased from mdiags
|
262
|
+
# * *Args* :
|
263
|
+
# - asset -> OD asset to verify
|
264
|
+
# - mac_addresses -> Array of mac address
|
265
|
+
# - whole_house_purchase: true if purchase is for all boxes
|
266
|
+
# * *Returns* :
|
267
|
+
# - Returns true if successfully verified, else false
|
268
|
+
def mas_verify_asset_purchased? asset, mac_addresses, whole_house_purchase = true
|
269
|
+
asset_id = asset[:id]
|
270
|
+
purchase_ids = []
|
271
|
+
|
272
|
+
mac_addresses.each do |mac|
|
273
|
+
if mac.length == 12
|
274
|
+
mac_address = "#{mac[0,2]}:#{mac[2,2]}:#{mac[4,2]}:#{mac[6,2]}:#{mac[8,2]}:#{mac[10,2]}" # Inserting colons in mac address
|
275
|
+
else
|
276
|
+
mac_address = mac
|
277
|
+
end
|
278
|
+
command = "mdiags od r | grep #{asset_id} | grep #{mac_address}"
|
279
|
+
output = exec_mas_cmd(command)
|
280
|
+
if output.nil? or output.empty?
|
281
|
+
loginfo "The purchase for the asset #{asset[:title]} is not present for stb with mac #{mac}"
|
282
|
+
return false
|
283
|
+
end
|
284
|
+
regexp = /^(\d+)\s+(\d+).+'(.*)'\s+(\d+).*$/
|
285
|
+
matched = regexp.match(output)
|
286
|
+
if matched.nil?
|
287
|
+
loginfo2 "Purchase id not found"
|
288
|
+
return false
|
289
|
+
end
|
290
|
+
purchase_ids.push(matched[4])
|
291
|
+
end
|
292
|
+
|
293
|
+
if whole_house_purchase
|
294
|
+
return true if purchase_ids.uniq.length.eql?(1)
|
295
|
+
return false
|
296
|
+
end
|
297
|
+
|
298
|
+
return true
|
299
|
+
end
|
300
|
+
|
301
|
+
# Use it to start/stop On demad Application from MAS
|
302
|
+
# * *Args* :
|
303
|
+
# - +action+ -> start (to start OD application), stop (to stop OD application)
|
304
|
+
# * *Returns* :
|
305
|
+
# - true if ondemad application started or stopped successfully, false otherwise
|
306
|
+
def mas_start_stop_on_demand_application(action = 'start')
|
307
|
+
begin
|
308
|
+
mas_ip = fetch_option(:mas_server_ip)
|
309
|
+
mas_prompt = fetch_option(:mas_server_prompt)
|
310
|
+
mas_username = fetch_option(:mas_username)
|
311
|
+
mas_password = fetch_option(:mas_password)
|
312
|
+
pmclient_prompt = "procmgr>"
|
313
|
+
|
314
|
+
req_queued_status = lock_resource('MAS', 'OD', LOCK_EXCLUSIVE | LOCK_ONETIME, '', 60.min, 10.min) {
|
315
|
+
opened = false
|
316
|
+
open_interactive_ssh(mas_ip, 22, mas_prompt, mas_username, mas_password)
|
317
|
+
opened = true
|
318
|
+
|
319
|
+
result1 = exec_interactive_ssh(pmclient_prompt, "pmclient")
|
320
|
+
logdebug "MAS Command Result1 : #{result1}"
|
321
|
+
|
322
|
+
command = "#{action} 20"
|
323
|
+
result2 = exec_interactive_ssh(pmclient_prompt, command)
|
324
|
+
logdebug "MAS Command Result2 : #{result2}"
|
325
|
+
loginfo2 "On Demand Application stopped"
|
326
|
+
|
327
|
+
result3 = exec_interactive_ssh(mas_prompt, "q")
|
328
|
+
logdebug "MAS Command Result3 : #{result3}"
|
329
|
+
}
|
330
|
+
|
331
|
+
if req_queued_status == -1
|
332
|
+
loginfo2 "Someone is stuck with OD lock for more than 10 minutes. Aborting..."
|
333
|
+
return false
|
334
|
+
end
|
335
|
+
return true
|
336
|
+
rescue StandardError => e
|
337
|
+
loginfo2 e.message
|
338
|
+
loginfo2 'Unable to start/stop On Demand application'
|
339
|
+
return false
|
340
|
+
ensure
|
341
|
+
close_interactive_ssh if opened
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
# Use it to fetch ODN binary logs from STB on MAS
|
346
|
+
# * *Args* :
|
347
|
+
# - +ip_addr+ -> ip address of the stb
|
348
|
+
# * *Returns* :
|
349
|
+
# - true if logs fetched else false
|
350
|
+
def mas_fetch_odn_binary_logs_from_stb(ip_addr = fetch_ip)
|
351
|
+
begin
|
352
|
+
return false if ip_addr.nil?
|
353
|
+
|
354
|
+
mas_ip = fetch_option(:mas_server_ip)
|
355
|
+
mas_prompt = fetch_option(:mas_server_prompt)
|
356
|
+
mas_username = fetch_option(:mas_username)
|
357
|
+
mas_password = fetch_option(:mas_password)
|
358
|
+
|
359
|
+
opened = false
|
360
|
+
open_interactive_ssh(mas_ip, 22, mas_prompt, mas_username, mas_password)
|
361
|
+
opened = true
|
362
|
+
|
363
|
+
begin
|
364
|
+
logdebug "Running script to fetch ODN Binary logs..."
|
365
|
+
result3 = exec_interactive_ssh(mas_prompt, "/usr/local/mystro/scripts/ODNscripts/MAS_ODNBinaryLogs #{ip_addr}")
|
366
|
+
logdebug "Output: #{result3}"
|
367
|
+
rescue StandardError => e
|
368
|
+
logdebug e.to_s
|
369
|
+
logdebug "Still fetching ODN binary logs..."
|
370
|
+
opened = false
|
371
|
+
end
|
372
|
+
close_interactive_ssh if opened
|
373
|
+
|
374
|
+
log_fetched = false
|
375
|
+
10.times do
|
376
|
+
opened = false
|
377
|
+
open_interactive_ssh(mas_ip, 22, mas_prompt, mas_username, mas_password)
|
378
|
+
opened = true
|
379
|
+
result5 = exec_interactive_ssh(mas_prompt, "ls *#{ip_addr}* | grep -i zip")
|
380
|
+
logdebug "Output: #{result5}"
|
381
|
+
|
382
|
+
unless result5.to_s.include?('ODNBinaryLogs')
|
383
|
+
logdebug "Still fetching logs from STB... Will try again in 3 minutes."
|
384
|
+
close_interactive_ssh if opened
|
385
|
+
sleep 3.min
|
386
|
+
else
|
387
|
+
logdebug "ODN binary logs fetched from STB"
|
388
|
+
log_fetched = true
|
389
|
+
break
|
390
|
+
end
|
391
|
+
end
|
392
|
+
return false unless log_fetched
|
393
|
+
|
394
|
+
result6 = exec_interactive_ssh(mas_prompt, "ls -t | grep '#{ip_addr}'")
|
395
|
+
logdebug "Output: #{result6}"
|
396
|
+
|
397
|
+
start_index = result6.index('ODN')
|
398
|
+
end_index = result6.index('zip')
|
399
|
+
log_name = result6[start_index..end_index+2]
|
400
|
+
logdebug "ODN Binary log file: [#{log_name}]"
|
401
|
+
logdebug "Moving log file to directory /tmp"
|
402
|
+
result7 = exec_interactive_ssh(mas_prompt, "mv #{log_name} /tmp")
|
403
|
+
close_interactive_ssh if opened
|
404
|
+
loginfo2 "ODN Binary log file: [#{log_name}] created in /tmp"
|
405
|
+
return true
|
406
|
+
rescue StandardError => e
|
407
|
+
loginfo2 "Unexpected Failure: #{e.message}"
|
408
|
+
return false
|
409
|
+
ensure
|
410
|
+
close_interactive_ssh if opened
|
411
|
+
end
|
412
|
+
end
|
413
|
+
|
414
|
+
# Use it to reboot STB (after delay) from MAS
|
415
|
+
# * *Args* :
|
416
|
+
# - +delay+ -> no. of seconds after which STB will be rebooted
|
417
|
+
def mas_reboot_stb_with_delay(delay=0)
|
418
|
+
loginfo2 "Rebooting STB after #{delay} seconds from MAS"
|
419
|
+
mac_address = fetch_stb_mac_address
|
420
|
+
exec_mas_cmd "mdiags msg -m #{mac_address} reboot #{delay}"
|
421
|
+
loginfo2 "STB will be rebooted after #{delay} seconds"
|
422
|
+
end
|
@@ -0,0 +1,1335 @@
|
|
1
|
+
#Test automation script version# TA-5.5.mdn released time stamp: 12-03-12 14:40:20
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'net/telnet'
|
5
|
+
require 'nokogiri'
|
6
|
+
require 'timeout'
|
7
|
+
require './dsllib/common/utils/tmc_utils'
|
8
|
+
|
9
|
+
# Use it to fetch channel no. of active tuner from its IP address
|
10
|
+
# * *Args* :
|
11
|
+
# - IP address of MDN STB
|
12
|
+
# * *Returns* :
|
13
|
+
# - Channel no. on which the active tuner is
|
14
|
+
def fetch_active_tuner(ip)
|
15
|
+
retries = 0
|
16
|
+
stb_ip = ip
|
17
|
+
begin
|
18
|
+
loginfo2 "Connecting to Remote Diags to fetch active tuner using IP: #{stb_ip}"
|
19
|
+
patched_resp = "<HTML><BODY>"
|
20
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
21
|
+
loginfo2 'Wait for page to open'
|
22
|
+
sleep 5.sec
|
23
|
+
loginfo2 "Opening Resource Scheduler"
|
24
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
25
|
+
patched_resp << response
|
26
|
+
end
|
27
|
+
sleep 5.sec
|
28
|
+
doc = Nokogiri::HTML(patched_resp)
|
29
|
+
active=doc.xpath("//table[1]/tr[2]/td[6]").inner_html
|
30
|
+
if active=='TV'
|
31
|
+
tuner = doc.xpath("//table[1]/tr[2]/td[4]").inner_html
|
32
|
+
else
|
33
|
+
tuner = doc.xpath("//table[1]/tr[3]/td[4]").inner_html
|
34
|
+
end
|
35
|
+
loginfo2 "Tuner is on channel: #{tuner}"
|
36
|
+
return tuner
|
37
|
+
|
38
|
+
rescue Timeout::Error
|
39
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
40
|
+
retries += 1
|
41
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
42
|
+
retry unless retries == 4
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Use it to check if active tuner of MDN STB is recording
|
47
|
+
# * *Args* :
|
48
|
+
# - IP address of MDN STB
|
49
|
+
# * *Returns* :
|
50
|
+
# - true if active tuner is recording
|
51
|
+
def active_tuner_recording?(ip)
|
52
|
+
retries = 0
|
53
|
+
stb_ip = ip
|
54
|
+
begin
|
55
|
+
loginfo2 "Connecting to Remote Diags to check recording on active tuner using IP: #{stb_ip}"
|
56
|
+
patched_resp = "<HTML><BODY>"
|
57
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
58
|
+
loginfo2 'Wait for page to open'
|
59
|
+
sleep 5.sec
|
60
|
+
loginfo2 "Opening Resource Scheduler"
|
61
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
62
|
+
patched_resp << response
|
63
|
+
end
|
64
|
+
sleep 5.sec
|
65
|
+
loginfo2 "Check if active tuner recording"
|
66
|
+
doc = Nokogiri::HTML(patched_resp)
|
67
|
+
active=doc.xpath("//table[1]/tr[2]/td[6]").inner_html
|
68
|
+
if active=='TV'
|
69
|
+
is_recording=doc.xpath("//table[1]/tr[2]/td[5]").inner_html
|
70
|
+
else
|
71
|
+
is_recording=doc.xpath("//table[1]/tr[3]/td[5]").inner_html
|
72
|
+
end
|
73
|
+
loginfo2 "Value of Is Recording flag from MDN remote diags is: #{is_recording}"
|
74
|
+
if is_recording=='1'
|
75
|
+
loginfo2 "Active tuner is recording"
|
76
|
+
return true
|
77
|
+
end
|
78
|
+
rescue Timeout::Error
|
79
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
80
|
+
retries += 1
|
81
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
82
|
+
retry unless retries == 4
|
83
|
+
loginfo2 'Unable to check if active tuner recording' if retries == 4
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Use it to check if standby tuner of MDN STB is recording
|
88
|
+
# * *Args* :
|
89
|
+
# - IP address of MDN STB
|
90
|
+
# * *Returns* :
|
91
|
+
# - true if standby tuner is recording
|
92
|
+
def standby_tuner_recording?(ip)
|
93
|
+
retries = 0
|
94
|
+
stb_ip = ip
|
95
|
+
begin
|
96
|
+
loginfo2 "Connecting to Remote Diags to check recording on standby tuner using IP: #{stb_ip}"
|
97
|
+
patched_resp = "<HTML><BODY>"
|
98
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
99
|
+
loginfo2 'Wait for page to open'
|
100
|
+
sleep 5.sec
|
101
|
+
loginfo2 "Opening Resource Scheduler"
|
102
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
103
|
+
patched_resp << response
|
104
|
+
end
|
105
|
+
sleep 5.sec
|
106
|
+
loginfo2 "Check if standby tuner recording"
|
107
|
+
doc = Nokogiri::HTML(patched_resp)
|
108
|
+
active=doc.xpath("//table[1]/tr[2]/td[6]").inner_html
|
109
|
+
if active!='TV'
|
110
|
+
is_recording=doc.xpath("//table[1]/tr[2]/td[5]").inner_html
|
111
|
+
else
|
112
|
+
is_recording=doc.xpath("//table[1]/tr[3]/td[5]").inner_html
|
113
|
+
end
|
114
|
+
loginfo2 "Value of Is Recording flag from MDN remote diags is: #{is_recording}"
|
115
|
+
if is_recording=='1'
|
116
|
+
loginfo2 "Standby tuner is recording"
|
117
|
+
return true
|
118
|
+
end
|
119
|
+
rescue Timeout::Error
|
120
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
121
|
+
retries += 1
|
122
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
123
|
+
retry unless retries == 4
|
124
|
+
loginfo2 'Unable to check if standby tuner recording' if retries == 4
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Use it to fetch channel no. of PIP tuner from its IP address
|
129
|
+
# * *Args* :
|
130
|
+
# - IP address of MDN STB
|
131
|
+
# * *Returns* :
|
132
|
+
# - Channel no. on which the PIP tuner is
|
133
|
+
def fetch_pip_tuner(ip)
|
134
|
+
retries = 0
|
135
|
+
stb_ip = ip
|
136
|
+
begin
|
137
|
+
loginfo2 "Connecting to Remote Diags to fetch PIP tuner using IP: #{stb_ip}"
|
138
|
+
patched_resp = "<HTML><BODY>"
|
139
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
140
|
+
loginfo2 'Wait for page to open'
|
141
|
+
sleep 5.sec
|
142
|
+
loginfo2 "Opening Resource Scheduler"
|
143
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
144
|
+
patched_resp << response
|
145
|
+
end
|
146
|
+
sleep 5.sec
|
147
|
+
doc = Nokogiri::HTML(patched_resp)
|
148
|
+
active=doc.xpath("//table[1]/tr[2]/td[6]").inner_html
|
149
|
+
standby=doc.xpath("//table[1]/tr[3]/td[6]").inner_html
|
150
|
+
if active=='VIDEO_OUT'
|
151
|
+
tuner = doc.xpath("//table[1]/tr[2]/td[4]").inner_html
|
152
|
+
elsif standby=='VIDEO_OUT'
|
153
|
+
tuner = doc.xpath("//table[1]/tr[3]/td[4]").inner_html
|
154
|
+
else
|
155
|
+
loginfo2 'PIP not turned ON'
|
156
|
+
tuner = ''
|
157
|
+
end
|
158
|
+
loginfo2 "PIP tuner is on channel: #{tuner}"
|
159
|
+
return tuner
|
160
|
+
|
161
|
+
rescue Timeout::Error
|
162
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
163
|
+
retries += 1
|
164
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
165
|
+
retry unless retries == 4
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# Use it to check if PIP tuner of MDN STB is recording
|
170
|
+
# * *Args* :
|
171
|
+
# - IP address of MDN STB
|
172
|
+
# * *Returns* :
|
173
|
+
# - true if PIP tuner is recording
|
174
|
+
def pip_tuner_recording?(ip)
|
175
|
+
retries = 0
|
176
|
+
stb_ip = ip
|
177
|
+
begin
|
178
|
+
loginfo2 "Connecting to Remote Diags to check recording on PIP tuner using IP: #{stb_ip}"
|
179
|
+
patched_resp = "<HTML><BODY>"
|
180
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
181
|
+
loginfo2 'Wait for page to open'
|
182
|
+
sleep 5.sec
|
183
|
+
loginfo2 "Opening Resource Scheduler"
|
184
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
185
|
+
patched_resp << response
|
186
|
+
end
|
187
|
+
sleep 5.sec
|
188
|
+
loginfo2 "Check if standby tuner recording"
|
189
|
+
doc = Nokogiri::HTML(patched_resp)
|
190
|
+
active=doc.xpath("//table[1]/tr[2]/td[6]").inner_html
|
191
|
+
if active =='VIDEO_OUT'
|
192
|
+
is_recording=doc.xpath("//table[1]/tr[2]/td[5]").inner_html
|
193
|
+
else
|
194
|
+
is_recording=doc.xpath("//table[1]/tr[3]/td[5]").inner_html
|
195
|
+
end
|
196
|
+
loginfo2 "Value of Is Recording flag from MDN remote diags is: #{is_recording}"
|
197
|
+
if is_recording=='1'
|
198
|
+
loginfo2 "PIP tuner is recording"
|
199
|
+
return true
|
200
|
+
end
|
201
|
+
rescue Timeout::Error
|
202
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
203
|
+
retries += 1
|
204
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
205
|
+
retry unless retries == 4
|
206
|
+
loginfo2 'Unable to check if PIP tuner recording' if retries == 4
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
# Use it to fetch the tuner no. of the channels from its IP address
|
211
|
+
# * *Args* :
|
212
|
+
# - IP address of MDN STB and array of active & standby tuner channels
|
213
|
+
# * *Returns* :
|
214
|
+
# -Array of Tuner number of the active & standby channels
|
215
|
+
def fetch_tuner_number(ip, channels)
|
216
|
+
retries = 0
|
217
|
+
stb_ip = ip
|
218
|
+
begin
|
219
|
+
loginfo2 "Connecting to Remote Diags to fetch active tuner using IP: #{stb_ip}"
|
220
|
+
patched_resp = "<HTML><BODY>"
|
221
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
222
|
+
loginfo2 'Wait for page to open'
|
223
|
+
sleep 5.sec
|
224
|
+
loginfo2 "Opening Resource Scheduler"
|
225
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
226
|
+
patched_resp << response
|
227
|
+
end
|
228
|
+
sleep 5.sec
|
229
|
+
doc = Nokogiri::HTML(patched_resp)
|
230
|
+
tuner = []
|
231
|
+
tuner_0 = doc.xpath("//table[1]/tr[2]/td[4]").inner_html
|
232
|
+
tuner_1 = doc.xpath("//table[1]/tr[3]/td[4]").inner_html
|
233
|
+
if ((tuner_0 == channels[0].to_s) ||(tuner_1 == channels[1].to_s))
|
234
|
+
tuner[0] = channels[0]
|
235
|
+
tuner[1] = channels[1]
|
236
|
+
elsif ((tuner_0 == channels[1].to_s) ||(tuner_1 == channels[0].to_s))
|
237
|
+
tuner[0] = channels[1]
|
238
|
+
tuner[1] = channels[0]
|
239
|
+
end
|
240
|
+
return tuner
|
241
|
+
|
242
|
+
rescue Timeout::Error
|
243
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
244
|
+
retries += 1
|
245
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
246
|
+
retry unless retries == 4
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
# Use it to fetch the destination of the specified channel from its IP address
|
251
|
+
# * *Args* :
|
252
|
+
# - IP address of MDN STB
|
253
|
+
# - Channel number whose destination is required
|
254
|
+
# * *Returns* :
|
255
|
+
# - Destination of the channel passed
|
256
|
+
def fetch_tuner_destination(ip, channel)
|
257
|
+
retries = 0
|
258
|
+
stb_ip = ip
|
259
|
+
begin
|
260
|
+
loginfo2 "Connecting to Remote Diags to fetch active tuner using IP: #{stb_ip}"
|
261
|
+
patched_resp = "<HTML><BODY>"
|
262
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
263
|
+
loginfo2 'Wait for page to open'
|
264
|
+
sleep 5.sec
|
265
|
+
loginfo2 "Opening Resource Scheduler"
|
266
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
267
|
+
patched_resp << response
|
268
|
+
end
|
269
|
+
loginfo2 "patched_resp : #{patched_resp}",false
|
270
|
+
sleep 5.sec
|
271
|
+
destination = ''
|
272
|
+
doc = Nokogiri::HTML(patched_resp)
|
273
|
+
if channel.to_s == doc.xpath("//table[1]/tr[2]/td[4]").inner_html
|
274
|
+
destination = doc.xpath("//table[1]/tr[2]/td[6]").inner_html
|
275
|
+
else
|
276
|
+
destination = doc.xpath("//table[1]/tr[3]/td[6]").inner_html
|
277
|
+
end
|
278
|
+
loginfo2 "destination : #{destination}",false
|
279
|
+
return destination
|
280
|
+
|
281
|
+
rescue Timeout::Error
|
282
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
283
|
+
retries += 1
|
284
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
285
|
+
retry unless retries == 4
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
# Private method
|
290
|
+
# Use it to fetch the airtime catalog ID's from MDN remote diagnostics
|
291
|
+
# * *Args* :
|
292
|
+
# * *Returns* :
|
293
|
+
# - array of airtime catalog ID's
|
294
|
+
def _fetch_mdn_airtime_catalog_id(ip)
|
295
|
+
retries = 0
|
296
|
+
retries_catalogs = 0
|
297
|
+
stb_ip = ip
|
298
|
+
begin
|
299
|
+
loginfo2 "Connecting to MDN Remote Diags to fetch Airtime catalog ID's using IP: #{stb_ip}"
|
300
|
+
for i in 1..4
|
301
|
+
patched_resp = "<HTML><BODY>"
|
302
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
303
|
+
loginfo2 "Opening disk info and fetching airtime catalogs list"
|
304
|
+
options = {
|
305
|
+
'String' => "GET /disk HTTP/1.1\nHost: #{stb_ip}\n",
|
306
|
+
'Match' => /(airtGrp)/,
|
307
|
+
'Timeout' => 180
|
308
|
+
}
|
309
|
+
server.cmd(options) do |response|
|
310
|
+
patched_resp << response
|
311
|
+
end
|
312
|
+
sleep 5.sec
|
313
|
+
doc = Nokogiri::HTML(patched_resp)
|
314
|
+
logdebug doc
|
315
|
+
data = []
|
316
|
+
doc.xpath("//a").each{|e| if e.text.include?('airtGrp'); logdebug "#{e['href']} -> #{e.text.split('-')[1]}"; data.push(e.text.split('-')[1]);end }
|
317
|
+
if data.size == 0
|
318
|
+
loginfo2 'Unable to fetch airtime catalogs list from MDN remote diagnostics'
|
319
|
+
retries_catalogs += 1
|
320
|
+
end
|
321
|
+
break if data.size != 0
|
322
|
+
loginfo2 "Retry for catalogs list: [#{retries_catalogs}]" if retries_catalogs < 4
|
323
|
+
end
|
324
|
+
return data
|
325
|
+
rescue Timeout::Error
|
326
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
327
|
+
retries += 1
|
328
|
+
loginfo2 "Retry: [#{retries}]" if retries < 4
|
329
|
+
retry unless retries == 4
|
330
|
+
tcinvalid "Web Diagnostics not accessible" if retries == 4
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
# Use it to fetch channel no. of standby tuner(if it is recording) from its IP address
|
335
|
+
# * *Args* :
|
336
|
+
# - IP address of MDN STB
|
337
|
+
# * *Returns* :
|
338
|
+
# - Channel no. on which the standby tuner is
|
339
|
+
def fetch_recording_standby_tuner(ip)
|
340
|
+
retries = 0
|
341
|
+
stb_ip = ip
|
342
|
+
begin
|
343
|
+
loginfo2 "Connecting to Remote Diags to fetch active tuner using IP: #{stb_ip}"
|
344
|
+
patched_resp = "<HTML><BODY>"
|
345
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
346
|
+
loginfo2 'Wait for page to open'
|
347
|
+
sleep 5.sec
|
348
|
+
loginfo2 "Opening Resource Scheduler"
|
349
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
350
|
+
patched_resp << response
|
351
|
+
end
|
352
|
+
sleep 5.sec
|
353
|
+
doc = Nokogiri::HTML(patched_resp)
|
354
|
+
|
355
|
+
dest = doc.xpath("//table[1]/tr[2]/td[6]").inner_html
|
356
|
+
isRecording = doc.xpath("//table[1]/tr[2]/td[5]").inner_html
|
357
|
+
channel = ''
|
358
|
+
if dest =='DISK' && isRecording == '1'
|
359
|
+
channel = doc.xpath("//table[1]/tr[2]/td[4]").inner_html
|
360
|
+
else
|
361
|
+
dest = doc.xpath("//table[1]/tr[3]/td[6]").inner_html
|
362
|
+
isRecording = doc.xpath("//table[1]/tr[3]/td[5]").inner_html
|
363
|
+
if dest =='DISK' && isRecording == '1'
|
364
|
+
channel = doc.xpath("//table[1]/tr[3]/td[4]").inner_html
|
365
|
+
end
|
366
|
+
end
|
367
|
+
loginfo2 "Tuner is on channel: #{channel}"
|
368
|
+
return channel
|
369
|
+
|
370
|
+
rescue Timeout::Error
|
371
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
372
|
+
retries += 1
|
373
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
374
|
+
retry unless retries == 4
|
375
|
+
loginfo2 "Unable to fetch airtime catalog ID's" if retries == 4
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
# Use it to check if tuner 0 of MDN STB is recording
|
380
|
+
# * *Args* :
|
381
|
+
# - IP address of MDN STB
|
382
|
+
# * *Returns* :
|
383
|
+
# - true if tuner 0 is recording
|
384
|
+
def tuner_0_recording?(ip)
|
385
|
+
retries = 0
|
386
|
+
stb_ip = ip
|
387
|
+
begin
|
388
|
+
loginfo2 "Connecting to Remote Diags to check recording on tuner 0 using IP: #{stb_ip}"
|
389
|
+
patched_resp = "<HTML><BODY>"
|
390
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
391
|
+
loginfo2 'Wait for page to open'
|
392
|
+
sleep 5.sec
|
393
|
+
loginfo2 "Opening Resource Scheduler"
|
394
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
395
|
+
patched_resp << response
|
396
|
+
end
|
397
|
+
sleep 5.sec
|
398
|
+
loginfo2 "patched_resp : #{patched_resp}",false
|
399
|
+
loginfo2 "Check if tuner 0 recording"
|
400
|
+
doc = Nokogiri::HTML(patched_resp)
|
401
|
+
is_recording=doc.xpath("//table[1]/tr[2]/td[5]").inner_html
|
402
|
+
loginfo2 "Value of Is Recording flag from MDN remote diags is: #{is_recording}"
|
403
|
+
if is_recording=='1'
|
404
|
+
loginfo2 "Tuner 0 is recording"
|
405
|
+
return true
|
406
|
+
end
|
407
|
+
rescue Timeout::Error
|
408
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
409
|
+
retries += 1
|
410
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
411
|
+
retry unless retries == 4
|
412
|
+
loginfo2 'Unable to check if standby tuner recording' if retries == 4
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
# Use it to check if tuner 1 of MDN STB is recording
|
417
|
+
# * *Args* :
|
418
|
+
# - IP address of MDN STB
|
419
|
+
# * *Returns* :
|
420
|
+
# - true if tuner 1 is recording
|
421
|
+
def tuner_1_recording?(ip)
|
422
|
+
retries = 0
|
423
|
+
stb_ip = ip
|
424
|
+
begin
|
425
|
+
loginfo2 "Connecting to Remote Diags to check recording on tuner 1 using IP: #{stb_ip}"
|
426
|
+
patched_resp = "<HTML><BODY>"
|
427
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
428
|
+
loginfo2 'Wait for page to open'
|
429
|
+
sleep 5.sec
|
430
|
+
loginfo2 "Opening Resource Scheduler"
|
431
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
432
|
+
patched_resp << response
|
433
|
+
end
|
434
|
+
sleep 5.sec
|
435
|
+
loginfo2 "patched_resp : #{patched_resp}",false
|
436
|
+
loginfo2 "Check if tuner 1 recording"
|
437
|
+
doc = Nokogiri::HTML(patched_resp)
|
438
|
+
is_recording=doc.xpath("//table[1]/tr[3]/td[5]").inner_html
|
439
|
+
loginfo2 "Value of Is Recording flag from MDN remote diags is: #{is_recording}"
|
440
|
+
if is_recording=='1'
|
441
|
+
loginfo2 "Tuner 0 is recording"
|
442
|
+
return true
|
443
|
+
end
|
444
|
+
rescue Timeout::Error
|
445
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
446
|
+
retries += 1
|
447
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
448
|
+
retry unless retries == 4
|
449
|
+
loginfo2 'Unable to check if standby tuner recording' if retries == 4
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
# Use it to fetch app handler name from Atlas Application (remote diags)
|
454
|
+
# * *Args* :
|
455
|
+
# - IP address of MDN STB
|
456
|
+
# * *Returns* :
|
457
|
+
# - String app handler name (e.g. set0, ond0, etc)
|
458
|
+
def fetch_atlas_applications_focused_app_handler_name(stb_ip = fetch_ip)
|
459
|
+
retries = 0
|
460
|
+
begin
|
461
|
+
loginfo2 "Connecting to Remote Diags to fetch app handler name using IP: #{stb_ip}"
|
462
|
+
patched_resp = "<HTML><BODY>"
|
463
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
464
|
+
loginfo2 'Wait for page to open'
|
465
|
+
sleep 5.sec
|
466
|
+
loginfo2 "Opening Atlas Applications"
|
467
|
+
server.cmd("GET /apps HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
468
|
+
patched_resp << response
|
469
|
+
end
|
470
|
+
sleep 5.sec
|
471
|
+
loginfo2 "Fethcing app handler name from Atlas Applications"
|
472
|
+
doc = Nokogiri::HTML(patched_resp)
|
473
|
+
app_handler_name=doc.xpath("/html/body/table[1]/tr[2]/td[2]").inner_text.to_s
|
474
|
+
loginfo2 "App handler name : #{app_handler_name}"
|
475
|
+
return app_handler_name
|
476
|
+
rescue Timeout::Error
|
477
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
478
|
+
retries += 1
|
479
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
480
|
+
retry unless retries == 4
|
481
|
+
rescue StandardError => e
|
482
|
+
loginfo2 "StandardError : #{e.message}"
|
483
|
+
end
|
484
|
+
|
485
|
+
loginfo2 'Unable to fetch app handler name from Atlas Applications'
|
486
|
+
return ""
|
487
|
+
end
|
488
|
+
|
489
|
+
def fetch_link_on_mdn_web_diagnostics(stb_ip)
|
490
|
+
links = {}
|
491
|
+
retries=0
|
492
|
+
begin
|
493
|
+
loginfo2 "Connecting to Remote Diags to verify link and its fields using IP: #{stb_ip}"
|
494
|
+
patched_resp = "<HTML><BODY>"
|
495
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
496
|
+
loginfo2 'Wait for page to open'
|
497
|
+
sleep 5.sec
|
498
|
+
|
499
|
+
loginfo2 "Opening home page info"
|
500
|
+
server.cmd("GET /home HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
501
|
+
patched_resp << response
|
502
|
+
end
|
503
|
+
sleep 5.sec
|
504
|
+
doc = Nokogiri::HTML(patched_resp)
|
505
|
+
doc.xpath("//a").map{ |e| links[e.text.strip.gsub(/\s/,'_').gsub(/\W/,'').downcase.to_sym]=e['href']}
|
506
|
+
return links
|
507
|
+
rescue Timeout::Error
|
508
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
509
|
+
retries += 1
|
510
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
511
|
+
retry unless retries == 4
|
512
|
+
loginfo2 'Unable to fetch links' if retries == 4
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
516
|
+
def verify_mdn_remote_diagnostic_file_operations(stb_ip)
|
517
|
+
retries = 0
|
518
|
+
begin
|
519
|
+
server=_connect_to_remote_diags(stb_ip)
|
520
|
+
return false if server.nil?
|
521
|
+
loginfo2 "Opening File Operations link"
|
522
|
+
patched_resp = "<HTML><BODY>"
|
523
|
+
server.cmd("GET /fo HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
524
|
+
patched_resp << response
|
525
|
+
end
|
526
|
+
sleep 5.sec
|
527
|
+
doc = Nokogiri::HTML(patched_resp)
|
528
|
+
|
529
|
+
lines=[]
|
530
|
+
count=0
|
531
|
+
doc.to_s.split("\n").each {|line| lines.push(line)}
|
532
|
+
|
533
|
+
loginfo2 'Verify Header Information'
|
534
|
+
fields = []
|
535
|
+
expected_fields=['IB Errors','OOB Errors','Last BFS Read Error','Last Stream Exception','Num pending fileOps']
|
536
|
+
fields = lines.find_all{|item| item.include?('File Operations')}[1].to_s.split("<br>").to_a
|
537
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
538
|
+
loginfo2 '*************************************'
|
539
|
+
|
540
|
+
loginfo2 'Verify Columns'
|
541
|
+
columns =[]
|
542
|
+
expected_columns=['U Handle','I Handle','Path','Owner','Queued State','Size','Priority','Read State']
|
543
|
+
(1..8).each {|i| columns.push(doc.xpath("//table[1]/tr[1]/td[#{i}]").inner_html)}
|
544
|
+
expected_columns.each{|clm| columns.find_all{|item| if item.include?("#{clm}"); loginfo2 "Table column: #{item} verified"; count+=1; end}}
|
545
|
+
|
546
|
+
loginfo2 'Verify Back to Main page link'
|
547
|
+
doc.xpath("//a").each{|e| if e.text.include?('Back to Main Page'); loginfo2 "#{e['href']} -> #{e.text}"; count+=1;end }
|
548
|
+
|
549
|
+
loginfo2 'All Header Information and Columns on File operations link verified' if count == 14
|
550
|
+
return true if count == 14
|
551
|
+
loginfo2 'All Header Information and Columns on File operations link not verified'
|
552
|
+
return false
|
553
|
+
rescue Timeout::Error
|
554
|
+
loginfo2 'Connection to remote diagnostics Timed Out on opening File operations page...'
|
555
|
+
retries += 1
|
556
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
557
|
+
retry unless retries == 4
|
558
|
+
loginfo2 'Unable to verify File operations' if retries == 4
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
#Private method
|
563
|
+
def _connect_to_remote_diags(stb_ip)
|
564
|
+
server = nil
|
565
|
+
retries=0
|
566
|
+
begin
|
567
|
+
loginfo2 "Connecting to MDN Remote Diags home page using IP: #{stb_ip}"
|
568
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
569
|
+
loginfo2 'Wait for page to open'
|
570
|
+
sleep 5.sec
|
571
|
+
rescue Timeout::Error
|
572
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
573
|
+
retries += 1
|
574
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
575
|
+
retry unless retries == 4
|
576
|
+
loginfo2 "Unable to connect to MDN remote diagnostics" if retries == 4
|
577
|
+
return nil
|
578
|
+
end
|
579
|
+
return server
|
580
|
+
end
|
581
|
+
|
582
|
+
def verify_mdn_remote_diagnostic_sdv_information(stb_ip)
|
583
|
+
retries = 0
|
584
|
+
begin
|
585
|
+
server=_connect_to_remote_diags(stb_ip)
|
586
|
+
return false if server.nil?
|
587
|
+
|
588
|
+
loginfo2 "Opening SDV information"
|
589
|
+
patched_resp = "<HTML><BODY>"
|
590
|
+
server.cmd("GET /sdv HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
591
|
+
patched_resp << response
|
592
|
+
end
|
593
|
+
sleep 5.sec
|
594
|
+
loginfo2 "Verify information on SDV information link"
|
595
|
+
doc = Nokogiri::HTML(patched_resp)
|
596
|
+
|
597
|
+
headers=[]
|
598
|
+
doc.xpath("//h2").each{|e| headers.push(e.text)}
|
599
|
+
lines=[]
|
600
|
+
count=0
|
601
|
+
doc.to_s.split("\n").each {|line| lines.push(line)}
|
602
|
+
|
603
|
+
loginfo2 'Verify CVCT Section Information'
|
604
|
+
fields = []
|
605
|
+
expected_fields=['version_number','Total number of sections','Total number of channels in MC']
|
606
|
+
fields = lines.find_all {|item| item.include?('CVCT Section Information')}[0].to_s.split("</h2>")[1].split("<br>").to_a
|
607
|
+
headers.find_all{|item| if item.include?('CVCT Section Information'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
608
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
609
|
+
loginfo2 '*************************************'
|
610
|
+
|
611
|
+
loginfo2 'Verify SDV MiniCarousel Channel Map Table'
|
612
|
+
headers.find_all{|item| if item.include?('SDV MiniCarousel Channel Map Table'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
613
|
+
loginfo2 'Verify Table Columns'
|
614
|
+
columns =[]
|
615
|
+
expected_columns=['source_id','program','frequency','modulation']
|
616
|
+
(1..4).each {|i| columns.push(doc.xpath("//table[1]/tr[1]/td[#{i}]").inner_html)}
|
617
|
+
expected_columns.each{|clm| columns.find_all{|item| if item.include?("#{clm}"); loginfo2 "Table column: #{item} verified"; count+=1; end}}
|
618
|
+
loginfo2 '*************************************'
|
619
|
+
|
620
|
+
loginfo2 'Verify CVCT IP Resource Descriptor'
|
621
|
+
fields = []
|
622
|
+
expected_fields=['Descriptor_Tag','Descriptor_Length','IP_Port','Primary_IP_Address','Secondary_IP_Address']
|
623
|
+
fields = lines.find_all {|item| item.include?('CVCT IP Resource Descriptor')}[0].to_s.split("</h2>")[1].split("<br>").to_a
|
624
|
+
headers.find_all{|item| if item.include?('CVCT IP Resource Descriptor'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
625
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
626
|
+
loginfo2 '*************************************'
|
627
|
+
|
628
|
+
loginfo2 'Verify CVCT Client Configuration Parameters Descriptor'
|
629
|
+
fields = []
|
630
|
+
expected_fields=['Descriptor_Tag','Descriptor_Length','ResendSDBPrgSelectRequest','LuaReportingInterval','ChannelMapReadInterval','MessageResponseTimeOut',
|
631
|
+
'MessageRequestMaxRetriesCount','MessageRequestRetryInterval','BandwidthReclaimUITimeout']
|
632
|
+
fields = lines.find_all {|item| item.include?('CVCT Client Configuration Parameters Descriptor')}[0].to_s.split("</h2>")[1].split("<br>").to_a
|
633
|
+
headers.find_all{|item| if item.include?('CVCT Client Configuration Parameters Descriptor'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
634
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
635
|
+
loginfo2 '*************************************'
|
636
|
+
|
637
|
+
loginfo2 'Verify SDV Tuner Usage'
|
638
|
+
fields = []
|
639
|
+
expected_fields=['Tuner1 Status']
|
640
|
+
fields = lines.find_all {|item| item.include?('SDV Tuner Usage')}[0].to_s.split('00000">')[1].split("<br>").to_a
|
641
|
+
headers.find_all{|item| if item.include?('SDV Tuner Usage'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
642
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
643
|
+
loginfo2 '*************************************'
|
644
|
+
|
645
|
+
loginfo2 'Verify SDV Channel Change Messages'
|
646
|
+
headers.find_all{|item| if item.include?('CVCT Client Configuration Parameters Descriptor'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
647
|
+
fields = []
|
648
|
+
fields = lines.find_all {|item| item.include?('SDV Channel Change Messages')}[0].to_s.split('/h2><table><tr><td><font color="#000000">')[1].to_s.split('<br></font></td></tr><br></table></body></html>')[0].to_s.split('<br></font></td></tr><tr><td><font color="#000000">').to_a
|
649
|
+
fields.each{|fld| loginfo2 fld}
|
650
|
+
loginfo2 '*************************************'
|
651
|
+
|
652
|
+
loginfo2 'Verify Back to Main page link'
|
653
|
+
doc.xpath("//a").each{|e| if e.text.include?('Back to Main Page'); loginfo2 "Link #{e['href']} -> #{e.text} verified"; count+=1;end }
|
654
|
+
|
655
|
+
loginfo2 'All information on SDV link verified' if count == 29
|
656
|
+
return true if count == 29
|
657
|
+
loginfo2 'All information on SDV link not verified'
|
658
|
+
return false
|
659
|
+
|
660
|
+
rescue Timeout::Error
|
661
|
+
loginfo2 'Connection to remote diagnostics Timed Out on opening SDV page...'
|
662
|
+
retries += 1
|
663
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
664
|
+
retry unless retries == 4
|
665
|
+
loginfo2 'Unable to verify SDV information' if retries == 4
|
666
|
+
end
|
667
|
+
end
|
668
|
+
|
669
|
+
def verify_mdn_remote_diagnostic_resource_scheduler(stb_ip)
|
670
|
+
retries = 0
|
671
|
+
begin
|
672
|
+
server=_connect_to_remote_diags(stb_ip)
|
673
|
+
return false if server.nil?
|
674
|
+
|
675
|
+
loginfo2 "Opening Resource scheduler"
|
676
|
+
patched_resp = "<HTML><BODY>"
|
677
|
+
server.cmd("GET /rs HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
678
|
+
patched_resp << response
|
679
|
+
end
|
680
|
+
sleep 5.sec
|
681
|
+
loginfo2 "Verify information on Resource Scheduler link"
|
682
|
+
doc = Nokogiri::HTML(patched_resp)
|
683
|
+
|
684
|
+
headers=[]
|
685
|
+
doc.xpath("//h2").each{|e| headers.push(e.text)}
|
686
|
+
|
687
|
+
lines=[]
|
688
|
+
count=0
|
689
|
+
doc.to_s.split("\n").each {|line| lines.push(line)}
|
690
|
+
|
691
|
+
loginfo2 'Verify Scheduled Events Table'
|
692
|
+
headers.find_all{|item| if item.include?('Scheduled Events'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
693
|
+
loginfo2 'Verify Table Columns'
|
694
|
+
columns =[]
|
695
|
+
expected_columns=['Type','State','StartTime','PreEventTime','Duration','ReqPriority','ServiceID','Freq','CH']
|
696
|
+
(1..9).each {|i| columns.push(doc.xpath("//table[3]/tr[1]/td[#{i}]").inner_html)}
|
697
|
+
expected_columns.each{|clm| columns.find_all{|item| if item.include?("#{clm}"); loginfo2 "Table column: #{item} verified"; count+=1; end}}
|
698
|
+
loginfo2 '*************************************'
|
699
|
+
|
700
|
+
loginfo2 'Verify Tuner Users Table'
|
701
|
+
headers.find_all{|item| if item.include?('Tuner Users'); loginfo2 "Header: #{item} verified"; count+=1; end}
|
702
|
+
loginfo2 'Verify Table Columns'
|
703
|
+
columns =[]
|
704
|
+
expected_columns=['Number','pTvPlayer','Type','ConvertingUser','WaitingToConvertUser','TsbRecorderUser','handle','ID','dest','bDigital','chan','source','freq','mod','prog','affinity Handle','affinity ID']
|
705
|
+
(1..17).each {|i| columns.push(doc.xpath("//table[2]/tr[1]/td[#{i}]").inner_html)}
|
706
|
+
expected_columns.each{|clm| columns.find_all{|item| if item==clm; loginfo2 "Table column: #{item} verified"; count+=1; end}}
|
707
|
+
|
708
|
+
loginfo2 'All information on Resource scheduler link verified' if count == 28
|
709
|
+
return true if count == 28
|
710
|
+
loginfo2 'All information on Resource scheduler link not verified'
|
711
|
+
return false
|
712
|
+
|
713
|
+
rescue Timeout::Error
|
714
|
+
loginfo2 'Connection to remote diagnostics Timed Out on opening Resource scheduler page...'
|
715
|
+
retries += 1
|
716
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
717
|
+
retry unless retries == 4
|
718
|
+
loginfo2 'Unable to verify Resource scheduler information' if retries == 4
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
def verify_mdn_remote_diagnostic_ptv_memory_data(stb_ip)
|
723
|
+
retries = 0
|
724
|
+
begin
|
725
|
+
server=_connect_to_remote_diags(stb_ip)
|
726
|
+
return false if server.nil?
|
727
|
+
|
728
|
+
loginfo2 "Opening PTV Memory Data"
|
729
|
+
patched_resp = "<HTML><BODY>"
|
730
|
+
server.cmd("GET /ptvmemdata HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
731
|
+
patched_resp << response
|
732
|
+
end
|
733
|
+
sleep 5.sec
|
734
|
+
loginfo2 "Verify information on PTV Memory Data link"
|
735
|
+
doc = Nokogiri::HTML(patched_resp)
|
736
|
+
puts (doc.xpath("//title").inner_html)
|
737
|
+
|
738
|
+
lines=[]
|
739
|
+
count=0
|
740
|
+
doc.to_s.split("\n").each {|line| lines.push(line)}
|
741
|
+
|
742
|
+
loginfo2 'Verify PTVALLOC Table'
|
743
|
+
fields = []
|
744
|
+
expected_fields=['PTVALLOC','owner','ptr','size(B)']
|
745
|
+
fields = lines.find_all {|item| item.include?('PTVALLOC')}[0].to_s.split('<tr><td>')[1].to_s.split('</td></tr>')[0].to_s.split("</td><td>").to_a
|
746
|
+
loginfo2 'Verify PTVALLOC Table Columns'
|
747
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
748
|
+
loginfo2 '*************************************'
|
749
|
+
|
750
|
+
loginfo2 'Verify PTVHANDLE Table'
|
751
|
+
fields = []
|
752
|
+
expected_fields=['PTVHANDLE','owner','ptr','size(B)']
|
753
|
+
fields = lines.find_all {|item| item.include?('PTVHANDLE')}[0].to_s.split('<tr><td>')[1].to_s.split('</td></tr>')[0].to_s.split("</td><td>").to_a
|
754
|
+
loginfo2 'Verify PTVHANDLE Table Columns'
|
755
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
756
|
+
loginfo2 '*************************************'
|
757
|
+
|
758
|
+
loginfo2 'Verify Condition Table'
|
759
|
+
fields = []
|
760
|
+
expected_fields=['Condition','Total Free (KB)','Max Free (KB)']
|
761
|
+
fields = lines.find_all {|item| item.include?('Condition')}[0].to_s.split('<tr><td>')[1].to_s.split('</td></tr>')[0].to_s.split("</td><td>").to_a
|
762
|
+
loginfo2 'Verify Condition Table Columns'
|
763
|
+
|
764
|
+
expected_fields.each{|fld| fields.find_all{|item| if item.include?("#{fld}"); loginfo2 "Field: #{item} verified"; count+=1; end}}
|
765
|
+
loginfo2 '*************************************'
|
766
|
+
|
767
|
+
loginfo2 'Verify Back to Main page link'
|
768
|
+
doc.xpath("//a").each{|e| if e.text.include?('Back to Main Page'); loginfo2 "#{e['href']} -> #{e.text}"; count+=1;end }
|
769
|
+
|
770
|
+
loginfo2 'All information on PTV Memory Data link verified' if count == 12
|
771
|
+
return true if count == 12
|
772
|
+
loginfo2 'All information on PTV Memory Data link not verified'
|
773
|
+
return false
|
774
|
+
|
775
|
+
rescue Timeout::Error
|
776
|
+
loginfo2 'Connection to remote diagnostics Timed Out on opening PTV memory data page...'
|
777
|
+
retries += 1
|
778
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
779
|
+
retry unless retries == 4
|
780
|
+
loginfo2 'Unable to verify PTV Memory Data information' if retries == 4
|
781
|
+
end
|
782
|
+
end
|
783
|
+
|
784
|
+
def verify_mdn_remote_diagnostic_disk_contents(stb_ip)
|
785
|
+
retries = 0
|
786
|
+
begin
|
787
|
+
server=_connect_to_remote_diags(stb_ip)
|
788
|
+
return false if server.nil?
|
789
|
+
|
790
|
+
loginfo2 "Opening Disk contents"
|
791
|
+
patched_resp = "<HTML><BODY>"
|
792
|
+
server.cmd("GET /disk HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
793
|
+
patched_resp << response
|
794
|
+
end
|
795
|
+
sleep 5.sec
|
796
|
+
loginfo2 "Verify information on Disk contents link"
|
797
|
+
doc = Nokogiri::HTML(patched_resp)
|
798
|
+
|
799
|
+
fields=[]
|
800
|
+
doc.xpath("//b").each{|e| fields.push(e.text)}
|
801
|
+
|
802
|
+
count=0
|
803
|
+
fields.each {|item| loginfo2 "Field: #{item} verified"; count+=1}
|
804
|
+
|
805
|
+
loginfo2 'All information on Disk contents link verified' if count >1
|
806
|
+
return true if count >1
|
807
|
+
loginfo2 'All information on Disk contents link not verified'
|
808
|
+
return false
|
809
|
+
|
810
|
+
rescue Timeout::Error
|
811
|
+
loginfo2 'Connection to remote diagnostics Timed Out on opening Disk contents page...'
|
812
|
+
retries += 1
|
813
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
814
|
+
retry unless retries == 4
|
815
|
+
loginfo2 'Unable to verify Disk contents information' if retries == 4
|
816
|
+
end
|
817
|
+
end
|
818
|
+
|
819
|
+
def verify_mdn_remote_diagnostic_circular_buffers(stb_ip)
|
820
|
+
retries = 0
|
821
|
+
begin
|
822
|
+
server=_connect_to_remote_diags(stb_ip)
|
823
|
+
return false if server.nil?
|
824
|
+
|
825
|
+
loginfo2 "Opening Circular Buffers"
|
826
|
+
patched_resp = "<HTML><BODY>"
|
827
|
+
server.cmd("GET /cb HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
828
|
+
patched_resp << response
|
829
|
+
end
|
830
|
+
sleep 5.sec
|
831
|
+
loginfo2 "Verify information on Circular Buffers link"
|
832
|
+
doc = Nokogiri::HTML(patched_resp)
|
833
|
+
|
834
|
+
fields=[]
|
835
|
+
doc.xpath("//a").each{|e| fields.push(e.text)}
|
836
|
+
|
837
|
+
count=0
|
838
|
+
fields.each {|item| loginfo2 "Field: #{item} verified"; count+=1}
|
839
|
+
|
840
|
+
loginfo2 'All information on Circular Buffers link verified' if count >1
|
841
|
+
return true if count >1
|
842
|
+
loginfo2 'All information on Circular Buffers link not verified'
|
843
|
+
return false
|
844
|
+
|
845
|
+
rescue Timeout::Error
|
846
|
+
loginfo2 'Connection to remote diagnostics Timed Out on opening Circular Buffers page...'
|
847
|
+
retries += 1
|
848
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
849
|
+
retry unless retries == 4
|
850
|
+
loginfo2 'Unable to verify Circular Buffers information' if retries == 4
|
851
|
+
end
|
852
|
+
end
|
853
|
+
|
854
|
+
# Private method
|
855
|
+
def _mdn_remote_diags_verify_options_on_link stb_ip, link, options
|
856
|
+
retries = 0
|
857
|
+
begin
|
858
|
+
logdebug "Connecting to MDN Remote Diags to verify options on link #{link} for ip #{stb_ip}"
|
859
|
+
patched_resp = "<HTML><BODY>"
|
860
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
861
|
+
loginfo2 'Wait for page to open'
|
862
|
+
sleep 5.sec
|
863
|
+
server.cmd("GET #{link} HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
864
|
+
patched_resp << response
|
865
|
+
end
|
866
|
+
options.each {|option|
|
867
|
+
loginfo2 "Verifying option : #{option}"
|
868
|
+
unless patched_resp.include?(option)
|
869
|
+
loginfo2 "Option '#{option}' is not present"
|
870
|
+
return false
|
871
|
+
end
|
872
|
+
loginfo2 "Option : #{option} is present"
|
873
|
+
}
|
874
|
+
rescue Timeout::Error
|
875
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
876
|
+
retries += 1
|
877
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
878
|
+
retry unless retries == 4
|
879
|
+
end
|
880
|
+
|
881
|
+
loginfo2 "Verified all options for link #{link}"
|
882
|
+
return true
|
883
|
+
end
|
884
|
+
|
885
|
+
def mdn_remote_diags_verify_options option_hash, stb_ip = fetch_ip
|
886
|
+
if stb_ip.nil?
|
887
|
+
loginfo2 'STB does not have IP '
|
888
|
+
return false
|
889
|
+
end
|
890
|
+
|
891
|
+
loginfo2 'Fetching links for all pages'
|
892
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
893
|
+
logdebug "Found links : #{options}"
|
894
|
+
|
895
|
+
option_hash.each {|page, values|
|
896
|
+
loginfo2 "Verifying options for page #{page}"
|
897
|
+
if options.has_key?(page)
|
898
|
+
return false unless _mdn_remote_diags_verify_options_on_link(stb_ip, options[page.to_sym],values)
|
899
|
+
else
|
900
|
+
loginfo2 "Link for page #{page} not found"
|
901
|
+
return false
|
902
|
+
end
|
903
|
+
}
|
904
|
+
|
905
|
+
loginfo2 "Verified options on all pages"
|
906
|
+
return true
|
907
|
+
end
|
908
|
+
|
909
|
+
# Private method
|
910
|
+
def _mdn_remote_diags_get_all_code_from_link link, stb_ip = fetch_ip
|
911
|
+
retries = 0
|
912
|
+
patched_resp = ""
|
913
|
+
begin
|
914
|
+
patched_resp = ""
|
915
|
+
server = Net::Telnet::new('Host' => "#{stb_ip}", 'Port' => 8080, 'Telnetmode' => false)
|
916
|
+
loginfo2 "Wait for page to open [#{link}]"
|
917
|
+
sleep 5.sec
|
918
|
+
server.cmd("GET #{link} HTTP/1.1\nHost: #{stb_ip}\n") do |response|
|
919
|
+
patched_resp << response
|
920
|
+
end
|
921
|
+
rescue Timeout::Error
|
922
|
+
loginfo2 'Connection to remote diagnostics Timed Out...'
|
923
|
+
retries += 1
|
924
|
+
loginfo2 "Retry: #{retries}" if retries < 4
|
925
|
+
retry unless retries == 4
|
926
|
+
end
|
927
|
+
|
928
|
+
return patched_resp
|
929
|
+
end
|
930
|
+
|
931
|
+
# Use it to verify if guide catalog was last to load in file operations
|
932
|
+
def mdn_remote_diags_verify_last_catalog catalog_name = 'GUIDE', max_time_in_sec = 500
|
933
|
+
bool = false
|
934
|
+
last_row = ''
|
935
|
+
stb_ip = fetch_ip
|
936
|
+
|
937
|
+
(max_time_in_sec/5).times do
|
938
|
+
loginfo2 'Fetching new page'
|
939
|
+
text = _mdn_remote_diags_get_all_code_from_link('/fo',stb_ip)
|
940
|
+
|
941
|
+
doc = Nokogiri::HTML(text)
|
942
|
+
rows = doc.xpath('//tr')
|
943
|
+
paths = rows.collect do |row|
|
944
|
+
row.at_xpath('td[3]/text()').to_s.strip
|
945
|
+
end
|
946
|
+
|
947
|
+
if paths.length == 1
|
948
|
+
break if bool
|
949
|
+
else
|
950
|
+
bool = true
|
951
|
+
last_row = paths[-1]
|
952
|
+
end
|
953
|
+
logdebug "Last path found : #{last_row}"
|
954
|
+
|
955
|
+
sleep 5.sec
|
956
|
+
end
|
957
|
+
|
958
|
+
logdebug "Last row's path value is : #{last_row}"
|
959
|
+
bool = last_row.include?(catalog_name)
|
960
|
+
loginfo2 'Failed to verify if guide was loaded last' unless bool
|
961
|
+
return bool
|
962
|
+
end
|
963
|
+
|
964
|
+
# Use it to get source of tv player from mdn diags
|
965
|
+
# * *Args* :
|
966
|
+
# - +stb_ip+ -> IP address of box
|
967
|
+
# * *Returns* :
|
968
|
+
# - source number if source was found, nil otherwise
|
969
|
+
def mdn_remote_diags_tv_player_source stb_ip = fetch_ip
|
970
|
+
text = _mdn_remote_diags_get_all_code_from_link('/rs', stb_ip)
|
971
|
+
doc = Nokogiri::HTML(text)
|
972
|
+
rows = doc.xpath('//table[2]/tr')
|
973
|
+
source = nil
|
974
|
+
rows.each do |row|
|
975
|
+
col1 = row.at_xpath('td[1]/text()')
|
976
|
+
logdebug "Row name : #{col1}"
|
977
|
+
unless col1.to_s.include?('er')
|
978
|
+
if row.at_xpath('td[3]/text()').to_s.strip.include?('TV_PLAYER')
|
979
|
+
source = row.at_xpath('td[12]/text()').to_s
|
980
|
+
break
|
981
|
+
end
|
982
|
+
end
|
983
|
+
end
|
984
|
+
loginfo2 'Failed to get source' unless source
|
985
|
+
loginfo2 "Source found: #{source}" if source
|
986
|
+
return source
|
987
|
+
end
|
988
|
+
|
989
|
+
# Use it to get HDD full status from diags
|
990
|
+
# * *Args* :
|
991
|
+
# - +stb_ip+ -> stb ip
|
992
|
+
# - +retries+ -> retries on connection timeout
|
993
|
+
# * *Returns* :
|
994
|
+
# - HDD status (String) if successful else nil
|
995
|
+
def mdn_remote_diags_get_hdd_status stb_ip = fetch_ip, retries=3
|
996
|
+
begin
|
997
|
+
text = _mdn_remote_diags_get_all_code_from_link('/diags23.html', stb_ip)
|
998
|
+
doc = Nokogiri::HTML(text)
|
999
|
+
status = doc.at_xpath('//table/tr[3]/td').text.scan(/(\d+)%/)[0][0]
|
1000
|
+
return status
|
1001
|
+
rescue Timeout::Error
|
1002
|
+
retries = retries - 1
|
1003
|
+
unless retries.eql?(0)
|
1004
|
+
loginfo2 "WARNING: Connection timeout... (trying again)"
|
1005
|
+
retry
|
1006
|
+
end
|
1007
|
+
loginfo2 "WARNING: Connection timeout..."
|
1008
|
+
return nil
|
1009
|
+
rescue StandardError
|
1010
|
+
drive_model = doc.at_xpath('//table/tr[4]/td').text.strip.upcase
|
1011
|
+
tcinvalid "Disk error : http://#{stb_ip}:8080/diags.html" if drive_model.eql?("NO DISK")
|
1012
|
+
return nil
|
1013
|
+
end
|
1014
|
+
end
|
1015
|
+
|
1016
|
+
# Use it to verify whether a tuner numer is on disk
|
1017
|
+
# * *Args* :
|
1018
|
+
# - +tuner_number+ -> Integer(0/1) tuner number
|
1019
|
+
# * *Returns* :
|
1020
|
+
# - true and false if given tuner was on disk or not respectively, nil is case of timeout
|
1021
|
+
def mdn_remote_diags_verify_tuner_on_disk(tuner_number = 0 )
|
1022
|
+
begin
|
1023
|
+
text = _mdn_remote_diags_get_all_code_from_link('/rs')
|
1024
|
+
doc = Nokogiri::HTML(text)
|
1025
|
+
tuner = doc.xpath("//table[1]/tr[#{tuner_number+2}]/td[6]").inner_html
|
1026
|
+
loginfo2 "Tuner #{tuner_number} has destination #{tuner}"
|
1027
|
+
return tuner.eql?('DISK')
|
1028
|
+
rescue Timeout::Error
|
1029
|
+
loginfo2 "WARNING: Connection timeout..."
|
1030
|
+
return false
|
1031
|
+
end
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
def mdn_remote_diags_source_id stb_ip = fetch_ip
|
1035
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1036
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:network_status],stb_ip)
|
1037
|
+
sid = /Source ID:<.*>(\d+|No\sPower)<\/FONT><\/TD><\/TR>/.match(source)
|
1038
|
+
if sid.nil?
|
1039
|
+
loginfo2 "Source ID not found"
|
1040
|
+
return nil
|
1041
|
+
end
|
1042
|
+
return sid[1]
|
1043
|
+
end
|
1044
|
+
|
1045
|
+
def mdn_remote_diags_sdv_frequency stb_ip = fetch_ip
|
1046
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1047
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1048
|
+
freq = /SDB Freq<.*>(\d+\.\d+\sMHz)<\/FONT><\/TD><\/TR>/.match(source)
|
1049
|
+
if freq.nil?
|
1050
|
+
loginfo2 "SDB Freq not found"
|
1051
|
+
return nil
|
1052
|
+
end
|
1053
|
+
return freq[1]
|
1054
|
+
end
|
1055
|
+
|
1056
|
+
def mdn_remode_diags_stb_sdv_capable? stb_ip = fetch_ip
|
1057
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1058
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1059
|
+
status = /Authorized<.*>(\w+)<\/FONT><\/TD><\/TR>/.match(source)
|
1060
|
+
if status.nil?
|
1061
|
+
loginfo2 "Authorized not found"
|
1062
|
+
return nil
|
1063
|
+
end
|
1064
|
+
return status[1].casecmp('Yes')==0
|
1065
|
+
end
|
1066
|
+
|
1067
|
+
def mdn_remote_diags_sdv_packets_sent_recieved stb_ip = fetch_ip
|
1068
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1069
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1070
|
+
packets = /Total\sTx-Rx<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1071
|
+
if packets.nil?
|
1072
|
+
loginfo2 "Total packets transfered not found"
|
1073
|
+
return nil
|
1074
|
+
end
|
1075
|
+
return packets[1].delete(' ').split('-')
|
1076
|
+
end
|
1077
|
+
|
1078
|
+
# Use it to verify that each field in diags has a color and that this color is among valid colors
|
1079
|
+
# * *Args* :
|
1080
|
+
# - +valid_codes+ -> Array valid color codes
|
1081
|
+
# - +stb_ip+ -> ip address of stb
|
1082
|
+
# * *Returns* :
|
1083
|
+
# - true if verified, else false
|
1084
|
+
def mdn_remote_diags_verify_color_code_on_each_field valid_codes, stb_ip = fetch_ip
|
1085
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1086
|
+
counter = 0
|
1087
|
+
options.each_value{|link|
|
1088
|
+
source = _mdn_remote_diags_get_all_code_from_link(link,stb_ip)
|
1089
|
+
page_info = /page\s(\d+)\sof\s(\d+)/.match(source)
|
1090
|
+
loginfo2 "Verifying for page [#{page_info[1]}]"
|
1091
|
+
fields = source.scan(/<TR><TH ALIGN=RIGHT>(.+)<\/TH><TD>(.+)<\/TD><\/TR>$/)
|
1092
|
+
fields.each{|field|
|
1093
|
+
unless field[0].eql?('-')
|
1094
|
+
color_code = /<FONT COLOR="#(\w+)">.*<\/FONT>/.match(field[1])
|
1095
|
+
if color_code.nil?
|
1096
|
+
loginfo2 "No color found for field [#{field[0]}]"
|
1097
|
+
return false
|
1098
|
+
end
|
1099
|
+
unless valid_codes.include?(color_code[1])
|
1100
|
+
loginfo2 "Unknown color code [#{color_code[1]}] found for field [#{field[0]}]"
|
1101
|
+
return false
|
1102
|
+
end
|
1103
|
+
end
|
1104
|
+
}
|
1105
|
+
break if page_info[1].eql?(page_info[2])
|
1106
|
+
}
|
1107
|
+
return true
|
1108
|
+
end
|
1109
|
+
|
1110
|
+
# Use it to get LUA_Rep_Tx value from remote diags
|
1111
|
+
# * *Args* :
|
1112
|
+
# - +stb_ip+ -> ip address of stb
|
1113
|
+
# * *Returns* :
|
1114
|
+
# - string if matched else nil
|
1115
|
+
def mdn_remote_diags_sdv_LUA_Rep_Tx_value stb_ip = fetch_ip
|
1116
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1117
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1118
|
+
value = /LUA\sRep\sTx<.*>(\d*)<\/FONT><\/TD><\/TR>/.match(source)
|
1119
|
+
if value.nil?
|
1120
|
+
loginfo2 "LUA Rep Tx not found"
|
1121
|
+
return nil
|
1122
|
+
end
|
1123
|
+
return value[1].to_s
|
1124
|
+
end
|
1125
|
+
|
1126
|
+
# Use it to get SelReq_Tx value from remote diags
|
1127
|
+
# * *Args* :
|
1128
|
+
# - +stb_ip+ -> ip address of stb
|
1129
|
+
# * *Returns* :
|
1130
|
+
# - string if matched else nil
|
1131
|
+
def mdn_remote_diags_sdv_SelReq_Tx_value stb_ip = fetch_ip
|
1132
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1133
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1134
|
+
value = /SelReq\sTx<.*>(\d*)<\/FONT><\/TD><\/TR>/.match(source)
|
1135
|
+
if value.nil?
|
1136
|
+
loginfo2 "SelReq Tx not found"
|
1137
|
+
return nil
|
1138
|
+
end
|
1139
|
+
return value[1].to_s
|
1140
|
+
end
|
1141
|
+
|
1142
|
+
# Use it to get SelConf_Rx value from remote diags
|
1143
|
+
# * *Args* :
|
1144
|
+
# - +stb_ip+ -> ip address of stb
|
1145
|
+
# * *Returns* :
|
1146
|
+
# - string if matched else nil
|
1147
|
+
def mdn_remote_diags_sdv_SelConf_Rx_value stb_ip = fetch_ip
|
1148
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1149
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1150
|
+
value = /SelConf\sRx<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1151
|
+
if value.nil?
|
1152
|
+
loginfo2 "SelConf Rx not found"
|
1153
|
+
return nil
|
1154
|
+
end
|
1155
|
+
return value[1].to_s
|
1156
|
+
end
|
1157
|
+
|
1158
|
+
#Use it to get current time string from mdn diags from remote diags
|
1159
|
+
# * *Args* :
|
1160
|
+
# - +stb_ip+ -> ip address of stb
|
1161
|
+
# * *Returns* :
|
1162
|
+
# - time string if value is matched, else nil
|
1163
|
+
def mdn_remote_diags_current_time_string stb_ip = fetch_ip
|
1164
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1165
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:initialization_status],stb_ip)
|
1166
|
+
value = /Current\stime:<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1167
|
+
if value.nil?
|
1168
|
+
loginfo2 "Current time not found"
|
1169
|
+
return nil
|
1170
|
+
end
|
1171
|
+
return value[1].to_s
|
1172
|
+
end
|
1173
|
+
|
1174
|
+
#Use it to get time stamp from mdn diags from remote diags
|
1175
|
+
# * *Args* :
|
1176
|
+
# - +stb_ip+ -> ip address of stb
|
1177
|
+
# * *Returns* :
|
1178
|
+
# - time string, else nil
|
1179
|
+
def mdn_remote_diags_presentation_time_stamp_string stb_ip = fetch_ip
|
1180
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1181
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:mpeg_decoder],stb_ip)
|
1182
|
+
value = /Presentation\sTimestamp:<.*>(\d*)<\/FONT><\/TD><\/TR>/.match(source)
|
1183
|
+
if value.nil?
|
1184
|
+
loginfo2 "Presentation time stamp not found"
|
1185
|
+
return nil
|
1186
|
+
end
|
1187
|
+
return value[1].to_s
|
1188
|
+
end
|
1189
|
+
|
1190
|
+
#Use it to get secs since read from mdn diags from remote diags
|
1191
|
+
# * *Args* :
|
1192
|
+
# - +stb_ip+ -> ip address of stb
|
1193
|
+
# * *Returns* :
|
1194
|
+
# - time string, else nil
|
1195
|
+
def mdn_remote_diags_secs_since_read_string stb_ip = fetch_ip
|
1196
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1197
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:qam_statistics],stb_ip)
|
1198
|
+
value = /Secs\sSince\sRead:<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1199
|
+
if value.nil?
|
1200
|
+
loginfo2 "Secs since read not found"
|
1201
|
+
return nil
|
1202
|
+
end
|
1203
|
+
return value[1].to_s
|
1204
|
+
end
|
1205
|
+
|
1206
|
+
#Use it to get fdc bytes recieved from mdn diags from remote diags
|
1207
|
+
# * *Args* :
|
1208
|
+
# - +stb_ip+ -> ip address of stb
|
1209
|
+
# * *Returns* :
|
1210
|
+
# - bytes recieved string, else nil
|
1211
|
+
def mdn_remote_diags_fdc_bytes_received_string stb_ip = fetch_ip
|
1212
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1213
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:qpsk_statistics],stb_ip)
|
1214
|
+
value = /FDC\sBytes\sReceived:<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1215
|
+
if value.nil?
|
1216
|
+
loginfo2 "FDC bytes recieved not found"
|
1217
|
+
return nil
|
1218
|
+
end
|
1219
|
+
return value[1].to_s
|
1220
|
+
end
|
1221
|
+
|
1222
|
+
# Use it to get SDB_Svc_Group value from remote diags
|
1223
|
+
# * *Args* :
|
1224
|
+
# - +stb_ip+ -> ip address of stb
|
1225
|
+
# * *Returns* :
|
1226
|
+
# - string if matched else nil
|
1227
|
+
def mdn_remote_diags_sdb_svc_group_value stb_ip = fetch_ip
|
1228
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1229
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1230
|
+
value = /SDB\sSvc\sGroup<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1231
|
+
if value.nil?
|
1232
|
+
loginfo2 "SDB Svc Group not found"
|
1233
|
+
return nil
|
1234
|
+
end
|
1235
|
+
return value[1].to_s
|
1236
|
+
end
|
1237
|
+
|
1238
|
+
# Use it to get Registration Time value from remote diags
|
1239
|
+
# * *Args* :
|
1240
|
+
# - +stb_ip+ -> ip address of stb
|
1241
|
+
# * *Returns* :
|
1242
|
+
# - string if matched else nil
|
1243
|
+
def mdn_remote_diags_registration_time_value stb_ip = fetch_ip
|
1244
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1245
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1246
|
+
value = /Registration\sTime<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1247
|
+
if value.nil?
|
1248
|
+
loginfo2 "Registration Time not found"
|
1249
|
+
return nil
|
1250
|
+
end
|
1251
|
+
return value[1].to_s
|
1252
|
+
end
|
1253
|
+
|
1254
|
+
# Use it to get DSMCC SessID value from remote diags
|
1255
|
+
# * *Args* :
|
1256
|
+
# - +stb_ip+ -> ip address of stb
|
1257
|
+
# * *Returns* :
|
1258
|
+
# - string if matched else nil
|
1259
|
+
def mdn_remote_diags_dsmcc_sessid_value stb_ip = fetch_ip
|
1260
|
+
options = fetch_link_on_mdn_web_diagnostics(stb_ip)
|
1261
|
+
source = _mdn_remote_diags_get_all_code_from_link(options[:switched_digital_broadcast],stb_ip)
|
1262
|
+
value = /DSMCC\sSessID<.*>(.*)<\/FONT><\/TD><\/TR>/.match(source)
|
1263
|
+
if value.nil?
|
1264
|
+
loginfo2 "DSMCC SessID not found"
|
1265
|
+
return nil
|
1266
|
+
end
|
1267
|
+
return value[1].to_s
|
1268
|
+
end
|
1269
|
+
|
1270
|
+
# Use it to get SDV channel change messages
|
1271
|
+
# * *Returns* :
|
1272
|
+
# - list of channel change messages
|
1273
|
+
# each message is hash that contains index, message_type, data
|
1274
|
+
# each data element is hash that contains attribute, value (e.g. svcGrpID: 1, client_version: 0, tunerId: 0)
|
1275
|
+
def mdn_remote_diags_sdv_channel_change_messages stb_ip = fetch_ip
|
1276
|
+
retries=3 # Max retries
|
1277
|
+
begin
|
1278
|
+
text = _mdn_remote_diags_get_all_code_from_link('/sdv', stb_ip)
|
1279
|
+
doc = Nokogiri::HTML(text)
|
1280
|
+
title_node = doc.xpath("//h2['SDV Channel Change Messages']").last
|
1281
|
+
loginfo2 "Fetching data for : #{title_node.text}"
|
1282
|
+
result_arr = []
|
1283
|
+
title_node.next_sibling.text.scan(/(\d+\/\d+)\s*(\d+:\d+:\d+)\s*\[(\d+)\]\s*(\w*)\s*\(([^\)]*)\)/).each do |data|
|
1284
|
+
# Fetch data attributes
|
1285
|
+
data_hash = {}
|
1286
|
+
data[4].split(",").each do |d1|
|
1287
|
+
attr = d1.split(":")
|
1288
|
+
data_hash[attr[0].strip.to_sym] = attr[1].strip
|
1289
|
+
end
|
1290
|
+
|
1291
|
+
result_arr.push({
|
1292
|
+
:index => data[2].to_i,
|
1293
|
+
:message_type => data[3],
|
1294
|
+
:data => data_hash
|
1295
|
+
})
|
1296
|
+
end
|
1297
|
+
return result_arr
|
1298
|
+
rescue Timeout::Error
|
1299
|
+
retries = retries - 1
|
1300
|
+
unless retries.eql?(0)
|
1301
|
+
loginfo2 "WARNING: Connection timeout... (trying again)"
|
1302
|
+
retry
|
1303
|
+
end
|
1304
|
+
loginfo2 "WARNING: Connection timeout..."
|
1305
|
+
return nil
|
1306
|
+
end
|
1307
|
+
end
|
1308
|
+
|
1309
|
+
# Use it to get sdv tuner usage data
|
1310
|
+
# * *Args* :
|
1311
|
+
# - +stb_ip+ -> ip address of stb
|
1312
|
+
# * *Returns* :
|
1313
|
+
# - Array of tuner status for each tuner
|
1314
|
+
def mdn_remote_diags_sdv_tuner_usage stb_ip = fetch_ip
|
1315
|
+
retries=3 # Max retries
|
1316
|
+
begin
|
1317
|
+
text = _mdn_remote_diags_get_all_code_from_link('/sdv', stb_ip)
|
1318
|
+
doc = Nokogiri::HTML(text)
|
1319
|
+
title_node = doc.xpath("//h2").select{|node| node.text == 'SDV Tuner Usage'}[0]
|
1320
|
+
loginfo2 "Fetching data for : #{title_node.text}"
|
1321
|
+
result_arr = []
|
1322
|
+
title_node.next_sibling.text.scan(/Status =(\d+)/).each {|dt|
|
1323
|
+
result_arr.push(dt[0].to_i)
|
1324
|
+
}
|
1325
|
+
return result_arr
|
1326
|
+
rescue Timeout::Error
|
1327
|
+
retries = retries - 1
|
1328
|
+
unless retries.eql?(0)
|
1329
|
+
loginfo2 "WARNING: Connection timeout... (trying again)"
|
1330
|
+
retry
|
1331
|
+
end
|
1332
|
+
loginfo2 "WARNING: Connection timeout..."
|
1333
|
+
return nil
|
1334
|
+
end
|
1335
|
+
end
|