CI: better reporting
-- URL of jenkins build included in top of HTML report -- when one of the needed processes not present, reported in HTML Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
This commit is contained in:
@@ -320,7 +320,7 @@ pipeline {
|
|||||||
}
|
}
|
||||||
if(fileExists("ci-scripts/test_results.html")) {
|
if(fileExists("ci-scripts/test_results.html")) {
|
||||||
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
|
sh "mv ci-scripts/test_results.html test_results-${JOB_NAME}.html"
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#${BUILD_ID}#' test_results-${JOB_NAME}.html"
|
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's#TEMPLATE_BUILD_ID#<a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' test_results-${JOB_NAME}.html"
|
||||||
archiveArtifacts "test_results-${JOB_NAME}.html"
|
archiveArtifacts "test_results-${JOB_NAME}.html"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+83
-28
@@ -277,7 +277,11 @@ class SSHConnection():
|
|||||||
Usage()
|
Usage()
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
initialize_eNB_flag = True
|
initialize_eNB_flag = True
|
||||||
self.CheckProcessExist(initialize_eNB_flag)
|
pStatus = self.CheckProcessExist(initialize_eNB_flag)
|
||||||
|
if (pStatus < 0):
|
||||||
|
self.CreateHtmlTestRow(self.Initialize_eNB_args, 'KO', pStatus)
|
||||||
|
self.CreateHtmlFooter()
|
||||||
|
sys.exit(1)
|
||||||
self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
||||||
self.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
self.command('cd ' + self.eNBSourceCodePath, '\$', 5)
|
||||||
# Initialize_eNB_args usually start with -O and followed by the location in repository
|
# Initialize_eNB_args usually start with -O and followed by the location in repository
|
||||||
@@ -422,7 +426,11 @@ class SSHConnection():
|
|||||||
Usage()
|
Usage()
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
initialize_eNB_flag = False
|
initialize_eNB_flag = False
|
||||||
self.CheckProcessExist(initialize_eNB_flag)
|
pStatus = self.CheckProcessExist(initialize_eNB_flag)
|
||||||
|
if (pStatus < 0):
|
||||||
|
self.CreateHtmlTestRow('N/A', 'KO', pStatus)
|
||||||
|
self.CreateHtmlFooter()
|
||||||
|
sys.exit(1)
|
||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
status_queue = SimpleQueue()
|
status_queue = SimpleQueue()
|
||||||
lock = Lock()
|
lock = Lock()
|
||||||
@@ -435,7 +443,7 @@ class SSHConnection():
|
|||||||
job.join()
|
job.join()
|
||||||
|
|
||||||
if (status_queue.empty()):
|
if (status_queue.empty()):
|
||||||
self.CreateHtmlTestRow('N/A', 'KO', len(self.UEDevices))
|
self.CreateHtmlTestRow('N/A', 'KO', 0)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
attach_status = True
|
attach_status = True
|
||||||
@@ -472,7 +480,11 @@ class SSHConnection():
|
|||||||
Usage()
|
Usage()
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
initialize_eNB_flag = False
|
initialize_eNB_flag = False
|
||||||
self.CheckProcessExist(initialize_eNB_flag)
|
pStatus = self.CheckProcessExist(initialize_eNB_flag)
|
||||||
|
if (pStatus < 0):
|
||||||
|
self.CreateHtmlTestRow('N/A', 'KO', pStatus)
|
||||||
|
self.CreateHtmlFooter()
|
||||||
|
sys.exit(1)
|
||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
for device_id in self.UEDevices:
|
for device_id in self.UEDevices:
|
||||||
p = Process(target = SSH.DetachUE_common, args = (device_id,))
|
p = Process(target = SSH.DetachUE_common, args = (device_id,))
|
||||||
@@ -527,7 +539,11 @@ class SSHConnection():
|
|||||||
Usage()
|
Usage()
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
initialize_eNB_flag = False
|
initialize_eNB_flag = False
|
||||||
self.CheckProcessExist(initialize_eNB_flag)
|
pStatus = self.CheckProcessExist(initialize_eNB_flag)
|
||||||
|
if (pStatus < 0):
|
||||||
|
self.CreateHtmlTestRow('N/A', 'KO', pStatus)
|
||||||
|
self.CreateHtmlFooter()
|
||||||
|
sys.exit(1)
|
||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
for device_id in self.UEDevices:
|
for device_id in self.UEDevices:
|
||||||
p = Process(target = SSH.RebootUE_common, args = (device_id,))
|
p = Process(target = SSH.RebootUE_common, args = (device_id,))
|
||||||
@@ -649,7 +665,11 @@ class SSHConnection():
|
|||||||
Usage()
|
Usage()
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
initialize_eNB_flag = False
|
initialize_eNB_flag = False
|
||||||
self.CheckProcessExist(initialize_eNB_flag)
|
pStatus = self.CheckProcessExist(initialize_eNB_flag)
|
||||||
|
if (pStatus < 0):
|
||||||
|
self.CreateHtmlTestRow(self.ping_args, 'KO', pStatus)
|
||||||
|
self.CreateHtmlFooter()
|
||||||
|
sys.exit(1)
|
||||||
self.GetAllUEIPAddresses()
|
self.GetAllUEIPAddresses()
|
||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
i = 0
|
i = 0
|
||||||
@@ -666,7 +686,7 @@ class SSHConnection():
|
|||||||
job.join()
|
job.join()
|
||||||
|
|
||||||
if (status_queue.empty()):
|
if (status_queue.empty()):
|
||||||
self.CreateHtmlTestRow(self.ping_args, 'KO', len(self.UEDevices))
|
self.CreateHtmlTestRow(self.ping_args, 'KO', 0)
|
||||||
self.CreateHtmlFooter()
|
self.CreateHtmlFooter()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
@@ -1073,7 +1093,11 @@ class SSHConnection():
|
|||||||
Usage()
|
Usage()
|
||||||
sys.exit('Insufficient Parameter')
|
sys.exit('Insufficient Parameter')
|
||||||
initialize_eNB_flag = False
|
initialize_eNB_flag = False
|
||||||
self.CheckProcessExist(initialize_eNB_flag)
|
pStatus = self.CheckProcessExist(initialize_eNB_flag)
|
||||||
|
if (pStatus < 0):
|
||||||
|
self.CreateHtmlTestRow(self.iperf_args, 'KO', pStatus)
|
||||||
|
self.CreateHtmlFooter()
|
||||||
|
sys.exit(1)
|
||||||
self.GetAllUEIPAddresses()
|
self.GetAllUEIPAddresses()
|
||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
i = 0
|
i = 0
|
||||||
@@ -1091,7 +1115,7 @@ class SSHConnection():
|
|||||||
job.join()
|
job.join()
|
||||||
|
|
||||||
if (status_queue.empty()):
|
if (status_queue.empty()):
|
||||||
self.CreateHtmlTestRow(self.iperf_args, 'KO', len(self.UEDevices))
|
self.CreateHtmlTestRow(self.iperf_args, 'KO', 0)
|
||||||
self.CreateHtmlFooter()
|
self.CreateHtmlFooter()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
@@ -1120,39 +1144,53 @@ class SSHConnection():
|
|||||||
|
|
||||||
def CheckProcessExist(self, initialize_eNB_flag):
|
def CheckProcessExist(self, initialize_eNB_flag):
|
||||||
multi_jobs = []
|
multi_jobs = []
|
||||||
p = Process(target = SSH.CheckHSSProcess, args = ())
|
status_queue = SimpleQueue()
|
||||||
|
p = Process(target = SSH.CheckHSSProcess, args = (status_queue,))
|
||||||
p.daemon = True
|
p.daemon = True
|
||||||
p.start()
|
p.start()
|
||||||
multi_jobs.append(p)
|
multi_jobs.append(p)
|
||||||
p = Process(target = SSH.CheckMMEProcess, args = ())
|
p = Process(target = SSH.CheckMMEProcess, args = (status_queue,))
|
||||||
p.daemon = True
|
p.daemon = True
|
||||||
p.start()
|
p.start()
|
||||||
multi_jobs.append(p)
|
multi_jobs.append(p)
|
||||||
p = Process(target = SSH.CheckSPGWProcess, args = ())
|
p = Process(target = SSH.CheckSPGWProcess, args = (status_queue,))
|
||||||
p.daemon = True
|
p.daemon = True
|
||||||
p.start()
|
p.start()
|
||||||
multi_jobs.append(p)
|
multi_jobs.append(p)
|
||||||
if initialize_eNB_flag == False:
|
if initialize_eNB_flag == False:
|
||||||
p = Process(target = SSH.CheckeNBProcess, args = ())
|
p = Process(target = SSH.CheckeNBProcess, args = (status_queue,))
|
||||||
p.daemon = True
|
p.daemon = True
|
||||||
p.start()
|
p.start()
|
||||||
multi_jobs.append(p)
|
multi_jobs.append(p)
|
||||||
for job in multi_jobs:
|
for job in multi_jobs:
|
||||||
job.join()
|
job.join()
|
||||||
|
|
||||||
def CheckeNBProcess(self):
|
if (status_queue.empty()):
|
||||||
|
return -15
|
||||||
|
else:
|
||||||
|
result = 0
|
||||||
|
while (not status_queue.empty()):
|
||||||
|
status = status_queue.get()
|
||||||
|
if (status < 0):
|
||||||
|
result = status
|
||||||
|
return result
|
||||||
|
|
||||||
|
def CheckeNBProcess(self, status_queue):
|
||||||
try:
|
try:
|
||||||
self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
|
||||||
self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never lte-softmodem', '\$', 5)
|
self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never lte-softmodem', '\$', 5)
|
||||||
result = re.search('lte-softmodem', str(self.ssh.before))
|
result = re.search('lte-softmodem', str(self.ssh.before))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m eNB Process Not Found! \u001B[0m')
|
logging.debug('\u001B[1;37;41m eNB Process Not Found! \u001B[0m')
|
||||||
sys.exit(1)
|
#sys.exit(1)
|
||||||
|
status_queue.put(-1)
|
||||||
|
else:
|
||||||
|
status_queue.put(1)
|
||||||
self.close()
|
self.close()
|
||||||
except:
|
except:
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
os.kill(os.getppid(),signal.SIGUSR1)
|
||||||
|
|
||||||
def CheckHSSProcess(self):
|
def CheckHSSProcess(self, status_queue):
|
||||||
try:
|
try:
|
||||||
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
||||||
self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never hss', '\$', 5)
|
self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never hss', '\$', 5)
|
||||||
@@ -1162,12 +1200,15 @@ class SSHConnection():
|
|||||||
result = re.search('hss_sim s6as diam_hss', str(self.ssh.before))
|
result = re.search('hss_sim s6as diam_hss', str(self.ssh.before))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m HSS Process Not Found! \u001B[0m')
|
logging.debug('\u001B[1;37;41m HSS Process Not Found! \u001B[0m')
|
||||||
sys.exit(1)
|
status_queue.put(-2)
|
||||||
|
#sys.exit(1)
|
||||||
|
else:
|
||||||
|
status_queue.put(2)
|
||||||
self.close()
|
self.close()
|
||||||
except:
|
except:
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
os.kill(os.getppid(),signal.SIGUSR1)
|
||||||
|
|
||||||
def CheckMMEProcess(self):
|
def CheckMMEProcess(self, status_queue):
|
||||||
try:
|
try:
|
||||||
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
||||||
self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never mme', '\$', 5)
|
self.command('stdbuf -o0 ps -aux | grep -v grep | grep --color=never mme', '\$', 5)
|
||||||
@@ -1177,12 +1218,15 @@ class SSHConnection():
|
|||||||
result = re.search('mme', str(self.ssh.before))
|
result = re.search('mme', str(self.ssh.before))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m MME Process Not Found! \u001B[0m')
|
logging.debug('\u001B[1;37;41m MME Process Not Found! \u001B[0m')
|
||||||
sys.exit(1)
|
status_queue.put(-3)
|
||||||
|
#sys.exit(1)
|
||||||
|
else:
|
||||||
|
status_queue.put(3)
|
||||||
self.close()
|
self.close()
|
||||||
except:
|
except:
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
os.kill(os.getppid(),signal.SIGUSR1)
|
||||||
|
|
||||||
def CheckSPGWProcess(self):
|
def CheckSPGWProcess(self, status_queue):
|
||||||
try:
|
try:
|
||||||
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
|
||||||
if re.match('OAI', self.EPCType, re.IGNORECASE):
|
if re.match('OAI', self.EPCType, re.IGNORECASE):
|
||||||
@@ -1193,7 +1237,10 @@ class SSHConnection():
|
|||||||
result = re.search('xGw', str(self.ssh.before))
|
result = re.search('xGw', str(self.ssh.before))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m SPGW Process Not Found! \u001B[0m')
|
logging.debug('\u001B[1;37;41m SPGW Process Not Found! \u001B[0m')
|
||||||
sys.exit(1)
|
status_queue.put(-4)
|
||||||
|
#sys.exit(1)
|
||||||
|
else:
|
||||||
|
status_queue.put(4)
|
||||||
self.close()
|
self.close()
|
||||||
except:
|
except:
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
os.kill(os.getppid(),signal.SIGUSR1)
|
||||||
@@ -1396,7 +1443,7 @@ class SSHConnection():
|
|||||||
self.htmlFile.write(' <table border = "1">\n')
|
self.htmlFile.write(' <table border = "1">\n')
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcyan" >GIT Repository</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcyan" >GIT Repository</td>\n')
|
||||||
self.htmlFile.write(' <td>' + SSH.eNBRepository + '</td>\n')
|
self.htmlFile.write(' <td><a href="' + SSH.eNBRepository + '">' + SSH.eNBRepository + '</a></td>\n')
|
||||||
self.htmlFile.write(' </tr>\n')
|
self.htmlFile.write(' </tr>\n')
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcyan" >Job Trigger</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcyan" >Job Trigger</td>\n')
|
||||||
@@ -1454,7 +1501,7 @@ class SSHConnection():
|
|||||||
self.htmlFile.close()
|
self.htmlFile.close()
|
||||||
self.htmlFooterCreated = False
|
self.htmlFooterCreated = False
|
||||||
|
|
||||||
def CreateHtmlTestRow(self, options, status, ue_status):
|
def CreateHtmlTestRow(self, options, status, processesStatus):
|
||||||
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
|
if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
|
||||||
self.htmlFile.write(' <tr>\n')
|
self.htmlFile.write(' <tr>\n')
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + SSH.testCase_id + '</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightcyan" >' + SSH.testCase_id + '</td>\n')
|
||||||
@@ -1463,15 +1510,23 @@ class SSHConnection():
|
|||||||
if (str(status) == 'OK'):
|
if (str(status) == 'OK'):
|
||||||
self.htmlFile.write(' <td bgcolor = "lightgreen" >' + str(status) + '</td>\n')
|
self.htmlFile.write(' <td bgcolor = "lightgreen" >' + str(status) + '</td>\n')
|
||||||
elif (str(status) == 'KO'):
|
elif (str(status) == 'KO'):
|
||||||
self.htmlFile.write(' <td bgcolor = "lightcoral" >' + str(status) + '</td>\n')
|
if (processesStatus == 0):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >' + str(status) + '</td>\n')
|
||||||
|
elif (processesStatus == -1):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - eNB process not found</td>\n')
|
||||||
|
elif (processesStatus == -2):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - HSS process not found</td>\n')
|
||||||
|
elif (processesStatus == -3):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - MME process not found</td>\n')
|
||||||
|
elif (processesStatus == -4):
|
||||||
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >KO - SPGW process not found</td>\n')
|
||||||
|
else:
|
||||||
|
self.htmlFile.write(' <td bgcolor = "lightcoral" >' + str(status) + '</td>\n')
|
||||||
else:
|
else:
|
||||||
self.htmlFile.write(' <td bgcolor = "orange" >' + str(status) + '</td>\n')
|
self.htmlFile.write(' <td bgcolor = "orange" >' + str(status) + '</td>\n')
|
||||||
i = 0
|
i = 0
|
||||||
while (i < self.htmlUEConnected):
|
while (i < self.htmlUEConnected):
|
||||||
if (i < ue_status):
|
self.htmlFile.write(' <td>-</td>\n')
|
||||||
self.htmlFile.write(' <td>-</td>\n')
|
|
||||||
else:
|
|
||||||
self.htmlFile.write(' <td>-</td>\n')
|
|
||||||
i += 1
|
i += 1
|
||||||
self.htmlFile.write(' </tr>\n')
|
self.htmlFile.write(' </tr>\n')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user