--- /dev/null
+# test python script must be in same location as aurum_pb2.py
+
+# python3 -m venv v
+# source v/bin/activate
+# pip3 install grpcio grpcio-tools
+#
+# python3 -m grpc_tools.protoc --python_out=. --grpc_python_out=. --proto_path=. aurum.proto
+#
+# python3 <file>.py
+# deactivate
+
+from utils import *
+
+#4 Menu Control Test
+def ST04_MENU_CONTROL():
+ print("- Menu Test")
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86SysMenu", "org.tizen.menu", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False:
+ return False
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_AFTER_KEY)
+ TAKE_SCREENSHOT(ST04_MENU_CONTROL.__name__ + '_Menu.png')
+ SEND_KEY("XF86Back", WAIT_AFTER_KEY)
+ SEND_KEY("XF86Back", WAIT_AFTER_KEY)
+ SEND_KEY("XF86Back", WAIT_AFTER_KEY)
+
+ HOME()
+
+ print("- Broadcasting Info Test")
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86ChannelGuide", "org.tizen.epg", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ return False
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ TAKE_SCREENSHOT(ST04_MENU_CONTROL.__name__ + '_Broadcasting_Info.png')
+
+ HOME()
+
+ print("- Channel Info Test")
+ SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_ACTIVATE", WAIT_FOR_APP_TRANSFROM)
+ #Wait for automatically activated channel info disappear
+ time.sleep(WAIT_FOR_APP_CONTENT_LOAD)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.hbbtv", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ TAKE_SCREENSHOT(ST04_MENU_CONTROL.__name__ + '_Channel_Info.png')
+
+ return True
+
+#8 My content Test
+def ST08_MY_CONTENT():
+ print("- My Contents Launching")
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.mycontents", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Launched.png')
+
+ print("- My Contents Video Play")
+ SEND_KEY("Return", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.mycontent-video-player-tv", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Video_Player.png')
+ SEND_KEY("XF86Back", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86Back", "com.samsung.tv.mycontents", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+
+ print("- My Contents Photo Play")
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.mycontent-photo-player-tv", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Photo_Player.png')
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86Back", "com.samsung.tv.mycontents", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+
+ print("- My Contents Music Play")
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_FOR_APP_CONTENT_LOAD) #Wait till view transformed
+ TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Music_Play.png')
+
+ #Back to default view
+ SEND_KEY("XF86Back", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+
+
+ return True
+
+#7, 9, 16, 17. App Download, install and run
+def ST07_09_16_17_APP_INSTALL():
+ print("- Apps Launching")
+ #FIXME: Use XPath to find APPS
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+
+ print("- Search TVING Application")
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.store", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_FOR_APP_TRANSFROM) #Wait till view transformed
+ #FIXME: Input text directly or other way :(
+ #FIXME: If keypboard already in English mode. it will fail :(
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) #Change Lang
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_AFTER_KEY) #t
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_AFTER_KEY) #v
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_AFTER_KEY) #i
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_AFTER_KEY) #Select TVING App
+ #FIXME: TVing isInstalled is not working
+ print("- Install TVing")
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.notification-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+ TAKE_SCREENSHOT(ST07_09_16_17_APP_INSTALL.__name__ + '_Install_Notification.png')
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86Exit", "com.samsung.tv.store", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+ print("- Launch TVing")
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", TVING_APP, WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ return False
+ TAKE_SCREENSHOT(ST07_09_16_17_APP_INSTALL.__name__ + '_TVing_Launch.png')
+ print("- Delete TVing")
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86Exit", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False:
+ return False
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.store", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False:
+ return False
+ SEND_KEY("XF86Back", WAIT_FOR_APP_TRANSFROM)
+ SEND_KEY("XF86Back", WAIT_FOR_APP_TRANSFROM)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+ TAKE_SCREENSHOT(ST07_09_16_17_APP_INSTALL.__name__ + '_TVing_Delete.png')
+
+ #FIXME: Check app is not installed
+ return True
+
+def ST10_11_12_CHANNEL_VOLUME_CHANGE():
+ #Csfs -> DTV or TV Plus (tv-viewer)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.tv-viewer", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+
+ #Volume Changes
+ SEND_KEY_WAIT_EVENT("XF86AudioRaiseVolume", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY)
+ StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86AudioRaiseVolume", durationMs=2000, intervalMs=500))
+ TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Volume_Up.png')
+
+ SEND_KEY_WAIT_EVENT("XF86AudioLowerVolume", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY)
+ StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86AudioLowerVolume", durationMs=2000, intervalMs=500))
+ TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Volume_Down.png')
+
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86Home", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+
+ #Csfs -> DTV or TV Plus (tv-viewer)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.tv-viewer", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+
+ #Channel Changes
+ SEND_KEY_WAIT_EVENT("XF86RaiseChannel", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY)
+ StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86RaiseChannel", durationMs=2000, intervalMs=500))
+ TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Channel_Up.png')
+
+ SEND_KEY_WAIT_EVENT("XF86LowerChannel", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY)
+ StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86LowerChannel", durationMs=2000, intervalMs=500))
+ TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Channel_Down.png')
+
+ return True
+
+def ST13_BROWSER():
+ CHECK_APP_INSTALLED()
+ print("- Launch browser")
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.browser", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ TAKE_SCREENSHOT(ST13_BROWSER.__name__ + '_Launched.png')
+
+ print("- TV On/OFF Test in Browser")
+ SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY)
+ time.sleep(10)
+ SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("", "org.tizen.browser", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD):
+ return False
+ CHECK_NOTI_POPUP()
+ TAKE_SCREENSHOT(ST13_BROWSER.__name__ + '_After_Turn_Off.png')
+
+ RESET_TO_TVPLUS()
+
+ return True
+
+def ST14_15_YOUTUBE():
+ CHECK_APP_INSTALLED()
+ print("- Launch youtube")
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.cobalt-yt", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ TAKE_SCREENSHOT(ST14_15_YOUTUBE.__name__ + '_Launched.png')
+
+ print("- TV On/OFF Test in Youtube")
+ SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY)
+ time.sleep(10)
+ SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("", "com.samsung.tv.cobalt-yt", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD):
+ return False
+ CHECK_NOTI_POPUP()
+ TAKE_SCREENSHOT(ST14_15_YOUTUBE.__name__ + '_After_Turn_Off.png')
+
+ RESET_TO_TVPLUS()
+
+ return True
+
+def ST18_MULTITASKING():
+ print("- Launch youtube")
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.cobalt-yt", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ TAKE_SCREENSHOT(ST18_MULTITASKING.__name__ + '_Youtube_Launched.png')
+ SEND_KEY("Return", WAIT_AFTER_KEY)
+ time.sleep(10) #Play video
+
+ print("- Launch csfs")
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86Home", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+ TAKE_SCREENSHOT(ST18_MULTITASKING.__name__ + '_csfs_Launched.png')
+
+ print("- Launch browser")
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.browser", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ for i in range(6):
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+ return False
+ TAKE_SCREENSHOT(ST18_MULTITASKING.__name__ + '_browser_Launched.png')
+ RESET_TO_TVPLUS()
+
+ return True
+
+def ST19_20_NETFLIX():
+ CHECK_APP_INSTALLED()
+ print("- Launch netflix")
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ #nexflix
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.netflix-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ RESET_TO_TVPLUS()
+ return False
+ TAKE_SCREENSHOT(ST19_20_NETFLIX.__name__ + '_Netflix_Launched.png')
+
+ print("- TV On/OFF Test in Netflix")
+ SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY)
+ time.sleep(10)
+ SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("", "org.tizen.netflix-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD):
+ return False
+ CHECK_NOTI_POPUP()
+ TAKE_SCREENSHOT(ST19_20_NETFLIX.__name__ + '_After_Turn_Off.png')
+
+ RESET_TO_TVPLUS()
+
+ return True
+
+def ST21_22_AMBIENT():
+ print("- Run Ambient")
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_AFTER_KEY)
+ TAKE_SCREENSHOT(ST21_22_AMBIENT.__name__ + '_Ambient_Start.png')
+
+ print("- Launch Art-app")
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.art-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LAUNCH) == False:
+ return False
+ TAKE_SCREENSHOT(ST21_22_AMBIENT.__name__ + '_Artapp_Launched.png')
+
+ #FIXME: We need to test ST_22 but embient key is not exist.
+ #Back to csfs home view
+ SEND_KEY("XF86Exit", WAIT_FOR_APP_LOAD)
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_AFTER_KEY)
+
+ return True
+
+def ST23_MULTIVIEW():
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.multiscreen", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ return False
+ TAKE_SCREENSHOT(ST23_MULTIVIEW.__name__ + '_Multiview_Launched.png')
+
+ RESET_TO_TVPLUS()
+
+ return True
+
+def ST24_ROTATION():
+ print("- Device rotation to 90, 180, 270, 0")
+ degrees = [90, 180, 270, 0]
+
+ for degree in degrees:
+ DEVICE_ROTATION(degree)
+ time.sleep(WAIT_FOR_APP_TRANSFROM)
+ TAKE_SCREENSHOT(ST24_ROTATION.__name__ + '_' + str(degree) + '.png')
+
+ return True
+
+def ST25_SEARCH():
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.searchall", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ return False
+ TAKE_SCREENSHOT(ST25_SEARCH.__name__ + '_Searchall_Launched.png')
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) #a
+ SEND_KEY("Right", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_CONTENT_LOAD) #b
+ TAKE_SCREENSHOT(ST25_SEARCH.__name__ + '_Searchall_Searching.png')
+
+ #Return to Korean Keyboard
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM)
+
+ return True
+
+def ST26_CSFS():
+ print("- CSFS test")
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="Right", durationMs=5000, intervalMs=50)) # long press key
+ TAKE_SCREENSHOT(ST26_CSFS.__name__ + '_LongPress_Move.png')
+
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ TAKE_SCREENSHOT(ST26_CSFS.__name__ + '_Thumbnail_Move.png')
+
+ SEND_KEY("Left", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ SEND_KEY("Down", WAIT_AFTER_KEY)
+ StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="Right", durationMs=5000, intervalMs=50)) # long press key
+ TAKE_SCREENSHOT(ST26_CSFS.__name__ + '_Setting_Move.png')
+
+ return True
+
+def PRE_TEST():
+ CHECK_NOTI_POPUP()
+ HOME()
+
+def POST_TEST():
+ HOME()
+
+def runTest(testFunc):
+ global SUCCESS
+ global FAIL
+ global TEST_RESULT
+ print("Test Start : ", testFunc)
+ PRE_TEST()
+ ret = testFunc()
+ POST_TEST()
+ print("Test Finish Result = " + str(ret) + "\n")
+ if ret:
+ SUCCESS += 1
+ else:
+ FAIL += 1
+
+ TEST_RESULT += [
+ {
+ 'test_name' : str(testFunc).split(' ')[1],
+ 'test_result': str(ret)
+ }
+ ]
+
+def run():
+ startTime = time.time()
+
+ INIT_VD_SMOKE_TEST()
+
+ #Start TV Smoke Test
+ if CHECK_USB_PLUGGED():
+ runTest(ST08_MY_CONTENT)
+ runTest(ST10_11_12_CHANNEL_VOLUME_CHANGE)
+ runTest(ST26_CSFS)
+ runTest(ST24_ROTATION)
+ runTest(ST13_BROWSER)
+ runTest(ST19_20_NETFLIX)
+ runTest(ST14_15_YOUTUBE)
+ runTest(ST18_MULTITASKING)
+ runTest(ST23_MULTIVIEW)
+ runTest(ST21_22_AMBIENT)
+ runTest(ST04_MENU_CONTROL)
+ runTest(ST07_09_16_17_APP_INSTALL)
+ runTest(ST25_SEARCH)
+
+ CREATE_HTML_FILE()
+
+ print("--- Total Cases : {} [ Success : {} Fail : {} ] ---\n".format(SUCCESS+FAIL, SUCCESS, FAIL))
+ print("--- Test takes " + f"{time.time() - startTime: .3f} sec ---\n")
+
+ print("--- Exist CS file list ---")
+ CHECK_CRASH_REPORT()
+
+if __name__ == '__main__':
+ run()
--- /dev/null
+from __future__ import print_function
+import os
+import subprocess
+import re
+import sys
+import time
+import datetime
+from aurum_pb2 import *
+from aurum_pb2_grpc import BootstrapStub
+import grpc
+import numpy as np
+import cv2
+from PIL import Image
+
+#Defined values
+WAIT_AFTER_KEY = 1
+WAIT_FOR_APP_TRANSFROM = 3
+WAIT_FOR_APP_CONTENT_LOAD = 5
+WAIT_FOR_APP_LOAD = 10
+WAIT_FOR_APP_LAUNCH = 30
+WAIT_FOR_CONTENT_DOWNLOAD = 40
+TIMEOUT_MS = 5000
+LOGIN = 0
+TVING_APP = "HLoFAbhj6Q.TVING"
+SUCCESS = 0
+FAIL = 0
+
+global DEVICE_INFO
+global FOLDER_NAME
+TEST_RESULT = []
+
+#Class for Stub singleton
+class StubSingleton:
+ _instance = None
+
+ @classmethod
+ def get_stub(cls):
+ if cls._instance is None:
+ cls._instance = BootstrapStub(grpc.insecure_channel('127.0.0.1:50051', options=[ ('grpc.max_send_message_length', 1920*1080*4+5), ('grpc.max_receive_message_length', 1920*1080*4+5)]))
+ return cls._instance
+
+#Check given applicaiton running state
+def CHECK_APP_RUNNING(app):
+ return StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName=app)).isFocused
+
+#Please given message and back to home
+def IS_APP_LAUNCHING_FAIL(app):
+ if CHECK_APP_RUNNING(app) == False:
+ print(app +" launching fail Back to home")
+ SEND_KEY_WAIT_EVENT("XF86Home", "EVENT_WINDOW_ACTIVATE", WAIT_FOR_APP_TRANSFROM)
+ return False
+ return True
+
+#Send key and wait event untill waitSec then sleep for delay time
+def SEND_KEY_WAIT_APP_LAUNCHING(key, app, waitSec, delay):
+ launch_request = time.time()
+ SEND_KEY(key, WAIT_AFTER_KEY)
+ while 1:
+ time.sleep(0.1)
+ if CHECK_APP_RUNNING(app) == True:
+ time.sleep(delay)
+ print(app + " Launched")
+ break
+ if time.time() - launch_request > waitSec:
+ print(app + " Launch Fail")
+ return False
+
+#Take screenshot with given file name
+def TAKE_SCREENSHOT(name):
+ global FOLDER_NAME
+ responses = StubSingleton.get_stub().takeScreenshot(ReqTakeScreenshot(getPixels=True))
+ for response in responses:
+ buf = np.frombuffer(response.image, dtype=np.uint8).reshape(1080,1920,4)
+ image = cv2.cvtColor(buf, cv2.COLOR_RGBA2RGB)
+ save_location = f"{FOLDER_NAME}/{name}"
+ cv2.imwrite(save_location, image)
+ #with open(name, 'wb') as fout:
+ # cv2.imwrite(name, image)
+
+#Run command in device shell
+def RUN_COMMAND(command):
+ stream = os.popen(command)
+ output = stream.read()
+ return output
+
+#Login samsung account
+def SAMSUNG_ACCOUNT_LOGIN():
+ global LOGIN
+ if LOGIN:
+ print("Already setup samsung account\n")
+ else:
+ RUN_COMMAND("sdb shell ssoscmd -c 4 -d iottest0909@gmail.com@SSOSVCAPI@1q2w3e")
+ print("Samsung account login\n")
+ LOGIN = 1
+ time.sleep(10)
+
+#Device Rotation with given degree
+def DEVICE_ROTATION(degree):
+ RUN_COMMAND("sdb shell winfo -rotation set " + str(degree))
+
+#Send given key event and wait given specific event till @TIMEOUT_MS then wait some time
+"""
+ EVENT_WINDOW_ACTIVATE
+ EVENT_WINDOW_DEACTIVATE
+ EVENT_WINDOW_MINIMIZE
+ EVENT_WINDOW_RAISE
+ EVENT_WINDOW_IDLE
+ EVENT_STATE_CHANGED_FOCUSED
+"""
+def SEND_KEY_WAIT_EVENT(key, event, delay):
+ StubSingleton.get_stub().actionAndWaitEvent(ReqActionAndWaitEvent(type="KEY", XF86keyCode=key, eventType=event, timeoutMs=TIMEOUT_MS))
+ time.sleep(delay)
+
+#Send key event and wait some time
+def SEND_KEY(key, delay):
+ StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="STROKE", XF86keyCode=key))
+ time.sleep(delay)
+
+#Back to home
+def HOME():
+ SEND_KEY_WAIT_EVENT("XF86Home", "EVENT_WINDOW_ACTIVATE", WAIT_FOR_APP_TRANSFROM)
+
+#Check notification popup activated or not it also can test "7 Global Notification Test"
+def CHECK_NOTI_POPUP():
+ if StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.notification-app')).isRunning:
+ TAKE_SCREENSHOT('ST7_NOTI_POPUP.png')
+ print("#7. Global Notification")
+ SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_DEACTIVATE")
+ time.sleep(WAIT_FOR_APP_TRANSFROM)
+
+#Check sdb connected or not
+def CHECK_SDB():
+ stream = os.popen("command -v sdb")
+ output = stream.read()
+ if len(output) > 0:
+ return True
+ else:
+ print("Error - Can't run sdb")
+ return False
+
+#Reset to TVPlus
+def RESET_TO_TVPLUS():
+ print("Reset to TVPlus")
+ if SEND_KEY_WAIT_APP_LAUNCHING("XF86Home", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False:
+ return False
+ SEND_KEY("Up", WAIT_AFTER_KEY)
+ if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.tv-viewer", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False:
+ return False
+
+#Print testing device env
+def GET_DEVICE_INFO():
+ global DEVICE_INFO
+ print("--- Test Device Info ---")
+ stream = os.popen("sdb shell cat /etc/info.ini")
+ output = stream.read()
+ DEVICE_INFO = output
+ print(DEVICE_INFO)
+
+#Check aurum ready or not
+def CHECK_AURUM_READY():
+ stream = os.popen("sdb shell 'ps -e | grep aurum-bootstrap'")
+ output = stream.read()
+ if len(output) > 0:
+ return True
+ else:
+ print("Error - aurum-bootstrap not launched on target")
+ print("Try to launch aurum-bootstrap")
+ stream = os.popen("sdb shell app_launcher -s org.tizen.aurum-bootstrap")
+ output = stream.read()
+ time.sleep(1)
+ if len(output) > 0:
+ print("Success to launch aurum-bootstrap")
+ return True
+
+ print("Error - Can't launch aurum-bootstrap")
+ return False
+
+#Create folder to save imgs
+def CREATE_FOLDER_TO_SAVE_CAPTURES():
+ now = datetime.datetime.now()
+ global FOLDER_NAME
+ FOLDER_NAME = now.strftime("VD_ST_%Y-%m-%d_%H-%M-%S")
+ os.mkdir(FOLDER_NAME)
+
+def CHECK_APP_INSTALLED():
+ print("--- Check needed app installed")
+
+ while True:
+ netflix = StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='org.tizen.netflix-app')).isInstalled
+ youtube = StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.cobalt')).isInstalled
+ browser = StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='org.tizen.browser')).isInstalled
+ if netflix and youtube and browser:
+ break
+ print("Waiting app installed [ netflix: {} , youtube: {} , browser: {} ] ".format(netflix, youtube, browser))
+ time.sleep(5)
+
+ HOME()
+
+def CHECK_CRASH_REPORT():
+ print(RUN_COMMAND("sdb shell ls /opt/share/crash/report"))
+
+def CHECK_ELM_ATSPI_MODE():
+ output = RUN_COMMAND("sdb shell cat /etc/profile.d/efl.sh")
+ target_string = "ELM_ATSPI_MODE"
+
+ if target_string in output:
+ return True
+ else:
+ print("Error - Need to add 'ELM_ATSPI_MODE=1' in /etc/profile.d/efl.sh then reboot please. ")
+ return False
+
+def CHECK_USB_PLUGGED():
+ output = RUN_COMMAND("sdb shell lsblk")
+ target_string = "USB"
+
+ if target_string in output:
+ return True
+ else:
+ print("NOTICE - USB is not Plugged. Test can generated except ST08_MY_CONTENT\n")
+ return False
+
+def FIND_IMAGE_WITH_PREFIX(folder_name, prefix):
+ image_files = []
+
+ for file_name in os.listdir(folder_name):
+ file_path = os.path.join(folder_name, file_name)
+
+ if file_name.startswith(prefix):
+ image_files.append(file_path)
+
+ image_files.sort()
+ return image_files
+
+def FILTER_ITEMS_WITH_STRING(arr, search_string):
+ filtered_arr = [item for item in arr if search_string in item]
+ return filtered_arr
+
+def CREATE_HTML_FILE():
+ sorted_result = sorted(TEST_RESULT, key=lambda x: x['test_name'])
+ expected_imgs = GET_EXPECTED_IMAGE_LIST()
+
+ html_content = f'''
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <title>Test Results</title>
+ <div>Test device info : <br> {DEVICE_INFO}</div>
+ <style>
+ table {{
+ border-collapse: collapse;
+ width: 100%;
+ }}
+ th, td {{
+ border: 1px solid black;
+ padding: 8px;
+ text-align: left;
+ }}
+ </style>
+ </head>
+ <body>
+ <h1>Test Results</h1>
+ <table>
+ <tr>
+ <th>Test Name</th>
+ <th>Test Result</th>
+ <th>Expected Image - Tizen 7.0 230516</th>
+ <th>Test Image</th>
+ </tr>
+ '''
+
+ for test in sorted_result:
+ test_name = test['test_name']
+ test_result = test['test_result']
+ test_expected_imgs = FILTER_ITEMS_WITH_STRING(expected_imgs, test_name)
+ test_images = FIND_IMAGE_WITH_PREFIX(FOLDER_NAME, test_name)
+
+ html_content += f'''
+ <tr>
+ <td rowspan={len(test_expected_imgs)}>{test_name}</td>
+ <td rowspan={len(test_expected_imgs)}>{test_result}</td>
+ '''
+
+ for idx in range(len(test_expected_imgs)):
+ if idx != 0:
+ html_content += f'''
+ <tr>
+ '''
+
+ html_content += f'''
+ <td><img src="{test_expected_imgs[idx]}" width="480" height="270" alt="{test_name} Image"></td>
+ '''
+
+ if idx < len(test_images):
+ html_content += f'''
+ <td><img src="{test_images[idx]}" width="480" height="270" alt="{test_name} Image"></td>
+ '''
+
+ html_content += f'''
+ </tr>
+ '''
+
+ html_content += '''
+ </table>
+ </body>
+ </html>
+ '''
+
+ result = f"{FOLDER_NAME}_Test_Result.html"
+ with open(result, 'w') as file:
+ file.write(html_content)
+
+def GET_EXPECTED_IMAGE_LIST():
+ img_list = [
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST04_MENU_CONTROL_Broadcasting_Info.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST04_MENU_CONTROL_Channel_Info.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST04_MENU_CONTROL_Menu.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST07_09_16_17_APP_INSTALL_Install_Notification.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST07_09_16_17_APP_INSTALL_TVing_Delete.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST07_09_16_17_APP_INSTALL_TVing_Launch.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Music_Play.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Photo_Player.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Video_Player.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Channel_Down.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Channel_Up.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Volume_Down.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Volume_Up.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST13_BROWSER_After_Turn_Off.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST13_BROWSER_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST14_15_YOUTUBE_After_Turn_Off.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST14_15_YOUTUBE_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST18_MULTITASKING_Youtube_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST18_MULTITASKING_browser_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST18_MULTITASKING_csfs_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST19_20_NETFLIX_After_Turn_Off.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST19_20_NETFLIX_Netflix_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST21_22_AMBIENT_Ambient_Start.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST21_22_AMBIENT_Artapp_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST23_MULTIVIEW_Multiview_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_0.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_180.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_270.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_90.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST25_SEARCH_Searchall_Launched.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST25_SEARCH_Searchall_Searching.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST26_CSFS_LongPress_Move.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST26_CSFS_Setting_Move.png',
+ 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST26_CSFS_Thumbnail_Move.png'
+ ]
+
+ return img_list
+
+#Configure Smoke Test
+def INIT_VD_SMOKE_TEST():
+ # Command Timeout Setting
+ StubSingleton.get_stub().setTimeout(ReqSetTimeout(timeout = TIMEOUT_MS))
+ if not CHECK_ELM_ATSPI_MODE():
+ sys.exit()
+ if not CHECK_SDB():
+ sys.exit()
+ if not CHECK_AURUM_READY():
+ sys.exit()
+ GET_DEVICE_INFO()
+ SAMSUNG_ACCOUNT_LOGIN()
+ CREATE_FOLDER_TO_SAVE_CAPTURES()