|
|
|
@@ -62,6 +62,7 @@ class EPCManagement():
|
|
|
|
|
self.PcapFileName = ''
|
|
|
|
|
self.testCase_id = ''
|
|
|
|
|
self.MmeIPAddress = ''
|
|
|
|
|
self.AmfIPAddress = ''
|
|
|
|
|
self.containerPrefix = 'prod'
|
|
|
|
|
self.mmeConfFile = 'mme.conf'
|
|
|
|
|
self.yamlPath = ''
|
|
|
|
@@ -76,7 +77,7 @@ class EPCManagement():
|
|
|
|
|
HELP.GenericHelp(CONST.Version)
|
|
|
|
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
|
|
|
|
sys.exit('Insufficient EPC Parameters')
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
logging.debug('Using the OAI EPC Release 14 Cassandra-based HSS in Docker')
|
|
|
|
@@ -120,7 +121,7 @@ class EPCManagement():
|
|
|
|
|
HELP.GenericHelp(CONST.Version)
|
|
|
|
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
|
|
|
|
sys.exit('Insufficient EPC Parameters')
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
logging.debug('Using the OAI EPC Release 14 MME in Docker')
|
|
|
|
@@ -161,7 +162,7 @@ class EPCManagement():
|
|
|
|
|
return
|
|
|
|
|
# Only in case of Docker containers, MME IP address is not the EPC HOST IP address
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
mySSH.command('docker inspect --format="MME_IP_ADDR = {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" ' + self.containerPrefix + '-oai-mme', '\$', 5)
|
|
|
|
|
result = re.search('MME_IP_ADDR = (?P<mme_ip_addr>[0-9\.]+)', mySSH.getBefore())
|
|
|
|
@@ -177,7 +178,7 @@ class EPCManagement():
|
|
|
|
|
HELP.GenericHelp(CONST.Version)
|
|
|
|
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
|
|
|
|
sys.exit('Insufficient EPC Parameters')
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
logging.debug('Using the OAI EPC Release 14 SPGW-CUPS in Docker')
|
|
|
|
@@ -211,9 +212,40 @@ class EPCManagement():
|
|
|
|
|
mySSH.close()
|
|
|
|
|
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
|
|
|
|
|
|
|
|
def Initialize5GCN(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)
|
|
|
|
|
sys.exit('Insufficient EPC Parameters')
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('ltebox', self.Type, re.IGNORECASE):
|
|
|
|
|
logging.debug('Using the sabox simulated HSS')
|
|
|
|
|
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
|
|
|
|
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
|
|
|
mySSH.command('cd /opt/hss_sim0609', '\$', 5)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S rm -f hss.log', '\$', 5)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S echo "Starting sudo session" && sudo su -c "screen -dm -S simulated_5g_hss ./start_5g_hss"', '\$', 5)
|
|
|
|
|
logging.debug('Using the sabox')
|
|
|
|
|
mySSH.command('cd /opt/ltebox/tools', '\$', 5)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S ./start_sabox', '\$', 5)
|
|
|
|
|
else:
|
|
|
|
|
logging.error('This option should not occur!')
|
|
|
|
|
mySSH.close()
|
|
|
|
|
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
|
|
|
|
|
|
|
|
def SetAmfIPAddress(self):
|
|
|
|
|
# Not an error if we don't need an 5GCN
|
|
|
|
|
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
|
|
|
|
return
|
|
|
|
|
if self.IPAddress == 'none':
|
|
|
|
|
return
|
|
|
|
|
if re.match('ltebox', self.Type, re.IGNORECASE):
|
|
|
|
|
self.MmeIPAddress = self.IPAddress
|
|
|
|
|
|
|
|
|
|
def CheckHSSProcess(self, status_queue):
|
|
|
|
|
try:
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('docker top ' + self.containerPrefix + '-oai-hss', '\$', 5)
|
|
|
|
@@ -238,7 +270,7 @@ class EPCManagement():
|
|
|
|
|
|
|
|
|
|
def CheckMMEProcess(self, status_queue):
|
|
|
|
|
try:
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('docker top ' + self.containerPrefix + '-oai-mme', '\$', 5)
|
|
|
|
@@ -251,11 +283,11 @@ class EPCManagement():
|
|
|
|
|
elif re.match('OAI', self.Type, re.IGNORECASE):
|
|
|
|
|
result = re.search('\/bin\/bash .\/run_', mySSH.getBefore())
|
|
|
|
|
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
|
|
|
result = re.search('mme', mySSH.getBefore())
|
|
|
|
|
result = re.search('mme|amf', mySSH.getBefore())
|
|
|
|
|
else:
|
|
|
|
|
logging.error('This should not happen!')
|
|
|
|
|
if result is None:
|
|
|
|
|
logging.debug('\u001B[1;37;41m MME Process Not Found! \u001B[0m')
|
|
|
|
|
logging.debug('\u001B[1;37;41m MME|AMF Process Not Found! \u001B[0m')
|
|
|
|
|
status_queue.put(CONST.MME_PROCESS_FAILED)
|
|
|
|
|
else:
|
|
|
|
|
status_queue.put(CONST.MME_PROCESS_OK)
|
|
|
|
@@ -265,7 +297,7 @@ class EPCManagement():
|
|
|
|
|
|
|
|
|
|
def CheckSPGWProcess(self, status_queue):
|
|
|
|
|
try:
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('docker top ' + self.containerPrefix + '-oai-spgwc', '\$', 5)
|
|
|
|
@@ -281,11 +313,11 @@ class EPCManagement():
|
|
|
|
|
result = re.search('\/bin\/bash .\/run_', mySSH.getBefore())
|
|
|
|
|
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('stdbuf -o0 ps -aux | grep --color=never xGw | grep -v grep', '\$', 5)
|
|
|
|
|
result = re.search('xGw', mySSH.getBefore())
|
|
|
|
|
result = re.search('xGw|upf', mySSH.getBefore())
|
|
|
|
|
else:
|
|
|
|
|
logging.error('This should not happen!')
|
|
|
|
|
if result is None:
|
|
|
|
|
logging.debug('\u001B[1;37;41m SPGW Process Not Found! \u001B[0m')
|
|
|
|
|
logging.debug('\u001B[1;37;41m SPGW|UPF Process Not Found! \u001B[0m')
|
|
|
|
|
status_queue.put(CONST.SPGW_PROCESS_FAILED)
|
|
|
|
|
else:
|
|
|
|
|
status_queue.put(CONST.SPGW_PROCESS_OK)
|
|
|
|
@@ -294,7 +326,7 @@ class EPCManagement():
|
|
|
|
|
os.kill(os.getppid(),signal.SIGUSR1)
|
|
|
|
|
|
|
|
|
|
def TerminateHSS(self, HTML):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-hss /bin/bash -c "killall --signal SIGINT oai_hss tshark"', '\$', 5)
|
|
|
|
@@ -322,14 +354,14 @@ class EPCManagement():
|
|
|
|
|
mySSH.command('cd ' + self.SourceCodePath, '\$', 5)
|
|
|
|
|
mySSH.command('cd scripts', '\$', 5)
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGKILL hss_sim', '\$', 5)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S screen -S simulated_hss -X quit', '\$', 5)
|
|
|
|
|
else:
|
|
|
|
|
logging.error('This should not happen!')
|
|
|
|
|
mySSH.close()
|
|
|
|
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
|
|
|
|
|
|
|
|
def TerminateMME(self, HTML):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-mme /bin/bash -c "killall --signal SIGINT oai_mme tshark"', '\$', 5)
|
|
|
|
@@ -355,7 +387,7 @@ class EPCManagement():
|
|
|
|
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
|
|
|
|
|
|
|
|
def TerminateSPGW(self, HTML):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "killall --signal SIGINT oai_spgwc tshark"', '\$', 5)
|
|
|
|
@@ -397,6 +429,22 @@ class EPCManagement():
|
|
|
|
|
mySSH.close()
|
|
|
|
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
|
|
|
|
|
|
|
|
def Terminate5GCN(self, HTML):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
if re.match('ltebox', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('cd /opt/ltebox/tools', '\$', 5)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S ./stop_sabox', '\$', 5)
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
mySSH.command('cd ' + self.SourceCodePath, '\$', 5)
|
|
|
|
|
mySSH.command('cd scripts', '\$', 5)
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S screen -S simulated_5g_hss -X quit', '\$', 5)
|
|
|
|
|
else:
|
|
|
|
|
logging.error('This should not happen!')
|
|
|
|
|
mySSH.close()
|
|
|
|
|
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
|
|
|
|
|
|
|
|
def DeployEpc(self, HTML):
|
|
|
|
|
logging.debug('Trying to deploy')
|
|
|
|
|
if not re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
|
|
@@ -408,7 +456,7 @@ class EPCManagement():
|
|
|
|
|
HELP.GenericHelp(CONST.Version)
|
|
|
|
|
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.SourceCodePath, self.Type)
|
|
|
|
|
sys.exit('Insufficient EPC Parameters')
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
mySSH.command('docker-compose --version', '\$', 5)
|
|
|
|
|
result = re.search('docker-compose version 1', mySSH.getBefore())
|
|
|
|
@@ -502,7 +550,7 @@ class EPCManagement():
|
|
|
|
|
logging.debug('Trying to undeploy')
|
|
|
|
|
# No check down, we suppose everything done before.
|
|
|
|
|
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
# Recovering logs and pcap files
|
|
|
|
|
mySSH.command('cd ' + self.SourceCodePath + '/logs', '\$', 5)
|
|
|
|
@@ -546,7 +594,7 @@ class EPCManagement():
|
|
|
|
|
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
|
|
|
|
|
|
|
|
|
def LogCollectHSS(self):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
|
|
|
mySSH.command('rm -f hss.log.zip', '\$', 5)
|
|
|
|
@@ -576,7 +624,7 @@ class EPCManagement():
|
|
|
|
|
mySSH.close()
|
|
|
|
|
|
|
|
|
|
def LogCollectMME(self):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
|
|
|
mySSH.command('rm -f mme.log.zip', '\$', 5)
|
|
|
|
@@ -597,13 +645,13 @@ class EPCManagement():
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S rm mme*.log', '\$', 5)
|
|
|
|
|
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('cp /opt/ltebox/var/log/*Log.0 .', '\$', 5)
|
|
|
|
|
mySSH.command('zip mme.log.zip mmeLog.0 s1apcLog.0 s1apsLog.0 s11cLog.0 libLog.0 s1apCodecLog.0', '\$', 60)
|
|
|
|
|
mySSH.command('zip mme.log.zip mmeLog.0 s1apcLog.0 s1apsLog.0 s11cLog.0 libLog.0 s1apCodecLog.0 amfLog.0 ngapcLog.0 ngapcommonLog.0 ngapsLog.0', '\$', 60)
|
|
|
|
|
else:
|
|
|
|
|
logging.error('This option should not occur!')
|
|
|
|
|
mySSH.close()
|
|
|
|
|
|
|
|
|
|
def LogCollectSPGW(self):
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH = SSH.SSHConnection()
|
|
|
|
|
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
|
|
|
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
|
|
|
mySSH.command('rm -f spgw.log.zip', '\$', 5)
|
|
|
|
@@ -625,8 +673,8 @@ class EPCManagement():
|
|
|
|
|
mySSH.command('zip spgw.log.zip spgw*.log', '\$', 60)
|
|
|
|
|
mySSH.command('echo ' + self.Password + ' | sudo -S rm spgw*.log', '\$', 5)
|
|
|
|
|
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
|
|
|
mySSH.command('cp /opt/ltebox/var/log/xGwLog.0 .', '\$', 5)
|
|
|
|
|
mySSH.command('zip spgw.log.zip xGwLog.0', '\$', 60)
|
|
|
|
|
mySSH.command('cp /opt/ltebox/var/log/*Log.0 .', '\$', 5)
|
|
|
|
|
mySSH.command('zip spgw.log.zip xGwLog.0 upfLog.0', '\$', 60)
|
|
|
|
|
else:
|
|
|
|
|
logging.error('This option should not occur!')
|
|
|
|
|
mySSH.close()
|
|
|
|
|