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,29 @@
|
|
1
|
+
require './lib/test_case/test_case'
|
2
|
+
|
3
|
+
# PerformanceTestCase manages test flow for performance tests
|
4
|
+
|
5
|
+
class PerformanceTestCase < TestCase
|
6
|
+
|
7
|
+
# Public: Initializes a performance test case. NOT FOR USE IN TESTS.
|
8
|
+
#
|
9
|
+
# Returns nothing.
|
10
|
+
def initialize(*args)
|
11
|
+
super
|
12
|
+
@sword_report_error = false
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# Public: Defines test case flow for performance tests.
|
18
|
+
#
|
19
|
+
# Returns nothing.
|
20
|
+
def perform
|
21
|
+
begin
|
22
|
+
super
|
23
|
+
rescue Exception => e
|
24
|
+
# swallow all exceptions, we have already logged/reported them at this point
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,1055 @@
|
|
1
|
+
require './lib/test_data'
|
2
|
+
require './lib/logger/tmc_logger'
|
3
|
+
require './lib/logger/tmc_dut_logger'
|
4
|
+
require './lib/helpers/helpers'
|
5
|
+
require './lib/helpers/tmc_helpers/tmc_helpers'
|
6
|
+
require './lib/prereqs/prereqs_for_test'
|
7
|
+
require './lib/prereqs/prereqs_for_dut'
|
8
|
+
require './lib/test_case/test_error'
|
9
|
+
require './lib/test_case/test_exception'
|
10
|
+
require './lib/test_case/test_step'
|
11
|
+
require './lib/test_case/test_status'
|
12
|
+
require './dsllib/performance/perf_lib'
|
13
|
+
require './dsllib/common/utils/tmc_utils'
|
14
|
+
require './lib/test_case/ci_test'
|
15
|
+
require './lib/test_case/monitoring/monitoring_test'
|
16
|
+
require 'minitest/test'
|
17
|
+
begin
|
18
|
+
require './lib/data_services/data_services'
|
19
|
+
rescue LoadError # TODO: remove rescue once data_services code is stabilized
|
20
|
+
end
|
21
|
+
|
22
|
+
# The TestCase class manages test flow
|
23
|
+
|
24
|
+
class TestCase < MiniTest::Test
|
25
|
+
include Helpers
|
26
|
+
include TmcHelpers
|
27
|
+
include TmcUtils
|
28
|
+
include PerfLib
|
29
|
+
include LegacyLogging
|
30
|
+
alias :orig_backticks :'`'
|
31
|
+
private :orig_backticks
|
32
|
+
|
33
|
+
@@not_valid_for = {}
|
34
|
+
@@valid_for = []
|
35
|
+
@@prereqs_for_test = []
|
36
|
+
@@prereqs_for_dut = []
|
37
|
+
|
38
|
+
# Public: Assigns device types for which the test case is not valid.
|
39
|
+
#
|
40
|
+
# device_types - Splat Array of device types for which the test case is not valid.
|
41
|
+
#
|
42
|
+
# Returns nothing.
|
43
|
+
def self.not_valid_for(*device_types)
|
44
|
+
if device_types.empty?
|
45
|
+
nil
|
46
|
+
elsif device_types.first.is_a?(Hash)
|
47
|
+
@@not_valid_for.update(device_types.first)
|
48
|
+
else
|
49
|
+
device_types.each { |d| @@not_valid_for[d] = nil }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Public: Assigns device types for which the test case is valid.
|
54
|
+
#
|
55
|
+
# device_types - Splat Array of device types for which the test case is valid.
|
56
|
+
#
|
57
|
+
# Returns nothing.
|
58
|
+
def self.valid_for(*device_types)
|
59
|
+
@@valid_for += device_types
|
60
|
+
end
|
61
|
+
|
62
|
+
# Public: Assigns prerequisites for the test.
|
63
|
+
#
|
64
|
+
# prereqs_for_test - Splat Array of Symbol prereqs required for the test.
|
65
|
+
#
|
66
|
+
# Returns nothing.
|
67
|
+
def self.prereqs_for_test(*prereqs_for_test)
|
68
|
+
@@prereqs_for_test = prereqs_for_test
|
69
|
+
end
|
70
|
+
|
71
|
+
# Public: Assigns prerequisites for the DUT.
|
72
|
+
#
|
73
|
+
# prereqs_for_dut - Splat Array of Symbol prereqs required for the DUT.
|
74
|
+
#
|
75
|
+
# Returns nothing.
|
76
|
+
def self.prereqs_for_dut(*prereqs_for_dut)
|
77
|
+
@@prereqs_for_dut = prereqs_for_dut
|
78
|
+
end
|
79
|
+
|
80
|
+
attr_reader(:id, :job, :iteration, :start_time, :stop_time, :logger, :host, :identity, :ssh)
|
81
|
+
attr_writer(:device_ids, :reported_result)
|
82
|
+
|
83
|
+
# Public: Initializes a new TestCase. NOT FOR USE IN TESTS.
|
84
|
+
#
|
85
|
+
# Returns nothing.
|
86
|
+
def initialize(id, device_ids, iteration, host, job, log_file, log_level, data: nil, auth: nil, workspace: nil)
|
87
|
+
super(nil)
|
88
|
+
@status = TestStatus.new(self, nil)
|
89
|
+
# Set attributes from parameters
|
90
|
+
@id = id
|
91
|
+
@device_ids = device_ids || [] # needed for syntax eval
|
92
|
+
@primary_device_id = @device_ids.empty? ? nil : @device_ids.first
|
93
|
+
@identity = job
|
94
|
+
@iteration = iteration
|
95
|
+
@host = host
|
96
|
+
@job = job
|
97
|
+
@workspace = workspace
|
98
|
+
# Set remaining attributes
|
99
|
+
@type = nil
|
100
|
+
@start_time = nil
|
101
|
+
@stop_time = nil
|
102
|
+
@teardowns = []
|
103
|
+
@steps = []
|
104
|
+
@errors = []
|
105
|
+
@current_step = nil
|
106
|
+
@data = nil
|
107
|
+
@duts = {}
|
108
|
+
@loaded_libs = false
|
109
|
+
@recording_video_id = nil
|
110
|
+
@video_recording_ids = {}
|
111
|
+
@audio_recording_ids = {}
|
112
|
+
@locked_resources = {}
|
113
|
+
@reported_results = false
|
114
|
+
@test_steps_ignore_errors = false
|
115
|
+
@ignore_errors = false
|
116
|
+
@no_log_trace = false
|
117
|
+
# Set these attributes last as they may depend on others
|
118
|
+
# Create base logger
|
119
|
+
base_logger = TmcLogger.new(log_file, log_level)
|
120
|
+
@loggers = {}
|
121
|
+
if device?
|
122
|
+
# Create DUT logger for each device
|
123
|
+
@device_ids.each_with_index do |d, i|
|
124
|
+
@loggers[d] = TmcDutLogger.new(i + 1, base_logger, self)
|
125
|
+
end
|
126
|
+
else
|
127
|
+
# Create a non-device logger
|
128
|
+
@loggers[0] = TmcDutLogger.new(nil, base_logger, self)
|
129
|
+
end
|
130
|
+
@logger = @loggers.values.first
|
131
|
+
@test_data = TestData.new(self, job: @job, data: data)
|
132
|
+
@ssh = TmcSsh.new(self)
|
133
|
+
# Anything that logs should go here
|
134
|
+
unless auth.nil?
|
135
|
+
# Log in using base-64 auth
|
136
|
+
resp = tmc_post('/api/login', json: { value: auth })
|
137
|
+
@identity = resp['guid']
|
138
|
+
end
|
139
|
+
@ignore_interrupt = false
|
140
|
+
@canceled = false
|
141
|
+
trap_signals
|
142
|
+
end
|
143
|
+
|
144
|
+
# Public: Gets test status.
|
145
|
+
#
|
146
|
+
# Returns String status.
|
147
|
+
def status
|
148
|
+
@status.status
|
149
|
+
end
|
150
|
+
|
151
|
+
# Public: Block probes.
|
152
|
+
def `(_)
|
153
|
+
probe_fail('`')
|
154
|
+
end
|
155
|
+
|
156
|
+
# Public: Block probes.
|
157
|
+
def exec(*_c)
|
158
|
+
probe_fail('exec')
|
159
|
+
end
|
160
|
+
|
161
|
+
# Public: Block probes.
|
162
|
+
def system(*_c)
|
163
|
+
probe_fail('system')
|
164
|
+
end
|
165
|
+
|
166
|
+
# Public: Get test name.
|
167
|
+
def name
|
168
|
+
if @name.nil?
|
169
|
+
resp = tmc_get("/api/jobs/#{@job}/tests/#{@id}") || {}
|
170
|
+
@name = test_info['name'] || self.class.name.split('::').last.gsub(/(?<!^)([A-Z]|[0-9]+)/, ' \0')
|
171
|
+
end
|
172
|
+
@name
|
173
|
+
end
|
174
|
+
|
175
|
+
# Public: Gets test step errors behavior.
|
176
|
+
#
|
177
|
+
# Returns a Boolean indicating test steps ignore errors.
|
178
|
+
def test_steps_ignore_errors?
|
179
|
+
@test_steps_ignore_errors
|
180
|
+
end
|
181
|
+
|
182
|
+
# Public: Sets test step errors behavior.
|
183
|
+
#
|
184
|
+
# val - A Boolean indicating whether test steps should ignore errors.
|
185
|
+
#
|
186
|
+
# Returns nothing.
|
187
|
+
def test_steps_ignore_errors(val)
|
188
|
+
@test_steps_ignore_errors = val
|
189
|
+
@steps.each {|s| s.instance_variable_set(:@raising, !val)}
|
190
|
+
end
|
191
|
+
|
192
|
+
# Public: Gets test case errors behavior.
|
193
|
+
#
|
194
|
+
# Returns a Boolean indicating the test case ignores errors in determining the result,
|
195
|
+
# when test steps are also configured to ignore errors.
|
196
|
+
def ignore_errors?
|
197
|
+
@ignore_errors
|
198
|
+
end
|
199
|
+
|
200
|
+
# Public: Sets test case errors behavior.
|
201
|
+
#
|
202
|
+
# val - A Boolean indicating whether the test case should ignore errors in determining the result,
|
203
|
+
# when test steps are also configured to ignore errors.
|
204
|
+
#
|
205
|
+
# Returns nothing.
|
206
|
+
def ignore_errors(val)
|
207
|
+
@ignore_errors = val
|
208
|
+
end
|
209
|
+
|
210
|
+
# Public: Gets test errors.
|
211
|
+
#
|
212
|
+
# Returns an Array of errors in format:
|
213
|
+
# [{:message => 'oh no!', :file => 'foo.rb', :line => 22, :method => 'foo', :line_in_method => 3, :step_id => 1, :step_name => 'Baz'}]
|
214
|
+
def errors
|
215
|
+
@errors.map {|e| e.to_h}
|
216
|
+
end
|
217
|
+
|
218
|
+
# Public: Locks the specified resource(s) to perform an action.
|
219
|
+
#
|
220
|
+
# resource - String or Array of String resources to lock.
|
221
|
+
# timeout - Integer lock activity timeout in milliseconds.
|
222
|
+
# block - Block to perform.
|
223
|
+
# device - Integer device to lock (default: nil).
|
224
|
+
# concurrent - Integer concurrent locks allowed (default: 1).
|
225
|
+
# acquire_timeout - Integer lock acquisition timeout in milliseconds (default: nil).
|
226
|
+
# If nil, 16 * the lock activity timeout will be used.
|
227
|
+
#
|
228
|
+
# Returns the result of the specified block.
|
229
|
+
def lock(resource, timeout, device: nil, concurrent: 1, acquire_timeout: nil)
|
230
|
+
ret = nil
|
231
|
+
locked_resources = []
|
232
|
+
uri = '/api/lock'
|
233
|
+
uri += "/#{device}" unless device.nil?
|
234
|
+
acquire_timeout ||= (timeout * 16)
|
235
|
+
resource = [resource] unless resource.is_a?(Array)
|
236
|
+
begin
|
237
|
+
resource.each do |res|
|
238
|
+
# only lock if not already locked
|
239
|
+
next if @locked_resources.key?(res)
|
240
|
+
|
241
|
+
logger.debug("Attempting to lock TMC resource [#{res}] at #{timestamp}")
|
242
|
+
resp = tmc_post(uri, json: { resource: res, timeout: timeout, concurrent: concurrent }, timeout: acquire_timeout)
|
243
|
+
id = resp['id']
|
244
|
+
locked_resources << id
|
245
|
+
@locked_resources[res] = id
|
246
|
+
add_teardown(nil, device, id) do |dev, lid|
|
247
|
+
release_lock(dev, lid) if @locked_resources.value?(lid)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
begin
|
251
|
+
Timeout.timeout(timeout.to_f / 1.sec) do
|
252
|
+
ret = yield
|
253
|
+
end
|
254
|
+
rescue Timeout::Error
|
255
|
+
raise "Lock activity timed out after #{timeout} ms!"
|
256
|
+
end
|
257
|
+
ensure
|
258
|
+
locked_resources.each do |id|
|
259
|
+
release_lock(device, id)
|
260
|
+
logger.debug("TMC resource [#{id}] unlocked at #{timestamp}")
|
261
|
+
end
|
262
|
+
end
|
263
|
+
ret
|
264
|
+
end
|
265
|
+
|
266
|
+
# Public: Gets an ISO 8601-formatted timestamp.
|
267
|
+
#
|
268
|
+
# at - DateTime or Time object (default: nil).
|
269
|
+
#
|
270
|
+
# Returns the String timestamp.
|
271
|
+
def timestamp(at: nil)
|
272
|
+
at ||= DateTime.now
|
273
|
+
at.strftime(TmcLogger::DATETIME_FORMAT)
|
274
|
+
end
|
275
|
+
|
276
|
+
# Public: Gets an ISO 8601-formatted timestamp safe for use in a filename.
|
277
|
+
#
|
278
|
+
# at - DateTime or Time object (default: nil).
|
279
|
+
#
|
280
|
+
# Returns the String timestamp.
|
281
|
+
def safe_timestamp(at: nil)
|
282
|
+
at ||= DateTime.now
|
283
|
+
at.strftime(TmcLogger::DATETIME_FORMAT).delete(':')
|
284
|
+
end
|
285
|
+
|
286
|
+
# Public: Sleeps. TODO: We really should not be clobbering built-ins like this.
|
287
|
+
#
|
288
|
+
# delay - Integer or Range of milliseconds to sleep.
|
289
|
+
# If a Range, will sleep a random number of milliseconds within the Range.
|
290
|
+
#
|
291
|
+
# Returns nothing.
|
292
|
+
alias builtin_sleep sleep # preserve the built-in sleep method so we can use it
|
293
|
+
def sleep(delay)
|
294
|
+
if delay.is_a?(Range)
|
295
|
+
min = delay.first
|
296
|
+
range = delay.last - min
|
297
|
+
delay = min + rand(range + 1)
|
298
|
+
end
|
299
|
+
logger.debug("Sleep for: [#{delay.to_i}] ms")
|
300
|
+
builtin_sleep(delay.to_i / 1000.0)
|
301
|
+
end
|
302
|
+
|
303
|
+
# Public: Gets test data.
|
304
|
+
#
|
305
|
+
# Examples:
|
306
|
+
#
|
307
|
+
# test_data[:foo] = 'bar'
|
308
|
+
# #=> 'bar'
|
309
|
+
#
|
310
|
+
# test_data.refresh
|
311
|
+
# #=> nil
|
312
|
+
#
|
313
|
+
# val = test_data[:foo]
|
314
|
+
# #=> 'bar'
|
315
|
+
#
|
316
|
+
# val = test_data.fetch(:foo)
|
317
|
+
# #=> 'bar'
|
318
|
+
#
|
319
|
+
# val = test_data.update(nums: {int: 1, float: 3.5})
|
320
|
+
# #=> {:foo => 'bar', :nums => {:int => 1, :float => 3.5}}
|
321
|
+
#
|
322
|
+
# val = test_data.dig(:nums, :float)
|
323
|
+
# #=> 3.5
|
324
|
+
#
|
325
|
+
# val = test_data.dig(:nums, :decimal)
|
326
|
+
# #=> nil
|
327
|
+
#
|
328
|
+
# Returns test data hash.
|
329
|
+
def test_data
|
330
|
+
@test_data.refresh if !@test_data.promiscuous? && @test_data.empty?
|
331
|
+
@test_data
|
332
|
+
end
|
333
|
+
alias options test_data
|
334
|
+
|
335
|
+
# Public: Pings the given host.
|
336
|
+
#
|
337
|
+
# host - String host name or IP to ping.
|
338
|
+
#
|
339
|
+
# Returns true if the host could be pinged, otherwise false.
|
340
|
+
def ping?(host)
|
341
|
+
failed = orig_backticks("ping -n 1 #{host}").match(/(?i)Received\s*=\s*1/).nil?
|
342
|
+
!failed
|
343
|
+
end
|
344
|
+
|
345
|
+
# Public: Gets delta between the specified times.
|
346
|
+
#
|
347
|
+
# t1 - Time, DateTime, Integer, Float, or String T1 time value.
|
348
|
+
# t2 - Time, DateTime, Integer, Float, or String T2 time value.
|
349
|
+
#
|
350
|
+
# Returns the Float delta in milliseconds.
|
351
|
+
def get_time_delta(t1, t2)
|
352
|
+
(to_time(t2) - to_time(t1)) * 1000.0 # convert to ms
|
353
|
+
end
|
354
|
+
alias time_diff_milli get_time_delta
|
355
|
+
|
356
|
+
# Public: Performs a test step.
|
357
|
+
#
|
358
|
+
# id - Integer test step id.
|
359
|
+
# name - String name of the test step (default: nil).
|
360
|
+
# block - Block that performs the test step.
|
361
|
+
#
|
362
|
+
# Returns nothing.
|
363
|
+
def test_step(id, name: nil, &block)
|
364
|
+
if id.nil?
|
365
|
+
id = @steps.empty? ? 1 : @steps.last.id + 1
|
366
|
+
end
|
367
|
+
# Look up the step
|
368
|
+
update = false
|
369
|
+
step = @steps.find { |step| step.id == id && step.device == @primary_device_id }
|
370
|
+
if step.nil?
|
371
|
+
# Create the step if it does not exist
|
372
|
+
step = TestStep.new(self, id, name, @primary_device_id, @iteration)
|
373
|
+
@steps << step
|
374
|
+
update = true
|
375
|
+
elsif !name.nil? && name != step.name
|
376
|
+
step.instance_variable_set(:@name, name)
|
377
|
+
update = true
|
378
|
+
end
|
379
|
+
@current_step = step
|
380
|
+
step.perform(update: update, &block)
|
381
|
+
@current_step = nil
|
382
|
+
end
|
383
|
+
|
384
|
+
# Public: Indicates whether the test has a device.
|
385
|
+
#
|
386
|
+
# Returns a Boolean indicating if the test has a device.
|
387
|
+
def device?
|
388
|
+
!@device_ids.empty?
|
389
|
+
end
|
390
|
+
|
391
|
+
# Public: Reports a measurement to the designated system.
|
392
|
+
#
|
393
|
+
# return_value - Integer or Float return value (default: nil).
|
394
|
+
# If default, return value will be calculated from start and stop time.
|
395
|
+
# start_time - Time measurement started (default: start_time).
|
396
|
+
# stop_time - Time measurement stopped (default: stop_time).
|
397
|
+
# message - String details about measurement (default: nil).
|
398
|
+
# If default, a generic message will be used.
|
399
|
+
# execution_metric - Execution metric for which to report (default: nil).
|
400
|
+
# If default, will not report for a specific execution metric.
|
401
|
+
# return_title - Return title to report (default: nil).
|
402
|
+
# If default, will not report for a specific return title.
|
403
|
+
# result - Symbol result to report (default: nil).
|
404
|
+
# Should be :passed, :failed, :error, or :done. If default, current test status will be used.
|
405
|
+
#
|
406
|
+
# Returns nothing.
|
407
|
+
def report_result(args = {})
|
408
|
+
start = args.fetch(:start_time, start_time || Time.now)
|
409
|
+
stop = args.fetch(:stop_time, stop_time || Time.now)
|
410
|
+
args[:tcr_auto_detail_text] = args.delete(:message)
|
411
|
+
result = args.delete(:result)
|
412
|
+
logger.info("Reporting #{args[:message] || args[:execution_metric] || args[:return_title] || 'result'}: " \
|
413
|
+
"#{result.nil? ? '' : "#{result.to_s.capitalize} in "}#{args[:return_value] || (stop - start)} s")
|
414
|
+
report_to_sword(result, start, stop, args) if is_sword?
|
415
|
+
@reported_results = true
|
416
|
+
end
|
417
|
+
|
418
|
+
# Public: Gets the data service.
|
419
|
+
#
|
420
|
+
# Returns the <data> instance.
|
421
|
+
def data
|
422
|
+
@data = DataServices.new(@logger) if @data.nil?
|
423
|
+
@data
|
424
|
+
end
|
425
|
+
|
426
|
+
# Public: Fails the test or step.
|
427
|
+
#
|
428
|
+
# reason - String message describing the reason for failure.
|
429
|
+
#
|
430
|
+
# Returns nothing.
|
431
|
+
def fail(reason = 'Unknown failure')
|
432
|
+
sword_attach_screenshot reason
|
433
|
+
backtrace = caller
|
434
|
+
if @current_step.nil?
|
435
|
+
@status = TestStatus.new(self, TestStatus::FAILED, reason: reason, backtrace: backtrace)
|
436
|
+
raise TestException.new
|
437
|
+
else
|
438
|
+
@current_step.fail(reason, backtrace: backtrace)
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
# Public: Passes the test or step.
|
443
|
+
#
|
444
|
+
# reason - String message describing the reason for passing.
|
445
|
+
#
|
446
|
+
# Returns nothing.
|
447
|
+
def pass(reason = nil)
|
448
|
+
is_perf = is_a?(PerformanceTestCase)
|
449
|
+
if @current_step.nil?
|
450
|
+
@status = TestStatus.new(self, is_perf ? TestStatus::DONE : TestStatus::PASSED, reason: reason)
|
451
|
+
else
|
452
|
+
@current_step.pass(reason)
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
# Public: Quits the test.
|
457
|
+
#
|
458
|
+
# reason - String message describing the reason for error.
|
459
|
+
#
|
460
|
+
# Returns nothing.
|
461
|
+
def error(reason = 'Unknown error')
|
462
|
+
raise reason
|
463
|
+
end
|
464
|
+
|
465
|
+
# Public: Adds a teardown with the given method and arguments.
|
466
|
+
#
|
467
|
+
# msg - String message to log when the teardown runs.
|
468
|
+
# args - Array of parameters to send (default: []).
|
469
|
+
# block - Block method the teardown should run.
|
470
|
+
#
|
471
|
+
# Returns nothing.
|
472
|
+
def add_teardown(msg, *args, &block)
|
473
|
+
logger.debug("Adding teardown: #{method_to_str(block)}")
|
474
|
+
@teardowns << { message: msg, method: block, args: args }
|
475
|
+
end
|
476
|
+
|
477
|
+
# Public: Records a test error.
|
478
|
+
#
|
479
|
+
# msg - String error message.
|
480
|
+
# log - Boolean indicating whether to log the error immediately (default: false).
|
481
|
+
# log_opts - Hash of options to pass to `logger.error', if log is enabled (default: nil).
|
482
|
+
# backtrace - Array containing error backtrace (default: {}).
|
483
|
+
# If default, caller will be used.
|
484
|
+
#
|
485
|
+
# Returns the TestError instance.
|
486
|
+
def record_error(msg, log: false, log_opts: {}, backtrace: nil)
|
487
|
+
err = TestError.new(self, msg, backtrace || caller, step: @current_step)
|
488
|
+
@errors << err
|
489
|
+
if log
|
490
|
+
msg += " #{err}"
|
491
|
+
logger.error(msg, log_opts)
|
492
|
+
end
|
493
|
+
err
|
494
|
+
end
|
495
|
+
|
496
|
+
# Public: Gets server name.
|
497
|
+
#
|
498
|
+
# Returns the String name of the TMC server.
|
499
|
+
def server_name
|
500
|
+
server_info['name']
|
501
|
+
end
|
502
|
+
|
503
|
+
# Public: Gets server market.
|
504
|
+
#
|
505
|
+
# Returns the String market of the TMC server.
|
506
|
+
def server_market
|
507
|
+
server_info['market']
|
508
|
+
end
|
509
|
+
|
510
|
+
# Public: Gets job name.
|
511
|
+
#
|
512
|
+
# Returns the String name of the current job.
|
513
|
+
def job_name
|
514
|
+
job_status['name']
|
515
|
+
end
|
516
|
+
|
517
|
+
# Public: Gets job start time.
|
518
|
+
#
|
519
|
+
# Returns the String start time of the current job in ISO 8601 format, local to the TMC, with a timezone offset.
|
520
|
+
def job_start_time
|
521
|
+
job_status['startedAt'].to_time
|
522
|
+
end
|
523
|
+
|
524
|
+
# Public: Gets the device under test, initializing it first if necessary.
|
525
|
+
#
|
526
|
+
# Returns the dut.
|
527
|
+
def dut
|
528
|
+
dut1
|
529
|
+
end
|
530
|
+
|
531
|
+
# Public: Gets the 1st device under test, initializing it first if necessary.
|
532
|
+
#
|
533
|
+
# Returns the 1st dut.
|
534
|
+
def dut1
|
535
|
+
get_dut(1)
|
536
|
+
end
|
537
|
+
|
538
|
+
# Public: Gets the 2nd device under test, initializing it first if necessary.
|
539
|
+
#
|
540
|
+
# Returns the 2nd dut.
|
541
|
+
def dut2
|
542
|
+
get_dut(2)
|
543
|
+
end
|
544
|
+
|
545
|
+
# Public: Gets the 3rd device under test, initializing it first if necessary.
|
546
|
+
#
|
547
|
+
# Returns the 3rd dut.
|
548
|
+
def dut3
|
549
|
+
get_dut(3)
|
550
|
+
end
|
551
|
+
|
552
|
+
# Public: Gets a web browser.
|
553
|
+
#
|
554
|
+
# browser - Symbol browser to launch, can be :firefox or :chrome (default: :chrome).
|
555
|
+
#
|
556
|
+
# Returns the browser Object.
|
557
|
+
def browser(browser: :firefox)
|
558
|
+
if @browser.nil? || @browser.send(:closed?)
|
559
|
+
require './lib/platform/web/web'
|
560
|
+
@browser = Web.new(browser, self)
|
561
|
+
end
|
562
|
+
@browser
|
563
|
+
end
|
564
|
+
|
565
|
+
# Public: Gets the local UTC offset.
|
566
|
+
#
|
567
|
+
# Returns the local time offset in Integer milliseconds.
|
568
|
+
def local_utc_offset
|
569
|
+
local_offset_str = Time.now.getlocal.to_s.match(/([\+-]\d{4})/).to_s
|
570
|
+
local_offset = local_offset_str[1..2].to_i.hr + local_offset_str[3..4].to_i.min
|
571
|
+
local_offset_str[0..0].eql?('-') ? local_offset * -1 : local_offset
|
572
|
+
end
|
573
|
+
|
574
|
+
# Public: Converts the specified object to a time.
|
575
|
+
#
|
576
|
+
# obj - Object to convert.
|
577
|
+
#
|
578
|
+
# Returns a Time object.
|
579
|
+
def to_time(obj)
|
580
|
+
if obj.is_a?(Time)
|
581
|
+
obj
|
582
|
+
elsif obj.is_a?(DateTime)
|
583
|
+
obj.to_time
|
584
|
+
elsif obj.is_a?(Numeric)
|
585
|
+
# This expects seconds since the epoch
|
586
|
+
Time.at(obj)
|
587
|
+
elsif obj.is_a?(String)
|
588
|
+
obj.to_time
|
589
|
+
else
|
590
|
+
raise "#{obj.class.name} cannot be converted to time!"
|
591
|
+
end
|
592
|
+
end
|
593
|
+
|
594
|
+
private
|
595
|
+
|
596
|
+
# Internal: Get test path.
|
597
|
+
def path
|
598
|
+
test_info['path']
|
599
|
+
end
|
600
|
+
|
601
|
+
# Internal: Get test info.
|
602
|
+
def test_info
|
603
|
+
if @test_info.nil?
|
604
|
+
resp = tmc_get("/api/jobs/#{@job}/tests/#{@id}") || {}
|
605
|
+
@test_info = resp['testCase']
|
606
|
+
end
|
607
|
+
@test_info
|
608
|
+
end
|
609
|
+
|
610
|
+
# Internal: Executes teardowns.
|
611
|
+
def teardown
|
612
|
+
unless @recording_video_id.nil?
|
613
|
+
api_stop_video(@recording_video_id)
|
614
|
+
@recording_video_id = nil
|
615
|
+
end
|
616
|
+
logger.send(:set_tag, 'TEARDOWN')
|
617
|
+
logger.info("Doing #{@teardowns.count} teardowns")
|
618
|
+
until @teardowns.empty?
|
619
|
+
this_teardown = @teardowns.pop
|
620
|
+
msg = this_teardown[:message]
|
621
|
+
meth = this_teardown[:method]
|
622
|
+
logger.debug("Executing teardown: #{method_to_str(meth)}")
|
623
|
+
logger.info(msg, tag: 'TEARDOWN') unless msg.nil?
|
624
|
+
begin
|
625
|
+
meth.call(*this_teardown[:args])
|
626
|
+
rescue Exception => e # signals handled by `trap_signals'
|
627
|
+
logger.error("Teardown error: #{e.message}\n\t#{e.backtrace.join("\n\t")}")
|
628
|
+
end
|
629
|
+
end
|
630
|
+
logger.send(:unset_tag)
|
631
|
+
end
|
632
|
+
|
633
|
+
# Internal: Get logger for specified dut.
|
634
|
+
def logger_for_device(id)
|
635
|
+
@loggers[id]
|
636
|
+
end
|
637
|
+
|
638
|
+
# Internal: Block probes.
|
639
|
+
def probe_fail(meth)
|
640
|
+
raise "Method `#{meth}' not allowed. Further attempts to execute commands on this server will result in more restrictions."
|
641
|
+
end
|
642
|
+
|
643
|
+
# Internal: Release the given lock.
|
644
|
+
def release_lock(device, id)
|
645
|
+
res, id = @locked_resources.find { |_, i| i == id }
|
646
|
+
return if id.nil?
|
647
|
+
|
648
|
+
uri = '/api/lock'
|
649
|
+
uri += "/#{device}" unless device.nil?
|
650
|
+
tmc_delete("#{uri}/#{id}")
|
651
|
+
@locked_resources.delete(res)
|
652
|
+
end
|
653
|
+
|
654
|
+
# Internal: Indicates whether the test is running from SWORD.
|
655
|
+
def is_sword?
|
656
|
+
!test_data[:sword_data].nil?
|
657
|
+
end
|
658
|
+
|
659
|
+
# Internal: Hook that executes each time test status is set.
|
660
|
+
#
|
661
|
+
# Returns nothing.
|
662
|
+
def set_status(status, device: nil)
|
663
|
+
logger.info("Test #{status.status}", tag: 'STATUS')
|
664
|
+
@status = status
|
665
|
+
json = jsonify({device: device || @primary_device_id, iteration: @iteration}.merge(@status.to_h))
|
666
|
+
tmc_put("/api/jobs/#{@job}/tests/#{@id}/status", json: json)
|
667
|
+
end
|
668
|
+
|
669
|
+
# Internal: Gets the job status.
|
670
|
+
def job_status
|
671
|
+
if @job_status.nil?
|
672
|
+
@job_status = tmc_get("/api/jobs/#{@job}/status")['testJobStatus']
|
673
|
+
end
|
674
|
+
@job_status
|
675
|
+
end
|
676
|
+
|
677
|
+
# Internal: Hook that executes test.
|
678
|
+
#
|
679
|
+
# Returns nothing.
|
680
|
+
def wrap_run
|
681
|
+
set_status(TestStatus.new(self, TestStatus::RUNNING))
|
682
|
+
max_timeout_h = 48
|
683
|
+
max_timeout_m = 60 * max_timeout_h
|
684
|
+
timeout_m = test_data.fetch(:script_timeout, max_timeout_m) # optional timeout, specified in min
|
685
|
+
timeout_m = max_timeout_m if timeout_m == 0 # disallow infinite timeout
|
686
|
+
if timeout_m > max_timeout_m
|
687
|
+
raise "Script timeout cannot be greater than #{max_timeout_h} hours!"
|
688
|
+
end
|
689
|
+
timeout_s = timeout_m * 60
|
690
|
+
logger.info("Timeout in: #{get_readable_time(timeout_s)}") if timeout_s != 0
|
691
|
+
Timeout.timeout(timeout_s) do
|
692
|
+
@start_time = Time.now
|
693
|
+
run
|
694
|
+
@stop_time = Time.now
|
695
|
+
end
|
696
|
+
end
|
697
|
+
|
698
|
+
# Internal: Defines how the test case should run. Inheriting classes may extend this behavior.
|
699
|
+
#
|
700
|
+
# Returns nothing.
|
701
|
+
def perform
|
702
|
+
before_run
|
703
|
+
wrap_run
|
704
|
+
get_result
|
705
|
+
rescue Exception => e # signals handled by `trap_signals'
|
706
|
+
if @canceled && !RUBY_PLATFORM.include?('linux')
|
707
|
+
Thread.new do
|
708
|
+
# "acknowledge" interrupt
|
709
|
+
dir = File.join('c:', 'temp')
|
710
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
711
|
+
File.open(File.join(dir, "SIGINT-#{Process.pid}.pid"), 'w') { |_| }
|
712
|
+
@ignore_interrupt = true
|
713
|
+
end
|
714
|
+
end
|
715
|
+
@stop_time = Time.now
|
716
|
+
@start_time ||= @stop_time
|
717
|
+
if @current_step.nil?
|
718
|
+
if e.is_a?(Minitest::Assertion)
|
719
|
+
@status = TestStatus.new(self, TestStatus::FAILED, exception: e)
|
720
|
+
elsif !e.is_a?(TestException)
|
721
|
+
@status = TestStatus.new(self, TestStatus::ERROR, exception: e)
|
722
|
+
end
|
723
|
+
else
|
724
|
+
# avoid logging the stacktrace twice
|
725
|
+
@no_log_trace = true
|
726
|
+
@status = @current_step.instance_variable_get(:@status)
|
727
|
+
end
|
728
|
+
ensure
|
729
|
+
after_run
|
730
|
+
end
|
731
|
+
|
732
|
+
# Internal: Placeholder for run. TestCase subclasses must implement this.
|
733
|
+
#
|
734
|
+
# Returns nothing.
|
735
|
+
# Raises Exception.
|
736
|
+
def run
|
737
|
+
raise "Test case must implement `run' method!"
|
738
|
+
end
|
739
|
+
|
740
|
+
# Internal: Hook that executes before every test.
|
741
|
+
#
|
742
|
+
# Returns nothing.
|
743
|
+
def before_run
|
744
|
+
# Log server info
|
745
|
+
%w[name hostname publicIp localIp version sha authSystem].each do |inf|
|
746
|
+
logger.info("TMC Server Info [#{inf}] : #{server_info[inf]}")
|
747
|
+
end
|
748
|
+
# Log current user and workspace
|
749
|
+
logger.info("Current user: #{current_user['name']} (#{current_user['email']})")
|
750
|
+
unless @workspace.nil?
|
751
|
+
logger.info("Current workspace: #{@workspace}")
|
752
|
+
end
|
753
|
+
# Populate test info
|
754
|
+
@steps = (test_info['steps'] || []).map do |step|
|
755
|
+
TestStep.new(self, step['id'], step['name'], @primary_device_id, @iteration)
|
756
|
+
end
|
757
|
+
parse_sword_test_data if is_sword?
|
758
|
+
logger.info("Test: #{name}", screenshot: true)
|
759
|
+
set_status(TestStatus.new(self, TestStatus::NOT_RUN)) if status.nil?
|
760
|
+
# Verify prerequisites
|
761
|
+
check_prerequisites
|
762
|
+
# Initialize dut (if there is one) except for CI tests
|
763
|
+
if device?
|
764
|
+
require_valid_for_device
|
765
|
+
# Log the actual resolution
|
766
|
+
res = dut.resolution(update: true)
|
767
|
+
logger.info("Actual device resolution: #{res[:width]}x#{res[:height]}")
|
768
|
+
# Set up video recording
|
769
|
+
n = (options[:record_last_n_seconds] || 0)
|
770
|
+
if n > 0
|
771
|
+
logger.info("Recording last #{n} seconds")
|
772
|
+
id = dut.record_video(duration: n.sec, block: false)[:id]
|
773
|
+
@recording_video_id = id
|
774
|
+
end
|
775
|
+
end
|
776
|
+
end
|
777
|
+
|
778
|
+
# Internal: Hook that executes after every test.
|
779
|
+
#
|
780
|
+
# Returns nothing.
|
781
|
+
def after_run
|
782
|
+
@ignore_interrupt = true
|
783
|
+
begin
|
784
|
+
screen = nil
|
785
|
+
if device?
|
786
|
+
begin
|
787
|
+
screen = dut.capture_screen
|
788
|
+
rescue Exception # signals handled by `trap_signals'
|
789
|
+
# no-op
|
790
|
+
end
|
791
|
+
end
|
792
|
+
@status.status ||= TestStatus::FAILED
|
793
|
+
status = @status.status
|
794
|
+
message = @status.reason
|
795
|
+
backtrace = @status.backtrace
|
796
|
+
msg_str = message.nil? ? '' : ": #{message}"
|
797
|
+
trace_str = @no_log_trace || backtrace.nil? ? '' : "\n\t#{backtrace.join("\n\t")}"
|
798
|
+
# log status
|
799
|
+
error_str = ''
|
800
|
+
unless backtrace.nil?
|
801
|
+
e = record_error(message, backtrace: backtrace)
|
802
|
+
error_str = "\n\t" + e.to_s
|
803
|
+
end
|
804
|
+
args = ["Test #{status}#{msg_str}#{error_str}#{trace_str}", tag: 'RESULT', screen_image: screen]
|
805
|
+
puts args[0] # always log test result to STDOUT.
|
806
|
+
if [TestStatus::FAILED, TestStatus::ERROR].include?(status)
|
807
|
+
logger.error(*args)
|
808
|
+
else
|
809
|
+
logger.info(*args)
|
810
|
+
end
|
811
|
+
# TODO: restore or delete this functionality
|
812
|
+
# if result == TestStatus::FAILED
|
813
|
+
# # Fetch device logs on failure
|
814
|
+
# if fetch_option(:generate_odn_logs_on_failure, false) && stb_capable_of?('ODN')
|
815
|
+
# mas_fetch_odn_binary_logs_from_stb
|
816
|
+
# end
|
817
|
+
# if fetch_option(:generate_fdr_logs_on_failure, false) && stb_vendor?('Cisco')
|
818
|
+
# dncs_fetch_cisco_fdr_logs_from_stb
|
819
|
+
# end
|
820
|
+
# end
|
821
|
+
# Report execution time before teardown
|
822
|
+
logger.info("Total execution time: #{get_readable_time(stop_time - start_time)}", tag: 'RUNTIME')
|
823
|
+
teardown
|
824
|
+
@video_recording_ids.each do |id, dev|
|
825
|
+
begin
|
826
|
+
tmc_delete("/api/video/record/#{dev}", json: { id: id })
|
827
|
+
rescue StandardError
|
828
|
+
# no-op
|
829
|
+
end
|
830
|
+
end
|
831
|
+
@audio_recording_ids.each do |id, dev|
|
832
|
+
begin
|
833
|
+
tmc_delete("/api/audio/record/#{dev}", json: { id: id })
|
834
|
+
rescue StandardError
|
835
|
+
# no-op
|
836
|
+
end
|
837
|
+
end
|
838
|
+
# Set status and report result after teardown
|
839
|
+
ensure
|
840
|
+
# Always set status
|
841
|
+
begin
|
842
|
+
set_status(@status)
|
843
|
+
rescue Exception => e # signals handled by `trap_signals'
|
844
|
+
# Log any status error
|
845
|
+
logger.error(e)
|
846
|
+
ensure
|
847
|
+
# Always report
|
848
|
+
begin
|
849
|
+
report_result(result: @status.status, message: @status.reason) unless @reported_results
|
850
|
+
rescue Exception => e # signals handled by `trap_signals'
|
851
|
+
# Log any reporting error
|
852
|
+
logger.error(e)
|
853
|
+
end
|
854
|
+
end
|
855
|
+
end
|
856
|
+
end
|
857
|
+
|
858
|
+
# Internal: Gets test result, failing the test if any errors occurred.
|
859
|
+
def get_result
|
860
|
+
if @errors.empty? || @ignore_errors
|
861
|
+
pass unless status == TestStatus::PASSED
|
862
|
+
else
|
863
|
+
err = @errors.each_with_index.map do |e, i|
|
864
|
+
step_str = e.step.nil? ? '' : " (Step ##{e.step.id}#{e.step.name.nil? ? '' : " - #{e.step.name}"})"
|
865
|
+
"#{i + 1}.#{step_str} #{e.message} #{e}"
|
866
|
+
end.join("\n\t")
|
867
|
+
@status = TestStatus.new(self, TestStatus::FAILED, exception: Exception.new("One or more errors occurred.\n\t#{err}"))
|
868
|
+
raise TestException.new
|
869
|
+
end
|
870
|
+
end
|
871
|
+
|
872
|
+
# Internal: Ensures the test and DUT prerequisites are met.
|
873
|
+
#
|
874
|
+
# Returns nothing.
|
875
|
+
def check_prerequisites
|
876
|
+
return if (@@prereqs_for_test + @@prereqs_for_dut).empty?
|
877
|
+
|
878
|
+
lock("prereqs-#{@job}", 12.hr) do
|
879
|
+
td_prereqs = test_data.fetch(:_prereqs, {})
|
880
|
+
unless @@prereqs_for_test.empty?
|
881
|
+
# Check test prereqs
|
882
|
+
prereqs_obj = PrereqsForTest.new(self)
|
883
|
+
@@prereqs_for_test.each do |prereq|
|
884
|
+
success = td_prereqs[prereq]
|
885
|
+
if success.nil?
|
886
|
+
# Prereq not yet checked
|
887
|
+
logger.info("Checking prerequisite for test: #{prereq}")
|
888
|
+
success = prereqs_obj.send(prereq) ? true : false
|
889
|
+
test_data.update(_prereqs: { prereq => success })
|
890
|
+
end
|
891
|
+
unless success
|
892
|
+
# Prereq failed
|
893
|
+
fail("Prerequisite failed for test: #{prereq}")
|
894
|
+
end
|
895
|
+
end
|
896
|
+
end
|
897
|
+
unless @@prereqs_for_dut.empty?
|
898
|
+
# Check DUT prereqs
|
899
|
+
dut_key = :"device #{dut.id}"
|
900
|
+
prereqs_obj = PrereqsForDut.new(self)
|
901
|
+
@@prereqs_for_dut.each do |prereq|
|
902
|
+
dut_prereqs = td_prereqs.fetch(dut_key, {})
|
903
|
+
success = dut_prereqs[prereq]
|
904
|
+
if success.nil?
|
905
|
+
# Prereq not yet checked
|
906
|
+
logger.info("Checking prerequisite for device #{dut.id}: #{prereq}")
|
907
|
+
success = prereqs_obj.send(prereq) ? true : false
|
908
|
+
test_data.update(_prereqs: { dut_key => dut_prereqs.merge(prereq => success) })
|
909
|
+
end
|
910
|
+
unless success
|
911
|
+
# Prereq failed
|
912
|
+
fail("Prerequisite failed for device #{dut.id}: #{prereq}")
|
913
|
+
end
|
914
|
+
end
|
915
|
+
end
|
916
|
+
end
|
917
|
+
end
|
918
|
+
|
919
|
+
# Internal: Ensures the test is valid for the current device type.
|
920
|
+
#
|
921
|
+
# Returns nothing.
|
922
|
+
def require_valid_for_device
|
923
|
+
return unless device?
|
924
|
+
|
925
|
+
model = dut.model
|
926
|
+
model = 'UNKNOWN' if model.nil? || model.empty? || model == -1
|
927
|
+
if @@not_valid_for.key?(model.to_sym)
|
928
|
+
reason = @@not_valid_for[model.to_sym]
|
929
|
+
reason_str = reason.nil? ? '' : " Reason: #{reason}"
|
930
|
+
raise "This test is not valid for #{model}!#{reason_str}"
|
931
|
+
elsif !@@valid_for.empty? && !@@valid_for.include?(model.to_sym)
|
932
|
+
raise "#{model} is not in the list of valid device types for this test!"
|
933
|
+
end
|
934
|
+
end
|
935
|
+
|
936
|
+
# Internal: Acquires a TMC lock to modify the given account data.
|
937
|
+
#
|
938
|
+
# data - Object data for which to acquire a lock.
|
939
|
+
# block - Block to execute while lock is acquired.
|
940
|
+
#
|
941
|
+
# Returns nothing.
|
942
|
+
def modifies_account_data(data, &block)
|
943
|
+
lock(data.to_s, 1.hr, &block)
|
944
|
+
end
|
945
|
+
|
946
|
+
# Internal: Acquires a TMC lock to modify the parental controls PIN.
|
947
|
+
#
|
948
|
+
# Returns nothing.
|
949
|
+
def modifies_parental_controls_pin(&block)
|
950
|
+
modifies_account_data(:parental_controls_pin, &block)
|
951
|
+
end
|
952
|
+
|
953
|
+
# Internal: Formats the given method with optional args and block into a nice string.
|
954
|
+
#
|
955
|
+
# meth - String or Symbol name of method to format.
|
956
|
+
# args - Splat Array of method arguments.
|
957
|
+
# block - Block associated with the method.
|
958
|
+
#
|
959
|
+
# Returns the formatted method String.
|
960
|
+
def method_to_str(meth, *args, &block)
|
961
|
+
args_str = args.map { |arg| arg.is_a?(String) ? arg.inspect.tr('"', "'") : arg.to_s }.join(' ')
|
962
|
+
"#{meth}(#{args_str}#{block.nil? ? '' : ", #{block}"})"
|
963
|
+
end
|
964
|
+
|
965
|
+
# Internal: Gets the specified DUT.
|
966
|
+
#
|
967
|
+
# n - Integer index (1-based) of DUT to fetch.
|
968
|
+
#
|
969
|
+
# Returns nothing.
|
970
|
+
def get_dut(n)
|
971
|
+
if @duts[n].nil?
|
972
|
+
# Initialize DUT
|
973
|
+
dut_id = @device_ids[n - 1]
|
974
|
+
raise "Invalid DUT ##{n}. #{@device_ids.count} devices selected for test." if dut_id.nil?
|
975
|
+
|
976
|
+
resp = tmc_get("/api/config/hardware/devices?devices=#{dut_id}")
|
977
|
+
cfg = resp['devices'].first
|
978
|
+
platform = cfg['platform']
|
979
|
+
if platform.nil? || platform.empty?
|
980
|
+
raise "No platform defined for device #{dut_id}! Check TMC hardware config."
|
981
|
+
end
|
982
|
+
|
983
|
+
Dir['./lib/platform/**/*.rb'].each { |f| require f }
|
984
|
+
begin
|
985
|
+
cls = Object.const_get(platform)
|
986
|
+
rescue NameError
|
987
|
+
raise "Unknown platform: #{platform}"
|
988
|
+
end
|
989
|
+
# Initialize the dut object
|
990
|
+
obj = cls.new(self, id: dut_id, config: cfg)
|
991
|
+
# Report dut info
|
992
|
+
report_info = %w[name model boxCode platform ipAddress macAddress remoteType]
|
993
|
+
report_info.each do |inf|
|
994
|
+
logger.info "Device #{dut_id} Info [#{inf}] : #{cfg[inf]}"
|
995
|
+
end
|
996
|
+
@duts[n] = obj
|
997
|
+
end
|
998
|
+
@duts[n]
|
999
|
+
end
|
1000
|
+
|
1001
|
+
|
1002
|
+
# Internal: Parses SWORD test data.
|
1003
|
+
def parse_sword_test_data
|
1004
|
+
logger.debug('Parsing SWORD test data')
|
1005
|
+
sword_data = test_data[:sword_data]
|
1006
|
+
begin
|
1007
|
+
@sword_job_id = sword_data[:job_id]
|
1008
|
+
raise 'SWORD job id not found in test data' if @sword_job_id.nil?
|
1009
|
+
|
1010
|
+
@sword_test_plan_result_id = sword_data[:test_plan_result_id]
|
1011
|
+
raise 'SWORD test plan result id not found in test data' if @sword_test_plan_result_id.nil?
|
1012
|
+
|
1013
|
+
@sword_report_ip = sword_data[:report_ip]
|
1014
|
+
raise 'SWORD report IP not found in test data' if @sword_report_ip.nil?
|
1015
|
+
|
1016
|
+
@sword_hardware_unit_id = Hash[sword_data.fetch(:hardware_unit_ids, [])][dut.id]
|
1017
|
+
raise "SWORD hardware unit id for device #{dut.id} not found in test data" if @sword_hardware_unit_id.nil?
|
1018
|
+
|
1019
|
+
@sword_test_cycle_test_case_id = @id
|
1020
|
+
test_cycle_test_case = Hash[sword_data.fetch(:test_cycle_test_cases, [])].fetch(@sword_test_cycle_test_case_id, {})
|
1021
|
+
@sword_test_case_result_id = test_cycle_test_case[:test_case_result_id]
|
1022
|
+
raise "SWORD test case result id for test cycle test case #{@sword_test_cycle_test_case_id} not found in test data" if @sword_test_case_result_id.nil?
|
1023
|
+
|
1024
|
+
@sword_report_grouping = sword_data[:report_grouping]
|
1025
|
+
@sword_result_url = is_a?(PerformanceTestCase) ? '/automated_test_reporter' : sword_data[:result_url]
|
1026
|
+
@sword_finish_url = sword_data[:finish_url]
|
1027
|
+
sword_report_port = sword_data.fetch(:report_port, 80)
|
1028
|
+
sword_report_proto = sword_report_port == 443 ? 'https' : 'http'
|
1029
|
+
@sword_base_url = "#{sword_report_proto}://#{@sword_report_ip}:#{sword_report_port}"
|
1030
|
+
@sword_tcr_auto_detail_id = nil
|
1031
|
+
rescue StandardError
|
1032
|
+
logger.error("Failed to parse SWORD test data:\n#{sword_data}")
|
1033
|
+
raise
|
1034
|
+
end
|
1035
|
+
end
|
1036
|
+
|
1037
|
+
# Internal: Traps all possible signals, ignoring them, except for Interrupt, which is used to signify cancellation.
|
1038
|
+
def trap_signals
|
1039
|
+
Signal.list.each_value do |signo|
|
1040
|
+
begin
|
1041
|
+
Signal.trap(signo) do
|
1042
|
+
puts "Trapped signal: #{signo}"
|
1043
|
+
if signo == 2 && !@ignore_interrupt
|
1044
|
+
# trap Interrupt
|
1045
|
+
@canceled = true
|
1046
|
+
puts 'Processing interrupt ..'
|
1047
|
+
raise Interrupt, 'Test canceled'
|
1048
|
+
end
|
1049
|
+
end
|
1050
|
+
rescue StandardError
|
1051
|
+
# no-op; we couldn't trap this signal
|
1052
|
+
end
|
1053
|
+
end
|
1054
|
+
end
|
1055
|
+
end
|