diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py
index a33e3f4f29..1f95d2602f 100644
--- a/ci-scripts/cls_containerize.py
+++ b/ci-scripts/cls_containerize.py
@@ -42,10 +42,8 @@ from multiprocessing import Process, Lock, SimpleQueue
# OAI Testing modules
#-----------------------------------------------------------
import sshconnection as SSH
-import epc
import helpreadme as HELP
import constants as CONST
-import html
#-----------------------------------------------------------
# Class Declaration
@@ -82,15 +80,12 @@ class Containerize():
self.flexranCtrlDeployed = False
self.flexranCtrlIpAddress = ''
- self.htmlObj = None
- self.epcObj = None
- self.ranObj = None
#-----------------------------------------------------------
# Container management functions
#-----------------------------------------------------------
- def BuildImage(self):
+ def BuildImage(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
@@ -137,10 +132,7 @@ class Containerize():
# Workaround for some servers, we need to erase completely the workspace
if self.forcedWorkspaceCleanup:
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
- if self.htmlObj is not None:
- self.testCase_id = self.htmlObj.testCase_id
- else:
- self.testCase_id = '000000'
+ self.testCase_id = HTML.testCase_id
# on RedHat/CentOS .git extension is mandatory
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
if result is not None:
@@ -239,9 +231,8 @@ class Containerize():
if not status:
mySSH.close()
logging.error('\u001B[1m Building OAI Images Failed\u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK)
- self.htmlObj.CreateHtmlTabFooter(False)
+ HTML.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTabFooter(False)
sys.exit(1)
# Recover build logs, for the moment only possible when build is successful
@@ -261,10 +252,9 @@ class Containerize():
mySSH.close()
logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.imageKind, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.imageKind, 'OK', CONST.ALL_PROCESSES_OK)
- def DeployObject(self):
+ def DeployObject(self, HTML, EPC):
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
@@ -299,9 +289,8 @@ class Containerize():
if (self.ranAllowMerge):
imageTag = 'ci-temp'
mySSH.command('sed -i -e "s/image: oai-enb:latest/image: oai-enb:' + imageTag + '/" ci-docker-compose.yml', '\$', 2)
- if self.epcObj is not None:
- localMmeIpAddr = self.epcObj.MmeIPAddress
- mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2)
+ localMmeIpAddr = EPC.MmeIPAddress
+ mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2)
if self.flexranCtrlDeployed:
mySSH.command('sed -i -e \'s/FLEXRAN_ENABLED:.*/FLEXRAN_ENABLED: "yes"/\' ci-docker-compose.yml', '\$', 2)
mySSH.command('sed -i -e "s/CI_FLEXRAN_CTL_IP_ADDR/' + self.flexranCtrlIpAddress + '/" ci-docker-compose.yml', '\$', 2)
@@ -356,19 +345,15 @@ class Containerize():
time.sleep(10)
mySSH.close()
- if self.htmlObj is not None:
- self.testCase_id = self.htmlObj.testCase_id
- else:
- self.testCase_id = '000000'
+ self.testCase_id = HTML.testCase_id
self.eNB_logFile[self.eNB_instance] = 'enb_' + self.testCase_id + '.log'
- if self.htmlObj is not None:
- if status:
- self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
- else:
- self.htmlObj.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
+ if status:
+ HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
+ else:
+ HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
- def UndeployObject(self):
+ def UndeployObject(self, HTML, RAN):
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
@@ -410,20 +395,16 @@ class Containerize():
mySSH.close()
# Analyzing log file!
- if self.ranObj is not None:
- copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '.')
- nodeB_prefix = 'e'
- if (copyin_res == -1):
- if self.htmlObj is not None:
- self.htmlObj.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
- self.htmlObj.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
+ copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + self.eNB_logFile[self.eNB_instance], '.')
+ nodeB_prefix = 'e'
+ if (copyin_res == -1):
+ HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
+ HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
+ else:
+ logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
+ logStatus = RAN.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance], HTML)
+ if (logStatus < 0):
+ HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus)
else:
- logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + self.eNB_logFile[self.eNB_instance])
- logStatus = self.ranObj.AnalyzeLogFile_eNB(self.eNB_logFile[self.eNB_instance])
- if (logStatus < 0):
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.ranObj.runtime_stats, 'KO', logStatus)
- else:
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.ranObj.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py
index cab829d1bf..44b0b542d5 100644
--- a/ci-scripts/cls_oaicitest.py
+++ b/ci-scripts/cls_oaicitest.py
@@ -558,7 +558,7 @@ class OaiCiTest():
HTML.htmlUEFailureMsg='nr-uesoftmodem did NOT synced'
HTML.CreateHtmlTestRow(self.air_interface + ' ' + self.Initialize_OAI_UE_args, 'KO', CONST.OAI_UE_PROCESS_COULD_NOT_SYNC, 'OAI UE')
logging.error('\033[91mInitialize OAI UE Failed! \033[0m')
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
def checkDevTTYisUnlocked(self):
SSH = sshconnection.SSHConnection()
@@ -636,7 +636,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
self.checkDevTTYisUnlocked()
- def AttachCatM(self,HTML,RAN,COTS_UE):
+ def AttachCatM(self,HTML,RAN,COTS_UE,EPC):
if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
@@ -709,9 +709,9 @@ class OaiCiTest():
html_cell = '
CAT-M module Attachment Failed
'
html_queue.put(html_cell)
HTML.CreateHtmlTestRowQueue('N/A', 'KO', 1, html_queue)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
- def PingCatM(self,HTML,RAN,EPC,COTS_UE):
+ def PingCatM(self,HTML,RAN,EPC,COTS_UE,EPC):
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.SourceCodePath == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
@@ -720,7 +720,7 @@ class OaiCiTest():
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
if (pStatus < 0):
HTML.CreateHtmlTestRow(self.ping_args, 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
try:
statusQueue = SimpleQueue()
@@ -741,7 +741,7 @@ class OaiCiTest():
moduleIPAddr = result.group('ipaddr')
else:
HTML.CreateHtmlTestRow(self.ping_args, 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
ping_time = re.findall("-c (\d+)",str(self.ping_args))
device_id = 'catm'
@@ -805,7 +805,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue(self.ping_args, 'OK', 1, statusQueue)
else:
HTML.CreateHtmlTestRowQueue(self.ping_args, 'KO', 1, statusQueue)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
except:
os.kill(os.getppid(),signal.SIGUSR1)
@@ -906,7 +906,7 @@ class OaiCiTest():
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
if (pStatus < 0):
HTML.CreateHtmlTestRow('N/A', 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
multi_jobs = []
status_queue = SimpleQueue()
@@ -925,7 +925,7 @@ class OaiCiTest():
if (status_queue.empty()):
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ALL_PROCESSES_OK)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
else:
attach_status = True
@@ -954,7 +954,7 @@ class OaiCiTest():
time.sleep(5)
else:
HTML.CreateHtmlTestRowQueue('N/A', 'KO', len(self.UEDevices), html_queue)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
def DetachUE_common(self, device_id, idx,COTS_UE):
try:
@@ -987,7 +987,7 @@ class OaiCiTest():
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
if (pStatus < 0):
HTML.CreateHtmlTestRow('N/A', 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
multi_jobs = []
cnt = 0
@@ -1302,7 +1302,7 @@ class OaiCiTest():
if (status_queue.empty()):
HTML.CreateHtmlTestRow(htmlOptions, 'KO', CONST.ALL_PROCESSES_OK)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
else:
check_status = True
html_queue = SimpleQueue()
@@ -1318,7 +1318,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue(htmlOptions, 'OK', len(self.UEDevices), html_queue)
else:
HTML.CreateHtmlTestRowQueue(htmlOptions, 'KO', len(self.UEDevices), html_queue)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
def GetAllUEIPAddresses(self):
SSH = sshconnection.SSHConnection()
@@ -1496,7 +1496,7 @@ class OaiCiTest():
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
if (pStatus < 0):
HTML.CreateHtmlTestRow(self.ping_args, 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
ping_from_eNB = re.search('oaitun_enb1', str(self.ping_args))
if ping_from_eNB is not None:
@@ -1598,12 +1598,12 @@ class OaiCiTest():
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
if (pStatus < 0):
HTML.CreateHtmlTestRow(self.ping_args, 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
ueIpStatus = self.GetAllUEIPAddresses()
if (ueIpStatus < 0):
HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
multi_jobs = []
i = 0
@@ -1621,7 +1621,7 @@ class OaiCiTest():
if (status_queue.empty()):
HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.ALL_PROCESSES_OK)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
else:
ping_status = True
html_queue = SimpleQueue()
@@ -1638,7 +1638,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue(self.ping_args, 'OK', len(self.UEDevices), html_queue)
else:
HTML.CreateHtmlTestRowQueue(self.ping_args, 'KO', len(self.UEDevices), html_queue)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
def Iperf_ComputeTime(self):
result = re.search('-t (?P\d+)', str(self.iperf_args))
@@ -2279,7 +2279,7 @@ class OaiCiTest():
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
if (pStatus < 0):
HTML.CreateHtmlTestRow(self.iperf_args, 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
server_on_enb = re.search('-R', str(self.iperf_args))
if server_on_enb is not None:
@@ -2377,7 +2377,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'OK', len(self.UEDevices), html_queue)
else:
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', len(self.UEDevices), html_queue)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
def Iperf(self,HTML,RAN,EPC,COTS_UE):
result = re.search('noS1', str(RAN.Initialize_eNB_args))
@@ -2395,13 +2395,13 @@ class OaiCiTest():
pStatus = self.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
if (pStatus < 0):
HTML.CreateHtmlTestRow(self.iperf_args, 'KO', pStatus)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
ueIpStatus = self.GetAllUEIPAddresses()
if (ueIpStatus < 0):
logging.debug('going here')
HTML.CreateHtmlTestRow(self.iperf_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
return
self.dummyIperfVersion = '2.0.10'
@@ -2432,7 +2432,7 @@ class OaiCiTest():
if (status_queue.empty()):
HTML.CreateHtmlTestRow(self.iperf_args, 'KO', CONST.ALL_PROCESSES_OK)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
else:
iperf_status = True
iperf_noperf = False
@@ -2454,7 +2454,7 @@ class OaiCiTest():
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'OK', len(self.UEDevices), html_queue)
else:
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', len(self.UEDevices), html_queue)
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
def CheckProcessExist(self, check_eNB, check_OAI_UE,RAN,EPC):
multi_jobs = []
@@ -2915,11 +2915,11 @@ class OaiCiTest():
# Not an error then
if (logStatus != CONST.OAI_UE_PROCESS_COULD_NOT_SYNC) or (ueAction != 'Sniffing'):
self.Initialize_OAI_UE_args = ''
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
else:
if (logStatus == CONST.OAI_UE_PROCESS_COULD_NOT_SYNC):
self.Initialize_OAI_UE_args = ''
- self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE)
+ self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC)
else:
logging.debug('\u001B[1m' + ueAction + ' Completed \u001B[0m')
HTML.htmlUEFailureMsg='' + ueAction + ' Completed\n' + HTML.htmlUEFailureMsg
@@ -2928,7 +2928,7 @@ class OaiCiTest():
else:
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
- def AutoTerminateUEandeNB(self,HTML,RAN,COTS_UE):
+ def AutoTerminateUEandeNB(self,HTML,RAN,COTS_UE,EPC):
if (self.ADBIPAddress != 'none'):
self.testCase_id = 'AUTO-KILL-UE'
HTML.testCase_id=self.testCase_id
@@ -2954,7 +2954,7 @@ class OaiCiTest():
if RAN.air_interface[instance]!='':
logging.debug('Auto Termination of Instance ' + str(instance) + ' : ' + RAN.air_interface[instance])
RAN.eNB_instance=instance
- RAN.TerminateeNB()
+ RAN.TerminateeNB(HTML,EPC)
if RAN.flexranCtrlInstalled and RAN.flexranCtrlStarted:
self.testCase_id = 'AUTO-KILL-flexran-ctl'
HTML.testCase_id=self.testCase_id
diff --git a/ci-scripts/epc.py b/ci-scripts/epc.py
index cc01b8d172..ed4ef4c447 100644
--- a/ci-scripts/epc.py
+++ b/ci-scripts/epc.py
@@ -46,7 +46,6 @@ from multiprocessing import Process, Lock, SimpleQueue
import sshconnection as SSH
import helpreadme as HELP
import constants as CONST
-import html
#-----------------------------------------------------------
# Class Declaration
@@ -61,7 +60,6 @@ class EPCManagement():
self.SourceCodePath = ''
self.Type = ''
self.PcapFileName = ''
- self.htmlObj = None
self.testCase_id = ''
self.MmeIPAddress = ''
self.containerPrefix = 'prod'
@@ -73,7 +71,7 @@ class EPCManagement():
# EPC management functions
#-----------------------------------------------------------
- def InitializeHSS(self):
+ def InitializeHSS(self, HTML):
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
HELP.GenericHelp(CONST.Version)
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
@@ -115,10 +113,9 @@ class EPCManagement():
else:
logging.error('This option should not occur!')
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
- def InitializeMME(self):
+ def InitializeMME(self, HTML):
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
HELP.GenericHelp(CONST.Version)
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
@@ -154,8 +151,7 @@ class EPCManagement():
else:
logging.error('This option should not occur!')
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
def SetMmeIPAddress(self):
# Not an error if we don't need an EPC
@@ -176,7 +172,7 @@ class EPCManagement():
else:
self.MmeIPAddress = self.IPAddress
- def InitializeSPGW(self):
+ def InitializeSPGW(self, HTML):
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
HELP.GenericHelp(CONST.Version)
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
@@ -213,8 +209,7 @@ class EPCManagement():
else:
logging.error('This option should not occur!')
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
def CheckHSSProcess(self, status_queue):
try:
@@ -298,7 +293,7 @@ class EPCManagement():
except:
os.kill(os.getppid(),signal.SIGUSR1)
- def TerminateHSS(self):
+ def TerminateHSS(self, HTML):
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
@@ -331,10 +326,9 @@ class EPCManagement():
else:
logging.error('This should not happen!')
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
- def TerminateMME(self):
+ def TerminateMME(self, HTML):
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
@@ -358,10 +352,9 @@ class EPCManagement():
else:
logging.error('This should not happen!')
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
- def TerminateSPGW(self):
+ def TerminateSPGW(self, HTML):
mySSH = SSH.SSHConnection()
mySSH.open(self.IPAddress, self.UserName, self.Password)
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
@@ -402,15 +395,13 @@ class EPCManagement():
else:
logging.error('This should not happen!')
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
- def DeployEpc(self):
+ def DeployEpc(self, HTML):
logging.debug('Trying to deploy')
if not re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
- self.htmlObj.CreateHtmlTabFooter(False)
+ HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
+ HTML.CreateHtmlTabFooter(False)
sys.exit('Deploy not possible with this EPC type: ' + self.Type)
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
@@ -423,9 +414,8 @@ class EPCManagement():
result = re.search('docker-compose version 1', mySSH.getBefore())
if result is None:
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
- self.htmlObj.CreateHtmlTabFooter(False)
+ HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
+ HTML.CreateHtmlTabFooter(False)
sys.exit('docker-compose not installed on ' + self.IPAddress)
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
@@ -458,9 +448,8 @@ class EPCManagement():
cnt += 1
mySSH.command('docker rm -f prod-db-init', '\$', 5)
if not db_init_status:
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
- self.htmlObj.CreateHtmlTabFooter(False)
+ HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
+ HTML.CreateHtmlTabFooter(False)
sys.exit('Cassandra DB deployment/configuration went wrong!')
# deploying EPC cNFs
@@ -503,13 +492,13 @@ class EPCManagement():
mySSH.command('docker exec -d prod-oai-spgwu-tiny /bin/bash -c "nohup tshark -i any -f \'port 8805\' -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
mySSH.close()
logging.debug('Deployment OK')
- self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
else:
mySSH.close()
logging.debug('Deployment went wrong')
- self.htmlObj.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
+ HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
- def UndeployEpc(self):
+ def UndeployEpc(self, HTML):
logging.debug('Trying to undeploy')
# No check down, we suppose everything done before.
@@ -551,10 +540,10 @@ class EPCManagement():
mySSH.close()
if noMoreContainerNb == nbContainers and noMoreNetworkNb == 2:
logging.debug('Undeployment OK')
- self.htmlObj.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
else:
logging.debug('Undeployment went wrong')
- self.htmlObj.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
+ HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
def LogCollectHSS(self):
mySSH = SSH.SSHConnection()
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 825356a63c..38a1a07d14 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -379,14 +379,6 @@ RAN = ran.RANManagement()
HTML = html.HTMLManagement()
CONTAINERS = cls_containerize.Containerize()
-EPC.htmlObj=HTML
-RAN.htmlObj=HTML
-RAN.epcObj=EPC
-CONTAINERS.htmlObj=HTML
-CONTAINERS.epcObj=EPC
-CONTAINERS.ranObj=RAN
-
-
ldpc=cls_physim.PhySim() #create an instance for LDPC test using GPU or CPU build
@@ -668,17 +660,16 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
RAN.prematureExit = True
break
if action == 'Build_eNB':
- RAN.BuildeNB()
+ RAN.BuildeNB(HTML)
elif action == 'WaitEndBuild_eNB':
- RAN.WaitBuildeNBisFinished()
+ RAN.WaitBuildeNBisFinished(HTML)
elif action == 'Initialize_eNB':
check_eNB = False
check_OAI_UE = False
RAN.pStatus=CiTestObj.CheckProcessExist(check_eNB, check_OAI_UE,RAN,EPC)
-
- RAN.InitializeeNB()
+ RAN.InitializeeNB(HTML, EPC)
elif action == 'Terminate_eNB':
- RAN.TerminateeNB()
+ RAN.TerminateeNB(HTML, EPC)
elif action == 'Initialize_UE':
CiTestObj.InitializeUE(HTML,COTS_UE)
elif action == 'Terminate_UE':
@@ -698,17 +689,17 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
elif action == 'Initialize_OAI_UE':
CiTestObj.InitializeOAIUE(HTML,RAN,EPC,COTS_UE)
elif action == 'Terminate_OAI_UE':
- CiTestObj.TerminateOAIUE(HTML,RAN,COTS_UE)
+ CiTestObj.TerminateOAIUE(HTML,RAN,COTS_UE,EPC)
elif action == 'Initialize_CatM_module':
CiTestObj.InitializeCatM(HTML)
elif action == 'Terminate_CatM_module':
CiTestObj.TerminateCatM(HTML)
elif action == 'Attach_CatM_module':
- CiTestObj.AttachCatM(HTML,RAN,COTS_UE)
+ CiTestObj.AttachCatM(HTML,RAN,COTS_UE,EPC)
elif action == 'Detach_CatM_module':
CiTestObj.TerminateCatM(HTML)
elif action == 'Ping_CatM_module':
- CiTestObj.PingCatM(HTML,RAN,EPC,COTS_UE)
+ CiTestObj.PingCatM(HTML,RAN,EPC,COTS_UE,EPC)
elif action == 'Ping':
CiTestObj.Ping(HTML,RAN,EPC,COTS_UE)
elif action == 'Iperf':
@@ -716,21 +707,21 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
elif action == 'Reboot_UE':
CiTestObj.RebootUE(HTML,RAN,EPC)
elif action == 'Initialize_HSS':
- EPC.InitializeHSS()
+ EPC.InitializeHSS(HTML)
elif action == 'Terminate_HSS':
- EPC.TerminateHSS()
+ EPC.TerminateHSS(HTML)
elif action == 'Initialize_MME':
- EPC.InitializeMME()
+ EPC.InitializeMME(HTML)
elif action == 'Terminate_MME':
- EPC.TerminateMME()
+ EPC.TerminateMME(HTML)
elif action == 'Initialize_SPGW':
- EPC.InitializeSPGW()
+ EPC.InitializeSPGW(HTML)
elif action == 'Terminate_SPGW':
- EPC.TerminateSPGW()
+ EPC.TerminateSPGW(HTML)
elif action == 'Deploy_EPC':
- EPC.DeployEpc()
+ EPC.DeployEpc(HTML)
elif action == 'Undeploy_EPC':
- EPC.UndeployEpc()
+ EPC.UndeployEpc(HTML)
elif action == 'Initialize_FlexranCtrl':
CiTestObj.InitializeFlexranCtrl(HTML,RAN,EPC)
elif action == 'Terminate_FlexranCtrl':
@@ -745,11 +736,11 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
elif action == 'Run_PhySim':
HTML=ldpc.Run_PhySim(HTML,CONST,id)
elif action == 'Build_Image':
- CONTAINERS.BuildImage()
+ CONTAINERS.BuildImage(HTML)
elif action == 'Deploy_Object':
- CONTAINERS.DeployObject()
+ CONTAINERS.DeployObject(HTML, EPC)
elif action == 'Undeploy_Object':
- CONTAINERS.UndeployObject()
+ CONTAINERS.UndeployObject(HTML, RAN)
else:
sys.exit('Invalid class (action) from xml')
if not RAN.prematureExit:
diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py
index 369a4bb95c..746f646349 100644
--- a/ci-scripts/ran.py
+++ b/ci-scripts/ran.py
@@ -42,10 +42,8 @@ from multiprocessing import Process, Lock, SimpleQueue
# OAI Testing modules
#-----------------------------------------------------------
import sshconnection as SSH
-import epc
import helpreadme as HELP
import constants as CONST
-import html
#-----------------------------------------------------------
# Class Declaration
@@ -91,8 +89,6 @@ class RANManagement():
self.flexranCtrlIpAddress = ''
self.testCase_id = ''
self.epcPcapFile = ''
- self.htmlObj = None
- self.epcObj = None
self.runtime_stats= ''
@@ -101,7 +97,7 @@ class RANManagement():
# RAN management functions
#-----------------------------------------------------------
- def BuildeNB(self):
+ def BuildeNB(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter')
@@ -141,10 +137,7 @@ class RANManagement():
# Worakround for some servers, we need to erase completely the workspace
if self.Build_eNB_forced_workspace_cleanup:
mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
- if self.htmlObj is not None:
- self.testCase_id = self.htmlObj.testCase_id
- else:
- self.testCase_id = '000000'
+ self.testCase_id = HTML.testCase_id
# on RedHat/CentOS .git extension is mandatory
result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
if result is not None:
@@ -185,8 +178,7 @@ class RANManagement():
mismatch = True
if not mismatch:
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
return
mySSH.command('echo ' + lPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
@@ -213,15 +205,14 @@ class RANManagement():
mySSH.command('echo ' + lPassWord + ' | sudo -S ls', '\$', 5)
mySSH.command('echo $USER; nohup sudo -E ./my-lte-softmodem-build.sh' + ' > ' + lSourcePath + '/cmake_targets/compile_oai_enb.log ' + ' 2>&1 &', lUserName, 5)
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
self.backgroundBuildTestId[int(self.eNB_instance)] = self.testCase_id
return
mySSH.command('stdbuf -o0 ./build_oai ' + self.Build_eNB_args + ' 2>&1 | stdbuf -o0 tee compile_oai_enb.log', 'Bypassing the Tests|build have failed', 1500)
mySSH.close()
- self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.testCase_id)
+ self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.testCase_id, HTML)
- def WaitBuildeNBisFinished(self):
+ def WaitBuildeNBisFinished(self, HTML):
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
@@ -254,11 +245,10 @@ class RANManagement():
count -= 1
time.sleep(30)
mySSH.close()
- self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)])
+ self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)], HTML)
- def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId):
- if self.htmlObj is not None:
- self.htmlObj.testCase_id=testcaseId
+ def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId, HTML):
+ HTML.testCase_id=testcaseId
mySSH = SSH.SSHConnection()
mySSH.open(lIpAddr, lUserName, lPassWord)
@@ -312,184 +302,14 @@ class RANManagement():
#generate logging info depending on buildStatus and air interface
if buildStatus:
logging.info('\u001B[1m Building OAI ' + self.air_interface[self.eNB_instance] + ' Pass\u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.Build_eNB_args, 'OK', CONST.ALL_PROCESSES_OK)
else:
logging.error('\u001B[1m Building OAI ' + self.air_interface[self.eNB_instance] + ' Failed\u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.Build_eNB_args, 'KO', CONST.ALL_PROCESSES_OK)
- self.htmlObj.CreateHtmlTabFooter(False)
+ HTML.CreateHtmlTestRow(self.Build_eNB_args, 'KO', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTabFooter(False)
sys.exit(1)
- def BuildImage(self):
- if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
- HELP.GenericHelp(CONST.Version)
- sys.exit('Insufficient Parameter')
- if self.eNB_serverId[self.eNB_instance] == '0':
- lIpAddr = self.eNBIPAddress
- lUserName = self.eNBUserName
- lPassWord = self.eNBPassword
- lSourcePath = self.eNBSourceCodePath
- elif self.eNB_serverId[self.eNB_instance] == '1':
- lIpAddr = self.eNB1IPAddress
- lUserName = self.eNB1UserName
- lPassWord = self.eNB1Password
- lSourcePath = self.eNB1SourceCodePath
- elif self.eNB_serverId[self.eNB_instance] == '2':
- lIpAddr = self.eNB2IPAddress
- lUserName = self.eNB2UserName
- lPassWord = self.eNB2Password
- lSourcePath = self.eNB2SourceCodePath
- if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
- HELP.GenericHelp(CONST.Version)
- sys.exit('Insufficient Parameter')
- logging.debug('Building on server: ' + lIpAddr)
- mySSH = SSH.SSHConnection()
- mySSH.open(lIpAddr, lUserName, lPassWord)
-
- imageNames = []
- result = re.search('eNB', self.imageKind)
- if result is not None:
- imageNames.append(('oai-enb', 'eNB'))
- else:
- result = re.search('gNB', self.imageKind)
- if result is not None:
- imageNames.append(('oai-gnb', 'gNB'))
- else:
- result = re.search('all', self.imageKind)
- if result is not None:
- imageNames.append(('oai-enb', 'eNB'))
- imageNames.append(('oai-gnb', 'gNB'))
- if len(imageNames) == 0:
- imageNames.append(('oai-enb', 'eNB'))
- # Workaround for some servers, we need to erase completely the workspace
- if self.Build_eNB_forced_workspace_cleanup:
- mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf ' + lSourcePath, '\$', 15)
- if self.htmlObj is not None:
- self.testCase_id = self.htmlObj.testCase_id
- else:
- self.testCase_id = '000000'
- # on RedHat/CentOS .git extension is mandatory
- result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository)
- if result is not None:
- full_ran_repo_name = self.ranRepository
- else:
- full_ran_repo_name = self.ranRepository + '.git'
- mySSH.command('mkdir -p ' + lSourcePath, '\$', 5)
- mySSH.command('cd ' + lSourcePath, '\$', 5)
- mySSH.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + full_ran_repo_name + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
- # Raphael: here add a check if git clone or git fetch went smoothly
- mySSH.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
- mySSH.command('git config user.name "OAI Jenkins"', '\$', 5)
-
- mySSH.command('echo ' + lPassWord + ' | sudo -S git clean -x -d -ff', '\$', 30)
- mySSH.command('mkdir -p cmake_targets/log', '\$', 5)
- # if the commit ID is provided use it to point to it
- if self.ranCommitID != '':
- mySSH.command('git checkout -f ' + self.ranCommitID, '\$', 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
- imageTag = 'develop'
- if (self.ranAllowMerge):
- imageTag = 'ci-temp'
- if self.ranTargetBranch == '':
- if (self.ranBranch != 'develop') and (self.ranBranch != 'origin/develop'):
- mySSH.command('git merge --ff origin/develop -m "Temporary merge for CI"', '\$', 5)
- else:
- logging.debug('Merging with the target branch: ' + self.ranTargetBranch)
- mySSH.command('git merge --ff origin/' + self.ranTargetBranch + ' -m "Temporary merge for CI"', '\$', 5)
- # Let's remove any previous run artifacts if still there
- mySSH.command('docker image prune --force', '\$', 5)
- mySSH.command('docker image rm ran-build:' + imageTag, '\$', 5)
- for image,pattern in imageNames:
- mySSH.command('docker image rm ' + image + ':' + imageTag, '\$', 5)
- # Build the shared image
- mySSH.command('docker build --target ran-build --tag ran-build:' + imageTag + ' --file docker/Dockerfile.ran.ubuntu18 --build-arg NEEDED_GIT_PROXY="http://proxy.eurecom.fr:8080" . > cmake_targets/log/ran-build.log 2>&1', '\$', 800)
- # Build the target image(s)
- previousImage='ran-build:' + imageTag
- danglingShaOnes=[]
- for image,pattern in imageNames:
- mySSH.command('docker build --target ' + image + ' --tag ' + image + ':' + imageTag + ' --file docker/Dockerfile.' + pattern + '.ubuntu18 . > cmake_targets/log/' + image + '.log 2>&1', '\$', 600)
- # Retrieving the dangling image(s) for the log collection
- mySSH.command('docker images --filter "dangling=true" --filter "since=' + previousImage + '" -q | sed -e "s#^#sha=#"', '\$', 5)
- result = re.search('sha=(?P[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
- if result is not None:
- danglingShaOnes.append((image, result.group('imageShaOne')))
- previousImage=image + ':' + imageTag
-
- imageTag = 'ci-temp'
- # First verify if images were properly created.
- status = True
- mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' ran-build:' + imageTag, '\$', 5)
- if mySSH.getBefore().count('No such object') != 0:
- logging.error('Could not build properly ran-build')
- status = False
- else:
- result = re.search('Size = (?P[0-9\-]+) bytes', mySSH.getBefore())
- if result is not None:
- imageSize = float(result.group('size'))
- imageSize = imageSize / 1000
- if imageSize < 1000:
- logging.debug('\u001B[1m ran-build size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
- else:
- imageSize = imageSize / 1000
- if imageSize < 1000:
- logging.debug('\u001B[1m ran-build size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
- else:
- imageSize = imageSize / 1000
- logging.debug('\u001B[1m ran-build size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
- else:
- logging.debug('ran-build size is unknown')
- for image,pattern in imageNames:
- mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' ' + image + ':' + imageTag, '\$', 5)
- if mySSH.getBefore().count('No such object') != 0:
- logging.error('Could not build properly ' + image)
- status = False
- else:
- result = re.search('Size = (?P[0-9\-]+) bytes', mySSH.getBefore())
- if result is not None:
- imageSize = float(result.group('size'))
- imageSize = imageSize / 1000
- if imageSize < 1000:
- logging.debug('\u001B[1m ' + image + ' size is ' + ('%.0f' % imageSize) + ' kbytes\u001B[0m')
- else:
- imageSize = imageSize / 1000
- if imageSize < 1000:
- logging.debug('\u001B[1m ' + image + ' size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
- else:
- imageSize = imageSize / 1000
- logging.debug('\u001B[1m ' + image + ' size is ' + ('%.3f' % imageSize) + ' Gbytes\u001B[0m')
- else:
- logging.debug('ran-build size is unknown')
- if not status:
- mySSH.close()
- logging.error('\u001B[1m Building OAI Images Failed\u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK)
- self.htmlObj.CreateHtmlTabFooter(False)
- sys.exit(1)
-
- # Recover build logs, for the moment only possible when build is successful
- mySSH.command('docker create --name test ran-build:' + imageTag, '\$', 5)
- mySSH.command('mkdir -p cmake_targets/log/ran-build', '\$', 5)
- mySSH.command('docker cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/ran-build', '\$', 5)
- mySSH.command('docker rm -f test', '\$', 5)
- for image,shaone in danglingShaOnes:
- mySSH.command('mkdir -p cmake_targets/log/' + image, '\$', 5)
- mySSH.command('docker create --name test ' + shaone, '\$', 5)
- mySSH.command('docker cp test:/oai-ran/cmake_targets/log/. cmake_targets/log/' + image, '\$', 5)
- mySSH.command('docker rm -f test', '\$', 5)
- mySSH.command('docker image prune --force', '\$', 5)
- mySSH.command('cd cmake_targets', '\$', 5)
- mySSH.command('mkdir -p build_log_' + self.testCase_id, '\$', 5)
- mySSH.command('mv log/* ' + 'build_log_' + self.testCase_id, '\$', 5)
- mySSH.close()
-
- logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.imageKind, 'OK', CONST.ALL_PROCESSES_OK)
-
- def InitializeeNB(self):
+ def InitializeeNB(self, HTML, EPC):
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
@@ -510,23 +330,19 @@ class RANManagement():
sys.exit('Insufficient Parameter')
logging.debug('Starting eNB/gNB on server: ' + lIpAddr)
- if self.htmlObj is not None:
- self.testCase_id = self.htmlObj.testCase_id
- else:
- self.testCase_id = '000000'
+ self.testCase_id = HTML.testCase_id
mySSH = SSH.SSHConnection()
if (self.pStatus < 0):
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus)
- self.htmlObj.CreateHtmlTabFooter(False)
+ HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus)
+ HTML.CreateHtmlTabFooter(False)
sys.exit(1)
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
result = re.search('T_stdout', str(self.Initialize_eNB_args))
- if (result is not None) and (self.epcObj is not None):
- localEpcIpAddr = self.epcObj.IPAddress
- localEpcUserName = self.epcObj.UserName
- localEpcPassword = self.epcObj.Password
+ if (result is not None):
+ localEpcIpAddr = EPC.IPAddress
+ localEpcUserName = EPC.UserName
+ localEpcPassword = EPC.Password
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
mySSH.command('ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"', '\$', 5)
result = re.search('interfaceToUse=(?P[a-zA-Z0-9\-\_]+)done', mySSH.getBefore())
@@ -574,9 +390,8 @@ class RANManagement():
mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 60)
# Make a copy and adapt to EPC / eNB IP addresses
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
- if self.epcObj is not None:
- localMmeIpAddr = self.epcObj.MmeIPAddress
- mySSH.command('sed -i -e \'s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
+ localMmeIpAddr = EPC.MmeIPAddress
+ mySSH.command('sed -i -e \'s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
mySSH.command('sed -i -e \'s/CI_ENB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
mySSH.command('sed -i -e \'s/CI_GNB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2);
mySSH.command('sed -i -e \'s/CI_RCC_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
@@ -627,14 +442,13 @@ class RANManagement():
mySSH.close()
doLoop = False
logging.error('\u001B[1;37;41m eNB/gNB/ocp-eNB logging system did not show got sync! \u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'KO', CONST.ALL_PROCESSES_OK)
# In case of T tracer recording, we need to kill tshark on EPC side
result = re.search('T_stdout', str(self.Initialize_eNB_args))
- if (result is not None) and (self.epcObj is not None):
- localEpcIpAddr = self.epcObj.IPAddress
- localEpcUserName = self.epcObj.UserName
- localEpcPassword = self.epcObj.Password
+ if (result is not None):
+ localEpcIpAddr = EPC.IPAddress
+ localEpcUserName = EPC.UserName
+ localEpcPassword = EPC.Password
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
@@ -685,8 +499,7 @@ class RANManagement():
self.eNBstatuses[int(self.eNB_instance)] = int(self.eNB_serverId[self.eNB_instance])
mySSH.close()
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' -O ' + config_file + extra_options, 'OK', CONST.ALL_PROCESSES_OK)
logging.debug('\u001B[1m Initialize eNB/gNB/ocp-eNB Completed\u001B[0m')
def CheckeNBProcess(self, status_queue):
@@ -721,7 +534,7 @@ class RANManagement():
except:
os.kill(os.getppid(),signal.SIGUSR1)
- def TerminateeNB(self):
+ def TerminateeNB(self, HTML, EPC):
if self.eNB_serverId[self.eNB_instance] == '0':
lIpAddr = self.eNBIPAddress
lUserName = self.eNBUserName
@@ -762,10 +575,10 @@ class RANManagement():
mySSH.close()
# If tracer options is on, stopping tshark on EPC side
result = re.search('T_stdout', str(self.Initialize_eNB_args))
- if (result is not None) and (self.epcObj is not None):
- localEpcIpAddr = self.epcObj.IPAddress
- localEpcUserName = self.epcObj.UserName
- localEpcPassword = self.epcObj.Password
+ if (result is not None):
+ localEpcIpAddr = EPC.IPAddress
+ localEpcUserName = EPC.UserName
+ localEpcPassword = EPC.Password
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
logging.debug('\u001B[1m Stopping tshark \u001B[0m')
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
@@ -789,9 +602,8 @@ class RANManagement():
mySSH.close()
mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + extracted_log_file, '.')
logging.debug('\u001B[1m Analyzing eNB replay logfile \u001B[0m')
- logStatus = self.AnalyzeLogFile_eNB(extracted_log_file)
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
+ logStatus = self.AnalyzeLogFile_eNB(extracted_log_file, HTML)
+ HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
self.eNBLogFiles[int(self.eNB_instance)] = ''
else:
analyzeFile = False
@@ -803,27 +615,23 @@ class RANManagement():
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.')
if (copyin_res == -1):
logging.debug('\u001B[1;37;41m Could not copy ' + nodeB_prefix + 'NB logfile to analyze it! \u001B[0m')
- if self.htmlObj is not None:
- self.htmlObj.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
- self.htmlObj.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
+ HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!'
+ HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
self.eNBmbmsEnables[int(self.eNB_instance)] = False
return
if self.eNB_serverId[self.eNB_instance] != '0':
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/')
logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze)
- logStatus = self.AnalyzeLogFile_eNB(fileToAnalyze)
+ logStatus = self.AnalyzeLogFile_eNB(fileToAnalyze, HTML)
if (logStatus < 0):
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow('N/A', 'KO', logStatus)
+ HTML.CreateHtmlTestRow('N/A', 'KO', logStatus)
self.preamtureExit = True
self.eNBmbmsEnables[int(self.eNB_instance)] = False
return
else:
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
else:
- if self.htmlObj is not None:
- self.htmlObj.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
+ HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
self.eNBmbmsEnables[int(self.eNB_instance)] = False
self.eNBstatuses[int(self.eNB_instance)] = -1
@@ -837,7 +645,7 @@ class RANManagement():
mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap enb_*txt', '\$', 5)
mySSH.close()
- def AnalyzeLogFile_eNB(self, eNBlogFile):
+ def AnalyzeLogFile_eNB(self, eNBlogFile, HTML):
if (not os.path.isfile('./' + eNBlogFile)):
return -1
enb_log_file = open('./' + eNBlogFile, 'r')
@@ -1206,8 +1014,7 @@ class RANManagement():
logging.debug('\u001B[1;37;41m ' + rlcMsg + ' \u001B[0m')
htmleNBFailureMsg += rlcMsg + '\n'
global_status = CONST.ENB_PROCESS_REALTIME_ISSUE
- if self.htmlObj is not None:
- self.htmlObj.htmleNBFailureMsg=htmleNBFailureMsg
+ HTML.htmleNBFailureMsg=htmleNBFailureMsg
# Runtime statistics for console output and HTML
if runTime != '':
logging.debug(runTime)