CI: catch exceptions in CI code and print in HTML

This commit is contained in:
Robert Schmidt
2024-01-29 12:51:20 +01:00
parent 31d043363a
commit 9d92f4f91c
+152 -144
View File
@@ -65,6 +65,7 @@ import logging
import datetime import datetime
import signal import signal
import subprocess import subprocess
import traceback
from multiprocessing import Process, Lock, SimpleQueue from multiprocessing import Process, Lock, SimpleQueue
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG, level=logging.DEBUG,
@@ -745,150 +746,157 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
continue continue
CiTestObj.ShowTestID() CiTestObj.ShowTestID()
GetParametersFromXML(action) GetParametersFromXML(action)
if action == 'Build_eNB': try:
RAN.BuildeNB(HTML) if action == 'Build_eNB':
elif action == 'WaitEndBuild_eNB': RAN.BuildeNB(HTML)
RAN.WaitBuildeNBisFinished(HTML) elif action == 'WaitEndBuild_eNB':
elif action == 'Custom_Command': RAN.WaitBuildeNBisFinished(HTML)
RAN.CustomCommand(HTML) elif action == 'Custom_Command':
if RAN.prematureExit: RAN.CustomCommand(HTML)
CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS) if RAN.prematureExit:
elif action == 'Initialize_eNB': CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS)
RAN.InitializeeNB(HTML, EPC) elif action == 'Initialize_eNB':
if RAN.prematureExit: RAN.InitializeeNB(HTML, EPC)
CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS) if RAN.prematureExit:
elif action == 'Terminate_eNB': CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS)
RAN.TerminateeNB(HTML, EPC) elif action == 'Terminate_eNB':
elif action == 'Initialize_UE': RAN.TerminateeNB(HTML, EPC)
CiTestObj.InitializeUE(HTML) elif action == 'Initialize_UE':
elif action == 'Terminate_UE': CiTestObj.InitializeUE(HTML)
CiTestObj.TerminateUE(HTML) elif action == 'Terminate_UE':
elif action == 'Attach_UE': CiTestObj.TerminateUE(HTML)
CiTestObj.AttachUE(HTML, RAN, EPC, CONTAINERS) elif action == 'Attach_UE':
elif action == 'Detach_UE': CiTestObj.AttachUE(HTML, RAN, EPC, CONTAINERS)
CiTestObj.DetachUE(HTML) elif action == 'Detach_UE':
elif action == 'DataDisable_UE': CiTestObj.DetachUE(HTML)
CiTestObj.DataDisableUE(HTML) elif action == 'DataDisable_UE':
elif action == 'DataEnable_UE': CiTestObj.DataDisableUE(HTML)
CiTestObj.DataEnableUE(HTML) elif action == 'DataEnable_UE':
elif action == 'CheckStatusUE': CiTestObj.DataEnableUE(HTML)
CiTestObj.CheckStatusUE(HTML) elif action == 'CheckStatusUE':
elif action == 'Build_OAI_UE': CiTestObj.CheckStatusUE(HTML)
CiTestObj.BuildOAIUE(HTML) elif action == 'Build_OAI_UE':
elif action == 'Initialize_OAI_UE': CiTestObj.BuildOAIUE(HTML)
CiTestObj.InitializeOAIUE(HTML,RAN,EPC,CONTAINERS) elif action == 'Initialize_OAI_UE':
elif action == 'Terminate_OAI_UE': CiTestObj.InitializeOAIUE(HTML,RAN,EPC,CONTAINERS)
CiTestObj.TerminateOAIUE(HTML,RAN,EPC,CONTAINERS) elif action == 'Terminate_OAI_UE':
elif action == 'Ping': CiTestObj.TerminateOAIUE(HTML,RAN,EPC,CONTAINERS)
CiTestObj.Ping(HTML,RAN,EPC,CONTAINERS) elif action == 'Ping':
elif action == 'Iperf': CiTestObj.Ping(HTML,RAN,EPC,CONTAINERS)
CiTestObj.Iperf(HTML,RAN,EPC,CONTAINERS) elif action == 'Iperf':
elif action == 'Initialize_HSS': CiTestObj.Iperf(HTML,RAN,EPC,CONTAINERS)
EPC.InitializeHSS(HTML) elif action == 'Initialize_HSS':
elif action == 'Terminate_HSS': EPC.InitializeHSS(HTML)
EPC.TerminateHSS(HTML) elif action == 'Terminate_HSS':
elif action == 'Initialize_MME': EPC.TerminateHSS(HTML)
EPC.InitializeMME(HTML) elif action == 'Initialize_MME':
elif action == 'Terminate_MME': EPC.InitializeMME(HTML)
EPC.TerminateMME(HTML) elif action == 'Terminate_MME':
elif action == 'Initialize_SPGW': EPC.TerminateMME(HTML)
EPC.InitializeSPGW(HTML) elif action == 'Initialize_SPGW':
elif action == 'Terminate_SPGW': EPC.InitializeSPGW(HTML)
EPC.TerminateSPGW(HTML) elif action == 'Terminate_SPGW':
elif action == 'Initialize_5GCN': EPC.TerminateSPGW(HTML)
EPC.Initialize5GCN(HTML) elif action == 'Initialize_5GCN':
elif action == 'Terminate_5GCN': EPC.Initialize5GCN(HTML)
EPC.Terminate5GCN(HTML) elif action == 'Terminate_5GCN':
elif action == 'Deploy_EPC': EPC.Terminate5GCN(HTML)
EPC.DeployEpc(HTML) elif action == 'Deploy_EPC':
elif action == 'Undeploy_EPC': EPC.DeployEpc(HTML)
EPC.UndeployEpc(HTML) elif action == 'Undeploy_EPC':
elif action == 'IdleSleep': EPC.UndeployEpc(HTML)
CiTestObj.IdleSleep(HTML) elif action == 'IdleSleep':
elif action == 'Perform_X2_Handover': CiTestObj.IdleSleep(HTML)
CiTestObj.Perform_X2_Handover(HTML,RAN,EPC) elif action == 'Perform_X2_Handover':
elif action == 'Build_PhySim': CiTestObj.Perform_X2_Handover(HTML,RAN,EPC)
HTML=ldpc.Build_PhySim(HTML,CONST) elif action == 'Build_PhySim':
if ldpc.exitStatus==1: HTML=ldpc.Build_PhySim(HTML,CONST)
RAN.prematureExit = True if ldpc.exitStatus==1:
elif action == 'Run_LDPCTest': RAN.prematureExit = True
HTML=ldpc.Run_LDPCTest(HTML,CONST,id) elif action == 'Run_LDPCTest':
if ldpc.exitStatus==1: HTML=ldpc.Run_LDPCTest(HTML,CONST,id)
RAN.prematureExit = True if ldpc.exitStatus==1:
elif action == 'Run_LDPCt1Test': RAN.prematureExit = True
HTML=ldpc.Run_LDPCt1Test(HTML,CONST,id) elif action == 'Run_LDPCt1Test':
if ldpc.exitStatus==1: HTML=ldpc.Run_LDPCt1Test(HTML,CONST,id)
RAN.prematureExit = True if ldpc.exitStatus==1:
elif action == 'Run_NRulsimTest': RAN.prematureExit = True
HTML=ldpc.Run_NRulsimTest(HTML,CONST,id) elif action == 'Run_NRulsimTest':
if ldpc.exitStatus==1: HTML=ldpc.Run_NRulsimTest(HTML,CONST,id)
RAN.prematureExit = True if ldpc.exitStatus==1:
elif action == 'Pull_Cluster_Image': RAN.prematureExit = True
if not CLUSTER.PullClusterImage(HTML,RAN): elif action == 'Pull_Cluster_Image':
RAN.prematureExit = True if not CLUSTER.PullClusterImage(HTML,RAN):
elif action == 'Build_Cluster_Image': RAN.prematureExit = True
if not CLUSTER.BuildClusterImage(HTML): elif action == 'Build_Cluster_Image':
RAN.prematureExit = True if not CLUSTER.BuildClusterImage(HTML):
elif action == 'Build_Image': RAN.prematureExit = True
success = CONTAINERS.BuildImage(HTML) elif action == 'Build_Image':
if not success: success = CONTAINERS.BuildImage(HTML)
RAN.prematureExit = True if not success:
elif action == 'Build_Run_Tests': RAN.prematureExit = True
success = CONTAINERS.BuildRunTests(HTML) elif action == 'Build_Run_Tests':
if not success: success = CONTAINERS.BuildRunTests(HTML)
RAN.prematureExit = True if not success:
elif action == 'Build_Proxy': RAN.prematureExit = True
success = CONTAINERS.BuildProxy(HTML) elif action == 'Build_Proxy':
if not success: success = CONTAINERS.BuildProxy(HTML)
RAN.prematureExit = True if not success:
elif action == 'Push_Local_Registry': RAN.prematureExit = True
success = CONTAINERS.Push_Image_to_Local_Registry(HTML) elif action == 'Push_Local_Registry':
if not success: success = CONTAINERS.Push_Image_to_Local_Registry(HTML)
RAN.prematureExit = True if not success:
elif action == 'Pull_Local_Registry': RAN.prematureExit = True
success = CONTAINERS.Pull_Image_from_Local_Registry(HTML) elif action == 'Pull_Local_Registry':
if not success: success = CONTAINERS.Pull_Image_from_Local_Registry(HTML)
RAN.prematureExit = True if not success:
elif action == 'Clean_Test_Server_Images': RAN.prematureExit = True
success = CONTAINERS.Clean_Test_Server_Images(HTML) elif action == 'Clean_Test_Server_Images':
if not success: success = CONTAINERS.Clean_Test_Server_Images(HTML)
RAN.prematureExit = True if not success:
elif action == 'Deploy_Object': RAN.prematureExit = True
CONTAINERS.DeployObject(HTML, EPC) elif action == 'Deploy_Object':
if CONTAINERS.exitStatus==1: CONTAINERS.DeployObject(HTML, EPC)
CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS) if CONTAINERS.exitStatus==1:
RAN.prematureExit = True CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS)
elif action == 'Undeploy_Object': RAN.prematureExit = True
CONTAINERS.UndeployObject(HTML, RAN) elif action == 'Undeploy_Object':
if CONTAINERS.exitStatus == 1: CONTAINERS.UndeployObject(HTML, RAN)
CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS) if CONTAINERS.exitStatus == 1:
RAN.prematureExit = True CiTestObj.AutoTerminateeNB(HTML,RAN,EPC,CONTAINERS)
elif action == 'Cppcheck_Analysis': RAN.prematureExit = True
SCA.CppCheckAnalysis(HTML) elif action == 'Cppcheck_Analysis':
elif action == 'LicenceAndFormattingCheck': SCA.CppCheckAnalysis(HTML)
ret = SCA.LicenceAndFormattingCheck(HTML) elif action == 'LicenceAndFormattingCheck':
if ret != 0: ret = SCA.LicenceAndFormattingCheck(HTML)
RAN.prematureExit = True if ret != 0:
elif action == 'Deploy_Run_PhySim': RAN.prematureExit = True
PHYSIM.Deploy_PhySim(HTML, RAN) elif action == 'Deploy_Run_PhySim':
elif action == 'DeployGenObject': PHYSIM.Deploy_PhySim(HTML, RAN)
CONTAINERS.DeployGenObject(HTML, RAN, CiTestObj) elif action == 'DeployGenObject':
if CONTAINERS.exitStatus==1: CONTAINERS.DeployGenObject(HTML, RAN, CiTestObj)
RAN.prematureExit = True if CONTAINERS.exitStatus==1:
elif action == 'UndeployGenObject': RAN.prematureExit = True
CONTAINERS.UndeployGenObject(HTML, RAN, CiTestObj) elif action == 'UndeployGenObject':
if CONTAINERS.exitStatus==1: CONTAINERS.UndeployGenObject(HTML, RAN, CiTestObj)
RAN.prematureExit = True if CONTAINERS.exitStatus==1:
elif action == 'IperfFromContainer': RAN.prematureExit = True
CONTAINERS.IperfFromContainer(HTML, RAN, CiTestObj) elif action == 'IperfFromContainer':
if CONTAINERS.exitStatus==1: CONTAINERS.IperfFromContainer(HTML, RAN, CiTestObj)
RAN.prematureExit = True if CONTAINERS.exitStatus==1:
elif action == 'StatsFromGenObject': RAN.prematureExit = True
CONTAINERS.StatsFromGenObject(HTML) elif action == 'StatsFromGenObject':
elif action == 'Push_Images_To_Test_Servers': CONTAINERS.StatsFromGenObject(HTML)
logging.debug('To be implemented') elif action == 'Push_Images_To_Test_Servers':
else: logging.debug('To be implemented')
sys.exit('Invalid class (action) from xml') else:
sys.exit('Invalid class (action) from xml')
except Exception as e:
s = traceback.format_exc()
logging.error(f'while running CI, an exception occurred:\n{s}')
HTML.CreateHtmlTestRowQueue("N/A", 'KO', [f"CI test code encountered an exception:\n{s}"])
RAN.prematureExit = True
if RAN.prematureExit: if RAN.prematureExit:
if CiTestObj.testCase_id == CiTestObj.testMinStableId: if CiTestObj.testCase_id == CiTestObj.testMinStableId:
logging.warning('Scenario has reached minimal stability point') logging.warning('Scenario has reached minimal stability point')