= 2:
+ second_argument = sys.argv[1]
+ print(f"Two plugins are given: {second_argument}")
+elif len(sys.argv) >= 3:
+ third_argument = sys.argv[2]
+ print(f"three plugins are given: {third_argument}")
+elif len(sys.argv) >= 4:
+ forth_argument = sys.argv[3]
+ print(f"4 plugins are given: {argument}")
+else:
+ print("No second argument provided.")
+
+print("GIVEN PLUGIN NAMES/TC NAME {}" .format(argument))
+# Pushing the initial configuration (cec network data &
+# Pushing the initial configuration (cec network data & api override data) to Flask
+#Utils.initialize_flask()
+print("")
+
+# Activating the HdmiCecSource plugin using controller1.activate curl command
+#CecUtils.activate_cec()
+#time.sleep(5)
+
+print("")
+print("***** Test Execution Starts *****")
+print("")
+
+tc_name = result
+flag = 0
+track = 0
+
+list_of_plugins = ['HdmiCecSource','HdmiCecSink','FrontPanel','HdcpProfile','DisplayInfo']
+
+plugin_name = []
+
+for each in list_of_plugins:
+ if each in argument or each in result:
+ plugin_name.append(each)
+ track = track + 1
+
+if track == 2 or track > 2:
+ Utils.info_log("Executing Testcases for the given plugins")
+ if "HdmiCecSource" in plugin_name or "HdmiCecSink" in plugin_name:
+ Utils.initialize_flask()
+ print("")
+
+# Activating the HdmiCecSource plugin using controller1.activate curl command
+ CecUtils.activate_cec()
+ time.sleep(5)
+ else:
+ print("Plugins changed does not require FLASK HTTP Server for execution and build")
+
+ if "HdmiCecSource" in plugin_name:
+ # Execute the testcases
+ import TCID013
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID014
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID015
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID022
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID023
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID024
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID001
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID002
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID003
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID004
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID005
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID006
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID007
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID008
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID009
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID010
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID011
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID012
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID016
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID017
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID018
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID019
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID020
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID026
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID027
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID032
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID031
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID030
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID029
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID028
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID025
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID021
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ else:
+ print("Skipping HdmiCecSource as no changes are added")
+
+ if "HdmiCecSink" in plugin_name:
+ import TCID_031_HDMICECSINK_getEnabled_HAL_False
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_Emulate
+ import TCID_035_Arc_start_stop
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_028_HDMICECSINK_abortCombinationsEmulation
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_036_HDMICECSINK_OSDStringMenuLanguageEmulation
+ import TCID_037_HDMICECSINK_sendEvents
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_032_HDMICECSINK_EmulateTextViewONStandbyBy
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_001_HDMICECSINK_getEnabled
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_002_HDMICECSINK_setEnabled
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_003_HDMICECSINK_getOSDName
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_005_HDMICECSINK_getVendorID
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_004_HDMICECSINK_setOSDName
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_006_HDMICECSINK_setVendorID
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_008_HDMICECSINK_getActiveSource
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_007_HDMICECSINK_getActiveRoute
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_009_HDMICECSINK_getAudioDeviceConnectedStatus
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_010_HDMICECSINK_getDeviceList
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_011_HDMICECSINK_requestActiveSource
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_012_HDMICECSINK_requestShortAudioDescriptor
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_013_HDMICECSINK_sendAudioDevicePowerOnMessage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_014_HDMICECSINK_getAudioStatusMessage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_015_HDMICECSINK_sendKeyPressEvent
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_016_HDMICECSINK_sendUserControlPressed
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_017_HDMICECSINK_sendUserControlReleased
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_018_HDMICECSINK_sendStandbyMessage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_019_HDMICECSINK_setActivePath
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_020_HDMICECSINK_setActiveSource
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_021_HDMICECSINK_setmenuLanguage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_022_HDMICECSINK_setLatencyInfo
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_023_HDMICECSINK_setRoutingChange
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_024_HDMICECSINK_setupArcRouting
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_025_HDMICECSINK_printDeviceList
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_026_HDMICECSINK_requestAudioDevicePowerStatus
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_029_HDMICECSINK_getActiveSourcewithroutingChange
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_030_HDMICECSINK_sendGetAudioStatusMessage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_033_HDMICECSINK_setRoutingChangeNegative
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_034_HDMICECSINK_active_source
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ else:
+ print("Skipping HDMICECSINK as no changes are added")
+
+
+ if "FrontPanel" in plugin_name:
+ #Utils.initialize_flask()
+ print("Executing Test Framework without HTTP server and Websocket")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_001_DS_FrontPanel_getBrightness
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_011_DS_FrontPanel_setPreferences #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_002_DS_FrontPanel_getPreferences
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_003_DS_FrontPanel_is24HourClock
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_014_DS_FrontPanel_setClockBrightness #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_004_DS_FrontPanel_getClockBrightness #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_005_DS_FrontPanel_powerLedOff
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_006_DS_FrontPanel_powerLedOn
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_007_DS_FrontPanel_set24HourClock
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_008_DS_FrontPanel_setBlink
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_009_DS_FrontPanel_setClockTestPattern
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_010_DS_FrontPanel_setLED
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_013_DS_FrontPanel_setBrightness
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_015_DS_FrontPanel_getSetbrightnesscombination
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_012_DS_FrontPanel_getFrontPanelLights
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_017_DS_FrontPanel_sendEventsSimulation
+ import TCID_016_DS_FrontPanel_Deactivate
+ else:
+ print("Skipping FrontPanel as no changes are added")
+
+ if "HdcpProfile" in plugin_name:
+ print("Detected change in HdcpProfile")
+ import TCID_001_HDCPProfile_getHDCPStatus
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_002_HDCPProfile_getSettopHDCPSupport #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_004_HDCPProfile_Events
+ time.sleep(2)
+ import TCID_003_HDCPProfile_ActivateDeactivateSimulation
+
+ else:
+ print("skipping HdcpProfile as no changes are required")
+
+ if "HdcpProfile" in plugin_name:
+ print("Detected change in DisplayInfo")
+ import TCID_001_DS_DeviceInfo_edid
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_002_DS_DisplayInfo_widthincentimeters
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_003_DS_DisplayInfo_heightincentimeters
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ else:
+ print("skipping DisplayInfo as no changes are required")
+else:
+ track = 1
+if "HdmiCecSource" in argument or "HdmiCecSource" in result:
+ if track < 2:
+ flag = 1
+ if flag == 1 or flag == 15:
+ Utils.initialize_flask()
+ print("")
+
+# Activating the HdmiCecSource plugin using controller1.activate curl command
+ CecUtils.activate_cec()
+ time.sleep(5)
+
+ # Execute the testcases for HdmiCecSource
+ Utils.info_log("Executing Testcases for HdmiCecSource")
+ # Execute the testcases
+ import TCID013
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID014
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID015
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID022
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID023
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID024
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID001
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID002
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID003
+ import TCID004
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID005
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID006
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID007
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID008
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID009
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID010
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID011
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID012
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID016
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID017
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID018
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID019
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID020
+ import TCID020
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID026
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID027
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID032
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID031
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID030
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID029
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID028
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID025
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID021
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ else:
+ print("Executed HdmiCecSource TestCases")
+if "HdmiCecSink" in argument or "HdmiCecSink" in result:
+ if track < 2:
+ flag = 2
+ Utils.info_log("Executing HdmiCecSink Test suite")
+ Utils.initialize_flask()
+ print("")
+
+# Activating the HdmiCecSource plugin using controller1.activate curl command
+ CecUtils.activate_cec()
+ time.sleep(5)
+
+ import TCID_031_HDMICECSINK_getEnabled_HAL_False
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_Emulate
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_035_Arc_start_stop
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_028_HDMICECSINK_abortCombinationsEmulation
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_036_HDMICECSINK_OSDStringMenuLanguageEmulation
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_037_HDMICECSINK_sendEvents
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_032_HDMICECSINK_EmulateTextViewONStandbyBy
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_001_HDMICECSINK_getEnabled
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_002_HDMICECSINK_setEnabled
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_003_HDMICECSINK_getOSDName
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_005_HDMICECSINK_getVendorID
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_004_HDMICECSINK_setOSDName
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_006_HDMICECSINK_setVendorID
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_008_HDMICECSINK_getActiveSource
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_007_HDMICECSINK_getActiveRoute
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_009_HDMICECSINK_getAudioDeviceConnectedStatus
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_010_HDMICECSINK_getDeviceList
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_011_HDMICECSINK_requestActiveSource
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_012_HDMICECSINK_requestShortAudioDescriptor
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_013_HDMICECSINK_sendAudioDevicePowerOnMessage
+ import TCID_014_HDMICECSINK_getAudioStatusMessage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_015_HDMICECSINK_sendKeyPressEvent
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_016_HDMICECSINK_sendUserControlPressed
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_017_HDMICECSINK_sendUserControlReleased
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_018_HDMICECSINK_sendStandbyMessage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_019_HDMICECSINK_setActivePath
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_020_HDMICECSINK_setActiveSource
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_021_HDMICECSINK_setmenuLanguage
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_022_HDMICECSINK_setLatencyInfo
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_023_HDMICECSINK_setRoutingChange
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_024_HDMICECSINK_setupArcRouting
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_025_HDMICECSINK_printDeviceList
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_026_HDMICECSINK_requestAudioDevicePowerStatus
+
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_029_HDMICECSINK_getActiveSourcewithroutingChange
+ import TCID_030_HDMICECSINK_sendGetAudioStatusMessage
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_033_HDMICECSINK_setRoutingChangeNegative
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_034_HDMICECSINK_active_source
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ else:
+ print("Executed HdmiCecSink TestCases")
+if "FrontPanel" in argument or "FrontPanel" in result:
+ if track < 2:
+ flag = 3
+ Utils.info_log("Executing FrontPanel Test suite")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+
+ #Utils.initialize_flask()
+ print("Executing Test Framework without HTTP server and Websocket")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_001_DS_FrontPanel_getBrightness
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_011_DS_FrontPanel_setPreferences #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_002_DS_FrontPanel_getPreferences
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_003_DS_FrontPanel_is24HourClock
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_014_DS_FrontPanel_setClockBrightness #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_004_DS_FrontPanel_getClockBrightness #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_005_DS_FrontPanel_powerLedOff
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_006_DS_FrontPanel_powerLedOn
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_007_DS_FrontPanel_set24HourClock
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_008_DS_FrontPanel_setBlink
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_009_DS_FrontPanel_setClockTestPattern
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_010_DS_FrontPanel_setLED
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_013_DS_FrontPanel_setBrightness
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_015_DS_FrontPanel_getSetbrightnesscombination
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_012_DS_FrontPanel_getFrontPanelLights
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_017_DS_FrontPanel_sendEventsSimulation
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_018_DS_FrontPanel_negative
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_020_DS_FrontPanel_powerLed_invalid
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_021_DS_FrontPanel_LEDBrightnessNegative
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_022_DS_FrontPanel_24HrClock_invalid
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_016_DS_FrontPanel_Deactivate
+
+
+if "HdcpProfile" in argument or "HdcpProfile" in result:
+ if track < 2:
+ flag = 4
+ Utils.info_log("Executing HDCPProfile Test suite")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ time.sleep(30)
+ #Utils.initialize_flask()
+ print("Executing Test Framework without HTTP server and Websocket")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_001_HDCPProfile_getHDCPStatus
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_002_HDCPProfile_getSettopHDCPSupport #commented as its descoped in source code
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_004_HDCPProfile_Events
+ time.sleep(28)
+ import TCID_003_HDCPProfile_ActivateDeactivateSimulation
+ #import TCID_003_HDCPProfile_ActivateDeactivateSimulation
+if "DisplayInfo" in argument or "DisplayInfo" in result:
+ if track < 2:
+ flag = 5
+ Utils.info_log("Executing DisplayInfo Test suite")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ #Utils.initialize_flask() #Flask initialization not required as its a static Mock
+ print("Executing Test Framework without HTTP server and Websocket")
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_001_DS_DeviceInfo_edid
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TTCID_002_DS_DisplayInfo_widthincentimeters
+ print("\033[32m------########################################################################################################################---------.\033[0m")
+ import TCID_003_DS_DisplayInfo_heightincentimeters
+
+if argument == "DeviceSettings":
+ flag = 3
+ Utils.highlight_log("Executing DeviceSettings Test suite")
+if argument == "Bluetooth":
+ flag = 4
+ Utils.highlight_log("Executing Bluetooth Test Suite")
+if argument == "Wifi":
+ flag = 5
+ Utils.highlight_log("Executing Wifi Test Suite")
+if argument == "HdmiInput":
+ flag = 6
+if argument == "all":
+ flag = 15
+ Utils.highlight_log("Executing Complete Test Suite for all plugins")
+if "TCID" in result:
+ flag = 0
+ print(
+ "\033[32m------########################################################################################################################---------.\033[0m")
+ print("Execution of testcase {}".format(argument))
+ __import__(tc_name)
+
+if argument != "HdmiCecSource" or argument != "HdmiCecSink" or argument != "all":
+ print("Execution of testcase {}" .format(argument))
+if flag == 2 or flag == 15:
+ Utils.info_log("Executed HdmiCecSinkTestcases")
+if flag == 15:
+ Utils.info_log("Executed Complete Test suite")
+else:
+ print("Executed TestManager")
+
+print("***** Test Execution Ends *****")
+
+# Generate a html report file with all testcase execution details
+ReportGenerator.generate_html_report(build_name, now)
diff --git a/Tests/L2HALMockTests/Test_Framework/Utilities/ReportGenerator.py b/Tests/L2HALMockTests/Test_Framework/Utilities/ReportGenerator.py
new file mode 100644
index 00000000..4739fb0f
--- /dev/null
+++ b/Tests/L2HALMockTests/Test_Framework/Utilities/ReportGenerator.py
@@ -0,0 +1,186 @@
+#** *****************************************************************************
+# *
+# * If not stated otherwise in this file or this component's LICENSE file the
+# * following copyright and licenses apply:
+# *
+# * Copyright 2024 RDK Management
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *
+# http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# *
+#* ******************************************************************************
+
+import csv
+import os
+import pandas as pd
+from bs4 import BeautifulSoup
+
+passed_tc_list = []
+failed_tc_list = []
+
+
+def append_test_results_to_csv(tc_id, output, status, message):
+
+ # Assign the headers for report file
+ headers = ["Curl API/TC Name", "Output Response", " TC Status ", " Remarks "]
+
+ # Open the report file in append mode
+ with open("TestReport.csv", "a", newline="") as csvfile:
+ writer = csv.writer(csvfile)
+
+ # Write headers if the headers in report file is empty
+ if csvfile.tell() == 0:
+ writer.writerow(headers)
+
+ # Write the testcase details to a new row
+ writer.writerow([tc_id, output, status, message])
+
+
+
+# Report Generation in .html file format
+def generate_html_report(build_name, now):
+
+ # To read csv file named "TestReport"
+ a = pd.read_csv("TestReport.csv")
+
+ # Format the date and time as strings to generate the test report file
+ date = now.strftime("%d-%m-%Y")
+ time = now.strftime("%Hh%Mm%Ss")
+
+ # To save as html file with build name, execution data and time
+ a.to_html("TestReport_{}_{}_{}.html".format(build_name, date, time), index=False)
+ # To remove the TestReport.csv file
+ #os.remove("TestReport.csv")
+
+ # Add custom CSS style for a black background
+ # Read the HTML file
+ with open("TestReport_{}_{}_{}.html".format(build_name, date, time), "r") as f:
+ html = f.read()
+
+ styled_html = f"""
+
+ {html}
+ """
+
+ # Parse the HTML using BeautifulSoup
+ soup = BeautifulSoup(html, "html.parser")
+
+ # Find the table element
+ table = soup.find("table")
+
+ # Create a list of elements with the data
+
+ # Calculate the length of the failed_tc_list string
+ failed_tc_length = str(len(failed_tc_list))
+ passed_tc_length = str(len(passed_tc_list))
+
+ # Create a formatted string with the length in red
+ #formatted_length_failed = f"\033[91m{failed_tc_length}\033[0m"
+ #formatted_length_passed = f"\033[92m{passed_tc_length}\033[0m"
+ formatted_length_failed = failed_tc_length
+ formatted_length_passed = passed_tc_length
+
+ current_date = now.strftime("%d/%m/%Y")
+ current_time = now.strftime("%H:%M:%S")
+ data = [soup.new_tag("p")]
+ # Now you can use the formatted_length wherever you need it
+ ##data[-1].string = f"Number of Testcases Failed: {str(formatted_length_failed)}"
+ #data[-1].string = f"Number of Testcases Failed: {str(len(failed_tc_list))}"
+ ##data.append(soup.new_tag("p"))
+ #data[-1].string = f"Number of Testcases Passed: {str(len(passed_tc_list))}"
+ ##data[-1].string = f"Number of Testcases Passed: {str(formatted_length_passed)}"
+ ##data.append(soup.new_tag("p"))
+ ##data[-1].string = f"Time of Execution: {current_time}"
+ ##data.append(soup.new_tag("p"))
+ ##data[-1].string = f"Date of Execution: {current_date}"
+ ##data.append(soup.new_tag("p"))
+ ##data[-1].string = f"Build Name: {build_name}"
+
+ styled_html = f"""
+
+
+
+
+
+ L2 Test Execution Report
+ {html}
+ Execution Summary
+ Number of Testcases Failed: {str(formatted_length_failed)}
+ Number of Testcases Passed: {str(formatted_length_passed)}
+ Time of Execution: {current_time}
+ Date of Execution: {current_date}
+ Build Name: {build_name}
+
+
+ """
+
+
+ # Insert the data elements before the table element
+ for element in reversed(data):
+ table.insert_before(element)
+
+
+ # Replace the old html file with new one
+ with open("TestReport_{}_{}_{}.html".format(build_name, date, time), "w") as f:
+ f.write(str(soup))
+
+ # Read the html file
+ with open("TestReport_{}_{}_{}.html".format(build_name, date, time)) as html_file:
+ soup = BeautifulSoup(html_file, "html.parser")
+
+ # Find all the elements
+ headers = soup.find_all("th")
+
+ # Add the style attribute to each | element
+ for header in headers:
+ header["style"] = "text-align: center"
+
+
+ # Write the modified html to a same report file
+ with open("TestReport_{}_{}_{}.html".format(build_name, date, time), "w") as html_file:
+ #html_file.write(soup.prettify())
+ html_file.write(styled_html)
+ # Move the html file to the 'Test Execution Reports' Directory
+ os.rename("TestReport_{}_{}_{}.html".format(build_name, date, time),
+ "Test Execution Reports/TestReport_{}_{}_{}.html".format(
+ build_name, date, time))
diff --git a/Tests/L2HALMockTests/Test_Framework/Utilities/Utils.py b/Tests/L2HALMockTests/Test_Framework/Utilities/Utils.py
new file mode 100644
index 00000000..abe02b39
--- /dev/null
+++ b/Tests/L2HALMockTests/Test_Framework/Utilities/Utils.py
@@ -0,0 +1,206 @@
+#** *****************************************************************************
+# *
+# * If not stated otherwise in this file or this component's LICENSE file the
+# * following copyright and licenses apply:
+# *
+# * Copyright 2024 RDK Management
+# *
+# * Licensed under the Apache License, Version 2.0 (the "License");
+# * you may not use this file except in compliance with the License.
+# * You may obtain a copy of the License at
+# *
+# *
+# http://www.apache.org/licenses/LICENSE-2.0
+# *
+# * Unless required by applicable law or agreed to in writing, software
+# * distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+# *
+#* ******************************************************************************
+
+# This file contains all the common functions required for test framework
+
+import subprocess
+import os
+import json
+import requests
+import Config
+from os import path
+import logging
+from colorama import Fore, Style
+import time
+
+
+def error_log(message):
+ print(Fore.RED + f"ERROR: {message}" + Style.RESET_ALL)
+
+def warning_log(message):
+ print(Fore.YELLOW + f"LOGGER: {message}" + Style.RESET_ALL)
+
+def info_log(message):
+ print(Fore.CYAN + f"INFO: {message}" + Style.RESET_ALL)
+
+def initiliaze_flask_for_HdmiCecSource():
+ '''This function is used to push the initial data towards the Flask server'''
+ try:
+ # Push the initial cec network data to Flask using http get requests - setDeviceConfig API
+ create_device_response = requests.get("http://{}/Database.setDeviceConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.config_data_hdmicecsource)))
+ print("Inside Utils.py : " + create_device_response.text + " : " + str(Config.config_data_hdmicecsource))
+ print("configured device data using - http://{}/Database.setDeviceConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.config_data_hdmicecsource)))
+ print("")
+
+ # Push the api overrides data to Flask using http get requests - setAPIConfig API
+ create_api_overrides_response = requests.get("http://{}/Hdmicec.setAPIConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.api_data_hdmicecsource)))
+ print("Inside Utils.py : " + create_api_overrides_response.text + " : " + str(Config.api_data_hdmicecsource))
+ print("configured hal api data using - http://{}/Hdmicec.setAPIConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.api_data_hdmicecsource)))
+ print("")
+
+ # Compare the obtained response with actual response
+ if "Success" in str(create_device_response.text) and "Success" in str(create_api_overrides_response.text):
+ print("Inside Utils.py : Successfully pushed the initial data (setDeviceConfig & setAPIConfig) to Flask")
+ else:
+ print("Inside Utils.py : Failed to push the initial data (setDeviceConfig & setAPIConfig) to Flask")
+
+ except:
+ print("Inside Utils.py : Exception in initialize_flask function")
+
+def initialize_flask():
+ '''This function is used to push the initial data towards the Flask server'''
+ try:
+ # Push the initial cec network data to Flask using http get requests - setDeviceConfig API
+ create_device_response = requests.get("http://{}/Database.setDeviceConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.config_data)))
+ print("Inside Utils.py : " + create_device_response.text + " : " + str(Config.config_data))
+ print("configured device data using - http://{}/Database.setDeviceConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.config_data)))
+ print("")
+
+ # Push the api overrides data to Flask using http get requests - setAPIConfig API
+ create_api_overrides_response = requests.get("http://{}/Hdmicec.setAPIConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.api_data)))
+ print("Inside Utils.py : " + create_api_overrides_response.text + " : " + str(Config.api_data))
+ print("configured hal api data using - http://{}/Hdmicec.setAPIConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.api_data)))
+ print("")
+
+ # Compare the obtained response with actual response
+ if "Success" in str(create_device_response.text) and "Success" in str(create_api_overrides_response.text):
+ print("Inside Utils.py : Successfully pushed the initial data (setDeviceConfig & setAPIConfig) to Flask")
+ else:
+ print("Inside Utils.py : Failed to push the initial data (setDeviceConfig & setAPIConfig) to Flask")
+
+ except:
+ print("Inside Utils.py : Exception in initialize_flask function")
+
+
+def send_curl_command(curl_command):
+ '''This function is used to send the curl commands to get the output response using os module'''
+ output_response = ""
+ try:
+ # Send the curl command using os.system module
+ response = os.popen(curl_command)
+
+ # Find the line that is a valid JSON for extracting only the json response
+ for line in response.readlines():
+ try:
+ # Try to parse the current line as JSON
+ json.loads(line)
+ output_response = line
+ # Exit the loop as we found the JSON line
+ break
+ except json.JSONDecodeError:
+ # If current line is not a valid JSON, just pass and continue with the next line
+ pass
+
+ # Check the output response and add a message if the obtained output response is null
+ if len(output_response) < 5:
+ output_response = "< No response from WPEFramework >"
+ except:
+ print("Inside Utils.py : Exception in send_curl_command function")
+ finally:
+ # Return the output json response of given curl command as a string
+ return output_response
+
+#abort Device config with 5 different device configurations.
+def abort_data(data):
+ print("Sending abort configurations")
+ create_device_response = requests.get("http://{}/Database.setDeviceConfig/{}".format(Config.flask_server_ip, json.dumps(data)))
+ print("Inside Utils.py : " + create_device_response.text + " : " + str(data))
+ print("configured device data using - http://{}/Database.setDeviceConfig/{}".format(
+ Config.flask_server_ip, json.dumps(data)))
+ print("")
+
+def initialize_flask_without_audio_device():
+ '''This function is used to push the initial data towards the Flask server'''
+ try:
+ # Push the initial cec network data to Flask using http get requests - setDeviceConfig API
+ create_device_response = requests.get("http://{}/Database.setDeviceConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.config_data_no_audio)))
+ print("Inside Utils.py : " + create_device_response.text + " : " + str(Config.config_data))
+ print("configured device data using - http://{}/Database.setDeviceConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.config_data_no_audio)))
+ print("")
+
+ # Push the api overrides data to Flask using http get requests - setAPIConfig API
+ create_api_overrides_response = requests.get("http://{}/Hdmicec.setAPIConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.api_data)))
+ print("Inside Utils.py : " + create_api_overrides_response.text + " : " + str(Config.api_data))
+ print("configured hal api data using - http://{}/Hdmicec.setAPIConfig/{}".format(
+ Config.flask_server_ip, json.dumps(Config.api_data)))
+ print("")
+
+ # Compare the obtained response with actual response
+ if "Success" in str(create_device_response.text) and "Success" in str(create_api_overrides_response.text):
+ print(
+ "Inside Utils.py : Successfully pushed the initial data (setDeviceConfig & setAPIConfig) to Flask")
+ else:
+ print("Inside Utils.py : Failed to push the initial data (setDeviceConfig & setAPIConfig) to Flask")
+
+ except:
+ print("Inside Utils.py : Exception in initialize_flask function")
+
+def restart_services():
+ '''This function is used to kill the WPEFramework & Websocket services and to restart those'''
+ try:
+ # Kill the port WPEFramework with -QUIT to generate .gcda filek
+ os.system("killall -QUIT WPEFramework")
+
+ # Kill the port 55555 which runs the WPEFramework
+ os.system("fuser -k 55555/tcp")
+
+ # Kill the port 9000 which runs the Websocket server
+ os.system("fuser -k 9000/tcp")
+
+ # Start the websocket server using python subprocess module
+ subprocess.Popen(["python3", "websocket_server.py"], cwd=Config.directory_websocket)
+ time.sleep(5)
+ subprocess.run(["chmod", "+x", "restart.sh"], check=True)
+ subprocess.Popen(["./restart.sh"], cwd=Config.WPEFramework_restart)
+ time.sleep(5)
+ # file_path = path.relpath(Config.WPEFramework_logs_path)
+
+ # Open a file for writing the output and error of WPEFramework process
+ # with open(file_path, "w") as logfile:
+
+ # Run the command to start the WPEFramework and redirect the output and error to the file
+ # subprocess.Popen(["WPEFramework", "-f", "-c", "config.json"],
+ # cwd=Config.directory_thunder, stdout=logfile, stderr=logfile)
+ # subprocess.Popen(["./restart.sh"], cwd=Config.WPEFramework_restart, stdout=logfile, stderr=logfile)
+ except:
+ print("Inside Utils.py : Exception in restart_services function")
+
+def netstat_output():
+
+ #Run the netstat -ntlp command
+
+ output = subprocess.run(['netstat','-ntlp'],capture_output=True,text=True)
+
+ #Return the output as a string
+
+ return output.stdout
diff --git a/Tests/L2HALMockTests/Test_Framework/lcovrc_halmock b/Tests/L2HALMockTests/Test_Framework/lcovrc_halmock
new file mode 100644
index 00000000..879fe2ce
--- /dev/null
+++ b/Tests/L2HALMockTests/Test_Framework/lcovrc_halmock
@@ -0,0 +1,181 @@
+#
+# /etc/lcovrc - system-wide defaults for LCOV
+#
+# To change settings for a single user, place a customized copy of this file
+# at location ~/.lcovrc
+#
+
+# Specify an external style sheet file (same as --css-file option of genhtml)
+#genhtml_css_file = gcov.css
+
+# Specify coverage rate limits (in %) for classifying file entries
+# HI: hi_limit <= rate <= 100 graph color: green
+# MED: med_limit <= rate < hi_limit graph color: orange
+# LO: 0 <= rate < med_limit graph color: red
+genhtml_hi_limit = 75
+genhtml_med_limit = 50
+
+# Width of line coverage field in source code view
+genhtml_line_field_width = 12
+
+# Width of branch coverage field in source code view
+genhtml_branch_field_width = 16
+
+# Width of overview image (used by --frames option of genhtml)
+genhtml_overview_width = 80
+
+# Resolution of overview navigation: this number specifies the maximum
+# difference in lines between the position a user selected from the overview
+# and the position the source code window is scrolled to (used by --frames
+# option of genhtml)
+genhtml_nav_resolution = 4
+
+# Clicking a line in the overview image should show the source code view at
+# a position a bit further up so that the requested line is not the first
+# line in the window. This number specifies that offset in lines (used by
+# --frames option of genhtml)
+genhtml_nav_offset = 10
+
+# Do not remove unused test descriptions if non-zero (same as
+# --keep-descriptions option of genhtml)
+genhtml_keep_descriptions = 0
+
+# Do not remove prefix from directory names if non-zero (same as --no-prefix
+# option of genhtml)
+genhtml_no_prefix = 0
+
+# Do not create source code view if non-zero (same as --no-source option of
+# genhtml)
+genhtml_no_source = 0
+
+# Replace tabs with number of spaces in source view (same as --num-spaces
+# option of genhtml)
+genhtml_num_spaces = 8
+
+# Highlight lines with converted-only data if non-zero (same as --highlight
+# option of genhtml)
+genhtml_highlight = 0
+
+# Include color legend in HTML output if non-zero (same as --legend option of
+# genhtml)
+genhtml_legend = 0
+
+# Use FILE as HTML prolog for generated pages (same as --html-prolog option of
+# genhtml)
+#genhtml_html_prolog = FILE
+
+# Use FILE as HTML epilog for generated pages (same as --html-epilog option of
+# genhtml)
+#genhtml_html_epilog = FILE
+
+# Use custom filename extension for pages (same as --html-extension option of
+# genhtml)
+#genhtml_html_extension = html
+
+# Compress all generated html files with gzip.
+#genhtml_html_gzip = 1
+
+# Include sorted overview pages (can be disabled by the --no-sort option of
+# genhtml)
+genhtml_sort = 1
+
+# Include function coverage data display (can be disabled by the
+# --no-func-coverage option of genhtml)
+#genhtml_function_coverage = 1
+
+# Include branch coverage data display (can be disabled by the
+# --no-branch-coverage option of genhtml)
+#genhtml_branch_coverage = 1
+
+# Specify the character set of all generated HTML pages
+genhtml_charset=UTF-8
+
+# Allow HTML markup in test case description text if non-zero
+genhtml_desc_html=0
+
+# Specify the precision for coverage rates
+#genhtml_precision=1
+
+# Show missed counts instead of hit counts
+#genhtml_missed=1
+
+# Demangle C++ symbols
+#genhtml_demangle_cpp=1
+
+# Name of the tool used for demangling C++ function names
+#genhtml_demangle_cpp_tool = c++filt
+
+# Specify extra parameters to be passed to the demangling tool
+#genhtml_demangle_cpp_params = ""
+
+# Location of the gcov tool (same as --gcov-info option of geninfo)
+#geninfo_gcov_tool = gcov
+
+# Adjust test names to include operating system information if non-zero
+#geninfo_adjust_testname = 0
+
+# Calculate checksum for each source code line if non-zero (same as --checksum
+# option of geninfo if non-zero, same as --no-checksum if zero)
+#geninfo_checksum = 1
+
+# Specify whether to capture coverage data for external source files (can
+# be overridden by the --external and --no-external options of geninfo/lcov)
+#geninfo_external = 1
+
+# Enable libtool compatibility mode if non-zero (same as --compat-libtool option
+# of geninfo if non-zero, same as --no-compat-libtool if zero)
+#geninfo_compat_libtool = 0
+
+# Use gcov's --all-blocks option if non-zero
+#geninfo_gcov_all_blocks = 1
+
+# Specify compatiblity modes (same as --compat option of geninfo).
+#geninfo_compat = libtool=on, hammer=auto, split_crc=auto
+
+# Adjust path to source files by removing or changing path components that
+# match the specified pattern (Perl regular expression format)
+#geninfo_adjust_src_path = /tmp/build => /usr/src
+
+# Specify if geninfo should try to automatically determine the base-directory
+# when collecting coverage data.
+geninfo_auto_base = 1
+
+# Use gcov intermediate format? Valid values are 0, 1, auto
+geninfo_intermediate = auto
+
+# Specify if exception branches should be excluded from branch coverage.
+geninfo_no_exception_branch = 0
+
+# Directory containing gcov kernel files
+# lcov_gcov_dir = /proc/gcov
+
+# Location of the insmod tool
+lcov_insmod_tool = /sbin/insmod
+
+# Location of the modprobe tool
+lcov_modprobe_tool = /sbin/modprobe
+
+# Location of the rmmod tool
+lcov_rmmod_tool = /sbin/rmmod
+
+# Location for temporary directories
+lcov_tmp_dir = /tmp
+
+# Show full paths during list operation if non-zero (same as --list-full-path
+# option of lcov)
+lcov_list_full_path = 0
+
+# Specify the maximum width for list output. This value is ignored when
+# lcov_list_full_path is non-zero.
+lcov_list_width = 80
+
+# Specify the maximum percentage of file names which may be truncated when
+# choosing a directory prefix in list output. This value is ignored when
+# lcov_list_full_path is non-zero.
+lcov_list_truncate_max = 20
+
+# Specify if function coverage data should be collected and processed.
+lcov_function_coverage = 1
+
+# Specify if branch coverage data should be collected and processed.
+lcov_branch_coverage = 0
diff --git a/Tests/L2HALMockTests/Test_Framework/restart.sh b/Tests/L2HALMockTests/Test_Framework/restart.sh
new file mode 100644
index 00000000..42b1ef67
--- /dev/null
+++ b/Tests/L2HALMockTests/Test_Framework/restart.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+SCRIPT=$(readlink -f "$0")
+SCRIPTS_DIR=`dirname "$SCRIPT"`
+WORKSPACE=$SCRIPTS_DIR/../../../..
+
+echo -e "${GREEN}========================================Run rdkservices===============================================${NC}"
+cd $WORKSPACE
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH/usr/local/lib/:$WORKSPACE/deps/rdk/hdmicec/install/lib:$WORKSPACE/deps/rdk/hdmicec/ccec/drivers/test:$WORKSPACE/deps/rdk/iarmbus/install/:$WORKSPACE/install/usr/lib:$WORKSPACE/deps/rdk/devicesettings/install/lib
+$WORKSPACE/install/usr/bin/WPEFramework -f -c $WORKSPACE/install/etc/WPEFramework/config.json &
\ No newline at end of file
|