Merge remote-tracking branch 'origin/ci-iperf-html-e1' into integration_2023_w31
This commit is contained in:
@@ -103,7 +103,6 @@ pipeline {
|
|||||||
gitCommitAuthorEmailAddr = sh returnStdout: true, script: 'git log -n1 --pretty=format:%ae ${GIT_COMMIT}'
|
gitCommitAuthorEmailAddr = sh returnStdout: true, script: 'git log -n1 --pretty=format:%ae ${GIT_COMMIT}'
|
||||||
gitCommitAuthorEmailAddr = gitCommitAuthorEmailAddr.trim()
|
gitCommitAuthorEmailAddr = gitCommitAuthorEmailAddr.trim()
|
||||||
echo "GitLab Usermail is ${gitCommitAuthorEmailAddr}"
|
echo "GitLab Usermail is ${gitCommitAuthorEmailAddr}"
|
||||||
sh "git log -n1 --pretty=format:\"%s\" > .git/CI_COMMIT_MSG"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -525,24 +524,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
|
||||||
script {
|
|
||||||
def eSubject = JOB_NAME + ' - Build # ' + BUILD_ID + ' - ' + currentBuild.result + '!'
|
|
||||||
def eBody = "Hi,\n\n"
|
|
||||||
eBody += "Here are attached HTML report files for " + JOB_NAME + " - Build # " + BUILD_ID + " - " + currentBuild.result + "!\n\n"
|
|
||||||
eBody += "Regards,\n"
|
|
||||||
eBody += "OAI CI Team"
|
|
||||||
emailext attachmentsPattern: '*results*.html',
|
|
||||||
body: eBody,
|
|
||||||
replyTo: 'no-reply@openairinterface.org',
|
|
||||||
subject: eSubject,
|
|
||||||
to: gitCommitAuthorEmailAddr
|
|
||||||
|
|
||||||
if (fileExists('.git/CI_COMMIT_MSG')) {
|
|
||||||
sh "rm -f .git/CI_COMMIT_MSG"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
success {
|
success {
|
||||||
script {
|
script {
|
||||||
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): passed (" + BUILD_URL + ")"
|
def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): passed (" + BUILD_URL + ")"
|
||||||
|
|||||||
@@ -904,7 +904,7 @@ class Containerize():
|
|||||||
cnt = 0
|
cnt = 0
|
||||||
while (cnt < 20):
|
while (cnt < 20):
|
||||||
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
|
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
|
||||||
result = re.search('got sync|Starting F1AP at CU|Got sync|Waiting for RUs to be configured', mySSH.getBefore())
|
result = re.search('got sync|Starting E1AP at CU UP|Starting F1AP at CU|Got sync|Waiting for RUs to be configured', mySSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
time.sleep(6)
|
time.sleep(6)
|
||||||
cnt += 1
|
cnt += 1
|
||||||
|
|||||||
@@ -469,8 +469,8 @@ class HTMLManagement():
|
|||||||
self.htmlFile.write(' <td bgcolor = "orange" >')
|
self.htmlFile.write(' <td bgcolor = "orange" >')
|
||||||
else:
|
else:
|
||||||
self.htmlFile.write(' <td>')
|
self.htmlFile.write(' <td>')
|
||||||
for i in infoList:
|
for i in infoList: # add custom style to have elements side-by-side to reduce need for vertical space
|
||||||
self.htmlFile.write(f' <pre>{i}</pre>')
|
self.htmlFile.write(f' <pre style="display: inline flow-root list-item; margin: 0 3px 0 3px; min-width: 24em;">{i}</pre>')
|
||||||
|
|
||||||
self.htmlFile.write(' </td>')
|
self.htmlFile.write(' </td>')
|
||||||
self.htmlFile.write(' </tr>\n')
|
self.htmlFile.write(' </tr>\n')
|
||||||
|
|||||||
+73
-322
@@ -43,7 +43,7 @@ import logging
|
|||||||
import datetime
|
import datetime
|
||||||
import signal
|
import signal
|
||||||
import statistics as stat
|
import statistics as stat
|
||||||
from multiprocessing import Process, Lock, SimpleQueue
|
from multiprocessing import SimpleQueue
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
|
|
||||||
#import our libs
|
#import our libs
|
||||||
@@ -494,15 +494,6 @@ class OaiCiTest():
|
|||||||
messages = [f.result() for f in futures]
|
messages = [f.result() for f in futures]
|
||||||
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
|
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
|
||||||
|
|
||||||
def ping_iperf_wrong_exit(self, lock, UE_IPAddress, device_id, statusQueue, message):
|
|
||||||
logging.error(f"ue {device_id} {UE_IPAddress}: {message}")
|
|
||||||
lock.acquire()
|
|
||||||
statusQueue.put(-1)
|
|
||||||
statusQueue.put(device_id)
|
|
||||||
statusQueue.put(UE_IPAddress)
|
|
||||||
statusQueue.put(message)
|
|
||||||
lock.release()
|
|
||||||
|
|
||||||
def Ping_common(self, EPC, ue, RAN):
|
def Ping_common(self, EPC, ue, RAN):
|
||||||
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
|
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
|
||||||
ping_status = 0
|
ping_status = 0
|
||||||
@@ -617,7 +608,7 @@ class OaiCiTest():
|
|||||||
def Iperf_ComputeModifiedBW(self, idx, ue_num):
|
def Iperf_ComputeModifiedBW(self, idx, ue_num):
|
||||||
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(self.iperf_args))
|
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(self.iperf_args))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m Iperf bandwidth Not Found! \u001B[0m')
|
logging.error('\u001B[1;37;41m Iperf bandwidth Not Found! \u001B[0m')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
iperf_bandwidth = result.group('iperf_bandwidth')
|
iperf_bandwidth = result.group('iperf_bandwidth')
|
||||||
if self.iperf_profile == 'balanced':
|
if self.iperf_profile == 'balanced':
|
||||||
@@ -635,11 +626,11 @@ class OaiCiTest():
|
|||||||
iperf_bandwidth_str_new = f"-b {'%.2f' % iperf_bandwidth_new}"
|
iperf_bandwidth_str_new = f"-b {'%.2f' % iperf_bandwidth_new}"
|
||||||
result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args))
|
result = re.sub(iperf_bandwidth_str, iperf_bandwidth_str_new, str(self.iperf_args))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('\u001B[1;37;41m Calculate Iperf bandwidth Failed! \u001B[0m')
|
logging.error('\u001B[1;37;41m Calculate Iperf bandwidth Failed! \u001B[0m')
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def Iperf_analyzeV2TCPOutput(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options,EPC,SSH, filename):
|
def Iperf_analyzeV2TCPOutput(self, SSH, filename):
|
||||||
|
|
||||||
SSH.command(f'awk -f /tmp/tcp_iperf_stats.awk {filename}', '\$', 5)
|
SSH.command(f'awk -f /tmp/tcp_iperf_stats.awk {filename}', '\$', 5)
|
||||||
result = re.search('Avg Bitrate : (?P<average>[0-9\.]+ Mbits\/sec) Max Bitrate : (?P<maximum>[0-9\.]+ Mbits\/sec) Min Bitrate : (?P<minimum>[0-9\.]+ Mbits\/sec)', SSH.getBefore())
|
result = re.search('Avg Bitrate : (?P<average>[0-9\.]+ Mbits\/sec) Max Bitrate : (?P<maximum>[0-9\.]+ Mbits\/sec) Min Bitrate : (?P<minimum>[0-9\.]+ Mbits\/sec)', SSH.getBefore())
|
||||||
@@ -647,44 +638,34 @@ class OaiCiTest():
|
|||||||
avgbitrate = result.group('average')
|
avgbitrate = result.group('average')
|
||||||
maxbitrate = result.group('maximum')
|
maxbitrate = result.group('maximum')
|
||||||
minbitrate = result.group('minimum')
|
minbitrate = result.group('minimum')
|
||||||
lock.acquire()
|
|
||||||
logging.debug(f'\u001B[1;37;44m TCP iperf result ({UE_IPAddress}) \u001B[0m')
|
|
||||||
msg = 'TCP Stats :\n'
|
msg = 'TCP Stats :\n'
|
||||||
if avgbitrate is not None:
|
if avgbitrate is not None:
|
||||||
logging.debug(f'\u001B[1;34m Avg Bitrate : {avgbitrate} \u001B[0m')
|
|
||||||
msg += f'Avg Bitrate : {avgbitrate} \n'
|
msg += f'Avg Bitrate : {avgbitrate} \n'
|
||||||
if maxbitrate is not None:
|
if maxbitrate is not None:
|
||||||
logging.debug(f'\u001B[1;34m Max Bitrate : {maxbitrate} \u001B[0m')
|
|
||||||
msg += f'Max Bitrate : {maxbitrate} \n'
|
msg += f'Max Bitrate : {maxbitrate} \n'
|
||||||
if minbitrate is not None:
|
if minbitrate is not None:
|
||||||
logging.debug(f'\u001B[1;34m Min Bitrate : {minbitrate} \u001B[0m')
|
|
||||||
msg += f'Min Bitrate : {minbitrate} \n'
|
msg += f'Min Bitrate : {minbitrate} \n'
|
||||||
statusQueue.put(0)
|
return (True, msg)
|
||||||
statusQueue.put(device_id)
|
|
||||||
statusQueue.put(UE_IPAddress)
|
|
||||||
statusQueue.put(msg)
|
|
||||||
lock.release()
|
|
||||||
|
|
||||||
return 0
|
return (False, "could not analyze log file")
|
||||||
|
|
||||||
def Iperf_analyzeV2Output(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options,EPC,SSH):
|
def Iperf_analyzeV2Output(self, iperf_real_options, EPC, SSH):
|
||||||
|
|
||||||
result = re.search('-u', str(iperf_real_options))
|
result = re.search('-u', str(iperf_real_options))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('Into Iperf_analyzeV2TCPOutput client')
|
|
||||||
filename = f'{EPC.SourceCodePath}/scripts/iperf_{self.testCase_id}_{device_id}.log'
|
filename = f'{EPC.SourceCodePath}/scripts/iperf_{self.testCase_id}_{device_id}.log'
|
||||||
response = self.Iperf_analyzeV2TCPOutput(lock, UE_IPAddress, device_id, statusQueue, iperf_real_options, EPC, SSH, filename)
|
response = self.Iperf_analyzeV2TCPOutput(SSH, filename)
|
||||||
logging.debug(f'Iperf_analyzeV2TCPOutput response returned value = {response}')
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
result = re.search('Server Report:', SSH.getBefore())
|
result = re.search('Server Report:', SSH.getBefore())
|
||||||
if result is None:
|
if result is None:
|
||||||
result = re.search('read failed: Connection refused', SSH.getBefore())
|
result = re.search('read failed: Connection refused', SSH.getBefore())
|
||||||
if result is not None:
|
if result is not None:
|
||||||
logging.debug('\u001B[1;37;41m Could not connect to iperf server! \u001B[0m')
|
msg = 'Could not connect to iperf server!'
|
||||||
|
return (False, msg)
|
||||||
else:
|
else:
|
||||||
logging.debug('\u001B[1;37;41m Server Report and Connection refused Not Found! \u001B[0m')
|
msg = 'Server Report and Connection refused Not Found!'
|
||||||
return -1
|
return (False, msg)
|
||||||
# Computing the requested bandwidth in float
|
# Computing the requested bandwidth in float
|
||||||
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
|
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
@@ -708,14 +689,11 @@ class OaiCiTest():
|
|||||||
bitrate = result.group('bitrate')
|
bitrate = result.group('bitrate')
|
||||||
packetloss = result.group('packetloss')
|
packetloss = result.group('packetloss')
|
||||||
jitter = result.group('jitter')
|
jitter = result.group('jitter')
|
||||||
lock.acquire()
|
|
||||||
logging.debug(f'\u001B[1;37;44m iperf result {UE_IPAddress} \u001B[0m')
|
|
||||||
iperfStatus = True
|
iperfStatus = True
|
||||||
msg = f'Req Bitrate : {req_bandwidth} \n'
|
msg = f'Req Bitrate : {req_bandwidth} \n'
|
||||||
logging.debug(f'\u001B[1;34m Req Bitrate : {req_bandwidth} \u001B[0m')
|
|
||||||
if bitrate is not None:
|
if bitrate is not None:
|
||||||
msg += f'Bitrate : {bitrate} \n'
|
msg += f'Bitrate : {bitrate} \n'
|
||||||
logging.debug(f'\u001B[1;34m Bitrate : {bitrate} \u001B[0m')
|
|
||||||
result = re.search('(?P<real_bw>[0-9\.]+) [KMG]bits/sec', str(bitrate))
|
result = re.search('(?P<real_bw>[0-9\.]+) [KMG]bits/sec', str(bitrate))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
actual_bw = float(str(result.group('real_bw')))
|
actual_bw = float(str(result.group('real_bw')))
|
||||||
@@ -731,50 +709,37 @@ class OaiCiTest():
|
|||||||
br_loss = 100 * actual_bw / req_bw
|
br_loss = 100 * actual_bw / req_bw
|
||||||
bitperf = '%.2f ' % br_loss
|
bitperf = '%.2f ' % br_loss
|
||||||
msg += f'Bitrate Perf: {bitperf} %\n'
|
msg += f'Bitrate Perf: {bitperf} %\n'
|
||||||
logging.debug(f'\u001B[1;34m Bitrate Perf: {bitperf} %\u001B[0m')
|
|
||||||
if packetloss is not None:
|
if packetloss is not None:
|
||||||
msg += f'Packet Loss : {packetloss} %\n'
|
msg += f'Packet Loss : {packetloss} %\n'
|
||||||
logging.debug(f'\u001B[1;34m Packet Loss : {packetloss} %\u001B[0m')
|
|
||||||
if float(packetloss) > float(self.iperf_packetloss_threshold):
|
if float(packetloss) > float(self.iperf_packetloss_threshold):
|
||||||
msg += 'Packet Loss too high!\n'
|
msg += 'Packet Loss too high!\n'
|
||||||
logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m')
|
|
||||||
iperfStatus = False
|
iperfStatus = False
|
||||||
if jitter is not None:
|
if jitter is not None:
|
||||||
msg += f'Jitter : {jitter} \n'
|
msg += f'Jitter : {jitter} \n'
|
||||||
logging.debug(f'\u001B[1;34m Jitter : {jitter} \u001B[0m')
|
|
||||||
if (iperfStatus):
|
return (iperfStatus, msg)
|
||||||
statusQueue.put(0)
|
|
||||||
else:
|
|
||||||
statusQueue.put(-1)
|
|
||||||
statusQueue.put(device_id)
|
|
||||||
statusQueue.put(UE_IPAddress)
|
|
||||||
statusQueue.put(msg)
|
|
||||||
lock.release()
|
|
||||||
return 0
|
|
||||||
else:
|
else:
|
||||||
return -2
|
return (False, "could not analyze server log")
|
||||||
|
|
||||||
|
|
||||||
def Iperf_analyzeV2BIDIR(self, lock, UE_IPAddress, device_id, statusQueue,server_filename,client_filename):
|
def Iperf_analyzeV2BIDIR(self, server_filename, client_filename):
|
||||||
|
|
||||||
#check the 2 files are here
|
#check the 2 files are here
|
||||||
if (not os.path.isfile(client_filename)) or (not os.path.isfile(server_filename)):
|
if (not os.path.isfile(client_filename)) or (not os.path.isfile(server_filename)):
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Client or Server Log File not present')
|
return (False, 'Bidir TCP: Client or Server Log File not present')
|
||||||
return
|
|
||||||
#check the 2 files size
|
#check the 2 files size
|
||||||
if (os.path.getsize(client_filename)==0) and (os.path.getsize(server_filename)==0):
|
if (os.path.getsize(client_filename)==0) and (os.path.getsize(server_filename)==0):
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Client and Server Log File are empty')
|
return (False, 'Bidir TCP: Client and Server Log File are empty')
|
||||||
return
|
|
||||||
|
|
||||||
report_msg='TCP BIDIR Report:\n'
|
report_msg = ''
|
||||||
#if client is not empty, all the info is in, otherwise we ll use the server file to get some partial info
|
#if client is not empty, all the info is in, otherwise we ll use the server file to get some partial info
|
||||||
client_filesize = os.path.getsize(client_filename)
|
client_filesize = os.path.getsize(client_filename)
|
||||||
if client_filesize == 0:
|
if client_filesize == 0:
|
||||||
report_msg+="Client file (UE) present but !!! EMPTY !!!\n"
|
report_msg+="Client file (UE) present but !!! EMPTY !!!\n"
|
||||||
report_msg+="Partial report from server file\n"
|
report_msg+="Partial report from server file"
|
||||||
filename = server_filename
|
filename = server_filename
|
||||||
else :
|
else :
|
||||||
report_msg+="Report from client file (UE)\n"
|
report_msg+="Report from client file (UE)"
|
||||||
filename = client_filename
|
filename = client_filename
|
||||||
|
|
||||||
report=[] #used to check if relevant lines were found
|
report=[] #used to check if relevant lines were found
|
||||||
@@ -784,32 +749,19 @@ class OaiCiTest():
|
|||||||
result = re.search(rf'^\[\s+\d+\](?P<direction>\[.+\]).*\s+(?P<bitrate>[0-9\.]+ [KMG]bits\/sec).*\s+(?P<role>\bsender|receiver\b)', str(line))
|
result = re.search(rf'^\[\s+\d+\](?P<direction>\[.+\]).*\s+(?P<bitrate>[0-9\.]+ [KMG]bits\/sec).*\s+(?P<role>\bsender|receiver\b)', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
report.append(str(line))
|
report.append(str(line))
|
||||||
report_msg+=result.group('role') + ' ' + result.group('direction')+ '\t = ' +result.group('bitrate')+'\n'
|
report_msg += f"\n{result.group('role')} {result.group('direction')}\t: {result.group('bitrate')}"
|
||||||
if len(report)>0:
|
if len(report) == 0:
|
||||||
lock.acquire()
|
return (False, 'Bidir TCP: Could not analyze from Log file')
|
||||||
statusQueue.put(0)
|
|
||||||
statusQueue.put(device_id)
|
|
||||||
statusQueue.put(UE_IPAddress)
|
|
||||||
statusQueue.put(report_msg)
|
|
||||||
logging.debug(f'\u001B[1;37;45m TCP Bidir Iperf Result ({UE_IPAddress}) \u001B[0m')
|
|
||||||
for rLine in report_msg.split('\n'):
|
|
||||||
logging.debug(f'\u001B[1;35m {rLine} \u001B[0m')
|
|
||||||
lock.release()
|
|
||||||
else:
|
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Bidir TCP : Could not analyze from Log file')
|
|
||||||
|
|
||||||
|
return (True, report_msg)
|
||||||
|
|
||||||
|
def Iperf_analyzeV2Server(self, iperf_real_options, filename, type):
|
||||||
def Iperf_analyzeV2Server(self, lock, UE_IPAddress, device_id, statusQueue, iperf_real_options, filename,type):
|
|
||||||
if (not os.path.isfile(filename)):
|
if (not os.path.isfile(filename)):
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Could not analyze from server log')
|
return (False, 'Could not analyze from server log')
|
||||||
return
|
|
||||||
# Computing the requested bandwidth in float
|
# Computing the requested bandwidth in float
|
||||||
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
|
result = re.search('-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]', str(iperf_real_options))
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.debug('Iperf bandwidth Not Found!')
|
return (False, 'Could not compute Iperf bandwidth!')
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Could not compute Iperf bandwidth!')
|
|
||||||
return
|
|
||||||
else:
|
else:
|
||||||
req_bandwidth = result.group('iperf_bandwidth')
|
req_bandwidth = result.group('iperf_bandwidth')
|
||||||
req_bw = float(req_bandwidth)
|
req_bw = float(req_bandwidth)
|
||||||
@@ -856,6 +808,8 @@ class OaiCiTest():
|
|||||||
br_sum = curr_br + br_sum
|
br_sum = curr_br + br_sum
|
||||||
ji_sum = float(ji[0]) + ji_sum
|
ji_sum = float(ji[0]) + ji_sum
|
||||||
|
|
||||||
|
server_file.close()
|
||||||
|
|
||||||
if (row_idx > 0):
|
if (row_idx > 0):
|
||||||
br_sum = br_sum / row_idx
|
br_sum = br_sum / row_idx
|
||||||
ji_sum = ji_sum / row_idx
|
ji_sum = ji_sum / row_idx
|
||||||
@@ -876,87 +830,25 @@ class OaiCiTest():
|
|||||||
pl = float(100 * pl_sum / ps_sum)
|
pl = float(100 * pl_sum / ps_sum)
|
||||||
packetloss = '%2.1f ' % (pl)
|
packetloss = '%2.1f ' % (pl)
|
||||||
packetloss += '%'
|
packetloss += '%'
|
||||||
#checking packet loss compliance
|
|
||||||
if float(pl) > float(self.iperf_packetloss_threshold):
|
result = float(br_loss) >= float(self.iperf_bitrate_threshold) and float(pl) <= float(self.iperf_packetloss_threshold)
|
||||||
pal_too_high_msg = 'Packet Loss too high : tested = '+packetloss+', target = '+self.iperf_packetloss_threshold+'%'
|
|
||||||
else:
|
|
||||||
pal_too_high_msg='Packet Loss value is within acceptance range'
|
|
||||||
#checking bitrate perf compliance
|
|
||||||
if float(br_loss) < float(self.iperf_bitrate_threshold):
|
|
||||||
bit_too_low_msg = 'Bitrate too low : tested = '+bitperf+', target = '+self.iperf_bitrate_threshold+'%'
|
|
||||||
else:
|
|
||||||
bit_too_low_msg='Bitrate perf value is within acceptance range'
|
|
||||||
lock.acquire()
|
|
||||||
if (float(br_loss) < float(self.iperf_bitrate_threshold)) and (float(pl) > float(self.iperf_packetloss_threshold)):
|
|
||||||
statusQueue.put(-1)
|
|
||||||
elif (float(br_loss) < float(self.iperf_bitrate_threshold)) or (float(pl) > float(self.iperf_packetloss_threshold)):
|
|
||||||
statusQueue.put(1)
|
|
||||||
else:
|
|
||||||
statusQueue.put(0)
|
|
||||||
statusQueue.put(device_id)
|
|
||||||
statusQueue.put(UE_IPAddress)
|
|
||||||
req_msg = f'Req Bitrate : {req_bandwidth}'
|
req_msg = f'Req Bitrate : {req_bandwidth}'
|
||||||
bir_msg = f'Bitrate : {bitrate}'
|
bir_msg = f'Bitrate : {bitrate}'
|
||||||
brl_msg = f'Bitrate Perf: {bitperf}'
|
brl_msg = f'Bitrate Perf: {bitperf}'
|
||||||
|
if float(br_loss) < float(self.iperf_bitrate_threshold):
|
||||||
|
brl_msg += f' (too low! <{self.iperf_bitrate_threshold}%)'
|
||||||
jit_msg = f'Jitter : {jitter}'
|
jit_msg = f'Jitter : {jitter}'
|
||||||
pal_msg = f'Packet Loss : {packetloss}'
|
pal_msg = f'Packet Loss : {packetloss}'
|
||||||
statusQueue.put(f'{req_msg}\n{bir_msg}\n{brl_msg}\n{jit_msg}\n{pal_msg}\n{pal_too_high_msg}\n{bit_too_low_msg}\n')
|
if float(pl) > float(self.iperf_packetloss_threshold):
|
||||||
logging.debug(f'\u001B[1;37;45m iperf result ({UE_IPAddress}) \u001B[0m')
|
pal_msg += f' (too high! >{self.iperf_packetloss_threshold}%)'
|
||||||
logging.debug(f'\u001B[1;35m {req_msg} \u001B[0m')
|
return (result, f'{req_msg}\n{bir_msg}\n{brl_msg}\n{jit_msg}\n{pal_msg}')
|
||||||
logging.debug(f'\u001B[1;35m {bir_msg} \u001B[0m')
|
|
||||||
logging.debug(f'\u001B[1;35m {brl_msg} \u001B[0m')
|
|
||||||
logging.debug(f'\u001B[1;35m {jit_msg} \u001B[0m')
|
|
||||||
logging.debug(f'\u001B[1;35m {pal_msg} \u001B[0m')
|
|
||||||
logging.debug(f'\u001B[1;35m {pal_too_high_msg} \u001B[0m')
|
|
||||||
logging.debug(f'\u001B[1;35m {bit_too_low_msg} \u001B[0m')
|
|
||||||
lock.release()
|
|
||||||
else:
|
else:
|
||||||
self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, 'Could not analyze from server log')
|
return (False, 'Could not analyze from server log')
|
||||||
|
|
||||||
server_file.close()
|
def Iperf_Module(self, EPC, ue, RAN, idx, ue_num):
|
||||||
|
ueIP = ue.getIP()
|
||||||
|
if not ueIP:
|
||||||
def Iperf_analyzeV3Output(self, lock, UE_IPAddress, device_id, statusQueue,SSH):
|
return (False, f"UE {ue.getName()} has no IP address")
|
||||||
|
|
||||||
result = re.search('(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)\r\n(?:|\[ *\d+\] Sent \d+ datagrams)\r\niperf Done\.', SSH.getBefore())
|
|
||||||
if result is None:
|
|
||||||
result = re.search('(?P<error>iperf: error - [a-zA-Z0-9 :]+)', SSH.getBefore())
|
|
||||||
lock.acquire()
|
|
||||||
statusQueue.put(-1)
|
|
||||||
statusQueue.put(device_id)
|
|
||||||
statusQueue.put(UE_IPAddress)
|
|
||||||
if result is not None:
|
|
||||||
logging.debug(f"\u001B[1;37;41m {result.group('error')} \u001B[0m")
|
|
||||||
statusQueue.put(result.group('error'))
|
|
||||||
else:
|
|
||||||
logging.debug('\u001B[1;37;41m Bitrate and/or Packet Loss Not Found! \u001B[0m')
|
|
||||||
statusQueue.put('Bitrate and/or Packet Loss Not Found!')
|
|
||||||
lock.release()
|
|
||||||
|
|
||||||
bitrate = result.group('bitrate')
|
|
||||||
packetloss = result.group('packetloss')
|
|
||||||
lock.acquire()
|
|
||||||
logging.debug(f'\u001B[1;37;44m iperf result ({UE_IPAddress}) \u001B[0m')
|
|
||||||
logging.debug(f'\u001B[1;34m Bitrate : {bitrate} \u001B[0m')
|
|
||||||
msg = f'Bitrate : {bitrate} \n'
|
|
||||||
iperfStatus = True
|
|
||||||
if packetloss is not None:
|
|
||||||
logging.debug(f'\u001B[1;34m Packet Loss : {packetloss} %\u001B[0m')
|
|
||||||
msg += f'Packet Loss : {packetloss} %\n'
|
|
||||||
if float(packetloss) > float(self.iperf_packetloss_threshold):
|
|
||||||
logging.debug('\u001B[1;37;41m Packet Loss too high \u001B[0m')
|
|
||||||
msg += 'Packet Loss too high!\n'
|
|
||||||
iperfStatus = False
|
|
||||||
if (iperfStatus):
|
|
||||||
statusQueue.put(0)
|
|
||||||
else:
|
|
||||||
statusQueue.put(-1)
|
|
||||||
statusQueue.put(device_id)
|
|
||||||
statusQueue.put(UE_IPAddress)
|
|
||||||
statusQueue.put(msg)
|
|
||||||
lock.release()
|
|
||||||
|
|
||||||
def Iperf_Module(self, lock, statusQueue, EPC, ue, RAN, idx, ue_num):
|
|
||||||
SSH = sshconnection.SSHConnection()
|
SSH = sshconnection.SSHConnection()
|
||||||
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
|
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
|
||||||
client_filename = f'iperf_client_{self.testCase_id}_{ue.getName()}.log'
|
client_filename = f'iperf_client_{self.testCase_id}_{ue.getName()}.log'
|
||||||
@@ -987,16 +879,18 @@ class OaiCiTest():
|
|||||||
# hack: the ADB UEs don't have iperf in $PATH, so we need to hardcode for the moment
|
# hack: the ADB UEs don't have iperf in $PATH, so we need to hardcode for the moment
|
||||||
iperf_ue = '/data/local/tmp/iperf' if re.search('adb', ue.getName()) else 'iperf'
|
iperf_ue = '/data/local/tmp/iperf' if re.search('adb', ue.getName()) else 'iperf'
|
||||||
|
|
||||||
|
ue_header = f'UE {ue.getName()} ({ueIP})'
|
||||||
|
|
||||||
if self.iperf_direction == "DL":
|
if self.iperf_direction == "DL":
|
||||||
logging.debug("Iperf in DL requested")
|
logging.debug("Iperf in DL requested")
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
cmd = cls_cmd.getConnection(ue.getHost())
|
||||||
cmd.run(f'rm {server_filename}')
|
cmd.run(f'rm {server_filename}')
|
||||||
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -s -B {ue.getIP()} {udpSwitch} -i 1 -t {iperf_time * 1.5} {port} &> /tmp/{server_filename} &')
|
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -s -B {ueIP} {udpSwitch} -i 1 -t {iperf_time * 1.5} {port} &> /tmp/{server_filename} &')
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
||||||
cmd.run(f'rm {EPC.SourceCodePath}/{client_filename}')
|
cmd.run(f'rm {EPC.SourceCodePath}/{client_filename}')
|
||||||
cmd.run(f'{cn_iperf_prefix} iperf -c {ue.getIP()} {iperf_opt} {port} &> {EPC.SourceCodePath}/{client_filename}', timeout=iperf_time * 1.5)
|
cmd.run(f'{cn_iperf_prefix} iperf -c {ueIP} {iperf_opt} {port} &> {EPC.SourceCodePath}/{client_filename}', timeout=iperf_time * 1.5)
|
||||||
cmd.copyin(f'{EPC.SourceCodePath}/{client_filename}', client_filename)
|
cmd.copyin(f'{EPC.SourceCodePath}/{client_filename}', client_filename)
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
@@ -1005,10 +899,10 @@ class OaiCiTest():
|
|||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
if udpIperf:
|
if udpIperf:
|
||||||
self.Iperf_analyzeV2Server(lock, ue.getIP(), ue.getName(), statusQueue, iperf_opt, server_filename, 1)
|
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
|
||||||
else:
|
else:
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
||||||
self.Iperf_analyzeV2TCPOutput(lock, ue.getIP(), ue.getName(), statusQueue, iperf_opt, EPC, cmd, f"{EPC.SourceCodePath}/{client_filename}")
|
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f"{EPC.SourceCodePath}/{client_filename}")
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
elif self.iperf_direction == "UL":
|
elif self.iperf_direction == "UL":
|
||||||
@@ -1020,7 +914,7 @@ class OaiCiTest():
|
|||||||
|
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
cmd = cls_cmd.getConnection(ue.getHost())
|
||||||
cmd.run(f'rm /tmp/{client_filename}')
|
cmd.run(f'rm /tmp/{client_filename}')
|
||||||
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -B {ue.getIP()} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
|
cmd.run(f'{ue.getCmdPrefix()} {iperf_ue} -B {ueIP} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
|
||||||
cmd.copyin(f'/tmp/{client_filename}', client_filename)
|
cmd.copyin(f'/tmp/{client_filename}', client_filename)
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
@@ -1029,10 +923,10 @@ class OaiCiTest():
|
|||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
if udpIperf:
|
if udpIperf:
|
||||||
self.Iperf_analyzeV2Server(lock, ue.getIP(), ue.getName(), statusQueue, iperf_opt, server_filename, 1)
|
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
|
||||||
else:
|
else:
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
cmd = cls_cmd.getConnection(ue.getHost())
|
||||||
self.Iperf_analyzeV2TCPOutput(lock, ue.getIP(), ue.getName(), statusQueue, iperf_opt, EPC, cmd, f"/tmp/{client_filename}")
|
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f"/tmp/{client_filename}")
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
elif self.iperf_direction=="BIDIR":
|
elif self.iperf_direction=="BIDIR":
|
||||||
@@ -1044,7 +938,7 @@ class OaiCiTest():
|
|||||||
|
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
cmd = cls_cmd.getConnection(ue.getHost())
|
||||||
cmd.run(f'rm /tmp/{client_filename}')
|
cmd.run(f'rm /tmp/{client_filename}')
|
||||||
cmd.run(f'iperf3 -B {ue.getIP()} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
|
cmd.run(f'iperf3 -B {ueIP} -c {cn_target_ip} {iperf_opt} {port} &> /tmp/{client_filename}', timeout=iperf_time*1.5)
|
||||||
cmd.copyin(f'/tmp/{client_filename}', client_filename)
|
cmd.copyin(f'/tmp/{client_filename}', client_filename)
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
@@ -1052,129 +946,32 @@ class OaiCiTest():
|
|||||||
cmd.copyin(f'{EPC.SourceCodePath}/{server_filename}', server_filename)
|
cmd.copyin(f'{EPC.SourceCodePath}/{server_filename}', server_filename)
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
self.Iperf_analyzeV2BIDIR(lock, ue.getHost(), ue.getName(), statusQueue, server_filename, client_filename)
|
status, msg = self.Iperf_analyzeV2BIDIR(server_filename, client_filename)
|
||||||
|
|
||||||
elif self.iperf_direction == "IPERF3":
|
elif self.iperf_direction == "IPERF3":
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
cmd = cls_cmd.getConnection(ue.getHost())
|
||||||
cmd.run(f'rm /tmp/{server_filename}', reportNonZero=False)
|
cmd.run(f'rm /tmp/{server_filename}', reportNonZero=False)
|
||||||
port = f'{5002+idx}'
|
port = f'{5002+idx}'
|
||||||
cmd.run(f'{ue.getCmdPrefix()} iperf3 -B {ue.getIP()} -c {cn_target_ip} -p {port} {iperf_opt} --get-server-output &> /tmp/{server_filename}', timeout=iperf_time*1.5)
|
cmd.run(f'{ue.getCmdPrefix()} iperf3 -B {ueIP} -c {cn_target_ip} -p {port} {iperf_opt} --get-server-output &> /tmp/{server_filename}', timeout=iperf_time*1.5)
|
||||||
cmd.copyin(f'/tmp/{server_filename}', server_filename)
|
cmd.copyin(f'/tmp/{server_filename}', server_filename)
|
||||||
cmd.close()
|
cmd.close()
|
||||||
if udpIperf:
|
if udpIperf:
|
||||||
self.Iperf_analyzeV2Server(lock, ue.getIP(), ue.getName(), statusQueue, iperf_opt, server_filename, 1)
|
status, msg = self.Iperf_analyzeV2Server(iperf_opt, server_filename, 1)
|
||||||
else:
|
else:
|
||||||
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
cmd = cls_cmd.getConnection(EPC.IPAddress)
|
||||||
self.Iperf_analyzeV2TCPOutput(lock, ue.getIP(), ue.getName(), statusQueue, iperf_opt, EPC, cmd, f'/tmp/{server_filename}')
|
status, msg = self.Iperf_analyzeV2TCPOutput(cmd, f'/tmp/{server_filename}')
|
||||||
cmd.close()
|
cmd.close()
|
||||||
|
|
||||||
else :
|
else :
|
||||||
raise Exception("Incorrect or missing IPERF direction in XML")
|
raise Exception("Incorrect or missing IPERF direction in XML")
|
||||||
|
|
||||||
|
logging.info(f'\u001B[1;37;45m iperf result for {ue_header}\u001B[0m')
|
||||||
|
for l in msg.split('\n'):
|
||||||
|
logging.info(f'\u001B[1;35m {l} \u001B[0m')
|
||||||
|
return (status, f'{ue_header}\n{msg}')
|
||||||
|
|
||||||
def IperfNoS1(self,HTML,RAN,EPC,CONTAINERS):
|
def IperfNoS1(self,HTML,RAN,EPC,CONTAINERS):
|
||||||
SSH = sshconnection.SSHConnection()
|
raise 'IperfNoS1 not implemented'
|
||||||
if RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or self.UEIPAddress == '' or self.UEUserName == '' or self.UEPassword == '':
|
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
check_eNB = True
|
|
||||||
check_OAI_UE = True
|
|
||||||
server_on_enb = re.search('-R', str(self.iperf_args))
|
|
||||||
if server_on_enb is not None:
|
|
||||||
iServerIPAddr = RAN.eNBIPAddress
|
|
||||||
iServerUser = RAN.eNBUserName
|
|
||||||
iServerPasswd = RAN.eNBPassword
|
|
||||||
iClientIPAddr = self.UEIPAddress
|
|
||||||
iClientUser = self.UEUserName
|
|
||||||
iClientPasswd = self.UEPassword
|
|
||||||
else:
|
|
||||||
iServerIPAddr = self.UEIPAddress
|
|
||||||
iServerUser = self.UEUserName
|
|
||||||
iServerPasswd = self.UEPassword
|
|
||||||
iClientIPAddr = RAN.eNBIPAddress
|
|
||||||
iClientUser = RAN.eNBUserName
|
|
||||||
iClientPasswd = RAN.eNBPassword
|
|
||||||
if self.iperf_options != 'sink':
|
|
||||||
# Starting the iperf server
|
|
||||||
SSH.open(iServerIPAddr, iServerUser, iServerPasswd)
|
|
||||||
# args SHALL be "-c client -u any"
|
|
||||||
# -c 10.0.1.2 -u -b 1M -t 30 -i 1 -fm -B 10.0.1.1
|
|
||||||
# -B 10.0.1.1 -u -s -i 1 -fm
|
|
||||||
server_options = re.sub('-u.*$', '-u -s -i 1 -fm', str(self.iperf_args))
|
|
||||||
server_options = server_options.replace('-c','-B')
|
|
||||||
SSH.command(f'rm -f /tmp/tmp_iperf_server_{self.testCase_id}.log', '\$', 5)
|
|
||||||
SSH.command(f'echo $USER; nohup iperf {server_options} > /tmp/tmp_iperf_server_{self.testCase_id}.log 2>&1 &', iServerUser, 5)
|
|
||||||
time.sleep(0.5)
|
|
||||||
SSH.close()
|
|
||||||
|
|
||||||
# Starting the iperf client
|
|
||||||
modified_options = self.Iperf_ComputeModifiedBW(0, 1)
|
|
||||||
modified_options = modified_options.replace('-R','')
|
|
||||||
iperf_time = self.Iperf_ComputeTime()
|
|
||||||
SSH.open(iClientIPAddr, iClientUser, iClientPasswd)
|
|
||||||
SSH.command(f'rm -f /tmp/tmp_iperf_{self.testCase_id}.log', '\$', 5)
|
|
||||||
iperf_status = SSH.command(f'stdbuf -o0 iperf {modified_options} 2>&1 | stdbuf -o0 tee /tmp/tmp_iperf_{self.testCase_id}.log', '\$', int(iperf_time)*5.0)
|
|
||||||
status_queue = SimpleQueue()
|
|
||||||
lock = Lock()
|
|
||||||
if iperf_status < 0:
|
|
||||||
message = 'iperf on OAI UE crashed due to TIMEOUT !'
|
|
||||||
logging.debug(f'\u001B[1;37;41m {message} \u001B[0m')
|
|
||||||
clientStatus = -2
|
|
||||||
else:
|
|
||||||
if self.iperf_options == 'sink':
|
|
||||||
clientStatus = 0
|
|
||||||
status_queue.put(0)
|
|
||||||
status_queue.put('OAI-UE')
|
|
||||||
status_queue.put('10.0.1.2')
|
|
||||||
status_queue.put('Sink Test : no check')
|
|
||||||
else:
|
|
||||||
clientStatus = self.Iperf_analyzeV2Output(lock, '10.0.1.2', 'OAI-UE', status_queue, modified_options, EPC,SSH)
|
|
||||||
SSH.close()
|
|
||||||
|
|
||||||
# Stopping the iperf server
|
|
||||||
if self.iperf_options != 'sink':
|
|
||||||
SSH.open(iServerIPAddr, iServerUser, iServerPasswd)
|
|
||||||
SSH.command('killall --signal SIGKILL iperf', '\$', 5)
|
|
||||||
time.sleep(0.5)
|
|
||||||
SSH.close()
|
|
||||||
|
|
||||||
if (clientStatus == -1):
|
|
||||||
if (os.path.isfile(f'iperf_server_{self.testCase_id}.log')):
|
|
||||||
os.remove(f'iperf_server_{self.testCase_id}.log')
|
|
||||||
SSH.copyin(iServerIPAddr, iServerUser, iServerPasswd, f'/tmp/tmp_iperf_server_{self.testCase_id}.log', f'iperf_server_{self.testCase_id}_OAI-UE.log')
|
|
||||||
filename=f'iperf_server_{self.testCase_id}_OAI-UE.log'
|
|
||||||
self.Iperf_analyzeV2Server(lock, '10.0.1.2', 'OAI-UE', status_queue, modified_options,filename,0)
|
|
||||||
|
|
||||||
# copying on the EPC server for logCollection
|
|
||||||
if (clientStatus == -1):
|
|
||||||
copyin_res = SSH.copyin(iServerIPAddr, iServerUser, iServerPasswd, f'/tmp/tmp_iperf_server_{self.testCase_id}.log', f'iperf_server_{self.testCase_id}_OAI-UE.log')
|
|
||||||
if (copyin_res == 0):
|
|
||||||
SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, f'iperf_server_{self.testCase_id}_OAI-UE.log', f'{EPC.SourceCodePath}/scripts')
|
|
||||||
copyin_res = SSH.copyin(iClientIPAddr, iClientUser, iClientPasswd, f'/tmp/tmp_iperf_{self.testCase_id}.log', f'iperf_{self.testCase_id}_OAI-UE.log')
|
|
||||||
if (copyin_res == 0):
|
|
||||||
SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, f'iperf_{self.testCase_id}_OAI-UE.log', f'{EPC.SourceCodePath}/scripts')
|
|
||||||
iperf_noperf = False
|
|
||||||
if status_queue.empty():
|
|
||||||
iperf_status = False
|
|
||||||
else:
|
|
||||||
iperf_status = True
|
|
||||||
messages = []
|
|
||||||
while (not status_queue.empty()):
|
|
||||||
count = status_queue.get()
|
|
||||||
if (count < 0):
|
|
||||||
iperf_status = False
|
|
||||||
if (count > 0):
|
|
||||||
iperf_noperf = True
|
|
||||||
device_id = status_queue.get()
|
|
||||||
ip_addr = status_queue.get()
|
|
||||||
message = status_queue.get()
|
|
||||||
messages.append(f'UE ({device_id})\nIP Address : {ip_addr}\n{message}')
|
|
||||||
if (iperf_noperf and iperf_status):
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'PERF NOT MET', messages)
|
|
||||||
elif (iperf_status):
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'OK', messages)
|
|
||||||
else:
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', messages)
|
|
||||||
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
|
||||||
|
|
||||||
def Iperf(self,HTML,RAN,EPC,CONTAINERS):
|
def Iperf(self,HTML,RAN,EPC,CONTAINERS):
|
||||||
result = re.search('noS1', str(RAN.Initialize_eNB_args))
|
result = re.search('noS1', str(RAN.Initialize_eNB_args))
|
||||||
@@ -1187,64 +984,18 @@ class OaiCiTest():
|
|||||||
|
|
||||||
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_direction "{self.iperf_direction}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
|
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" iperf_direction "{self.iperf_direction}" iperf_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
|
||||||
|
|
||||||
ues = []
|
ues = [cls_module_ue.Module_UE(n.strip()) for n in self.ue_ids]
|
||||||
for ue_name in self.ue_ids:
|
|
||||||
ue = cls_module_ue.Module_UE(ue_name)
|
|
||||||
if not ue.getIP():
|
|
||||||
logging.error("no IP addresses returned")
|
|
||||||
HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE)
|
|
||||||
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
|
||||||
ues.append(ue)
|
|
||||||
logging.debug(ues)
|
logging.debug(ues)
|
||||||
|
with concurrent.futures.ThreadPoolExecutor() as executor:
|
||||||
self.dummyIperfVersion = '2.0.10'
|
futures = [executor.submit(self.Iperf_Module, EPC, ue, RAN, i, len(ues)) for i, ue in enumerate(ues)]
|
||||||
#cmd = 'iperf --version'
|
results = [f.result() for f in futures]
|
||||||
#logging.debug(cmd + '\n')
|
# each result in results is a tuple, first member goes to successes, second to messages
|
||||||
#iperfStdout = subprocess.check_output(cmd, shell=True, universal_newlines=True)
|
successes, messages = map(list, zip(*results))
|
||||||
#result = re.search('iperf version 2.0.5', str(iperfStdout.strip()))
|
if len(successes) == len(ues) and all(successes):
|
||||||
#if result is not None:
|
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'OK', messages)
|
||||||
# dummyIperfVersion = '2.0.5'
|
|
||||||
#result = re.search('iperf version 2.0.10', str(iperfStdout.strip()))
|
|
||||||
#if result is not None:
|
|
||||||
# dummyIperfVersion = '2.0.10'
|
|
||||||
multi_jobs = []
|
|
||||||
ue_num = len(ues)
|
|
||||||
i = 0
|
|
||||||
lock = Lock()
|
|
||||||
status_queue = SimpleQueue()
|
|
||||||
for ue in ues:
|
|
||||||
p = Process(target = self.Iperf_Module ,args = (lock, status_queue, EPC, ue, RAN, i, ue_num))
|
|
||||||
p.daemon = True
|
|
||||||
p.start()
|
|
||||||
multi_jobs.append(p)
|
|
||||||
i = i + 1
|
|
||||||
for job in multi_jobs:
|
|
||||||
job.join()
|
|
||||||
|
|
||||||
if (status_queue.empty()):
|
|
||||||
HTML.CreateHtmlTestRow(self.iperf_args, 'KO', CONST.ALL_PROCESSES_OK)
|
|
||||||
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
|
||||||
else:
|
else:
|
||||||
iperf_status = True
|
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', messages)
|
||||||
iperf_noperf = False
|
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
||||||
messages = []
|
|
||||||
while (not status_queue.empty()):
|
|
||||||
count = status_queue.get()
|
|
||||||
if (count < 0):
|
|
||||||
iperf_status = False
|
|
||||||
if (count > 0):
|
|
||||||
iperf_noperf = True
|
|
||||||
device_id = status_queue.get()
|
|
||||||
ip_addr = status_queue.get()
|
|
||||||
msg = status_queue.get()
|
|
||||||
messages.append(f'UE ({device_id})\nIP Address : {ip_addr}\n{msg}')
|
|
||||||
if (iperf_noperf and iperf_status):
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'PERF NOT MET', messages)
|
|
||||||
elif (iperf_status):
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'OK', messages)
|
|
||||||
else:
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', messages)
|
|
||||||
self.AutoTerminateUEandeNB(HTML,RAN,EPC,CONTAINERS)
|
|
||||||
|
|
||||||
def AnalyzeLogFile_UE(self, UElogFile,HTML,RAN):
|
def AnalyzeLogFile_UE(self, UElogFile,HTML,RAN):
|
||||||
if (not os.path.isfile(f'./{UElogFile}')):
|
if (not os.path.isfile(f'./{UElogFile}')):
|
||||||
|
|||||||
@@ -0,0 +1,219 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
Num_Threads_PUSCH = 8;
|
||||||
|
sa = 1;
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_CU_ID = 0xe00;
|
||||||
|
|
||||||
|
# cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-OAI";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ({ mcc = 222; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
|
||||||
|
|
||||||
|
|
||||||
|
nr_cellid = 12345678L;
|
||||||
|
force_256qam_off = 1;
|
||||||
|
|
||||||
|
tr_s_preference = "f1";
|
||||||
|
|
||||||
|
local_s_if_name = "eth0";
|
||||||
|
local_s_address = "192.168.68.194";
|
||||||
|
remote_s_address = "192.168.68.195";
|
||||||
|
local_s_portc = 501;
|
||||||
|
local_s_portd = 2153;
|
||||||
|
remote_s_portc = 500;
|
||||||
|
remote_s_portd = 2153;
|
||||||
|
ssb_SubcarrierOffset = 0;
|
||||||
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
|
servingCellConfigCommon = (
|
||||||
|
{
|
||||||
|
#spCellConfigCommon
|
||||||
|
|
||||||
|
physCellId = 0;
|
||||||
|
|
||||||
|
# downlinkConfigCommon
|
||||||
|
#frequencyInfoDL
|
||||||
|
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
|
||||||
|
absoluteFrequencySSB = 641280;
|
||||||
|
dl_frequencyBand = 78;
|
||||||
|
# this is 3600 MHz
|
||||||
|
dl_absoluteFrequencyPointA = 640008;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
dl_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
dl_subcarrierSpacing = 1;
|
||||||
|
dl_carrierBandwidth = 106;
|
||||||
|
#initialDownlinkBWP
|
||||||
|
#genericParameters
|
||||||
|
# this is RBstart=27,L=48 (275*(L-1))+RBstart
|
||||||
|
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialDLBWPsubcarrierSpacing = 1;
|
||||||
|
#pdcch-ConfigCommon
|
||||||
|
initialDLBWPcontrolResourceSetZero = 11;
|
||||||
|
initialDLBWPsearchSpaceZero = 0;
|
||||||
|
|
||||||
|
#uplinkConfigCommon
|
||||||
|
#frequencyInfoUL
|
||||||
|
ul_frequencyBand = 78;
|
||||||
|
#scs-SpecificCarrierList
|
||||||
|
ul_offstToCarrier = 0;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
ul_subcarrierSpacing = 1;
|
||||||
|
ul_carrierBandwidth = 106;
|
||||||
|
pMax = 20;
|
||||||
|
#initialUplinkBWP
|
||||||
|
#genericParameters
|
||||||
|
initialULBWPlocationAndBandwidth = 28875;
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
initialULBWPsubcarrierSpacing = 1;
|
||||||
|
#rach-ConfigCommon
|
||||||
|
#rach-ConfigGeneric
|
||||||
|
prach_ConfigurationIndex = 98;
|
||||||
|
#prach_msg1_FDM
|
||||||
|
#0 = one, 1=two, 2=four, 3=eight
|
||||||
|
prach_msg1_FDM = 0;
|
||||||
|
prach_msg1_FrequencyStart = 0;
|
||||||
|
zeroCorrelationZoneConfig = 13;
|
||||||
|
preambleReceivedTargetPower = -96;
|
||||||
|
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
|
||||||
|
preambleTransMax = 6;
|
||||||
|
#powerRampingStep
|
||||||
|
# 0=dB0,1=dB2,2=dB4,3=dB6
|
||||||
|
powerRampingStep = 1;
|
||||||
|
#ra_ReponseWindow
|
||||||
|
#1,2,4,8,10,20,40,80
|
||||||
|
ra_ResponseWindow = 4;
|
||||||
|
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||||
|
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||||
|
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||||
|
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
|
||||||
|
#ra_ContentionResolutionTimer
|
||||||
|
#(0..7) 8,16,24,32,40,48,56,64
|
||||||
|
ra_ContentionResolutionTimer = 7;
|
||||||
|
rsrp_ThresholdSSB = 19;
|
||||||
|
#prach-RootSequenceIndex_PR
|
||||||
|
#1 = 839, 2 = 139
|
||||||
|
prach_RootSequenceIndex_PR = 2;
|
||||||
|
prach_RootSequenceIndex = 1;
|
||||||
|
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||||
|
#
|
||||||
|
msg1_SubcarrierSpacing = 1,
|
||||||
|
# restrictedSetConfig
|
||||||
|
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||||
|
restrictedSetConfig = 0,
|
||||||
|
|
||||||
|
msg3_DeltaPreamble = 1;
|
||||||
|
p0_NominalWithGrant =-90;
|
||||||
|
|
||||||
|
# pucch-ConfigCommon setup :
|
||||||
|
# pucchGroupHopping
|
||||||
|
# 0 = neither, 1= group hopping, 2=sequence hopping
|
||||||
|
pucchGroupHopping = 0;
|
||||||
|
hoppingId = 40;
|
||||||
|
p0_nominal = -90;
|
||||||
|
# ssb_PositionsInBurs_BitmapPR
|
||||||
|
# 1=short, 2=medium, 3=long
|
||||||
|
ssb_PositionsInBurst_PR = 2;
|
||||||
|
ssb_PositionsInBurst_Bitmap = 1;
|
||||||
|
|
||||||
|
# ssb_periodicityServingCell
|
||||||
|
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||||
|
ssb_periodicityServingCell = 2;
|
||||||
|
|
||||||
|
# dmrs_TypeA_position
|
||||||
|
# 0 = pos2, 1 = pos3
|
||||||
|
dmrs_TypeA_Position = 0;
|
||||||
|
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
subcarrierSpacing = 1;
|
||||||
|
|
||||||
|
|
||||||
|
#tdd-UL-DL-ConfigurationCommon
|
||||||
|
# subcarrierSpacing
|
||||||
|
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||||
|
referenceSubcarrierSpacing = 1;
|
||||||
|
# pattern1
|
||||||
|
# dl_UL_TransmissionPeriodicity
|
||||||
|
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
|
||||||
|
dl_UL_TransmissionPeriodicity = 6;
|
||||||
|
nrofDownlinkSlots = 7;
|
||||||
|
nrofDownlinkSymbols = 6;
|
||||||
|
nrofUplinkSlots = 2;
|
||||||
|
nrofUplinkSymbols = 4;
|
||||||
|
|
||||||
|
ssPBCH_BlockPower = -25;
|
||||||
|
}
|
||||||
|
|
||||||
|
);
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////// AMF parameters:
|
||||||
|
amf_ip_address = ( { ipv4 = "172.21.16.137";
|
||||||
|
ipv6 = "192:168:30::17";
|
||||||
|
active = "yes";
|
||||||
|
preference = "ipv4";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
E1_INTERFACE =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
type = "cp";
|
||||||
|
ipv4_cucp = "192.168.68.194";
|
||||||
|
port_cucp = 38462;
|
||||||
|
ipv4_cuup = "192.168.68.196";
|
||||||
|
port_cuup = 38462;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.68.194";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
security = {
|
||||||
|
# preferred ciphering algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nea0, nea1, nea2, nea3
|
||||||
|
ciphering_algorithms = ( "nea0" );
|
||||||
|
|
||||||
|
# preferred integrity algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nia0, nia1, nia2, nia3
|
||||||
|
integrity_algorithms = ( "nia2", "nia0" );
|
||||||
|
|
||||||
|
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||||
|
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||||
|
drb_ciphering = "yes";
|
||||||
|
drb_integrity = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config : {
|
||||||
|
global_log_level = "info";
|
||||||
|
};
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
Active_gNBs = ( "gNB-OAI");
|
||||||
|
# Asn1_verbosity, choice in: none, info, annoying
|
||||||
|
Asn1_verbosity = "none";
|
||||||
|
sa = 1;
|
||||||
|
|
||||||
|
gNBs =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
////////// Identification parameters:
|
||||||
|
gNB_CU_ID = 0xe00;
|
||||||
|
|
||||||
|
# cell_type = "CELL_MACRO_GNB";
|
||||||
|
|
||||||
|
gNB_name = "gNB-OAI";
|
||||||
|
|
||||||
|
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||||
|
tracking_area_code = 1;
|
||||||
|
plmn_list = ({ mcc = 222; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
|
||||||
|
|
||||||
|
|
||||||
|
tr_s_preference = "f1";
|
||||||
|
|
||||||
|
local_s_if_name = "lo";
|
||||||
|
local_s_address = "192.168.68.196";
|
||||||
|
remote_s_address = "192.168.68.195";
|
||||||
|
local_s_portc = 501;
|
||||||
|
local_s_portd = 2153;
|
||||||
|
remote_s_portc = 500;
|
||||||
|
remote_s_portd = 2153;
|
||||||
|
|
||||||
|
# ------- SCTP definitions
|
||||||
|
SCTP :
|
||||||
|
{
|
||||||
|
# Number of streams to use in input/output
|
||||||
|
SCTP_INSTREAMS = 2;
|
||||||
|
SCTP_OUTSTREAMS = 2;
|
||||||
|
};
|
||||||
|
|
||||||
|
E1_INTERFACE =
|
||||||
|
(
|
||||||
|
{
|
||||||
|
type = "up";
|
||||||
|
ipv4_cucp = "192.168.68.194";
|
||||||
|
ipv4_cuup = "192.168.68.196";
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
NETWORK_INTERFACES :
|
||||||
|
{
|
||||||
|
GNB_INTERFACE_NAME_FOR_NG_AMF = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.68.196";
|
||||||
|
GNB_INTERFACE_NAME_FOR_NGU = "demo-oai";
|
||||||
|
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.68.196";
|
||||||
|
GNB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
security = {
|
||||||
|
# preferred ciphering algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nea0, nea1, nea2, nea3
|
||||||
|
ciphering_algorithms = ( "nea0" );
|
||||||
|
|
||||||
|
# preferred integrity algorithms
|
||||||
|
# the first one of the list that an UE supports in chosen
|
||||||
|
# valid values: nia0, nia1, nia2, nia3
|
||||||
|
integrity_algorithms = ( "nia2", "nia0" );
|
||||||
|
|
||||||
|
# setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
|
||||||
|
# what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
|
||||||
|
drb_ciphering = "yes";
|
||||||
|
drb_integrity = "no";
|
||||||
|
};
|
||||||
|
|
||||||
|
log_config: {
|
||||||
|
global_log_level = "info";
|
||||||
|
};
|
||||||
@@ -218,15 +218,6 @@ THREAD_STRUCT = (
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
log_config :
|
log_config : {
|
||||||
{
|
global_log_level = "info";
|
||||||
global_log_level ="info";
|
};
|
||||||
hw_log_level ="info";
|
|
||||||
phy_log_level ="info";
|
|
||||||
mac_log_level ="info";
|
|
||||||
rlc_log_level ="info";
|
|
||||||
pdcp_log_level ="info";
|
|
||||||
rrc_log_level ="info";
|
|
||||||
f1ap_log_level ="debug";
|
|
||||||
ngap_log_level ="debug";
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -135,8 +135,6 @@ then
|
|||||||
exit $STATUS
|
exit $STATUS
|
||||||
fi
|
fi
|
||||||
|
|
||||||
git log -n1 --pretty=format:\"%s\" > .git/CI_COMMIT_MSG
|
|
||||||
|
|
||||||
git merge --ff $TARGET_COMMIT_ID -m "Temporary merge for CI"
|
git merge --ff $TARGET_COMMIT_ID -m "Temporary merge for CI"
|
||||||
|
|
||||||
STATUS=`git status | egrep -c "You have unmerged paths.|fix conflicts"`
|
STATUS=`git status | egrep -c "You have unmerged paths.|fix conflicts"`
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
|
|||||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -178,6 +179,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
|
|||||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
<direction>UL</direction>
|
<direction>UL</direction>
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
|||||||
@@ -128,6 +128,7 @@
|
|||||||
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - DL/15Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 15M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -156,6 +157,7 @@
|
|||||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>UL</direction>
|
<direction>UL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
@@ -166,6 +168,7 @@
|
|||||||
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
<desc>iperf (5MHz - UL/9Mbps/UDP)(30 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 9M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
<direction>UL</direction>
|
<direction>UL</direction>
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
|
|||||||
@@ -114,6 +114,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (10MHz - DL/30Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 30M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(balanced profile)</desc>
|
<desc>iperf (20MHz - DL/70Mbps/UDP)(30 sec)(balanced profile)</desc>
|
||||||
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 70M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
|
|||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 6.5M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml
|
|||||||
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (10MHz - DL/13.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 13.5M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
|
|||||||
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced)</desc>
|
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced)</desc>
|
||||||
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>balanced</iperf_profile>
|
<iperf_profile>balanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
@@ -123,6 +124,7 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
|
|||||||
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
||||||
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1</id>
|
<id>adb_ue_1</id>
|
||||||
@@ -133,6 +135,7 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
|
|||||||
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
||||||
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>50</iperf_bitrate_threshold>
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
<iperf_profile>unbalanced</iperf_profile>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
|||||||
@@ -0,0 +1,166 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>TEST-SA-FR1-F1-E1-B200</htmlTabRef>
|
||||||
|
<htmlTabName>40 MHz TDD F1+E1 SA</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
333333
|
||||||
|
300000
|
||||||
|
310000
|
||||||
|
330101
|
||||||
|
330102
|
||||||
|
330103
|
||||||
|
310001
|
||||||
|
350000
|
||||||
|
370001
|
||||||
|
370000
|
||||||
|
370002
|
||||||
|
310011
|
||||||
|
310002
|
||||||
|
330201
|
||||||
|
200000
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="333333">
|
||||||
|
<class>Pull_Local_Registry</class>
|
||||||
|
<desc>Pull Images from Local Registry</desc>
|
||||||
|
<test_svr_id>0</test_svr_id>
|
||||||
|
<images_to_pull>oai-gnb oai-nr-cuup</images_to_pull>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="310000">
|
||||||
|
<class>Initialize_UE</class>
|
||||||
|
<desc>Initialize Quectel</desc>
|
||||||
|
<id>idefix</id>
|
||||||
|
</testCase>
|
||||||
|
<testCase id="310002">
|
||||||
|
<class>Terminate_UE</class>
|
||||||
|
<desc>Terminate Quectel</desc>
|
||||||
|
<id>idefix</id>
|
||||||
|
</testCase>
|
||||||
|
<testCase id="310001">
|
||||||
|
<class>Attach_UE</class>
|
||||||
|
<desc>Attach Quectel</desc>
|
||||||
|
<id>idefix</id>
|
||||||
|
</testCase>
|
||||||
|
<testCase id="310011">
|
||||||
|
<class>Detach_UE</class>
|
||||||
|
<desc>Detach Quectel</desc>
|
||||||
|
<id>idefix</id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="330101">
|
||||||
|
<class>Deploy_Object</class>
|
||||||
|
<desc>Deploy gNB-CU-CP in a container</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_e1_b200_gnb</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<services>gnb_cucp</services>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="330102">
|
||||||
|
<class>Deploy_Object</class>
|
||||||
|
<desc>Deploy gNB-CU-UP in a container</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_e1_b200_gnb</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<services>gnb_cuup</services>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="330103">
|
||||||
|
<class>Deploy_Object</class>
|
||||||
|
<desc>Deploy gNB-DU (TDD/Band78/40MHz/B200) in a container</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_e1_b200_gnb</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<services>gnb_du_tdd</services>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="300000">
|
||||||
|
<class>Custom_Command</class>
|
||||||
|
<desc>Disable Sleep States</desc>
|
||||||
|
<node>ofqot</node>
|
||||||
|
<command>sudo cpupower idle-set -D 0</command>
|
||||||
|
</testCase>
|
||||||
|
<testCase id="200000">
|
||||||
|
<class>Custom_Command</class>
|
||||||
|
<desc>Enable Sleep States</desc>
|
||||||
|
<node>ofqot</node>
|
||||||
|
<command>sudo cpupower idle-set -E</command>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="350000">
|
||||||
|
<class>Ping</class>
|
||||||
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
|
<id>idefix</id>
|
||||||
|
<ping_args>-c 20 %cn_ip%</ping_args>
|
||||||
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
|
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="370000">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (DL/80Mbps/UDP)(30 sec)</desc>
|
||||||
|
<iperf_args>-u -b 80M -t 30 -i 1 -fm</iperf_args>
|
||||||
|
<direction>DL</direction>
|
||||||
|
<id>idefix</id>
|
||||||
|
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="370001">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (UL/8Mbps/UDP)(30 sec)</desc>
|
||||||
|
<iperf_args>-u -b 8M -t 30 -i 1 -fm</iperf_args>
|
||||||
|
<direction>UL</direction>
|
||||||
|
<id>idefix</id>
|
||||||
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="370002">
|
||||||
|
<class>Iperf</class>
|
||||||
|
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
||||||
|
<iperf_args>-t 20 --bidir</iperf_args>
|
||||||
|
<direction>BIDIR</direction>
|
||||||
|
<id>idefix</id>
|
||||||
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="330201">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy CU-DU</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_e1_b200_gnb</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
<d_retx_th>10,100,100,100</d_retx_th>
|
||||||
|
<u_retx_th>10,100,100,100</u_retx_th>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The OpenAirInterface Software Alliance licenses this file to You under
|
||||||
|
the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||||
|
except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.openairinterface.org/?page_id=698
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||||
|
contact@openairinterface.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
<testCaseList>
|
||||||
|
<htmlTabRef>TEST-SA-FR1-F1-E1-B200-terminate</htmlTabRef>
|
||||||
|
<htmlTabName>Tear-down</htmlTabName>
|
||||||
|
<htmlTabIcon>tasks</htmlTabIcon>
|
||||||
|
<repeatCount>1</repeatCount>
|
||||||
|
<TestCaseRequestedList>
|
||||||
|
330201
|
||||||
|
222222
|
||||||
|
</TestCaseRequestedList>
|
||||||
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
|
<testCase id="330201">
|
||||||
|
<class>Undeploy_Object</class>
|
||||||
|
<desc>Undeploy CU-CP/CU-UP/DU</desc>
|
||||||
|
<yaml_path>ci-scripts/yaml_files/sa_e1_b200_gnb</yaml_path>
|
||||||
|
<eNB_instance>0</eNB_instance>
|
||||||
|
<eNB_serverId>0</eNB_serverId>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
<testCase id="222222">
|
||||||
|
<class>Clean_Test_Server_Images</class>
|
||||||
|
<desc>Clean Test Images on Test Server</desc>
|
||||||
|
<test_svr_id>0</test_svr_id>
|
||||||
|
</testCase>
|
||||||
|
|
||||||
|
</testCaseList>
|
||||||
@@ -42,19 +42,15 @@
|
|||||||
110011
|
110011
|
||||||
110001
|
110001
|
||||||
150000
|
150000
|
||||||
|
170001
|
||||||
|
170000
|
||||||
|
170002
|
||||||
110011
|
110011
|
||||||
110002
|
110002
|
||||||
100001
|
100001
|
||||||
130201
|
130201
|
||||||
200000
|
200000
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<!--
|
|
||||||
070001
|
|
||||||
070000
|
|
||||||
070002
|
|
||||||
050002
|
|
||||||
050003
|
|
||||||
-->
|
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="110000">
|
<testCase id="110000">
|
||||||
@@ -159,19 +155,19 @@
|
|||||||
|
|
||||||
<testCase id="170000">
|
<testCase id="170000">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (DL/80Mbps/UDP)(30 sec)</desc>
|
||||||
<iperf_args>-u -b 125M -t 60 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 80M -t 30 -i 1 -fm</iperf_args>
|
||||||
<direction>DL</direction>
|
<direction>DL</direction>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="170001">
|
<testCase id="170001">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
<desc>iperf (UL/8Mbps/UDP)(30 sec)</desc>
|
||||||
<iperf_args>-u -b 8M -t 60 -i 1 -fm</iperf_args>
|
<iperf_args>-u -b 8M -t 30 -i 1 -fm</iperf_args>
|
||||||
<direction>UL</direction>
|
<direction>UL</direction>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
||||||
@@ -181,8 +177,8 @@
|
|||||||
|
|
||||||
<testCase id="170002">
|
<testCase id="170002">
|
||||||
<class>Iperf</class>
|
<class>Iperf</class>
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
<desc>iperf (BIDIR TCP)(20 sec)(single-ue profile)</desc>
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
<iperf_args>-t 20 --bidir</iperf_args>
|
||||||
<direction>BIDIR</direction>
|
<direction>BIDIR</direction>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<iperf_profile>single-ue</iperf_profile>
|
<iperf_profile>single-ue</iperf_profile>
|
||||||
@@ -194,8 +190,8 @@
|
|||||||
<yaml_path>ci-scripts/yaml_files/sa_f1_b200_gnb</yaml_path>
|
<yaml_path>ci-scripts/yaml_files/sa_f1_b200_gnb</yaml_path>
|
||||||
<eNB_instance>0</eNB_instance>
|
<eNB_instance>0</eNB_instance>
|
||||||
<eNB_serverId>0</eNB_serverId>
|
<eNB_serverId>0</eNB_serverId>
|
||||||
<d_retx_th>1,100,100,100</d_retx_th>
|
<d_retx_th>10,100,100,100</d_retx_th>
|
||||||
<u_retx_th>1,100,100,100</u_retx_th>
|
<u_retx_th>10,100,100,100</u_retx_th>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -27,7 +27,6 @@
|
|||||||
<repeatCount>1</repeatCount>
|
<repeatCount>1</repeatCount>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
230201
|
230201
|
||||||
222222
|
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
@@ -39,10 +38,4 @@
|
|||||||
<eNB_serverId>0</eNB_serverId>
|
<eNB_serverId>0</eNB_serverId>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="222222">
|
|
||||||
<class>Clean_Test_Server_Images</class>
|
|
||||||
<desc>Clean Test Images on Test Server</desc>
|
|
||||||
<test_svr_id>0</test_svr_id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
gnb_cucp:
|
||||||
|
image: oai-gnb:latest
|
||||||
|
privileged: true
|
||||||
|
container_name: sa-cucp-gnb
|
||||||
|
environment:
|
||||||
|
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
|
||||||
|
volumes:
|
||||||
|
- ../../conf_files/gnb-cucp.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.68.194
|
||||||
|
healthcheck:
|
||||||
|
# pgrep does NOT work
|
||||||
|
test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
gnb_cuup:
|
||||||
|
image: oai-nr-cuup:latest
|
||||||
|
privileged: true
|
||||||
|
container_name: sa-cuup-gnb
|
||||||
|
environment:
|
||||||
|
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
|
||||||
|
volumes:
|
||||||
|
- ../../conf_files/gnb-cuup.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.68.196
|
||||||
|
healthcheck:
|
||||||
|
# pgrep does NOT work
|
||||||
|
test: /bin/bash -c "ps aux | grep -v grep | grep -c nr-cuup"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
gnb_du_tdd:
|
||||||
|
image: oai-gnb:latest
|
||||||
|
privileged: true
|
||||||
|
container_name: sa-du-b200-gnb
|
||||||
|
environment:
|
||||||
|
USE_B2XX: 'yes'
|
||||||
|
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx -E --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1 --RUs.[0].att_rx 14 --RUs.[0].att_tx 14
|
||||||
|
volumes:
|
||||||
|
- ../../conf_files/gnb-du.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
|
||||||
|
- /dev:/dev
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
ipv4_address: 192.168.68.195
|
||||||
|
#entrypoint: /bin/bash -c "sleep infinity"
|
||||||
|
healthcheck:
|
||||||
|
# pgrep does NOT work
|
||||||
|
test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem"
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
networks:
|
||||||
|
public_net:
|
||||||
|
name: sa-b200-gnb-net
|
||||||
|
ipam:
|
||||||
|
config:
|
||||||
|
- subnet: 192.168.68.192/26
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.name: "sa-gnb-net"
|
||||||
@@ -6,11 +6,9 @@ services:
|
|||||||
privileged: true
|
privileged: true
|
||||||
container_name: sa-cu-gnb
|
container_name: sa-cu-gnb
|
||||||
environment:
|
environment:
|
||||||
USE_B2XX: 'yes'
|
|
||||||
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
|
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
|
||||||
volumes:
|
volumes:
|
||||||
- ../../conf_files/gnb-cu.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
|
- ../../conf_files/gnb-cu.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
|
||||||
- /dev:/dev
|
|
||||||
networks:
|
networks:
|
||||||
public_net:
|
public_net:
|
||||||
ipv4_address: 192.168.68.194
|
ipv4_address: 192.168.68.194
|
||||||
|
|||||||
Reference in New Issue
Block a user