From 9766eaa1bfda0a66219644ac449bb7f98274ab58 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux <raphael.defosseux@eurecom.fr> Date: Thu, 2 Aug 2018 10:28:45 +0200 Subject: [PATCH] CI: Improvements * adding merge request allow flag: -- if false no forced merge to develop -- if true and if branch is not develop, then forced merge to develop * lowered the ru gains in CI conf files * adding on-the-fly HTML summary within python main.py script * adding 20 MHz testcases to FDD band 7 scenario * adding GitLab status for -- centOS build -- FDD-band7 tests Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr> --- ci-scripts/Jenkinsfile-gitlab | 56 +++---- ci-scripts/Jenkinsfile-tmp-ran | 15 +- .../enb.band7.tm1.100PRB.usrpb210.conf | 2 +- .../enb.band7.tm1.25PRB.usrpb210.conf | 2 +- .../enb.band7.tm1.50PRB.usrpb210.conf | 2 +- ci-scripts/main.py | 144 +++++++++++++++++- ci-scripts/xml_files/enb_usrp210_band7.xml | 36 ++++- 7 files changed, 223 insertions(+), 34 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index ded95eff03..af3fb10730 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -40,7 +40,7 @@ pipeline { disableConcurrentBuilds() timestamps() gitLabConnection('OAI GitLab') - gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim"]) + gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE-ethernet", "Analysis with cppcheck", "Test phy-sim", "Test-FDD-Band7"]) ansiColor('xterm') } @@ -197,15 +197,17 @@ pipeline { expression {doRedHatBuild} } steps { - script { - try { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password'] - ]) { - sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}" + gitlabCommitStatus(name: "Build eNb-USRP-CentOS") { + script { + try { + withCredentials([ + [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password'] + ]) { + sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}" + } + } catch (Exception e) { + echo "Red Hat build failed not an error now" } - } catch (Exception e) { - echo "Red Hat build failed not an error now" } } } @@ -260,23 +262,25 @@ pipeline { } stage ("Test FDD - Band 7 - B210") { steps { - script { - if ("MERGE".equals(env.gitlabActionType)) { - build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), - string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), - booleanParam(name: 'eNB_mergeRequest', value: true) - ] - } else { - build job: 'eNB-CI-FDD-Band7-B210', - parameters: [ - string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), - string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), - string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), - booleanParam(name: 'eNB_mergeRequest', value: false) - ] + gitlabCommitStatus(name: "Test-FDD-Band7") { + script { + if ("MERGE".equals(env.gitlabActionType)) { + build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(env.gitlabSourceBranch)), + string(name: 'eNB_CommitID', value: String.valueOf(env.gitlabMergeRequestLastCommit)), + booleanParam(name: 'eNB_mergeRequest', value: true) + ] + } else { + build job: 'eNB-CI-FDD-Band7-B210', + parameters: [ + string(name: 'eNB_Repository', value: String.valueOf(GIT_URL)), + string(name: 'eNB_Branch', value: String.valueOf(GIT_BRANCH)), + string(name: 'eNB_CommitID', value: String.valueOf(GIT_COMMIT)), + booleanParam(name: 'eNB_mergeRequest', value: false) + ] + } } } } diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 796271a8d4..78f62cd8eb 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -44,9 +44,12 @@ termStatusArray[termSPGW] = false termStatusArray[termMME] = false termStatusArray[termHSS] = false +// Global Parameters. Normally they should be populated when the master job +// triggers the slave job with parameters def eNB_Repository def eNB_Branch def eNB_CommitID +def eNB_AllowMergeRequestProcess = false pipeline { agent { @@ -118,7 +121,7 @@ pipeline { if (params.eNB_Credentials == null) { allParametersPresent = false } - // the following 3 parameters should be pushed by the master trigger + // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { eNB_Repository = env.GIT_URL @@ -138,6 +141,9 @@ pipeline { eNB_CommitID = params.eNB_CommitID } echo "eNB_CommitID : ${eNB_CommitID}" + if (params.eNB_mergeRequest != null) { + eNB_AllowMergeRequestProcess = params.eNB_mergeRequest + } if (params.EPC_IPAddress == null) { allParametersPresent = false @@ -179,7 +185,7 @@ pipeline { [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'], [$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} --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}" + 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}" } } catch (Exception e) { currentBuild.result = 'FAILURE' @@ -312,6 +318,11 @@ pipeline { if(fileExists("enb.log.${env.BUILD_ID}.zip")) { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" } + if(fileExists("ci-scripts/test_results.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" + archiveArtifacts "test_results-${JOB_NAME}.html" + } } } } diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf index 2feb577f68..2bd28a60df 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf index 38df1a28e5..102fc89a13 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf index 213f2bbcd3..fe6e2f0b59 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf @@ -220,7 +220,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 125; + max_rxgain = 115; eNB_instances = [0]; } diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 656b1d11a7..85e27acb69 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -59,6 +59,7 @@ class SSHConnection(): self.eNBIPAddress = '' self.eNBRepository = '' self.eNBBranch = '' + self.eNB_AllowMerge = False self.eNBCommitID = '' self.eNBUserName = '' self.eNBPassword = '' @@ -82,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) @@ -165,8 +170,9 @@ class SSHConnection(): self.command('git checkout -f ' + self.eNBCommitID, '\$', 5) # if the branch is not develop, then it is a merge request and we need to do # the potential merge. Note that merge conflicts should already been checked earlier - if (self.eNBBranch != 'develop') and (self.eNBBranch != 'origin/develop'): - self.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5) + if (self.eNB_AllowMerge): + if (self.eNBBranch != 'develop') and (self.eNBBranch != 'origin/develop'): + self.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5) self.command('source oaienv', '\$', 5) self.command('cd cmake_targets', '\$', 5) self.command('mkdir -p log', '\$', 5) @@ -176,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 == '': @@ -196,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 == '': @@ -217,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 == '': @@ -232,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 == '': @@ -264,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) @@ -272,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() @@ -304,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: @@ -351,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: @@ -375,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: @@ -429,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 == '': @@ -522,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: @@ -658,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 = [] @@ -751,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) @@ -772,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) @@ -800,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: @@ -827,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) @@ -903,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('<!DOCTYPE html>\n') + self.htmlFile.write('<html class="no-js" lang="en-US">\n') + self.htmlFile.write('<head>\n') + self.htmlFile.write(' <title>Test Results for TEMPLATE_JOB_NAME job build #TEMPLATE_BUILD_ID</title>\n') + self.htmlFile.write(' <base href = "http://www.openairinterface.org/" />\n') + self.htmlFile.write('</head>\n') + self.htmlFile.write('<body>\n') + self.htmlFile.write(' <table style="border-collapse: collapse; border: none;">\n') + self.htmlFile.write(' <tr style="border-collapse: collapse; border: none;">\n') + self.htmlFile.write(' <td style="border-collapse: collapse; border: none;">\n') + self.htmlFile.write(' <a href="http://www.openairinterface.org/">\n') + self.htmlFile.write(' <img src="/wp-content/uploads/2016/03/cropped-oai_final_logo2.png" alt="" border="none" height=50 width=150>\n') + self.htmlFile.write(' </img>\n') + self.htmlFile.write(' </a>\n') + self.htmlFile.write(' </td>\n') + self.htmlFile.write(' <td style="border-collapse: collapse; border: none; vertical-align: center;">\n') + self.htmlFile.write(' <b><font size = "6">Job Summary -- Job: TEMPLATE_JOB_NAME -- Build-ID: TEMPLATE_BUILD_ID</font></b>\n') + self.htmlFile.write(' </td>\n') + self.htmlFile.write(' </tr>\n') + self.htmlFile.write(' </table>\n') + self.htmlFile.write(' <br>\n') + self.htmlFile.write(' <table border = "1">\n') + self.htmlFile.write(' <tr>\n') + self.htmlFile.write(' <td bgcolor = "lightcyan" >GIT Repository</td>\n') + self.htmlFile.write(' <td>' + SSH.eNBRepository + '</td>\n') + self.htmlFile.write(' </tr>\n') + self.htmlFile.write(' <tr>\n') + self.htmlFile.write(' <td bgcolor = "lightcyan" >Job Trigger</td>\n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' <td>Merge-Request</td>\n') + else: + self.htmlFile.write(' <td>Push to Branch</td>\n') + self.htmlFile.write(' </tr>\n') + self.htmlFile.write(' <tr>\n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' <td bgcolor = "lightcyan" >Source Branch</td>\n') + else: + self.htmlFile.write(' <td bgcolor = "lightcyan" >Branch</td>\n') + self.htmlFile.write(' <td>' + SSH.eNBBranch + '</td>\n') + self.htmlFile.write(' </tr>\n') + self.htmlFile.write(' <tr>\n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' <td bgcolor = "lightcyan" >Source Commit ID</td>\n') + else: + self.htmlFile.write(' <td bgcolor = "lightcyan" >Commit ID</td>\n') + self.htmlFile.write(' <td>' + SSH.eNBCommitID + '</td>\n') + self.htmlFile.write(' </tr>\n') + if (SSH.eNB_AllowMerge): + self.htmlFile.write(' <tr>\n') + self.htmlFile.write(' <td bgcolor = "lightcyan" >Target Branch</td>\n') + self.htmlFile.write(' <td>develop</td>\n') + self.htmlFile.write(' </tr>\n') + self.htmlFile.write(' </table>\n') + + terminate_ue_flag = True + SSH.GetAllUEDevices(terminate_ue_flag) + self.htmlUEConnected = len(self.UEDevices) + self.htmlFile.write('<h2>' + str(self.htmlUEConnected) + ' UE(s) is(are) connected to ADB bench server</h2>\n') + + self.htmlFile.write(' <br>\n') + self.htmlFile.write(' <h2>Test Summary for ' + SSH.testXMLfile + '</h2>\n') + self.htmlFile.write(' <table border = "1">\n') + self.htmlFile.write(' <tr bgcolor = "#33CCFF" >\n') + self.htmlFile.write(' <th>Test Id</th>\n') + self.htmlFile.write(' <th>Test Desc</th>\n') + self.htmlFile.write(' <th>Test Options</th>\n') + self.htmlFile.write(' <th>Test Status</th>\n') + i = 0 + while (i < self.htmlUEConnected): + self.htmlFile.write(' <th>UE' + str(i) + ' Status</th>\n') + i += 1 + self.htmlFile.write(' </tr>\n') + self.htmlHeaderCreated = True + + def CreateHtmlFooter(self): + if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + self.htmlFile.write(' </table>\n') + self.htmlFile.write('</body>\n') + self.htmlFile.write('</html>\n') + self.htmlFile.close() + self.htmlFooterCreated = False + + def CreateHtmlTestRow(self, options, status, ue_status): + if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)): + self.htmlFile.write(' <tr>\n') + self.htmlFile.write(' <td bgcolor = "lightcyan" >' + SSH.testCase_id + '</td>\n') + self.htmlFile.write(' <td>' + SSH.desc + '</td>\n') + self.htmlFile.write(' <td>' + str(options) + '</td>\n') + if (str(status) == 'OK'): + self.htmlFile.write(' <td bgcolor = "lightgreen" >' + str(status) + '</td>\n') + elif (str(status) == 'KO'): + self.htmlFile.write(' <td bgcolor = "lightcoral" >' + str(status) + '</td>\n') + else: + self.htmlFile.write(' <td bgcolor = "orange" >' + str(status) + '</td>\n') + i = 0 + while (i < self.htmlUEConnected): + if (i < ue_status): + self.htmlFile.write(' <td>-</td>\n') + else: + self.htmlFile.write(' <td>-</td>\n') + i += 1 + self.htmlFile.write(' </tr>\n') + +#----------------------------------------------------------- # Usage() #----------------------------------------------------------- def Usage(): @@ -998,6 +1129,11 @@ while len(argvs) > 1: elif re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE) SSH.eNBRepository = matchReg.group(1) + elif re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE): + matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE) + doMerge = matchReg.group(1) + if ((doMerge == 'true') or (doMerge == 'True')): + SSH.eNB_AllowMerge = True elif re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE) SSH.eNBBranch = matchReg.group(1) @@ -1116,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 == '': @@ -1214,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') diff --git a/ci-scripts/xml_files/enb_usrp210_band7.xml b/ci-scripts/xml_files/enb_usrp210_band7.xml index 4bea6d50e5..6f8cfbad5b 100644 --- a/ci-scripts/xml_files/enb_usrp210_band7.xml +++ b/ci-scripts/xml_files/enb_usrp210_band7.xml @@ -21,7 +21,7 @@ --> <testCaseList> - <TestCaseRequestedList>010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 040101 030111 040301 040511 040611 040612 040613 040401 040201 030201</TestCaseRequestedList> + <TestCaseRequestedList>010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040401 040201 030201 030111 040301 040511 040611 040612 040613 040401 040201 030201 030112 040301 040512 040621 040622 040623 040401 040201 030201 </TestCaseRequestedList> <TestCaseExclusionList></TestCaseExclusionList> <testCase id="010101"> @@ -42,6 +42,12 @@ <Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf</Initialize_eNB_args> </testCase> + <testCase id="030112"> + <class>Initialize_eNB</class> + <desc>Initialize eNB (FDD/Band7/20MHz)</desc> + <Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf</Initialize_eNB_args> + </testCase> + <testCase id="030201"> <class>Terminate_eNB</class> <desc>Terminate eNB</desc> @@ -81,6 +87,13 @@ <ping_packetloss_threshold>5</ping_packetloss_threshold> </testCase> + <testCase id="040512"> + <class>Ping</class> + <desc>ping (20MHz - 20 sec)</desc> + <ping_args>-c 20</ping_args> + <ping_packetloss_threshold>5</ping_packetloss_threshold> + </testCase> + <testCase id="040601"> <class>Iperf</class> <desc>iperf (5MHz - DL/6Mbps/UDP)(60 sec)</desc> @@ -123,6 +136,27 @@ <iperf_packetloss_threshold>50</iperf_packetloss_threshold> </testCase> + <testCase id="040621"> + <class>Iperf</class> + <desc>iperf (20MHz - DL/20Mbps/UDP)(60 sec)</desc> + <iperf_args>-u -b 20M -t 60 -i 1</iperf_args> + <iperf_packetloss_threshold>50</iperf_packetloss_threshold> + </testCase> + + <testCase id="040622"> + <class>Iperf</class> + <desc>iperf (20MHz - DL/40Mbps/UDP)(60 sec)</desc> + <iperf_args>-u -b 40M -t 60 -i 1</iperf_args> + <iperf_packetloss_threshold>50</iperf_packetloss_threshold> + </testCase> + + <testCase id="040623"> + <class>Iperf</class> + <desc>iperf (20MHz - DL/70Mbps/UDP)(60 sec)</desc> + <iperf_args>-u -b 70M -t 60 -i 1</iperf_args> + <iperf_packetloss_threshold>50</iperf_packetloss_threshold> + </testCase> + <testCase id="050101"> <class>Initialize_HSS</class> <desc>Initialize HSS</desc> -- GitLab