diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran
index 83002f82d4..93192dd8be 100644
--- a/ci-scripts/Jenkinsfile-tmp-ran
+++ b/ci-scripts/Jenkinsfile-tmp-ran
@@ -186,6 +186,11 @@ pipeline {
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.ADB_Credentials}", usernameVariable: 'ADB_Username', passwordVariable: 'ADB_Password']
]) {
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBRepository=${eNB_Repository} --eNBBranch=${eNB_Branch} --eNBCommitID=${eNB_CommitID} --eNB_AllowMerge=${eNB_AllowMergeRequestProcess} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --ADBIPAddress=${params.ADB_IPAddress} --ADBUserName=${ADB_Username} --ADBPassword=${ADB_Password} --XMLTestFile=${testXMLFile}"
+ if(fileExists("test_results.html")) {
+ sh "mv 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"
+ archiveArtifacts "test_results-${JOB_NAME}.html"
+ }
}
} catch (Exception e) {
currentBuild.result = 'FAILURE'
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index b12786fb68..85e27acb69 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -83,6 +83,10 @@ class SSHConnection():
self.iperf_packetloss_threshold = ''
self.UEDevices = []
self.UEIPAddresses = []
+ self.htmlFile = ''
+ self.htmlHeaderCreated = False
+ self.htmlFooterCreated = False
+ self.htmlUEConnected = 0
def open(self, ipaddress, username, password):
self.ssh = pexpect.spawn('ssh', [username + '@' + ipaddress], timeout = 5)
@@ -178,6 +182,7 @@ class SSHConnection():
self.command('echo ' + self.eNBPassword + ' | sudo -S mv log/* ' + 'build_log_' + SSH.testCase_id, '\$', 5)
self.command('echo ' + self.eNBPassword + ' | sudo -S mv compile_oai_enb.log ' + 'build_log_' + SSH.testCase_id, '\$', 5)
self.close()
+ self.CreateHtmlTestRow(self.Build_eNB_args, 'OK', 0)
def InitializeHSS(self):
if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '':
@@ -198,6 +203,7 @@ class SSHConnection():
self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f hss.log daemon.log', '\$', 5)
self.command('echo ' + self.EPCPassword + ' | sudo -S echo "Starting sudo session" && sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real ', '\$', 5)
self.close()
+ self.CreateHtmlTestRow(self.EPCType, 'OK', 0)
def InitializeMME(self):
if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '':
@@ -219,6 +225,7 @@ class SSHConnection():
self.command('cd /opt/ltebox/tools', '\$', 5)
self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_mme', '\$', 5)
self.close()
+ self.CreateHtmlTestRow(self.EPCType, 'OK', 0)
def InitializeSPGW(self):
if self.EPCIPAddress == '' or self.EPCUserName == '' or self.EPCPassword == '' or self.EPCSourceCodePath == '' or self.EPCType == '':
@@ -234,6 +241,7 @@ class SSHConnection():
self.command('cd /opt/ltebox/tools', '\$', 5)
self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_xGw', '\$', 5)
self.close()
+ self.CreateHtmlTestRow(self.EPCType, 'OK', 0)
def InitializeeNB(self):
if self.eNBIPAddress == '' or self.eNBUserName == '' or self.eNBPassword == '' or self.eNBSourceCodePath == '':
@@ -266,6 +274,7 @@ class SSHConnection():
if (loopCounter == 0):
doLoop = False
logging.debug('\u001B[1;37;43m eNB logging system did not show got sync! See with attach later \u001B[0m')
+ self.CreateHtmlTestRow(config_file, 'eNB not showing got sync!', 0)
# Not getting got sync is bypassed for the moment
#sys.exit(1)
self.command('stdbuf -o0 cat enb_' + SSH.testCase_id + '.log', '\$', 10)
@@ -274,6 +283,7 @@ class SSHConnection():
time.sleep(6)
else:
doLoop = False
+ self.CreateHtmlTestRow(config_file, 'OK', 0)
logging.debug('\u001B[1m Initialize eNB Completed\u001B[0m')
self.close()
@@ -306,6 +316,7 @@ class SSHConnection():
multi_jobs.append(p)
for job in multi_jobs:
job.join()
+ self.CreateHtmlTestRow('N/A', 'OK', 0)
def AttachUE_common(self, device_id):
try:
@@ -353,6 +364,7 @@ class SSHConnection():
multi_jobs.append(p)
for job in multi_jobs:
job.join()
+ self.CreateHtmlTestRow('N/A', 'OK', len(self.UEDevices))
def DetachUE_common(self, device_id):
try:
@@ -377,6 +389,7 @@ class SSHConnection():
multi_jobs.append(p)
for job in multi_jobs:
job.join()
+ self.CreateHtmlTestRow('N/A', 'OK', 0)
def RebootUE_common(self, device_id):
try:
@@ -431,6 +444,7 @@ class SSHConnection():
multi_jobs.append(p)
for job in multi_jobs:
job.join()
+ self.CreateHtmlTestRow('N/A', 'OK', 0)
def GetAllUEDevices(self, terminate_ue_flag):
if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
@@ -524,6 +538,7 @@ class SSHConnection():
i = i + 1
for job in multi_jobs:
job.join()
+ self.CreateHtmlTestRow(self.ping_args, 'OK', 0)
def Iperf_common(self, lock, UE_IPAddress, device_id, ue_num):
try:
@@ -660,6 +675,7 @@ class SSHConnection():
i = i + 1
for job in multi_jobs:
job.join()
+ self.CreateHtmlTestRow(self.iperf_args, 'OK', 0)
def CheckProcessExist(self, initialize_eNB_flag):
multi_jobs = []
@@ -753,6 +769,7 @@ class SSHConnection():
if result is not None:
self.command('echo ' + self.eNBPassword + ' | sudo -S killall --signal SIGKILL lte-softmodem || true', '\$', 5)
self.close()
+ self.CreateHtmlTestRow('N/A', 'OK', 0)
def TerminateHSS(self):
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
@@ -774,6 +791,7 @@ class SSHConnection():
self.command('echo ' + self.EPCPassword + ' | sudo -S ./kill_hss.sh', '\$', 5)
self.command('rm ./kill_hss.sh', '\$', 5)
self.close()
+ self.CreateHtmlTestRow('N/A', 'OK', 0)
def TerminateMME(self):
self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
@@ -802,6 +820,7 @@ class SSHConnection():
self.command('cd /opt/ltebox/tools', '\$', 5)
self.command('echo ' + self.EPCPassword + ' | sudo -S ./stop_xGw', '\$', 5)
self.close()
+ self.CreateHtmlTestRow('N/A', 'OK', 0)
def TerminateUE_common(self, device_id):
try:
@@ -829,6 +848,7 @@ class SSHConnection():
multi_jobs.append(p)
for job in multi_jobs:
job.join()
+ self.CreateHtmlTestRow('N/A', 'OK', 0)
def LogCollectBuild(self):
self.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword)
@@ -905,6 +925,115 @@ class SSHConnection():
self.command('zip spgw.log.zip xGwLog.0', '\$', 60)
self.close()
#-----------------------------------------------------------
+# HTML Reporting....
+#-----------------------------------------------------------
+ def CreateHtmlHeader(self):
+ if (not self.htmlHeaderCreated):
+ self.htmlFile = open('test_results.html', 'w')
+ self.htmlFile.write('\n')
+ self.htmlFile.write('\n')
+ self.htmlFile.write('
\n')
+ self.htmlFile.write(' Test Results for TEMPLATE_JOB_NAME job build #TEMPLATE_BUILD_ID\n')
+ self.htmlFile.write(' \n')
+ self.htmlFile.write('\n')
+ self.htmlFile.write('\n')
+ self.htmlFile.write(' \n')
+ self.htmlFile.write('
\n')
+ self.htmlFile.write(' \n')
+ self.htmlFile.write(' \n')
+ self.htmlFile.write(' | GIT Repository | \n')
+ self.htmlFile.write(' ' + SSH.eNBRepository + ' | \n')
+ self.htmlFile.write('
\n')
+ self.htmlFile.write(' \n')
+ self.htmlFile.write(' | Job Trigger | \n')
+ if (SSH.eNB_AllowMerge):
+ self.htmlFile.write(' Merge-Request | \n')
+ else:
+ self.htmlFile.write(' Push to Branch | \n')
+ self.htmlFile.write('
\n')
+ self.htmlFile.write(' \n')
+ if (SSH.eNB_AllowMerge):
+ self.htmlFile.write(' | Source Branch | \n')
+ else:
+ self.htmlFile.write(' Branch | \n')
+ self.htmlFile.write(' ' + SSH.eNBBranch + ' | \n')
+ self.htmlFile.write('
\n')
+ self.htmlFile.write(' \n')
+ if (SSH.eNB_AllowMerge):
+ self.htmlFile.write(' | Source Commit ID | \n')
+ else:
+ self.htmlFile.write(' Commit ID | \n')
+ self.htmlFile.write(' ' + SSH.eNBCommitID + ' | \n')
+ self.htmlFile.write('
\n')
+ if (SSH.eNB_AllowMerge):
+ self.htmlFile.write(' \n')
+ self.htmlFile.write(' | Target Branch | \n')
+ self.htmlFile.write(' develop | \n')
+ self.htmlFile.write('
\n')
+ self.htmlFile.write('
\n')
+
+ terminate_ue_flag = True
+ SSH.GetAllUEDevices(terminate_ue_flag)
+ self.htmlUEConnected = len(self.UEDevices)
+ self.htmlFile.write('' + str(self.htmlUEConnected) + ' UE(s) is(are) connected to ADB bench server
\n')
+
+ self.htmlFile.write('
\n')
+ self.htmlFile.write(' Test Summary for ' + SSH.testXMLfile + '
\n')
+ self.htmlFile.write(' \n')
+ self.htmlFile.write(' \n')
+ self.htmlFile.write(' | Test Id | \n')
+ self.htmlFile.write(' Test Desc | \n')
+ self.htmlFile.write(' Test Options | \n')
+ self.htmlFile.write(' Test Status | \n')
+ i = 0
+ while (i < self.htmlUEConnected):
+ self.htmlFile.write(' UE' + str(i) + ' Status | \n')
+ i += 1
+ self.htmlFile.write('
\n')
+ self.htmlHeaderCreated = True
+
+ def CreateHtmlFooter(self):
+ if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
+ self.htmlFile.write('
\n')
+ self.htmlFile.write('\n')
+ self.htmlFile.write('\n')
+ self.htmlFile.close()
+ self.htmlFooterCreated = False
+
+ def CreateHtmlTestRow(self, options, status, ue_status):
+ if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
+ self.htmlFile.write(' \n')
+ self.htmlFile.write(' | ' + SSH.testCase_id + ' | \n')
+ self.htmlFile.write(' ' + SSH.desc + ' | \n')
+ self.htmlFile.write(' ' + str(options) + ' | \n')
+ if (str(status) == 'OK'):
+ self.htmlFile.write(' ' + str(status) + ' | \n')
+ elif (str(status) == 'KO'):
+ self.htmlFile.write(' ' + str(status) + ' | \n')
+ else:
+ self.htmlFile.write(' ' + str(status) + ' | \n')
+ i = 0
+ while (i < self.htmlUEConnected):
+ if (i < ue_status):
+ self.htmlFile.write(' - | \n')
+ else:
+ self.htmlFile.write(' - | \n')
+ i += 1
+ self.htmlFile.write('
\n')
+
+#-----------------------------------------------------------
# Usage()
#-----------------------------------------------------------
def Usage():
@@ -1123,6 +1252,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE):
Usage()
sys.exit('Insufficient Parameter')
+ SSH.CreateHtmlHeader()
+
#read test_case_list.xml file
# if no parameters for XML file, use default value
if SSH.testXMLfile == '':
@@ -1221,6 +1352,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE):
SSH.TerminateSPGW()
else:
sys.exit('Invalid action')
+
+ SSH.CreateHtmlFooter()
else:
Usage()
sys.exit('Invalid mode')