Merge branch 'integration_2025_w14_p1' into 'develop'
Integration: `2025.w14` (part 1) Closes #931 See merge request oai/openairinterface5g!3353 * !3247 Add enc/dec lib and unit test for 5GS NAS Service Accept * !3316 Fix: Correctly Read PDU Address IE * !3322 Refactor core network handling in CI, harmonize code * !3327 NR UE fix for disable HARQ * !3350 Cleanup NR PHY common definitions * !3352 Turn off any Nagle-like algorithm for SCTP
This commit is contained in:
@@ -144,23 +144,6 @@ pipeline {
|
|||||||
echo "no eNB_mergeRequest given - not merging develop"
|
echo "no eNB_mergeRequest given - not merging develop"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
|
||||||
echo "no EPC_IPAddress given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Type == null) {
|
|
||||||
echo "no EPC_Type given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_SourceCodePath == null) {
|
|
||||||
echo "no EPC_SourceCodePath given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Credentials == null) {
|
|
||||||
echo "no EPC_Credentials given"
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.OC_Credentials == null) {
|
if (params.OC_Credentials == null) {
|
||||||
echo "no OC_Credentials given"
|
echo "no OC_Credentials given"
|
||||||
allParametersPresent = false
|
allParametersPresent = false
|
||||||
@@ -206,7 +189,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
withCredentials([
|
withCredentials([
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
||||||
@@ -214,7 +196,7 @@ pipeline {
|
|||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
timeout (time: 60, unit: 'MINUTES') {
|
||||||
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
|
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
|
|||||||
@@ -141,18 +141,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Type == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.OC_Credentials == null) {
|
if (params.OC_Credentials == null) {
|
||||||
allParametersPresent = false
|
allParametersPresent = false
|
||||||
}
|
}
|
||||||
@@ -201,7 +189,6 @@ pipeline {
|
|||||||
withCredentials([
|
withCredentials([
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
||||||
@@ -210,7 +197,7 @@ pipeline {
|
|||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
timeout (time: 60, unit: 'MINUTES') {
|
||||||
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath}"
|
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
@@ -240,10 +227,6 @@ pipeline {
|
|||||||
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
|
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
|
||||||
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
|
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
|
||||||
}
|
}
|
||||||
if (fileExists("test_logs_CN.zip")){
|
|
||||||
sh "mv test_logs_CN.zip test_logs_CN_${env.BUILD_ID}.zip"
|
|
||||||
archiveArtifacts artifacts: "test_logs_CN_${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if (fileExists("test_results.html")) {
|
if (fileExists("test_results.html")) {
|
||||||
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
|
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
||||||
|
|||||||
@@ -133,19 +133,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Type == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.OC_Credentials == null) {
|
if (params.OC_Credentials == null) {
|
||||||
allParametersPresent = false
|
allParametersPresent = false
|
||||||
}
|
}
|
||||||
@@ -193,7 +180,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
withCredentials([
|
withCredentials([
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.OC_Credentials}", usernameVariable: 'OC_Username', passwordVariable: 'OC_Password']
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
||||||
@@ -202,7 +188,7 @@ pipeline {
|
|||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
timeout (time: 60, unit: 'MINUTES') {
|
||||||
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
|
sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
@@ -232,10 +218,6 @@ pipeline {
|
|||||||
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
|
if (fileExists("test_logs_${env.BUILD_ID}.zip")) {
|
||||||
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
|
archiveArtifacts artifacts: "test_logs_${env.BUILD_ID}.zip"
|
||||||
}
|
}
|
||||||
if (fileExists("test_logs_CN.zip")){
|
|
||||||
sh "mv test_logs_CN.zip test_logs_CN_${env.BUILD_ID}.zip"
|
|
||||||
archiveArtifacts artifacts: "test_logs_CN_${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if (fileExists("test_results.html")) {
|
if (fileExists("test_results.html")) {
|
||||||
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
|
sh "mv test_results.html test_results-${env.JOB_NAME}.html"
|
||||||
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' test_results-${JOB_NAME}.html"
|
||||||
|
|||||||
@@ -141,24 +141,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
} else {
|
|
||||||
if (params.EPC_IPAddress == "none") {
|
|
||||||
doEpcLogCollection = false
|
|
||||||
echo "No EPC collections (ping/iperf/hss/mme/spgw)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (params.EPC_Type == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allParametersPresent) {
|
if (allParametersPresent) {
|
||||||
echo "All parameters are present"
|
echo "All parameters are present"
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
if (eNB_AllowMergeRequestProcess) {
|
||||||
@@ -200,7 +182,6 @@ pipeline {
|
|||||||
withCredentials([
|
withCredentials([
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
||||||
@@ -208,7 +189,7 @@ pipeline {
|
|||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
timeout (time: 60, unit: 'MINUTES') {
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}"
|
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --XMLTestFile=${xmlFile}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
@@ -309,9 +290,6 @@ pipeline {
|
|||||||
withCredentials([
|
withCredentials([
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
||||||
]) {
|
]) {
|
||||||
echo '\u2705 \u001B[32mLog Collection (OAI UE - Run)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectOAIUE --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (OAI UE - Run)\u001B[0m'
|
echo '\u2705 \u001B[32mLog Transfer (OAI UE - Run)\u001B[0m'
|
||||||
sh "sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/ue.log.zip ./ue.log.${env.BUILD_ID}.zip || true"
|
sh "sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/ue.log.zip ./ue.log.${env.BUILD_ID}.zip || true"
|
||||||
}
|
}
|
||||||
@@ -322,111 +300,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Log Collection (Ping)') {
|
|
||||||
when {
|
|
||||||
expression {doEpcLogCollection}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectPing --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (Ping)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/ping.log.zip ./ping.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("ping.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "ping.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (Iperf)') {
|
|
||||||
when {
|
|
||||||
expression {doEpcLogCollection}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (SPGW)') {
|
|
||||||
when {
|
|
||||||
expression {doEpcLogCollection}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (SPGW)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./spgw.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (MME)') {
|
|
||||||
when {
|
|
||||||
expression {doEpcLogCollection}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (MME)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./mme.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (HSS)') {
|
|
||||||
when {
|
|
||||||
expression {doEpcLogCollection}
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (HSS)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/hss.log.zip ./hss.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,19 +143,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Type == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allParametersPresent) {
|
if (allParametersPresent) {
|
||||||
echo "All parameters are present"
|
echo "All parameters are present"
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
if (eNB_AllowMergeRequestProcess) {
|
||||||
@@ -198,7 +185,6 @@ pipeline {
|
|||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
||||||
@@ -206,7 +192,7 @@ pipeline {
|
|||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
timeout (time: 60, unit: 'MINUTES') {
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}"
|
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --XMLTestFile=${xmlFile}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
@@ -232,48 +218,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Terminate SPGW') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate SPGW\u001B[0m'
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Terminate MME') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate MME\u001B[0m'
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Terminate HSS') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate HSS\u001B[0m'
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Log Collection') {
|
stage('Log Collection') {
|
||||||
@@ -319,116 +263,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Log Collection (SPGW)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (SPGW)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./spgw.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (MME)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (MME)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./mme.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (HSS)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (HSS)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/hss.log.zip ./hss.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (Ping)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectPing --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (Ping)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/ping.log.zip ./ping.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("ping.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "ping.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (Iperf)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,19 +154,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Type == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allParametersPresent) {
|
if (allParametersPresent) {
|
||||||
echo "All parameters are present"
|
echo "All parameters are present"
|
||||||
if (eNB_AllowMergeRequestProcess) {
|
if (eNB_AllowMergeRequestProcess) {
|
||||||
@@ -209,7 +196,6 @@ pipeline {
|
|||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB1_Credentials}", usernameVariable: 'eNB1_Username', passwordVariable: 'eNB1_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}"
|
||||||
@@ -218,7 +204,7 @@ pipeline {
|
|||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
timeout (time: 60, unit: 'MINUTES') {
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}"
|
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --eNB1IPAddress=${params.eNB1_IPAddress} --eNB1UserName=${eNB1_Username} --eNB1Password=${eNB1_Password} --eNB1SourceCodePath=${params.eNB1_SourceCodePath} --eNB2IPAddress=${params.eNB2_IPAddress} --eNB2UserName=${eNB2_Username} --eNB2Password=${eNB2_Password} --eNB2SourceCodePath=${params.eNB2_SourceCodePath} --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath} --XMLTestFile=${xmlFile}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
@@ -293,9 +279,6 @@ pipeline {
|
|||||||
withCredentials([
|
withCredentials([
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.UE_Credentials}", usernameVariable: 'UE_Username', passwordVariable: 'UE_Password']
|
||||||
]) {
|
]) {
|
||||||
echo '\u2705 \u001B[32mLog Collection (OAI UE - Run)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectOAIUE --UEIPAddress=${params.UE_IPAddress} --UEUserName=${UE_Username} --UEPassword=${UE_Password} --UESourceCodePath=${params.UE_SourceCodePath}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (OAI UE - Run)\u001B[0m'
|
echo '\u2705 \u001B[32mLog Transfer (OAI UE - Run)\u001B[0m'
|
||||||
sh "sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/ue.log.zip ./ue.log.${env.BUILD_ID}.zip || true"
|
sh "sshpass -p \'${UE_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${UE_Username}@${params.UE_IPAddress}:${UE_SourceCodePath}/cmake_targets/ue.log.zip ./ue.log.${env.BUILD_ID}.zip || true"
|
||||||
}
|
}
|
||||||
@@ -306,55 +289,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Log Collection (CN)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
if (params.EPC_Type != 'OAICN5G') {
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/hss.log.zip ./hss.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (MME or AMF)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
if (params.EPC_Type == 'OAICN5G') {
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./amf.log.${env.BUILD_ID}.zip || true"
|
|
||||||
} else {
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./mme.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (SPGW or SMF/UPF)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
if (params.EPC_Type == 'OAICN5G') {
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./smf-upf.log.${env.BUILD_ID}.zip || true"
|
|
||||||
} else {
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./spgw.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if(fileExists("amf.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "amf.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
if(fileExists("smf-upf.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "smf-upf.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
echo '\u2705 \u001B[32mLog Collection for CoreNetwork Done!\u001B[0m'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,19 +137,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (params.EPC_IPAddress == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Type == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_SourceCodePath == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
if (params.EPC_Credentials == null) {
|
|
||||||
allParametersPresent = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params.Flexric_Tag != null) {
|
if (params.Flexric_Tag != null) {
|
||||||
echo "This pipeline is configured to run with a FlexRIC deployment."
|
echo "This pipeline is configured to run with a FlexRIC deployment."
|
||||||
echo "Appending FlexRicTag option to the list of options"
|
echo "Appending FlexRicTag option to the list of options"
|
||||||
@@ -196,7 +183,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
withCredentials([
|
withCredentials([
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'],
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'],
|
|
||||||
]) {
|
]) {
|
||||||
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} ${mainPythonAllXmlFiles}"
|
sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} ${mainPythonAllXmlFiles}"
|
||||||
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
|
||||||
@@ -204,7 +190,7 @@ pipeline {
|
|||||||
if (fileExists(xmlFile)) {
|
if (fileExists(xmlFile)) {
|
||||||
try {
|
try {
|
||||||
timeout (time: 60, unit: 'MINUTES') {
|
timeout (time: 60, unit: 'MINUTES') {
|
||||||
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}"
|
sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}"
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
currentBuild.result = 'FAILURE'
|
currentBuild.result = 'FAILURE'
|
||||||
@@ -237,69 +223,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Terminate SPGW') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate SPGW\u001B[0m'
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
success {
|
|
||||||
script {
|
|
||||||
termStatusArray[termSPGW] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Terminate MME') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate MME\u001B[0m'
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
success {
|
|
||||||
script {
|
|
||||||
termStatusArray[termMME] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Terminate HSS') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
echo '\u2705 \u001B[32mTerminate HSS\u001B[0m'
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
post {
|
|
||||||
success {
|
|
||||||
script {
|
|
||||||
termStatusArray[termHSS] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Log Collection') {
|
stage('Log Collection') {
|
||||||
@@ -345,116 +268,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Log Collection (SPGW)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (SPGW)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/spgw.log.zip ./spgw.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (MME)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (MME)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/mme.log.zip ./mme.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (HSS)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (HSS)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/hss.log.zip ./hss.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (Ping)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectPing --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (Ping)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/ping.log.zip ./ping.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("ping.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "ping.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Log Collection (Iperf)') {
|
|
||||||
// Bypassing this stage if EPC server is not defined
|
|
||||||
when {
|
|
||||||
expression { params.EPC_IPAddress != "none" }
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
|
|
||||||
sh "python3 ci-scripts/main.py --mode=LogCollectIperf --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --EPCType=${params.EPC_Type}"
|
|
||||||
|
|
||||||
echo '\u2705 \u001B[32mLog Transfer (Iperf)\u001B[0m'
|
|
||||||
sh "sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/scripts/iperf.log.zip ./iperf.log.${env.BUILD_ID}.zip || true"
|
|
||||||
}
|
|
||||||
script {
|
|
||||||
if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
|
|
||||||
archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -484,27 +297,6 @@ pipeline {
|
|||||||
sh "python3 ci-scripts/main.py --mode=TerminateeNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
|
sh "python3 ci-scripts/main.py --mode=TerminateeNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((!termStatusArray[termSPGW]) && (params.EPC_IPAddress != "none")) {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateSPGW --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((!termStatusArray[termMME]) && (params.EPC_IPAddress != "none")) {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateMME --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((!termStatusArray[termHSS]) && (params.EPC_IPAddress != "none")) {
|
|
||||||
withCredentials([
|
|
||||||
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password']
|
|
||||||
]) {
|
|
||||||
sh "python3 ci-scripts/main.py --mode=TerminateHSS --EPCIPAddress=${params.EPC_IPAddress} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCType=${params.EPC_Type} --EPCSourceCodePath=${params.EPC_SourceCodePath}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+93
-106
@@ -41,7 +41,7 @@ import constants as CONST
|
|||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
||||||
|
|
||||||
|
|
||||||
py_param_file_present = False
|
py_param_file_present = False
|
||||||
@@ -52,16 +52,16 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
|||||||
myArgv = argvs.pop(1) # 0th is this file's name
|
myArgv = argvs.pop(1) # 0th is this file's name
|
||||||
|
|
||||||
#--help
|
#--help
|
||||||
if re.match('^\-\-help$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-help$', myArgv, re.IGNORECASE):
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
if re.match('^\-\-local$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-local$', myArgv, re.IGNORECASE):
|
||||||
force_local = True
|
force_local = True
|
||||||
|
|
||||||
|
|
||||||
#--apply=<filename> as parameters file, to replace inline parameters
|
#--apply=<filename> as parameters file, to replace inline parameters
|
||||||
elif re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-Apply=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-Apply=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-Apply=(.+)$', myArgv, re.IGNORECASE)
|
||||||
py_params_file = matchReg.group(1)
|
py_params_file = matchReg.group(1)
|
||||||
with open(py_params_file,'r') as file:
|
with open(py_params_file,'r') as file:
|
||||||
# The FullLoader parameter handles the conversion from YAML
|
# The FullLoader parameter handles the conversion from YAML
|
||||||
@@ -71,14 +71,14 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
|||||||
#AssignParams(py_params) #to be uncommented once validated
|
#AssignParams(py_params) #to be uncommented once validated
|
||||||
|
|
||||||
#consider inline parameters
|
#consider inline parameters
|
||||||
elif re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-mode=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-mode=(.+)$', myArgv, re.IGNORECASE)
|
||||||
mode = matchReg.group(1)
|
mode = matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBRepository=(.+)$|^\-\-ranRepository(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBRepository=(.+)$|^\-\-ranRepository(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBRepository=(.+)$', myArgv, re.IGNORECASE)
|
||||||
else:
|
else:
|
||||||
matchReg = re.match('^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-ranRepository=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.ranRepository = matchReg.group(1)
|
CiTestObj.ranRepository = matchReg.group(1)
|
||||||
RAN.ranRepository=matchReg.group(1)
|
RAN.ranRepository=matchReg.group(1)
|
||||||
HTML.ranRepository=matchReg.group(1)
|
HTML.ranRepository=matchReg.group(1)
|
||||||
@@ -86,11 +86,11 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
|||||||
SCA.ranRepository=matchReg.group(1)
|
SCA.ranRepository=matchReg.group(1)
|
||||||
PHYSIM.ranRepository=matchReg.group(1)
|
PHYSIM.ranRepository=matchReg.group(1)
|
||||||
CLUSTER.ranRepository=matchReg.group(1)
|
CLUSTER.ranRepository=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB_AllowMerge=(.+)$|^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB_AllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
||||||
else:
|
else:
|
||||||
matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
|
||||||
doMerge = matchReg.group(1)
|
doMerge = matchReg.group(1)
|
||||||
if ((doMerge == 'true') or (doMerge == 'True')):
|
if ((doMerge == 'true') or (doMerge == 'True')):
|
||||||
CiTestObj.ranAllowMerge = True
|
CiTestObj.ranAllowMerge = True
|
||||||
@@ -100,11 +100,11 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
|||||||
SCA.ranAllowMerge=True
|
SCA.ranAllowMerge=True
|
||||||
PHYSIM.ranAllowMerge=True
|
PHYSIM.ranAllowMerge=True
|
||||||
CLUSTER.ranAllowMerge=True
|
CLUSTER.ranAllowMerge=True
|
||||||
elif re.match('^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBBranch=(.+)$|^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||||
else:
|
else:
|
||||||
matchReg = re.match('^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-ranBranch=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.ranBranch = matchReg.group(1)
|
CiTestObj.ranBranch = matchReg.group(1)
|
||||||
RAN.ranBranch=matchReg.group(1)
|
RAN.ranBranch=matchReg.group(1)
|
||||||
HTML.ranBranch=matchReg.group(1)
|
HTML.ranBranch=matchReg.group(1)
|
||||||
@@ -112,11 +112,11 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
|||||||
SCA.ranBranch=matchReg.group(1)
|
SCA.ranBranch=matchReg.group(1)
|
||||||
PHYSIM.ranBranch=matchReg.group(1)
|
PHYSIM.ranBranch=matchReg.group(1)
|
||||||
CLUSTER.ranBranch=matchReg.group(1)
|
CLUSTER.ranBranch=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBCommitID=(.*)$|^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||||
else:
|
else:
|
||||||
matchReg = re.match('^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-ranCommitID=(.*)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.ranCommitID = matchReg.group(1)
|
CiTestObj.ranCommitID = matchReg.group(1)
|
||||||
RAN.ranCommitID=matchReg.group(1)
|
RAN.ranCommitID=matchReg.group(1)
|
||||||
HTML.ranCommitID=matchReg.group(1)
|
HTML.ranCommitID=matchReg.group(1)
|
||||||
@@ -124,11 +124,11 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
|||||||
SCA.ranCommitID=matchReg.group(1)
|
SCA.ranCommitID=matchReg.group(1)
|
||||||
PHYSIM.ranCommitID=matchReg.group(1)
|
PHYSIM.ranCommitID=matchReg.group(1)
|
||||||
CLUSTER.ranCommitID=matchReg.group(1)
|
CLUSTER.ranCommitID=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBTargetBranch=(.*)$|^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||||
else:
|
else:
|
||||||
matchReg = re.match('^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-ranTargetBranch=(.*)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.ranTargetBranch = matchReg.group(1)
|
CiTestObj.ranTargetBranch = matchReg.group(1)
|
||||||
RAN.ranTargetBranch=matchReg.group(1)
|
RAN.ranTargetBranch=matchReg.group(1)
|
||||||
HTML.ranTargetBranch=matchReg.group(1)
|
HTML.ranTargetBranch=matchReg.group(1)
|
||||||
@@ -136,140 +136,127 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
|
|||||||
SCA.ranTargetBranch=matchReg.group(1)
|
SCA.ranTargetBranch=matchReg.group(1)
|
||||||
PHYSIM.ranTargetBranch=matchReg.group(1)
|
PHYSIM.ranTargetBranch=matchReg.group(1)
|
||||||
CLUSTER.ranTargetBranch=matchReg.group(1)
|
CLUSTER.ranTargetBranch=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBIPAddress=matchReg.group(1)
|
RAN.eNBIPAddress=matchReg.group(1)
|
||||||
CONTAINERS.eNBIPAddress=matchReg.group(1)
|
CONTAINERS.eNBIPAddress=matchReg.group(1)
|
||||||
SCA.eNBIPAddress=matchReg.group(1)
|
SCA.eNBIPAddress=matchReg.group(1)
|
||||||
PHYSIM.eNBIPAddress=matchReg.group(1)
|
PHYSIM.eNBIPAddress=matchReg.group(1)
|
||||||
CLUSTER.eNBIPAddress=matchReg.group(1)
|
CLUSTER.eNBIPAddress=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB1IPAddress=matchReg.group(1)
|
RAN.eNB1IPAddress=matchReg.group(1)
|
||||||
CONTAINERS.eNB1IPAddress=matchReg.group(1)
|
CONTAINERS.eNB1IPAddress=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2IPAddress=matchReg.group(1)
|
RAN.eNB2IPAddress=matchReg.group(1)
|
||||||
CONTAINERS.eNB2IPAddress=matchReg.group(1)
|
CONTAINERS.eNB2IPAddress=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBUserName=matchReg.group(1)
|
RAN.eNBUserName=matchReg.group(1)
|
||||||
CONTAINERS.eNBUserName=matchReg.group(1)
|
CONTAINERS.eNBUserName=matchReg.group(1)
|
||||||
SCA.eNBUserName=matchReg.group(1)
|
SCA.eNBUserName=matchReg.group(1)
|
||||||
PHYSIM.eNBUserName=matchReg.group(1)
|
PHYSIM.eNBUserName=matchReg.group(1)
|
||||||
CLUSTER.eNBUserName=matchReg.group(1)
|
CLUSTER.eNBUserName=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB1UserName=matchReg.group(1)
|
RAN.eNB1UserName=matchReg.group(1)
|
||||||
CONTAINERS.eNB1UserName=matchReg.group(1)
|
CONTAINERS.eNB1UserName=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2UserName=matchReg.group(1)
|
RAN.eNB2UserName=matchReg.group(1)
|
||||||
CONTAINERS.eNB2UserName=matchReg.group(1)
|
CONTAINERS.eNB2UserName=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBPassword=matchReg.group(1)
|
RAN.eNBPassword=matchReg.group(1)
|
||||||
CONTAINERS.eNBPassword=matchReg.group(1)
|
CONTAINERS.eNBPassword=matchReg.group(1)
|
||||||
SCA.eNBPassword=matchReg.group(1)
|
SCA.eNBPassword=matchReg.group(1)
|
||||||
PHYSIM.eNBPassword=matchReg.group(1)
|
PHYSIM.eNBPassword=matchReg.group(1)
|
||||||
CLUSTER.eNBPassword=matchReg.group(1)
|
CLUSTER.eNBPassword=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB1Password=matchReg.group(1)
|
RAN.eNB1Password=matchReg.group(1)
|
||||||
CONTAINERS.eNB1Password=matchReg.group(1)
|
CONTAINERS.eNB1Password=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2Password=matchReg.group(1)
|
RAN.eNB2Password=matchReg.group(1)
|
||||||
CONTAINERS.eNB2Password=matchReg.group(1)
|
CONTAINERS.eNB2Password=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
if re.match(r'^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNBSourceCodePath=matchReg.group(1)
|
RAN.eNBSourceCodePath=matchReg.group(1)
|
||||||
CONTAINERS.eNBSourceCodePath=matchReg.group(1)
|
CONTAINERS.eNBSourceCodePath=matchReg.group(1)
|
||||||
SCA.eNBSourceCodePath=matchReg.group(1)
|
SCA.eNBSourceCodePath=matchReg.group(1)
|
||||||
PHYSIM.eNBSourceCodePath=matchReg.group(1)
|
PHYSIM.eNBSourceCodePath=matchReg.group(1)
|
||||||
CLUSTER.eNBSourceCodePath=matchReg.group(1)
|
CLUSTER.eNBSourceCodePath=matchReg.group(1)
|
||||||
EPC.eNBSourceCodePath=matchReg.group(1)
|
elif re.match(r'^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
elif re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
matchReg = re.match(r'^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
matchReg = re.match('^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
|
||||||
RAN.eNB1SourceCodePath=matchReg.group(1)
|
RAN.eNB1SourceCodePath=matchReg.group(1)
|
||||||
CONTAINERS.eNB1SourceCodePath=matchReg.group(1)
|
CONTAINERS.eNB1SourceCodePath=matchReg.group(1)
|
||||||
elif re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.eNB2SourceCodePath=matchReg.group(1)
|
RAN.eNB2SourceCodePath=matchReg.group(1)
|
||||||
CONTAINERS.eNB2SourceCodePath=matchReg.group(1)
|
CONTAINERS.eNB2SourceCodePath=matchReg.group(1)
|
||||||
elif re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-EPCIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
print("parameter --EPCIPAddress ignored")
|
||||||
EPC.IPAddress=matchReg.group(1)
|
elif re.match(r'^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
elif re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE):
|
print("parameter --EPCUserName ignored")
|
||||||
matchReg = re.match('^\-\-EPCUserName=(.+)$', myArgv, re.IGNORECASE)
|
elif re.match(r'^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
EPC.UserName=matchReg.group(1)
|
print("parameter --EPCPassword ignored")
|
||||||
elif re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-EPCPassword=(.+)$', myArgv, re.IGNORECASE)
|
print("parameter --EPCSourceCodePath ignored")
|
||||||
EPC.Password=matchReg.group(1)
|
elif re.match(r'^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
|
||||||
elif re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
print("parameter --EPCType ignored")
|
||||||
matchReg = re.match('^\-\-EPCSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
elif re.match(r'^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
|
||||||
EPC.SourceCodePath=matchReg.group(1)
|
print("parameter --EPCContainerPrefix ignored")
|
||||||
elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
|
||||||
if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-Docker', matchReg.group(1), re.IGNORECASE) or re.match('OC-OAI-CN5G', matchReg.group(1), re.IGNORECASE):
|
|
||||||
EPC.Type=matchReg.group(1)
|
|
||||||
else:
|
|
||||||
sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-Docker or OC-OAI-CN5G)')
|
|
||||||
elif re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE):
|
|
||||||
matchReg = re.match('^\-\-EPCContainerPrefix=(.+)$', myArgv, re.IGNORECASE)
|
|
||||||
EPC.ContainerPrefix=matchReg.group(1)
|
|
||||||
elif re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE):
|
|
||||||
matchReg = re.match('^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE)
|
|
||||||
CiTestObj.testXMLfiles.append(matchReg.group(1))
|
CiTestObj.testXMLfiles.append(matchReg.group(1))
|
||||||
HTML.testXMLfiles.append(matchReg.group(1))
|
HTML.testXMLfiles.append(matchReg.group(1))
|
||||||
HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1
|
HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1
|
||||||
elif re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE): # cleanup
|
||||||
matchReg = re.match('^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.UEIPAddress = matchReg.group(1)
|
CiTestObj.UEIPAddress = matchReg.group(1)
|
||||||
elif re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.UEUserName = matchReg.group(1)
|
CiTestObj.UEUserName = matchReg.group(1)
|
||||||
elif re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.UEPassword = matchReg.group(1)
|
CiTestObj.UEPassword = matchReg.group(1)
|
||||||
elif re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CiTestObj.UESourceCodePath = matchReg.group(1)
|
CiTestObj.UESourceCodePath = matchReg.group(1)
|
||||||
elif re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE)
|
||||||
finalStatus = matchReg.group(1)
|
finalStatus = matchReg.group(1)
|
||||||
if ((finalStatus == 'true') or (finalStatus == 'True')):
|
if ((finalStatus == 'true') or (finalStatus == 'True')):
|
||||||
CiTestObj.finalStatus = True
|
CiTestObj.finalStatus = True
|
||||||
elif re.match('^\-\-OCUserName=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-OCUserName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-OCUserName=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-OCUserName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
PHYSIM.OCUserName = matchReg.group(1)
|
PHYSIM.OCUserName = matchReg.group(1)
|
||||||
CLUSTER.OCUserName = matchReg.group(1)
|
CLUSTER.OCUserName = matchReg.group(1)
|
||||||
EPC.OCUserName = matchReg.group(1)
|
elif re.match(r'^\-\-OCPassword=(.+)$', myArgv, re.IGNORECASE):
|
||||||
elif re.match('^\-\-OCPassword=(.+)$', myArgv, re.IGNORECASE):
|
matchReg = re.match(r'^\-\-OCPassword=(.+)$', myArgv, re.IGNORECASE)
|
||||||
matchReg = re.match('^\-\-OCPassword=(.+)$', myArgv, re.IGNORECASE)
|
|
||||||
PHYSIM.OCPassword = matchReg.group(1)
|
PHYSIM.OCPassword = matchReg.group(1)
|
||||||
CLUSTER.OCPassword = matchReg.group(1)
|
CLUSTER.OCPassword = matchReg.group(1)
|
||||||
EPC.OCPassword = matchReg.group(1)
|
elif re.match(r'^\-\-OCProjectName=(.+)$', myArgv, re.IGNORECASE):
|
||||||
elif re.match('^\-\-OCProjectName=(.+)$', myArgv, re.IGNORECASE):
|
matchReg = re.match(r'^\-\-OCProjectName=(.+)$', myArgv, re.IGNORECASE)
|
||||||
matchReg = re.match('^\-\-OCProjectName=(.+)$', myArgv, re.IGNORECASE)
|
|
||||||
PHYSIM.OCProjectName = matchReg.group(1)
|
PHYSIM.OCProjectName = matchReg.group(1)
|
||||||
CLUSTER.OCProjectName = matchReg.group(1)
|
CLUSTER.OCProjectName = matchReg.group(1)
|
||||||
EPC.OCProjectName = matchReg.group(1)
|
elif re.match(r'^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE):
|
||||||
elif re.match('^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE):
|
matchReg = re.match(r'^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE)
|
||||||
matchReg = re.match('^\-\-OCUrl=(.+)$', myArgv, re.IGNORECASE)
|
|
||||||
CLUSTER.OCUrl = matchReg.group(1)
|
CLUSTER.OCUrl = matchReg.group(1)
|
||||||
elif re.match('^\-\-OCRegistry=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-OCRegistry=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-OCRegistry=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-OCRegistry=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CLUSTER.OCRegistry = matchReg.group(1)
|
CLUSTER.OCRegistry = matchReg.group(1)
|
||||||
elif re.match('^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE)
|
||||||
RAN.BuildId = matchReg.group(1)
|
RAN.BuildId = matchReg.group(1)
|
||||||
elif re.match('^\-\-FlexRicTag=(.+)$', myArgv, re.IGNORECASE):
|
elif re.match(r'^\-\-FlexRicTag=(.+)$', myArgv, re.IGNORECASE):
|
||||||
matchReg = re.match('^\-\-FlexRicTag=(.+)$', myArgv, re.IGNORECASE)
|
matchReg = re.match(r'^\-\-FlexRicTag=(.+)$', myArgv, re.IGNORECASE)
|
||||||
CONTAINERS.flexricTag = matchReg.group(1)
|
CONTAINERS.flexricTag = matchReg.group(1)
|
||||||
else:
|
else:
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
|
|||||||
+53
-19
@@ -63,58 +63,87 @@ adb_ue_2:
|
|||||||
|
|
||||||
oc-cn5g:
|
oc-cn5g:
|
||||||
Host: avra
|
Host: avra
|
||||||
Namespace: "oaicicd-core-for-ci-ran"
|
|
||||||
CNPath: "/opt/oai-cn5g-fed-develop-2025-jan"
|
|
||||||
NetworkScript: echo "inet 172.21.6.102"
|
NetworkScript: echo "inet 172.21.6.102"
|
||||||
RunIperf3Server: False
|
RunIperf3Server: False
|
||||||
|
Deploy: "! scripts/oc-cn5g-deploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ci-ran"
|
||||||
|
Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ci-ran"
|
||||||
|
LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ci-ran %%log_dir%%"
|
||||||
|
|
||||||
oc-cn5g-20897:
|
oc-cn5g-20897:
|
||||||
Host: cacofonix
|
Host: cacofonix
|
||||||
Namespace: "oaicicd-core-for-fhi72"
|
|
||||||
CNPath: "/opt/oai-cn5g-fed-develop-2025-jan"
|
|
||||||
NetworkScript: echo "inet 172.21.6.105"
|
NetworkScript: echo "inet 172.21.6.105"
|
||||||
RunIperf3Server: False
|
RunIperf3Server: False
|
||||||
|
Deploy: "! scripts/oc-cn5g-deploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72"
|
||||||
|
Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72"
|
||||||
|
LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-fhi72 %%log_dir%%"
|
||||||
|
|
||||||
oc-cn5g-20897-aerial2:
|
oc-cn5g-20897-aerial2:
|
||||||
Host: aerial2
|
Host: aerial2
|
||||||
Namespace: "oaicicd-core-for-nvidia-aerial"
|
|
||||||
CNPath: "/opt/oai-cn5g-fed-develop-2025-jan"
|
|
||||||
NetworkScript: echo "inet 172.21.6.105"
|
NetworkScript: echo "inet 172.21.6.105"
|
||||||
RunIperf3Server: False
|
RunIperf3Server: False
|
||||||
|
Deploy: "! scripts/oc-cn5g-deploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-nvidia-aerial"
|
||||||
|
Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-nvidia-aerial"
|
||||||
|
LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-nvidia-aerial %%log_dir%%"
|
||||||
|
|
||||||
matix-cn5g:
|
matix-cn5g:
|
||||||
Host: matix
|
Host: matix
|
||||||
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
||||||
CmdPrefix: docker exec prod-trf-gen
|
|
||||||
RunIperf3Server: False
|
RunIperf3Server: False
|
||||||
|
Deploy: "cd /opt/oai-cn5g-fed-v2/docker-compose && python3 ./core-network.py --type start-basic"
|
||||||
|
Undeploy: "cd /opt/oai-cn5g-fed-v2/docker-compose && python3 ./core-network.py --type stop-basic"
|
||||||
|
LogCollect:
|
||||||
|
- "docker logs oai-smf > %%log_dir%%/oai-smf.log"
|
||||||
|
- "docker logs oai-amf > %%log_dir%%/oai-amf.log"
|
||||||
|
- "docker logs oai-upf > %%log_dir%%/oai-upf.log"
|
||||||
|
|
||||||
porcepix-cn4g:
|
porcepix-cn4g:
|
||||||
Host: porcepix
|
Host: porcepix
|
||||||
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
||||||
CmdPrefix: docker exec prod-trf-gen
|
CmdPrefix: docker exec prod-trf-gen
|
||||||
|
Deploy: "! scripts/magma-epc-deploy.sh /opt/oai-epc-magma/docker-compose.yml"
|
||||||
porcepix-cn5g:
|
Undeploy: "docker compose -f /opt/oai-epc-magma/docker-compose.yml down"
|
||||||
Host: porcepix
|
LogCollect: "! scripts/magma-epc-logcollect.sh %%log_dir%%"
|
||||||
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
|
||||||
CmdPrefix: docker exec prod-trf-gen
|
|
||||||
RunIperf3Server: False
|
|
||||||
|
|
||||||
nano-cn4g:
|
nano-cn4g:
|
||||||
Host: nano
|
Host: nano
|
||||||
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
NetworkScript: docker exec prod-trf-gen ip a show dev eth0
|
||||||
CmdPrefix: docker exec prod-trf-gen
|
CmdPrefix: docker exec prod-trf-gen
|
||||||
|
Deploy: "! scripts/magma-epc-deploy.sh /opt/oai-epc-magma/docker-compose.yml"
|
||||||
|
Undeploy: "docker compose -f /opt/oai-epc-magma/docker-compose.yml down"
|
||||||
|
LogCollect: "! scripts/magma-epc-logcollect.sh %%log_dir%%"
|
||||||
|
|
||||||
ltebox-nano:
|
ltebox-nano:
|
||||||
Host: nano
|
Host: nano
|
||||||
NetworkScript: ip a show dev tun1
|
NetworkScript: ip a show dev tun1
|
||||||
|
Deploy:
|
||||||
|
- "sudo su -c 'screen -dm -S simulated_hss /opt/hss_sim0609/starthss'"
|
||||||
|
- "sleep 1"
|
||||||
|
- "sudo /opt/ltebox/tools/start_mme && sudo /opt/ltebox/tools/start_xGw &"
|
||||||
|
- "sleep 1"
|
||||||
|
Undeploy: "sudo /opt/ltebox/tools/stop_xGw; sudo /opt/ltebox/tools/stop_mme; sudo killall screen"
|
||||||
|
LogCollect: "cp /opt/hss_sim0609/hss.log /opt/ltebox/var/log/{mmeLog.0,s1apcLog.0,s1apsLog.0,s11cLog.0,libLog.0,xGwLog.0} %%log_dir%%"
|
||||||
|
|
||||||
sabox-nepes:
|
sabox-nepes:
|
||||||
Host: nepes
|
Host: nepes
|
||||||
NetworkScript: ip a show dev tun1
|
NetworkScript: ip a show dev tun1
|
||||||
|
Deploy:
|
||||||
|
- "sudo su -c 'screen -dm -S simulated_5g_hss /opt/hss_sim0609/start_5g_hss'"
|
||||||
|
- "sleep 1"
|
||||||
|
- "sudo /opt/ltebox/tools/start_sabox < /dev/null &> /dev/null"
|
||||||
|
- "sleep 1"
|
||||||
|
LogCollect: "cp /opt/hss_sim0609/hss.log /opt/ltebox/var/log/{amfLog.0,ngapcLog.0,ngapcommonLog.0,ngapsLog.0,xGwLog.0,upfLog.0} %%log_dir%%"
|
||||||
|
Undeploy: "sudo /opt/ltebox/tools/stop_sabox; sudo killall screen"
|
||||||
|
|
||||||
ltebox-nepes:
|
ltebox-nepes:
|
||||||
Host: nepes
|
Host: nepes
|
||||||
NetworkScript: ip a show dev tun1
|
NetworkScript: ip a show dev tun1
|
||||||
|
Deploy:
|
||||||
|
- "sudo su -c 'screen -dm -S simulated_hss /opt/hss_sim0609/starthss'"
|
||||||
|
- "sleep 1"
|
||||||
|
- "sudo /opt/ltebox/tools/start_mme && sudo /opt/ltebox/tools/start_xGw &"
|
||||||
|
- "sleep 1"
|
||||||
|
Undeploy: "sudo /opt/ltebox/tools/stop_xGw; sudo /opt/ltebox/tools/stop_mme; sudo killall screen"
|
||||||
|
LogCollect: "cp /opt/hss_sim0609/hss.log /opt/ltebox/var/log/{mmeLog.0,s1apcLog.0,s1apsLog.0,s11cLog.0,libLog.0,xGwLog.0} %%log_dir%%"
|
||||||
|
|
||||||
amarisoft_ue:
|
amarisoft_ue:
|
||||||
Host: amariue
|
Host: amariue
|
||||||
@@ -357,6 +386,15 @@ rfsim5g_ext_dn:
|
|||||||
NetworkScript: docker exec rfsim5g-oai-ext-dn ip a show dev eth0
|
NetworkScript: docker exec rfsim5g-oai-ext-dn ip a show dev eth0
|
||||||
CmdPrefix: docker exec rfsim5g-oai-ext-dn
|
CmdPrefix: docker exec rfsim5g-oai-ext-dn
|
||||||
|
|
||||||
|
oai_ext_dn:
|
||||||
|
Host: "%%current_host%%"
|
||||||
|
NetworkScript: docker exec oai-ext-dn ip a show dev eth0
|
||||||
|
CmdPrefix: docker exec oai-ext-dn
|
||||||
|
|
||||||
|
rfsim5g_5gc_fixed_ip:
|
||||||
|
Host: "%%current_host%%"
|
||||||
|
NetworkScript: echo "inet 12.1.1.1"
|
||||||
|
|
||||||
rfsim4g_ue:
|
rfsim4g_ue:
|
||||||
Host: "%%current_host%%"
|
Host: "%%current_host%%"
|
||||||
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_ue1
|
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_ue1
|
||||||
@@ -385,9 +423,9 @@ rfsim4g_enb_fembms:
|
|||||||
|
|
||||||
rfsim4g_ue_fembms:
|
rfsim4g_ue_fembms:
|
||||||
Host: "%%current_host%%"
|
Host: "%%current_host%%"
|
||||||
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_uem1
|
NetworkScript: docker exec rfsim4g-oai-lte-ue0 ip a show dev oaitun_uem2
|
||||||
CmdPrefix: docker exec rfsim4g-oai-lte-ue0
|
CmdPrefix: docker exec rfsim4g-oai-lte-ue0
|
||||||
IF: oaitun_uem1
|
IF: oaitun_uem2
|
||||||
|
|
||||||
l2sim4g_ue:
|
l2sim4g_ue:
|
||||||
Host: "%%current_host%%"
|
Host: "%%current_host%%"
|
||||||
@@ -402,7 +440,3 @@ l2sim4g_ext_dn:
|
|||||||
Host: "%%current_host%%"
|
Host: "%%current_host%%"
|
||||||
NetworkScript: docker exec l2sim4g-trf-gen ip a show dev eth0
|
NetworkScript: docker exec l2sim4g-trf-gen ip a show dev eth0
|
||||||
CmdPrefix: docker exec l2sim4g-trf-gen
|
CmdPrefix: docker exec l2sim4g-trf-gen
|
||||||
|
|
||||||
test:
|
|
||||||
Host: localhost
|
|
||||||
NetworkScript: echo "inet 127.0.0.1 mtu 1500"
|
|
||||||
|
|||||||
@@ -43,9 +43,6 @@ NAMESPACE = "oaicicd-ran"
|
|||||||
OCUrl = "https://api.oai.cs.eurecom.fr:6443"
|
OCUrl = "https://api.oai.cs.eurecom.fr:6443"
|
||||||
OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr"
|
OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr"
|
||||||
CI_OC_RAN_NAMESPACE = "oaicicd-ran"
|
CI_OC_RAN_NAMESPACE = "oaicicd-ran"
|
||||||
CN_IMAGES = ["mysql", "oai-nrf", "oai-amf", "oai-smf", "oai-upf", "oai-ausf", "oai-udm", "oai-udr", "oai-traffic-server"]
|
|
||||||
CN_CONTAINERS = ["", "-c nrf", "-c amf", "-c smf", "-c upf", "-c ausf", "-c udm", "-c udr", ""]
|
|
||||||
|
|
||||||
|
|
||||||
def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
|
def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
|
||||||
if ocUserName == '' or ocPassword == '' or ocProjectName == '':
|
if ocUserName == '' or ocPassword == '' or ocProjectName == '':
|
||||||
@@ -67,49 +64,6 @@ def OC_login(cmd, ocUserName, ocPassword, ocProjectName):
|
|||||||
def OC_logout(cmd):
|
def OC_logout(cmd):
|
||||||
cmd.run(f'oc logout')
|
cmd.run(f'oc logout')
|
||||||
|
|
||||||
def OC_deploy_CN(cmd, ocUserName, ocPassword, ocNamespace, path):
|
|
||||||
logging.debug(f'OC OAI CN5G: Deploying OAI CN5G on Openshift Cluster: {ocNamespace}')
|
|
||||||
succeeded = OC_login(cmd, ocUserName, ocPassword, ocNamespace)
|
|
||||||
if not succeeded:
|
|
||||||
return False, CONST.OC_LOGIN_FAIL
|
|
||||||
cmd.run(f'helm list -aq -n {ocNamespace} | xargs -r helm uninstall -n {ocNamespace} --wait')
|
|
||||||
ret = cmd.run(f'helm install --wait oai5gcn {path}/ci-scripts/charts/oai-5g-basic/.')
|
|
||||||
if ret.returncode != 0:
|
|
||||||
logging.error('OC OAI CN5G: Deployment failed')
|
|
||||||
OC_logout(cmd)
|
|
||||||
return False, CONST.OC_PROJECT_FAIL
|
|
||||||
report = cmd.run('oc get pods')
|
|
||||||
OC_logout(cmd)
|
|
||||||
return True, report
|
|
||||||
|
|
||||||
def OC_undeploy_CN(cmd, ocUserName, ocPassword, ocNamespace, path):
|
|
||||||
logging.debug(f'OC OAI CN5G: Terminating CN on Openshift Cluster: {ocNamespace}')
|
|
||||||
succeeded = OC_login(cmd, ocUserName, ocPassword, ocNamespace)
|
|
||||||
if not succeeded:
|
|
||||||
return False, CONST.OC_LOGIN_FAIL
|
|
||||||
cmd.run(f'rm -Rf {path}/logs')
|
|
||||||
cmd.run(f'mkdir -p {path}/logs')
|
|
||||||
logging.debug('OC OAI CN5G: Collecting log files to workspace')
|
|
||||||
cmd.run(f'oc describe pod &> {path}/logs/describe-pods-post-test.log')
|
|
||||||
cmd.run(f'oc get pods.metrics.k8s &> {path}/logs/nf-resource-consumption.log')
|
|
||||||
for ii, ci in zip(CN_IMAGES, CN_CONTAINERS):
|
|
||||||
podName = cmd.run(f"oc get pods | grep {ii} | awk \'{{print $1}}\'").stdout.strip()
|
|
||||||
if not podName:
|
|
||||||
logging.debug(f'{ii} pod not found!')
|
|
||||||
else:
|
|
||||||
cmd.run(f'oc logs -f {podName} {ci} &> {path}/logs/{ii}.log &')
|
|
||||||
cmd.run(f'cd {path}/logs && zip -r -qq test_logs_CN.zip *.log')
|
|
||||||
cmd.copyin(f'{path}/logs/test_logs_CN.zip','test_logs_CN.zip')
|
|
||||||
ret = cmd.run(f'helm list -aq -n {ocNamespace} | xargs -r helm uninstall -n {ocNamespace} --wait')
|
|
||||||
if ret.returncode != 0:
|
|
||||||
logging.error('OC OAI CN5G: Undeployment failed')
|
|
||||||
cmd.run(f'helm list -aq -n {ocNamespace} | xargs -r helm uninstall -n {ocNamespace} --wait')
|
|
||||||
OC_logout(cmd)
|
|
||||||
return False, CONST.OC_PROJECT_FAIL
|
|
||||||
report = cmd.run('oc get pods')
|
|
||||||
OC_logout(cmd)
|
|
||||||
return True, report
|
|
||||||
|
|
||||||
class Cluster:
|
class Cluster:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.eNBIPAddress = ""
|
self.eNBIPAddress = ""
|
||||||
@@ -140,7 +94,7 @@ class Cluster:
|
|||||||
self._retag_image_statement(name, name, newTag, filename)
|
self._retag_image_statement(name, name, newTag, filename)
|
||||||
self.cmd.run(f'oc delete -f {filename}')
|
self.cmd.run(f'oc delete -f {filename}')
|
||||||
ret = self.cmd.run(f'oc create -f {filename}')
|
ret = self.cmd.run(f'oc create -f {filename}')
|
||||||
if re.search('buildconfig.build.openshift.io/[a-zA-Z\-0-9]+ created', ret.stdout) is not None:
|
if re.search(r'buildconfig.build.openshift.io/[a-zA-Z\-0-9]+ created', ret.stdout) is not None:
|
||||||
return True
|
return True
|
||||||
logging.error('error while creating buildconfig: ' + ret.stdout)
|
logging.error('error while creating buildconfig: ' + ret.stdout)
|
||||||
return False
|
return False
|
||||||
@@ -210,7 +164,7 @@ class Cluster:
|
|||||||
|
|
||||||
def _deploy_pod(self, filename, timeout = 120):
|
def _deploy_pod(self, filename, timeout = 120):
|
||||||
ret = self.cmd.run(f'oc create -f {filename}')
|
ret = self.cmd.run(f'oc create -f {filename}')
|
||||||
result = re.search(f'pod/(?P<pod>[a-zA-Z0-9_\-]+) created', ret.stdout)
|
result = re.search(r'pod/(?P<pod>[a-zA-Z0-9_\-]+) created', ret.stdout)
|
||||||
if result is None:
|
if result is None:
|
||||||
logging.error(f'could not deploy pod: {ret.stdout}')
|
logging.error(f'could not deploy pod: {ret.stdout}')
|
||||||
return None
|
return None
|
||||||
@@ -368,7 +322,7 @@ class Cluster:
|
|||||||
self.cmd.run(f'oc logs {ranbuild_job} &> cmake_targets/log/ran-build.log')
|
self.cmd.run(f'oc logs {ranbuild_job} &> cmake_targets/log/ran-build.log')
|
||||||
self.cmd.run(f'oc logs {physim_job} &> cmake_targets/log/oai-physim.log')
|
self.cmd.run(f'oc logs {physim_job} &> cmake_targets/log/oai-physim.log')
|
||||||
self.cmd.run(f'oc logs {clang_job} &> cmake_targets/log/oai-clang.log')
|
self.cmd.run(f'oc logs {clang_job} &> cmake_targets/log/oai-clang.log')
|
||||||
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
|
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log')
|
||||||
|
|
||||||
if status:
|
if status:
|
||||||
self._recreate_is_tag('oai-enb', imageTag, 'openshift/oai-enb-is.yaml')
|
self._recreate_is_tag('oai-enb', imageTag, 'openshift/oai-enb-is.yaml')
|
||||||
@@ -428,7 +382,7 @@ class Cluster:
|
|||||||
self.cmd.run(f'oc logs {nr_cuup_job} &> cmake_targets/log/oai-nr-cuup.log')
|
self.cmd.run(f'oc logs {nr_cuup_job} &> cmake_targets/log/oai-nr-cuup.log')
|
||||||
self.cmd.run(f'oc logs {lteue_job} &> cmake_targets/log/oai-lte-ue.log')
|
self.cmd.run(f'oc logs {lteue_job} &> cmake_targets/log/oai-lte-ue.log')
|
||||||
self.cmd.run(f'oc logs {nrue_job} &> cmake_targets/log/oai-nr-ue.log')
|
self.cmd.run(f'oc logs {nrue_job} &> cmake_targets/log/oai-nr-ue.log')
|
||||||
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
|
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log')
|
||||||
|
|
||||||
if status:
|
if status:
|
||||||
self._recreate_is_tag('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-is.yaml')
|
self._recreate_is_tag('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-is.yaml')
|
||||||
@@ -441,7 +395,7 @@ class Cluster:
|
|||||||
if not wait: logging.error('error during build of ranbuildfhi72_job')
|
if not wait: logging.error('error during build of ranbuildfhi72_job')
|
||||||
status = status and wait
|
status = status and wait
|
||||||
self.cmd.run(f'oc logs {ranbuildfhi72_job} &> cmake_targets/log/ran-build-fhi72.log')
|
self.cmd.run(f'oc logs {ranbuildfhi72_job} &> cmake_targets/log/ran-build-fhi72.log')
|
||||||
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
|
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log')
|
||||||
|
|
||||||
if status:
|
if status:
|
||||||
self._recreate_is_tag('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-is.yaml')
|
self._recreate_is_tag('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-is.yaml')
|
||||||
@@ -456,7 +410,7 @@ class Cluster:
|
|||||||
status = status and wait
|
status = status and wait
|
||||||
# recover logs
|
# recover logs
|
||||||
self.cmd.run(f'oc logs {gnb_fhi72_job} &> cmake_targets/log/oai-gnb-fhi72.log')
|
self.cmd.run(f'oc logs {gnb_fhi72_job} &> cmake_targets/log/oai-gnb-fhi72.log')
|
||||||
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10)
|
self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log')
|
||||||
|
|
||||||
# split and analyze logs
|
# split and analyze logs
|
||||||
imageSize = {}
|
imageSize = {}
|
||||||
@@ -472,9 +426,9 @@ class Cluster:
|
|||||||
imageSize[image] = f'{sizeMb:.1f} Mbytes (uncompressed: ~{sizeMb*2.5:.1f} Mbytes)'
|
imageSize[image] = f'{sizeMb:.1f} Mbytes (uncompressed: ~{sizeMb*2.5:.1f} Mbytes)'
|
||||||
logging.info(f'\u001B[1m{image} size is {imageSize[image]}\u001B[0m')
|
logging.info(f'\u001B[1m{image} size is {imageSize[image]}\u001B[0m')
|
||||||
|
|
||||||
grep_exp = "\|".join(attemptedImages)
|
grep_exp = r"\|".join(attemptedImages)
|
||||||
self.cmd.run(f'oc get images | grep -e \'{grep_exp}\' &> cmake_targets/log/image_registry.log');
|
self.cmd.run(f'oc get images | grep -e \'{grep_exp}\' &> cmake_targets/log/image_registry.log');
|
||||||
self.cmd.run(f'for pod in $(oc get pods | tail -n +2 | awk \'{{print $1}}\'); do oc get pod $pod -o json &>> cmake_targets/log/build_pod_summary.log; done', '\$', 60)
|
self.cmd.run(f'for pod in $(oc get pods | tail -n +2 | awk \'{{print $1}}\'); do oc get pod $pod -o json &>> cmake_targets/log/build_pod_summary.log; done')
|
||||||
|
|
||||||
build_log_name = f'build_log_{self.testCase_id}'
|
build_log_name = f'build_log_{self.testCase_id}'
|
||||||
cls_containerize.CopyLogsToExecutor(self.cmd, lSourcePath, build_log_name)
|
cls_containerize.CopyLogsToExecutor(self.cmd, lSourcePath, build_log_name)
|
||||||
|
|||||||
@@ -124,12 +124,12 @@ class LocalCmd(Cmd):
|
|||||||
ret.args += f" &> {redirect}"
|
ret.args += f" &> {redirect}"
|
||||||
ret.stdout = ""
|
ret.stdout = ""
|
||||||
if not silent:
|
if not silent:
|
||||||
logging.info(f"local> {ret.args}")
|
logging.debug(f"local> {ret.args}")
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def run(self, line, timeout=300, silent=False, reportNonZero=True):
|
def run(self, line, timeout=300, silent=False, reportNonZero=True):
|
||||||
if not silent:
|
if not silent:
|
||||||
logging.info(f"local> {line}")
|
logging.debug(f"local> {line}")
|
||||||
try:
|
try:
|
||||||
if line.strip().endswith('&'):
|
if line.strip().endswith('&'):
|
||||||
# if we wait for stdout, subprocess does not return before the end of the command
|
# if we wait for stdout, subprocess does not return before the end of the command
|
||||||
@@ -244,7 +244,7 @@ class RemoteCmd(Cmd):
|
|||||||
p = parameters if parameters else ""
|
p = parameters if parameters else ""
|
||||||
r = f"> {redirect}" if redirect else ""
|
r = f"> {redirect}" if redirect else ""
|
||||||
if not silent:
|
if not silent:
|
||||||
logging.info(f"local> ssh {host} bash -s {p} < {path} {r} # {path} from localhost")
|
logging.debug(f"local> ssh {host} bash -s {p} < {path} {r} # {path} from localhost")
|
||||||
client = RemoteCmd._ssh_init()
|
client = RemoteCmd._ssh_init()
|
||||||
cfg = RemoteCmd._lookup_ssh_config(host)
|
cfg = RemoteCmd._lookup_ssh_config(host)
|
||||||
client.connect(**cfg)
|
client.connect(**cfg)
|
||||||
@@ -264,7 +264,7 @@ class RemoteCmd(Cmd):
|
|||||||
|
|
||||||
def run(self, line, timeout=300, silent=False, reportNonZero=True):
|
def run(self, line, timeout=300, silent=False, reportNonZero=True):
|
||||||
if not silent:
|
if not silent:
|
||||||
logging.info(f"ssh[{self.hostname}]> {line}")
|
logging.debug(f"ssh[{self.hostname}]> {line}")
|
||||||
if self.cwd:
|
if self.cwd:
|
||||||
line = f"cd {self.cwd} && {line}"
|
line = f"cd {self.cwd} && {line}"
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -0,0 +1,169 @@
|
|||||||
|
# * 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
|
||||||
|
# */
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Required Python Version
|
||||||
|
# Python 3.x
|
||||||
|
#
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import yaml
|
||||||
|
import re
|
||||||
|
|
||||||
|
import cls_cmd
|
||||||
|
|
||||||
|
def listify(s):
|
||||||
|
if s is None:
|
||||||
|
return None
|
||||||
|
if isinstance(s, list):
|
||||||
|
return [str(x) for x in s]
|
||||||
|
return [str(s)]
|
||||||
|
|
||||||
|
class CoreNetwork:
|
||||||
|
|
||||||
|
def __init__(self, cn_name, node=None, d=None, filename="ci_infra.yaml"):
|
||||||
|
with open(filename, "r") as f:
|
||||||
|
all_cns = yaml.load(f, Loader=yaml.FullLoader) # TODO why full?
|
||||||
|
c = all_cns.get(cn_name)
|
||||||
|
if c is None:
|
||||||
|
raise Exception(f'no such core network name "{cn_name}" in "{filename}"')
|
||||||
|
self._cn_name = cn_name
|
||||||
|
self._host = c.get('Host').strip()
|
||||||
|
if self._host == "%%current_host%%":
|
||||||
|
if node is None:
|
||||||
|
raise Exception(f"core network {self} requires node, but none provided (cannot replace %%current_host%%)")
|
||||||
|
self._host = node
|
||||||
|
if d is not None:
|
||||||
|
raise Exception("directory handling not implemented")
|
||||||
|
self._deploy = listify(c.get('Deploy'))
|
||||||
|
self._undeploy = listify(c.get('Undeploy'))
|
||||||
|
self._logCollect = listify(c.get('LogCollect'))
|
||||||
|
# check if at least one command contains "%%log_dir%%"
|
||||||
|
if self._logCollect and not any(filter(lambda s: "%%log_dir%%" in s, self._logCollect)):
|
||||||
|
raise ValueError(f"(At least one) LogCollect expression for {cn_name} must contain \"%%log_dir%%\"")
|
||||||
|
self._getNetwork = listify(c.get('NetworkScript'))
|
||||||
|
self._cmd_prefix = c.get('CmdPrefix')
|
||||||
|
iperf = c.get('RunIperf3Server')
|
||||||
|
self._run_iperf = bool(iperf if iperf is not None else True)
|
||||||
|
logging.info(f'initialized core {self} from {filename}')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self._cn_name}@{self._host} [IP: {self.getIP()}]"
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return self.__str__()
|
||||||
|
|
||||||
|
def _exec_script(host, line, silent):
|
||||||
|
# take off "!", split in words
|
||||||
|
words = line[1:].strip().split(" ")
|
||||||
|
script_name = words[0]
|
||||||
|
options = " ".join(words[1:])
|
||||||
|
ret = cls_cmd.runScript(host, script_name, 300, parameters=options, silent=silent)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def _command(self, cmd_list, must_succeed=False, silent=False):
|
||||||
|
succeeded = True
|
||||||
|
output = ""
|
||||||
|
with cls_cmd.getConnection(self._host) as c:
|
||||||
|
for cmd in cmd_list:
|
||||||
|
cmd = cmd.strip()
|
||||||
|
if cmd.startswith("!"):
|
||||||
|
ret = CoreNetwork._exec_script(self._host, cmd, silent=silent)
|
||||||
|
else:
|
||||||
|
ret = c.run(cmd, silent=silent)
|
||||||
|
output += ret.stdout
|
||||||
|
if ret.returncode != 0:
|
||||||
|
logging.warn(f"cmd \"{cmd}\" returned code {ret.returncode}, stdout {ret.stdout}")
|
||||||
|
if ret.returncode != 0 and must_succeed:
|
||||||
|
succeeded = False
|
||||||
|
break
|
||||||
|
return succeeded, output
|
||||||
|
|
||||||
|
def deploy(self):
|
||||||
|
# we first undeploy to make sure the core has been stopped
|
||||||
|
logging.info(f'undeploy core network {self} before deployment')
|
||||||
|
self._command(self._undeploy)
|
||||||
|
logging.info(f'deploy core network {self}')
|
||||||
|
success, output = self._command(self._deploy, must_succeed=True)
|
||||||
|
if not success:
|
||||||
|
logging.error(f'failure during deployment of core network {self}:\n{output}')
|
||||||
|
return False, output
|
||||||
|
logging.info(f'retrieve IP address')
|
||||||
|
ip = self.getIP()
|
||||||
|
if ip is None:
|
||||||
|
logging.error(f'could not retrieve pingable address of core network {self}')
|
||||||
|
return False, output
|
||||||
|
logging.info(f'deployed core network {self}, pingable IP address {ip}')
|
||||||
|
return True, output
|
||||||
|
|
||||||
|
def _collect_logs(self, log_dir):
|
||||||
|
logging.info(f'collecting logs into (local) {log_dir}')
|
||||||
|
remote_dir = "/tmp/cn-undeploy-logs"
|
||||||
|
with cls_cmd.getConnection(self._host) as c:
|
||||||
|
# create a directory for log collection
|
||||||
|
c.run(f'rm -rf {remote_dir}')
|
||||||
|
ret = c.run(f'mkdir {remote_dir}')
|
||||||
|
if ret.returncode != 0:
|
||||||
|
logging.error("cannot create directory for log collection")
|
||||||
|
return []
|
||||||
|
# inform core network implementation where to store logs
|
||||||
|
# (remote_dir), and trigger log collection
|
||||||
|
log_cmd = [s.replace('%%log_dir%%', remote_dir) for s in self._logCollect]
|
||||||
|
self._command(log_cmd)
|
||||||
|
# enumerate collected files
|
||||||
|
ret = c.run(f'ls {remote_dir}/*')
|
||||||
|
if ret.returncode != 0:
|
||||||
|
logging.error("cannot enumerate log files")
|
||||||
|
return []
|
||||||
|
log_files = []
|
||||||
|
# copy them to the executor one by one, and store in log_dir
|
||||||
|
for f in ret.stdout.split("\n"):
|
||||||
|
l = f.replace(remote_dir, log_dir)
|
||||||
|
c.copyin(f, l)
|
||||||
|
log_files.append(l)
|
||||||
|
c.run(f'rm -rf {remote_dir}')
|
||||||
|
return log_files
|
||||||
|
|
||||||
|
def undeploy(self, log_dir=None):
|
||||||
|
log_files = []
|
||||||
|
if log_dir is not None:
|
||||||
|
log_files = self._collect_logs(log_dir)
|
||||||
|
else:
|
||||||
|
logging.warning("no directory for log collection specified, cannot retrieve core network logs")
|
||||||
|
logging.info(f'undeploy core network {self}')
|
||||||
|
_, output = self._command(self._undeploy)
|
||||||
|
return log_files, output
|
||||||
|
|
||||||
|
def getIP(self):
|
||||||
|
success, output = self._command(self._getNetwork)
|
||||||
|
result = re.search(r'inet (?P<ip>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', output)
|
||||||
|
if success and result and result.group('ip'):
|
||||||
|
return result.group('ip')
|
||||||
|
return None
|
||||||
|
|
||||||
|
def getCmdPrefix(self):
|
||||||
|
return self._cmd_prefix or ""
|
||||||
|
|
||||||
|
def getHost(self):
|
||||||
|
return self._host
|
||||||
|
|
||||||
|
def runIperf3Server(self):
|
||||||
|
return self._run_iperf
|
||||||
@@ -62,10 +62,7 @@ class Module_UE:
|
|||||||
self.trace = m.get('trace') == True
|
self.trace = m.get('trace') == True
|
||||||
self.logStore = m.get('LogStore')
|
self.logStore = m.get('LogStore')
|
||||||
self.cmd_prefix = m.get('CmdPrefix')
|
self.cmd_prefix = m.get('CmdPrefix')
|
||||||
self.runIperf3Server = m.get('RunIperf3Server', True)
|
logging.info(f'initialized UE {self} from {filename}')
|
||||||
self.namespace = m.get('Namespace')
|
|
||||||
self.cnPath = m.get('CNPath')
|
|
||||||
logging.info(f'initialized {self.module_name}@{self.host} from {filename}')
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.module_name}@{self.host} [IP: {self.getIP()}]"
|
return f"{self.module_name}@{self.host} [IP: {self.getIP()}]"
|
||||||
@@ -165,7 +162,7 @@ class Module_UE:
|
|||||||
|
|
||||||
def getIP(self):
|
def getIP(self):
|
||||||
output = self._command(self.cmd_dict["getNetwork"], silent=True)
|
output = self._command(self.cmd_dict["getNetwork"], silent=True)
|
||||||
result = re.search('inet (?P<ip>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', output.stdout)
|
result = re.search(r'inet (?P<ip>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', output.stdout)
|
||||||
if result and result.group('ip'):
|
if result and result.group('ip'):
|
||||||
ip = result.group('ip')
|
ip = result.group('ip')
|
||||||
return ip
|
return ip
|
||||||
@@ -173,7 +170,7 @@ class Module_UE:
|
|||||||
|
|
||||||
def checkMTU(self):
|
def checkMTU(self):
|
||||||
output = self._command(self.cmd_dict["getNetwork"], silent=True)
|
output = self._command(self.cmd_dict["getNetwork"], silent=True)
|
||||||
result = re.search('mtu (?P<mtu>[0-9]+)', output.stdout)
|
result = re.search(r'mtu (?P<mtu>[0-9]+)', output.stdout)
|
||||||
if result and result.group('mtu') and int(result.group('mtu')) == self.MTU:
|
if result and result.group('mtu') and int(result.group('mtu')) == self.MTU:
|
||||||
logging.debug(f'\u001B[1mUE Module {self.module_name} NIC MTU is {self.MTU} as expected\u001B[0m')
|
logging.debug(f'\u001B[1mUE Module {self.module_name} NIC MTU is {self.MTU} as expected\u001B[0m')
|
||||||
return True
|
return True
|
||||||
@@ -190,15 +187,6 @@ class Module_UE:
|
|||||||
def getHost(self):
|
def getHost(self):
|
||||||
return self.host
|
return self.host
|
||||||
|
|
||||||
def getNamespace(self):
|
|
||||||
return self.namespace
|
|
||||||
|
|
||||||
def getCNPath(self):
|
|
||||||
return self.cnPath
|
|
||||||
|
|
||||||
def getRunIperf3Server(self):
|
|
||||||
return self.runIperf3Server
|
|
||||||
|
|
||||||
def getCmdPrefix(self):
|
def getCmdPrefix(self):
|
||||||
return self.cmd_prefix if self.cmd_prefix else ""
|
return self.cmd_prefix if self.cmd_prefix else ""
|
||||||
|
|
||||||
|
|||||||
+74
-98
@@ -45,13 +45,14 @@ import helpreadme as HELP
|
|||||||
import constants as CONST
|
import constants as CONST
|
||||||
|
|
||||||
import cls_module
|
import cls_module
|
||||||
|
import cls_corenetwork
|
||||||
import cls_cmd
|
import cls_cmd
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Helper functions used here and in other classes
|
# Helper functions used here and in other classes
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
def Iperf_ComputeModifiedBW(idx, ue_num, profile, args):
|
def Iperf_ComputeModifiedBW(idx, ue_num, profile, args):
|
||||||
result = re.search('-b\s*(?P<iperf_bandwidth>[0-9\.]+)(?P<unit>[KMG])', str(args))
|
result = re.search(r'-b\s*(?P<iperf_bandwidth>[0-9\.]+)(?P<unit>[KMG])', str(args))
|
||||||
if result is None:
|
if result is None:
|
||||||
raise ValueError(f'requested iperf bandwidth not found in iperf options "{args}"')
|
raise ValueError(f'requested iperf bandwidth not found in iperf options "{args}"')
|
||||||
iperf_bandwidth = float(result.group('iperf_bandwidth'))
|
iperf_bandwidth = float(result.group('iperf_bandwidth'))
|
||||||
@@ -77,7 +78,7 @@ def Iperf_ComputeModifiedBW(idx, ue_num, profile, args):
|
|||||||
return iperf_bandwidth_new, args_new
|
return iperf_bandwidth_new, args_new
|
||||||
|
|
||||||
def Iperf_ComputeTime(args):
|
def Iperf_ComputeTime(args):
|
||||||
result = re.search('-t\s*(?P<iperf_time>\d+)', str(args))
|
result = re.search(r'-t\s*(?P<iperf_time>\d+)', str(args))
|
||||||
if result is None:
|
if result is None:
|
||||||
raise Exception('Iperf time not found!')
|
raise Exception('Iperf time not found!')
|
||||||
return int(result.group('iperf_time'))
|
return int(result.group('iperf_time'))
|
||||||
@@ -183,11 +184,10 @@ def Iperf_analyzeV2UDP(server_filename, iperf_bitrate_threshold, iperf_packetlos
|
|||||||
return (False, 'Iperf UDP: Server report not found!')
|
return (False, 'Iperf UDP: Server report not found!')
|
||||||
if (os.path.getsize(server_filename)==0):
|
if (os.path.getsize(server_filename)==0):
|
||||||
return (False, 'Iperf UDP: Log file is empty')
|
return (False, 'Iperf UDP: Log file is empty')
|
||||||
# Computing the requested bandwidth in float
|
statusTemplate = r'(?:|\[ *\d+\].*) +0\.0+-\s*(?P<duration>[0-9\.]+) +sec +[0-9\.]+ [kKMG]Bytes +(?P<bitrate>[0-9\.]+) (?P<magnitude>[kKMG])bits\/sec +(?P<jitter>[0-9\.]+) ms +(\d+\/ *\d+) +(\((?P<packetloss>[0-9\.]+)%\))'
|
||||||
statusTemplate = r'(?:|\[ *\d+\].*) +0\.0-\s*(?P<duration>[0-9\.]+) +sec +[0-9\.]+ [kKMG]Bytes +(?P<bitrate>[0-9\.]+) (?P<magnitude>[kKMG])bits\/sec +(?P<jitter>[0-9\.]+) ms +(\d+\/ *\d+) +(\((?P<packetloss>[0-9\.]+)%\))'
|
|
||||||
with open(server_filename, 'r') as server_file:
|
with open(server_filename, 'r') as server_file:
|
||||||
for line in server_file.readlines():
|
for line in server_file.readlines():
|
||||||
result = re.search(statusTemplate, str(line))
|
result = re.search(statusTemplate, str(line)) or result
|
||||||
if result is None:
|
if result is None:
|
||||||
return (False, 'Could not parse server report!')
|
return (False, 'Could not parse server report!')
|
||||||
bitrate = float(result.group('bitrate'))
|
bitrate = float(result.group('bitrate'))
|
||||||
@@ -363,29 +363,21 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
|
HTML.CreateHtmlTestRowQueue('NA', 'OK', messages)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def Ping_common(self, EPC, ue, logPath):
|
def Ping_common(self, cn, ue, logPath):
|
||||||
# Launch ping on the EPC side (true for ltebox and old open-air-cn)
|
|
||||||
ping_status = 0
|
ping_status = 0
|
||||||
ueIP = ue.getIP()
|
ueIP = ue.getIP()
|
||||||
if not ueIP:
|
if not ueIP:
|
||||||
return (False, f"UE {ue.getName()} has no IP address")
|
return (False, f"UE {ue.getName()} has no IP address")
|
||||||
|
svrIP = cn.getIP()
|
||||||
|
if not svrIP:
|
||||||
|
return (False, f"CN {cn.getName()} has no IP address")
|
||||||
ping_log_file = f'ping_{self.testCase_id}_{ue.getName()}.log'
|
ping_log_file = f'ping_{self.testCase_id}_{ue.getName()}.log'
|
||||||
ping_time = re.findall("-c *(\d+)",str(self.ping_args))
|
ping_time = re.findall(r"-c *(\d+)",str(self.ping_args))
|
||||||
local_ping_log_file = f'{logPath}/{ping_log_file}'
|
local_ping_log_file = f'{logPath}/{ping_log_file}'
|
||||||
# if has pattern %cn_ip%, replace with core IP address, else we assume the IP is present
|
if re.search('%cn_ip%', self.ping_args) or re.search(r'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+', self.ping_args):
|
||||||
if re.search('%cn_ip%', self.ping_args):
|
raise Exception(f"ping_args should not have IP address: {self.ping_args}")
|
||||||
#target address is different depending on EPC type
|
|
||||||
if re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE):
|
|
||||||
self.ping_args = re.sub('%cn_ip%', EPC.MmeIPAddress, self.ping_args)
|
|
||||||
elif re.match('OAICN5G', EPC.Type, re.IGNORECASE):
|
|
||||||
self.ping_args = re.sub('%cn_ip%', EPC.MmeIPAddress, self.ping_args)
|
|
||||||
elif re.match('OC-OAI-CN5G', EPC.Type, re.IGNORECASE):
|
|
||||||
self.ping_args = re.sub('%cn_ip%', '172.21.6.100', self.ping_args)
|
|
||||||
else:
|
|
||||||
self.ping_args = re.sub('%cn_ip%', EPC.IPAddress, self.ping_args)
|
|
||||||
#ping from module NIC rather than IP address to make sure round trip is over the air
|
|
||||||
interface = f'-I {ue.getIFName()}' if ue.getIFName() else ''
|
interface = f'-I {ue.getIFName()}' if ue.getIFName() else ''
|
||||||
ping_cmd = f'{ue.getCmdPrefix()} ping {interface} {self.ping_args} 2>&1 | tee /tmp/{ping_log_file}'
|
ping_cmd = f'{ue.getCmdPrefix()} ping {interface} {self.ping_args} {svrIP} 2>&1 | tee /tmp/{ping_log_file}'
|
||||||
cmd = cls_cmd.getConnection(ue.getHost())
|
cmd = cls_cmd.getConnection(ue.getHost())
|
||||||
response = cmd.run(ping_cmd, timeout=int(ping_time[0])*1.5)
|
response = cmd.run(ping_cmd, timeout=int(ping_time[0])*1.5)
|
||||||
ue_header = f'UE {ue.getName()} ({ueIP})'
|
ue_header = f'UE {ue.getName()} ({ueIP})'
|
||||||
@@ -399,12 +391,12 @@ class OaiCiTest():
|
|||||||
|
|
||||||
with open(local_ping_log_file, 'r') as f:
|
with open(local_ping_log_file, 'r') as f:
|
||||||
ping_output = "".join(f.readlines())
|
ping_output = "".join(f.readlines())
|
||||||
result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', ping_output)
|
result = re.search(r', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', ping_output)
|
||||||
if result is None:
|
if result is None:
|
||||||
message = ue_header + ': Packet Loss Not Found!'
|
message = ue_header + ': Packet Loss Not Found!'
|
||||||
return (False, message)
|
return (False, message)
|
||||||
packetloss = result.group('packetloss')
|
packetloss = result.group('packetloss')
|
||||||
result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', ping_output)
|
result = re.search(r'rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', ping_output)
|
||||||
if result is None:
|
if result is None:
|
||||||
message = ue_header + ': Ping RTT_Min RTT_Avg RTT_Max Not Found!'
|
message = ue_header + ': Ping RTT_Min RTT_Avg RTT_Max Not Found!'
|
||||||
return (False, message)
|
return (False, message)
|
||||||
@@ -434,22 +426,18 @@ class OaiCiTest():
|
|||||||
|
|
||||||
return (True, message)
|
return (True, message)
|
||||||
|
|
||||||
def Ping(self, HTML, EPC, CONTAINERS):
|
def Ping(self, HTML, CONTAINERS, infra_file="ci_infra.yaml"):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.SourceCodePath == '':
|
if self.ue_ids == [] or self.svr_id == None:
|
||||||
HELP.GenericHelp(CONST.Version)
|
raise Exception("no module names in self.ue_ids or/and self.svr_id provided")
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
|
|
||||||
if self.ue_ids == []:
|
|
||||||
raise Exception("no module names in self.ue_ids provided")
|
|
||||||
# Creating destination log folder if needed on the python executor workspace
|
# Creating destination log folder if needed on the python executor workspace
|
||||||
with cls_cmd.getConnection('localhost') as local:
|
with cls_cmd.getConnection('localhost') as local:
|
||||||
ymlPath = CONTAINERS.yamlPath[0].split('/')
|
ymlPath = CONTAINERS.yamlPath[0].split('/')
|
||||||
logPath = f'{os.getcwd()}/../cmake_targets/log/{ymlPath[-1]}'
|
logPath = f'{os.getcwd()}/../cmake_targets/log/{ymlPath[-1]}'
|
||||||
local.run(f'mkdir -p {logPath}', silent=True)
|
local.run(f'mkdir -p {logPath}', silent=True)
|
||||||
ues = [cls_module.Module_UE(ue_id, server_name) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
|
ues = [cls_module.Module_UE(ue_id, server_name, infra_file) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
|
||||||
logging.debug(ues)
|
cn = cls_corenetwork.CoreNetwork(self.svr_id, self.svr_node, filename=infra_file)
|
||||||
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
|
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
|
||||||
futures = [executor.submit(self.Ping_common, EPC, ue, logPath) for ue in ues]
|
futures = [executor.submit(self.Ping_common, cn, ue, logPath) for ue in ues]
|
||||||
results = [f.result() for f in futures]
|
results = [f.result() for f in futures]
|
||||||
# each result in results is a tuple, first member goes to successes, second to messages
|
# each result in results is a tuple, first member goes to successes, second to messages
|
||||||
successes, messages = map(list, zip(*results))
|
successes, messages = map(list, zip(*results))
|
||||||
@@ -470,15 +458,14 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue(self.ping_args, 'KO', messages)
|
HTML.CreateHtmlTestRowQueue(self.ping_args, 'KO', messages)
|
||||||
return success
|
return success
|
||||||
|
|
||||||
def Iperf_Module(self, EPC, ue, svr, idx, ue_num, logPath):
|
def Iperf_Module(self, cn, ue, idx, ue_num, logPath):
|
||||||
ueIP = ue.getIP()
|
ueIP = ue.getIP()
|
||||||
if not ueIP:
|
if not ueIP:
|
||||||
return (False, f"UE {ue.getName()} has no IP address")
|
return (False, f"UE {ue.getName()} has no IP address")
|
||||||
svrIP = svr.getIP()
|
svrIP = cn.getIP()
|
||||||
if not svrIP:
|
if not svrIP:
|
||||||
return (False, f"Iperf server {ue.getName()} has no IP address")
|
return (False, f"Iperf server {ue.getName()} has no IP address")
|
||||||
|
|
||||||
runIperf3Server = svr.getRunIperf3Server()
|
|
||||||
iperf_opt = self.iperf_args
|
iperf_opt = self.iperf_args
|
||||||
jsonReport = "--json"
|
jsonReport = "--json"
|
||||||
serverReport = ""
|
serverReport = ""
|
||||||
@@ -495,13 +482,13 @@ 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/iperf3' if re.search('adb', ue.getName()) else 'iperf3'
|
iperf_ue = '/data/local/tmp/iperf3' if re.search('adb', ue.getName()) else 'iperf3'
|
||||||
ue_header = f'UE {ue.getName()} ({ueIP})'
|
ue_header = f'UE {ue.getName()} ({ueIP})'
|
||||||
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(EPC.IPAddress) as cmd_svr:
|
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(cn.getHost()) as cmd_svr:
|
||||||
port = 5002 + idx
|
port = 5002 + idx
|
||||||
# note: some core setups start an iperf3 server automatically, indicated in ci_infra by runIperf3Server: False`
|
# note: some core setups start an iperf3 server automatically, indicated in ci_infra by runIperf3Server: False`
|
||||||
t = iperf_time * 2.5
|
t = iperf_time * 2.5
|
||||||
cmd_ue.run(f'rm /tmp/{client_filename}', reportNonZero=False, silent=True)
|
cmd_ue.run(f'rm /tmp/{client_filename}', reportNonZero=False, silent=True)
|
||||||
if runIperf3Server:
|
if cn.runIperf3Server():
|
||||||
cmd_svr.run(f'{svr.getCmdPrefix()} nohup timeout -vk3 {t} iperf3 -s -B {svrIP} -p {port} -1 {jsonReport} &', timeout=t)
|
cmd_svr.run(f'{cn.getCmdPrefix()} timeout -vk3 {t} iperf3 -s -B {svrIP} -p {port} -1 {jsonReport} >> /dev/null &', timeout=t)
|
||||||
cmd_ue.run(f'{ue.getCmdPrefix()} timeout -vk3 {t} {iperf_ue} -B {ueIP} -c {svrIP} -p {port} {iperf_opt} {jsonReport} {serverReport} -O 5 >> /tmp/{client_filename}', timeout=t)
|
cmd_ue.run(f'{ue.getCmdPrefix()} timeout -vk3 {t} {iperf_ue} -B {ueIP} -c {svrIP} -p {port} {iperf_opt} {jsonReport} {serverReport} -O 5 >> /tmp/{client_filename}', timeout=t)
|
||||||
# note: copy iperf3 log to the current directory for log analysis and log collection
|
# note: copy iperf3 log to the current directory for log analysis and log collection
|
||||||
dest_filename = f'{logPath}/{client_filename}'
|
dest_filename = f'{logPath}/{client_filename}'
|
||||||
@@ -516,11 +503,7 @@ class OaiCiTest():
|
|||||||
|
|
||||||
return (status, f'{ue_header}\n{msg}')
|
return (status, f'{ue_header}\n{msg}')
|
||||||
|
|
||||||
def Iperf(self,HTML,EPC,CONTAINERS):
|
def Iperf(self, HTML, CONTAINERS, infra_file="ci_infra.yaml"):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.SourceCodePath == '':
|
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
|
|
||||||
logging.debug(f'Iperf: iperf_args "{self.iperf_args}" 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_packetloss_threshold "{self.iperf_packetloss_threshold}" iperf_bitrate_threshold "{self.iperf_bitrate_threshold}" iperf_profile "{self.iperf_profile}" iperf_options "{self.iperf_options}"')
|
||||||
|
|
||||||
if self.ue_ids == [] or self.svr_id == None:
|
if self.ue_ids == [] or self.svr_id == None:
|
||||||
@@ -530,11 +513,10 @@ class OaiCiTest():
|
|||||||
ymlPath = CONTAINERS.yamlPath[0].split('/')
|
ymlPath = CONTAINERS.yamlPath[0].split('/')
|
||||||
logPath = f'{os.getcwd()}/../cmake_targets/log/{ymlPath[-1]}'
|
logPath = f'{os.getcwd()}/../cmake_targets/log/{ymlPath[-1]}'
|
||||||
local.run(f'mkdir -p {logPath}', silent=True)
|
local.run(f'mkdir -p {logPath}', silent=True)
|
||||||
ues = [cls_module.Module_UE(ue_id, server_name) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
|
ues = [cls_module.Module_UE(ue_id, server_name, infra_file) for ue_id, server_name in zip(self.ue_ids, self.nodes)]
|
||||||
svr = cls_module.Module_UE(self.svr_id,self.svr_node)
|
cn = cls_corenetwork.CoreNetwork(self.svr_id, self.svr_node, filename=infra_file)
|
||||||
logging.debug(ues)
|
|
||||||
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
|
with concurrent.futures.ThreadPoolExecutor(max_workers=64) as executor:
|
||||||
futures = [executor.submit(self.Iperf_Module, EPC, ue, svr, i, len(ues), logPath) for i, ue in enumerate(ues)]
|
futures = [executor.submit(self.Iperf_Module, cn, ue, i, len(ues), logPath) for i, ue in enumerate(ues)]
|
||||||
results = [f.result() for f in futures]
|
results = [f.result() for f in futures]
|
||||||
# each result in results is a tuple, first member goes to successes, second to messages
|
# each result in results is a tuple, first member goes to successes, second to messages
|
||||||
successes, messages = map(list, zip(*results))
|
successes, messages = map(list, zip(*results))
|
||||||
@@ -555,17 +537,17 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', messages)
|
HTML.CreateHtmlTestRowQueue(self.iperf_args, 'KO', messages)
|
||||||
return success
|
return success
|
||||||
|
|
||||||
def Iperf2_Unidir(self,HTML,EPC,CONTAINERS):
|
def Iperf2_Unidir(self, HTML, CONTAINERS, infra_file="ci_infra.yaml"):
|
||||||
if self.ue_ids == [] or self.svr_id == None or len(self.ue_ids) != 1:
|
if self.ue_ids == [] or self.svr_id == None or len(self.ue_ids) != 1:
|
||||||
raise Exception("no module names in self.ue_ids or/and self.svr_id provided, multi UE scenario not supported")
|
raise Exception("no module names in self.ue_ids or/and self.svr_id provided, multi UE scenario not supported")
|
||||||
ue = cls_module.Module_UE(self.ue_ids[0].strip(),self.nodes[0].strip())
|
ue = cls_module.Module_UE(self.ue_ids[0].strip(),self.nodes[0].strip(), infra_file)
|
||||||
svr = cls_module.Module_UE(self.svr_id,self.svr_node)
|
cn = cls_corenetwork.CoreNetwork(self.svr_id, self.svr_node, filename=infra_file)
|
||||||
ueIP = ue.getIP()
|
ueIP = ue.getIP()
|
||||||
if not ueIP:
|
if not ueIP:
|
||||||
return (False, f"UE {ue.getName()} has no IP address")
|
return False
|
||||||
svrIP = svr.getIP()
|
svrIP = cn.getIP()
|
||||||
if not svrIP:
|
if not svrIP:
|
||||||
return (False, f"Iperf server {ue.getName()} has no IP address")
|
return False
|
||||||
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
|
server_filename = f'iperf_server_{self.testCase_id}_{ue.getName()}.log'
|
||||||
ymlPath = CONTAINERS.yamlPath[0].split('/')
|
ymlPath = CONTAINERS.yamlPath[0].split('/')
|
||||||
logPath = f'{os.getcwd()}/../cmake_targets/log/{ymlPath[-1]}'
|
logPath = f'{os.getcwd()}/../cmake_targets/log/{ymlPath[-1]}'
|
||||||
@@ -574,17 +556,15 @@ class OaiCiTest():
|
|||||||
t = iperf_time*2.5
|
t = iperf_time*2.5
|
||||||
with cls_cmd.getConnection('localhost') as local:
|
with cls_cmd.getConnection('localhost') as local:
|
||||||
local.run(f'mkdir -p {logPath}')
|
local.run(f'mkdir -p {logPath}')
|
||||||
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(EPC.IPAddress) as cmd_svr:
|
with cls_cmd.getConnection(ue.getHost()) as cmd_ue, cls_cmd.getConnection(cn.getHost()) as cmd_svr:
|
||||||
cmd_ue.run(f'rm /tmp/{server_filename}', reportNonZero=False)
|
cmd_ue.run(f'rm /tmp/{server_filename}', reportNonZero=False)
|
||||||
cmd_ue.run(f'{ue.getCmdPrefix()} timeout -vk3 {t} iperf -B {ueIP} -s -u -i1 >> /tmp/{server_filename} &', timeout=t)
|
cmd_ue.run(f'{ue.getCmdPrefix()} timeout -vk3 {t} iperf -B {ueIP} -s -u -i1 >> /tmp/{server_filename} &', timeout=t)
|
||||||
cmd_svr.run(f'{svr.getCmdPrefix()} timeout -vk3 {t} iperf -c {ueIP} -B {svrIP} {iperf_opt} -i1', timeout=t)
|
cmd_svr.run(f'{cn.getCmdPrefix()} timeout -vk3 {t} iperf -c {ueIP} -B {svrIP} {iperf_opt} -i1 >> /dev/null', timeout=t)
|
||||||
localPath = f'{os.getcwd()}'
|
localPath = f'{os.getcwd()}'
|
||||||
# note: copy iperf2 log to the directory for log collection
|
# note: copy iperf2 log to the directory for log collection
|
||||||
cmd_ue.copyin(f'/tmp/{server_filename}', f'{localPath}/{logPath}/{server_filename}')
|
cmd_ue.copyin(f'/tmp/{server_filename}', f'{logPath}/{server_filename}')
|
||||||
# note: copy iperf2 log to the current directory for log analysis and log collection
|
|
||||||
cmd_ue.copyin(f'/tmp/{server_filename}', f'{localPath}/{server_filename}')
|
|
||||||
cmd_ue.run(f'rm /tmp/{server_filename}', reportNonZero=False)
|
cmd_ue.run(f'rm /tmp/{server_filename}', reportNonZero=False)
|
||||||
success, msg = Iperf_analyzeV2UDP(server_filename, self.iperf_bitrate_threshold, self.iperf_packetloss_threshold, target_bitrate)
|
success, msg = Iperf_analyzeV2UDP(f'{logPath}/{server_filename}', self.iperf_bitrate_threshold, self.iperf_packetloss_threshold, target_bitrate)
|
||||||
ue_header = f'UE {ue.getName()} ({ueIP})'
|
ue_header = f'UE {ue.getName()} ({ueIP})'
|
||||||
logging.info(f'\u001B[1;37;45m iperf result for {ue_header}\u001B[0m')
|
logging.info(f'\u001B[1;37;45m iperf result for {ue_header}\u001B[0m')
|
||||||
for l in msg.split('\n'):
|
for l in msg.split('\n'):
|
||||||
@@ -698,7 +678,7 @@ class OaiCiTest():
|
|||||||
result = re.search('TRIED TO PUSH MBMS DATA', str(line))
|
result = re.search('TRIED TO PUSH MBMS DATA', str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
mbms_messages += 1
|
mbms_messages += 1
|
||||||
result = re.search("MIB Information => ([a-zA-Z]{1,10}), ([a-zA-Z]{1,10}), NidCell (?P<nidcell>\d{1,3}), N_RB_DL (?P<n_rb_dl>\d{1,3}), PHICH DURATION (?P<phich_duration>\d), PHICH RESOURCE (?P<phich_resource>.{1,4}), TX_ANT (?P<tx_ant>\d)", str(line))
|
result = re.search(r"MIB Information => ([a-zA-Z]{1,10}), ([a-zA-Z]{1,10}), NidCell (?P<nidcell>\d{1,3}), N_RB_DL (?P<n_rb_dl>\d{1,3}), PHICH DURATION (?P<phich_duration>\d), PHICH RESOURCE (?P<phich_resource>.{1,4}), TX_ANT (?P<tx_ant>\d)", str(line))
|
||||||
if result is not None and (not mib_found):
|
if result is not None and (not mib_found):
|
||||||
try:
|
try:
|
||||||
mibMsg = "MIB Information: " + result.group(1) + ', ' + result.group(2)
|
mibMsg = "MIB Information: " + result.group(1) + ', ' + result.group(2)
|
||||||
@@ -731,7 +711,7 @@ class OaiCiTest():
|
|||||||
frequency_found = True
|
frequency_found = True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f'\033[91m UE did not find PBCH\033[0m')
|
logging.error(f'\033[91m UE did not find PBCH\033[0m')
|
||||||
result = re.search("PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC", str(line))
|
result = re.search(r"PLMN MCC (?P<mcc>\d{1,3}), MNC (?P<mnc>\d{1,3}), TAC", str(line))
|
||||||
if result is not None and (not plmn_found):
|
if result is not None and (not plmn_found):
|
||||||
try:
|
try:
|
||||||
mibMsg = f"PLMN MCC = {result.group('mcc')} MNC = {result.group('mnc')}"
|
mibMsg = f"PLMN MCC = {result.group('mcc')} MNC = {result.group('mnc')}"
|
||||||
@@ -740,7 +720,7 @@ class OaiCiTest():
|
|||||||
plmn_found = True
|
plmn_found = True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f'\033[91m PLMN not found \033[0m')
|
logging.error(f'\033[91m PLMN not found \033[0m')
|
||||||
result = re.search("Found (?P<operator>[\w,\s]{1,15}) \(name from internal table\)", str(line))
|
result = re.search(r"Found (?P<operator>[\w,\s]{1,15}) \(name from internal table\)", str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
try:
|
try:
|
||||||
mibMsg = f"The operator is: {result.group('operator')}"
|
mibMsg = f"The operator is: {result.group('operator')}"
|
||||||
@@ -756,7 +736,7 @@ class OaiCiTest():
|
|||||||
logging.debug(f'\033[94m{mibMsg}\033[0m')
|
logging.debug(f'\033[94m{mibMsg}\033[0m')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f'\033[91m SIB5 InterFreqCarrierFreq element not found \033[0m')
|
logging.error(f'\033[91m SIB5 InterFreqCarrierFreq element not found \033[0m')
|
||||||
result = re.search("DL Carrier Frequency/ARFCN : \-*(?P<carrier_frequency>\d{1,15}/\d{1,4})", str(line))
|
result = re.search(r"DL Carrier Frequency/ARFCN : \-*(?P<carrier_frequency>\d{1,15}/\d{1,4})", str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
try:
|
try:
|
||||||
freq = result.group('carrier_frequency')
|
freq = result.group('carrier_frequency')
|
||||||
@@ -766,7 +746,7 @@ class OaiCiTest():
|
|||||||
logging.debug(f'\033[94m DL Carrier Frequency is: {freq}\033[0m')
|
logging.debug(f'\033[94m DL Carrier Frequency is: {freq}\033[0m')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f'\033[91m DL Carrier Frequency not found \033[0m')
|
logging.error(f'\033[91m DL Carrier Frequency not found \033[0m')
|
||||||
result = re.search("AllowedMeasBandwidth : (?P<allowed_bandwidth>\d{1,7})", str(line))
|
result = re.search(r"AllowedMeasBandwidth : (?P<allowed_bandwidth>\d{1,7})", str(line))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
try:
|
try:
|
||||||
prb = result.group('allowed_bandwidth')
|
prb = result.group('allowed_bandwidth')
|
||||||
@@ -876,6 +856,35 @@ class OaiCiTest():
|
|||||||
HTML.CreateHtmlTestRowQueue(f'N/A', 'OK', messages)
|
HTML.CreateHtmlTestRowQueue(f'N/A', 'OK', messages)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def DeployCoreNetwork(cn_id, HTML):
|
||||||
|
core_name = cn_id.strip()
|
||||||
|
cn = cls_corenetwork.CoreNetwork(core_name)
|
||||||
|
success, output = cn.deploy()
|
||||||
|
logging.info(f"deployment core network {core_name} success {success}, output:\n{output}")
|
||||||
|
if success:
|
||||||
|
msg = f"Started {cn}"
|
||||||
|
HTML.CreateHtmlTestRowQueue(core_name, 'OK', [msg])
|
||||||
|
else:
|
||||||
|
msg = f"deployment of core network {core_name} FAILED"
|
||||||
|
logging.error(msg)
|
||||||
|
HTML.CreateHtmlTestRowQueue(core_name, 'KO', [msg])
|
||||||
|
return success
|
||||||
|
|
||||||
|
def UndeployCoreNetwork(cn_id, HTML):
|
||||||
|
# Ping, Iperf, DeployObject put logs into a path based on YAML. We
|
||||||
|
# can't do this here (because there is no yaml), so hardcode a path for
|
||||||
|
# "cn_logs" for the moment
|
||||||
|
logPath = f'{os.getcwd()}/../cmake_targets/log/cn_logs'
|
||||||
|
with cls_cmd.getConnection('localhost') as local:
|
||||||
|
local.run(f'mkdir -p {logPath}', silent=True)
|
||||||
|
core_name = cn_id.strip()
|
||||||
|
cn = cls_corenetwork.CoreNetwork(core_name)
|
||||||
|
logs, output = cn.undeploy(log_dir=logPath)
|
||||||
|
logging.info(f"undeployed core network {core_name}, logs {logs}, output:\n{output}")
|
||||||
|
message = "Log files: " + ", ".join([os.path.basename(l) for l in logs])
|
||||||
|
HTML.CreateHtmlTestRowQueue(core_name, 'OK', [message])
|
||||||
|
return True
|
||||||
|
|
||||||
def LogCollectBuild(self,RAN):
|
def LogCollectBuild(self,RAN):
|
||||||
# Some pipelines are using "none" IP / Credentials
|
# Some pipelines are using "none" IP / Credentials
|
||||||
# In that case, just forget about it
|
# In that case, just forget about it
|
||||||
@@ -899,39 +908,6 @@ class OaiCiTest():
|
|||||||
cmd.run(f'rm -f {d}/build.log.zip')
|
cmd.run(f'rm -f {d}/build.log.zip')
|
||||||
cmd.run(f'cd {d} && zip -r build.log.zip build_log_*/*')
|
cmd.run(f'cd {d} && zip -r build.log.zip build_log_*/*')
|
||||||
|
|
||||||
def LogCollectPing(self,EPC):
|
|
||||||
# Some pipelines are using "none" IP / Credentials
|
|
||||||
# In that case, just forget about it
|
|
||||||
if EPC.IPAddress == 'none':
|
|
||||||
sys.exit(0)
|
|
||||||
with cls_cmd.getConnection(EPC.IPAddress) as cmd:
|
|
||||||
d = f"{EPC.SourceCodePath}/scripts"
|
|
||||||
cmd.run(f'rm -f {d}/ping.log.zip')
|
|
||||||
cmd.run(f'cd {d} && zip ping.log.zip ping*.log')
|
|
||||||
cmd.run(f'rm {d}/ping*.log')
|
|
||||||
|
|
||||||
def LogCollectIperf(self,EPC):
|
|
||||||
# Some pipelines are using "none" IP / Credentials
|
|
||||||
# In that case, just forget about it
|
|
||||||
if EPC.IPAddress == 'none':
|
|
||||||
sys.exit(0)
|
|
||||||
with cls_cmd.getConnection(EPC.IPAddress) as cmd:
|
|
||||||
d = f"{EPC.SourceCodePath}/scripts"
|
|
||||||
cmd.run(f'rm -f {d}/iperf.log.zip')
|
|
||||||
cmd.run(f'cd {d} && zip iperf.log.zip iperf*.log')
|
|
||||||
cmd.run(f'rm {d}/iperf*.log')
|
|
||||||
|
|
||||||
def LogCollectOAIUE(self):
|
|
||||||
# Some pipelines are using "none" IP / Credentials
|
|
||||||
# In that case, just forget about it
|
|
||||||
if self.UEIPAddress == 'none':
|
|
||||||
sys.exit(0)
|
|
||||||
with cls_cmd.getConnection(self.UEIPAddress) as cmd:
|
|
||||||
d = f'{self.UESourceCodePath}/cmake_targets'
|
|
||||||
cmd.run(f'echo {self.UEPassword} | sudo -S rm -f {d}/ue.log.zip')
|
|
||||||
cmd.run(f'cd {d} && echo {self.UEPassword} | sudo -S zip ue.log.zip ue*.log core* ue_*record.raw ue_*.pcap ue_*txt')
|
|
||||||
cmd.run(f'echo {self.UEPassword} | sudo -S rm {d}/ue*.log {d}/core* {d}/ue_*record.raw {d}/ue_*.pcap {d}/ue_*txt')
|
|
||||||
|
|
||||||
def ShowTestID(self):
|
def ShowTestID(self):
|
||||||
logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
|
logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
|
||||||
logging.info(f'\u001B[1m Test ID: {self.testCase_id} \u001B[0m')
|
logging.info(f'\u001B[1m Test ID: {self.testCase_id} \u001B[0m')
|
||||||
|
|||||||
@@ -1,934 +0,0 @@
|
|||||||
#/*
|
|
||||||
# * 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
|
|
||||||
# */
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Python for CI of OAI-eNB + COTS-UE
|
|
||||||
#
|
|
||||||
# Required Python Version
|
|
||||||
# Python 3.x
|
|
||||||
#
|
|
||||||
# Required Python Package
|
|
||||||
# pexpect
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# Import
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
import sys # arg
|
|
||||||
import re # reg
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import signal
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# OAI Testing modules
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
import sshconnection as SSH
|
|
||||||
import helpreadme as HELP
|
|
||||||
import constants as CONST
|
|
||||||
import cls_cluster as OC
|
|
||||||
import cls_cmd
|
|
||||||
import cls_module
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# Class Declaration
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
class EPCManagement():
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
|
|
||||||
self.IPAddress = ''
|
|
||||||
self.UserName = ''
|
|
||||||
self.Password = ''
|
|
||||||
self.SourceCodePath = ''
|
|
||||||
self.Type = ''
|
|
||||||
self.PcapFileName = ''
|
|
||||||
self.testCase_id = ''
|
|
||||||
self.MmeIPAddress = ''
|
|
||||||
self.containerPrefix = 'prod'
|
|
||||||
self.mmeConfFile = 'mme.conf'
|
|
||||||
self.yamlPath = ''
|
|
||||||
self.isMagmaUsed = False
|
|
||||||
self.cfgDeploy = '--type start-mini --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap' #from xml, 'mini' is default normal for docker-network.py
|
|
||||||
self.cfgUnDeploy = '--type stop-mini --scenario 1' #from xml, 'mini' is default normal for docker-network.py
|
|
||||||
self.OCUrl = "https://api.oai.cs.eurecom.fr:6443"
|
|
||||||
self.OCRegistry = "default-route-openshift-image-registry.apps.oai.cs.eurecom.fr"
|
|
||||||
self.OCUserName = ''
|
|
||||||
self.OCPassword = ''
|
|
||||||
self.cnID = ''
|
|
||||||
self.imageToPull = ''
|
|
||||||
self.eNBSourceCodePath = ''
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
# EPC management functions
|
|
||||||
#-----------------------------------------------------------
|
|
||||||
|
|
||||||
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)
|
|
||||||
sys.exit('Insufficient EPC Parameters')
|
|
||||||
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')
|
|
||||||
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('docker exec -d ' + self.containerPrefix + '-oai-hss /bin/bash -c "nohup tshark -i eth0 -i eth1 -w /tmp/hss_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
|
||||||
time.sleep(5)
|
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-hss /bin/bash -c "nohup ./bin/oai_hss -j ./etc/hss_rel14.json --reloadkey true > hss_check_run.log 2>&1"', '\$', 5)
|
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('Using the OAI EPC Release 14 Cassandra-based HSS')
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
||||||
logging.debug('\u001B[1m Launching tshark on all interfaces \u001B[0m')
|
|
||||||
self.PcapFileName = 'epc_' + self.testCase_id + '.pcap'
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm -f ' + self.PcapFileName, '\$', 5)
|
|
||||||
mySSH.command('echo $USER; nohup sudo tshark -f "tcp port not 22 and port not 53" -i any -w ' + self.SourceCodePath + '/scripts/' + self.PcapFileName + ' > /tmp/tshark.log 2>&1 &', self.UserName, 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S mkdir -p logs', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm -f hss_' + self.testCase_id + '.log logs/hss*.*', '\$', 5)
|
|
||||||
mySSH.command('echo "oai_hss -j /usr/local/etc/oai/hss_rel14.json" > ./my-hss.sh', '\$', 5)
|
|
||||||
mySSH.command('chmod 755 ./my-hss.sh', '\$', 5)
|
|
||||||
mySSH.command('sudo daemon --unsafe --name=hss_daemon --chdir=' + self.SourceCodePath + '/scripts -o ' + self.SourceCodePath + '/scripts/hss_' + self.testCase_id + '.log ./my-hss.sh', '\$', 5)
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('Using the OAI EPC HSS')
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath, '\$', 5)
|
|
||||||
mySSH.command('source oaienv', '\$', 5)
|
|
||||||
mySSH.command('cd scripts', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./run_hss 2>&1 | stdbuf -o0 awk \'{ print strftime("[%Y/%m/%d %H:%M:%S] ",systime()) $0 }\' | stdbuf -o0 tee -a hss_' + self.testCase_id + '.log &', 'Core state: 2 -> 3', 35)
|
|
||||||
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('Using the ltebox 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)
|
|
||||||
result = re.search('hss_sim s6as diam_hss', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall hss_sim', '\$', 5)
|
|
||||||
mySSH.command('ps aux | grep --colour=never xGw | grep -v grep', '\$', 5, silent=True)
|
|
||||||
result = re.search('root.*xGw', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('cd /opt/ltebox/tools', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./stop_ltebox', '\$', 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_hss ./starthss"', '\$', 5)
|
|
||||||
else:
|
|
||||||
logging.error('This option should not occur!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
return True
|
|
||||||
|
|
||||||
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)
|
|
||||||
sys.exit('Insufficient EPC Parameters')
|
|
||||||
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')
|
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup tshark -i eth0 -i lo:s10 -f "not port 2152" -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
|
||||||
time.sleep(5)
|
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-mme /bin/bash -c "nohup ./bin/oai_mme -c ./etc/' + self.mmeConfFile + ' > mme_check_run.log 2>&1"', '\$', 5)
|
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('Using the OAI EPC Release 14 MME')
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm -f mme_' + self.testCase_id + '.log', '\$', 5)
|
|
||||||
mySSH.command('echo "./run_mme --config-file /usr/local/etc/oai/mme.conf --set-virt-if" > ./my-mme.sh', '\$', 5)
|
|
||||||
mySSH.command('chmod 755 ./my-mme.sh', '\$', 5)
|
|
||||||
mySSH.command('sudo daemon --unsafe --name=mme_daemon --chdir=' + self.SourceCodePath + '/scripts -o ' + self.SourceCodePath + '/scripts/mme_' + self.testCase_id + '.log ./my-mme.sh', '\$', 5)
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath, '\$', 5)
|
|
||||||
mySSH.command('source oaienv', '\$', 5)
|
|
||||||
mySSH.command('cd scripts', '\$', 5)
|
|
||||||
mySSH.command('stdbuf -o0 hostname', '\$', 5)
|
|
||||||
result = re.search('hostname\\\\r\\\\n(?P<host_name>[a-zA-Z0-9\-\_]+)\\\\r\\\\n', mySSH.getBefore())
|
|
||||||
if result is None:
|
|
||||||
logging.debug('\u001B[1;37;41m Hostname Not Found! \u001B[0m')
|
|
||||||
sys.exit(1)
|
|
||||||
host_name = result.group('host_name')
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./run_mme 2>&1 | stdbuf -o0 tee -a mme_' + self.testCase_id + '.log &', 'MME app initialization complete', 100)
|
|
||||||
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd /opt/ltebox/tools', '\$', 5)
|
|
||||||
# Clean-up the logs from previous runs
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm -f ../var/log/*.0', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./start_mme', '\$', 5)
|
|
||||||
else:
|
|
||||||
logging.error('This option should not occur!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def SetMmeIPAddress(self):
|
|
||||||
# Not an error if we don't need an EPC
|
|
||||||
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.SourceCodePath == '' or self.Type == '':
|
|
||||||
return
|
|
||||||
if self.IPAddress == 'none':
|
|
||||||
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.open(self.IPAddress, self.UserName, self.Password)
|
|
||||||
self.isMagmaUsed = False
|
|
||||||
mySSH.command('docker ps -a', '\$', 5)
|
|
||||||
result = re.search('magma', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
self.isMagmaUsed = True
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
mySSH.command('docker inspect --format="MME_IP_ADDR = {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" ' + self.containerPrefix + '-magma-mme', '\$', 5)
|
|
||||||
else:
|
|
||||||
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())
|
|
||||||
if result is not None:
|
|
||||||
self.MmeIPAddress = result.group('mme_ip_addr')
|
|
||||||
logging.debug('MME IP Address is ' + self.MmeIPAddress)
|
|
||||||
mySSH.close()
|
|
||||||
else:
|
|
||||||
self.MmeIPAddress = self.IPAddress
|
|
||||||
|
|
||||||
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)
|
|
||||||
sys.exit('Insufficient EPC Parameters')
|
|
||||||
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')
|
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup tshark -i eth0 -i lo:p5c -i lo:s5c -f "not port 2152" -w /tmp/spgwc_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "nohup tshark -i eth0 -f "not port 2152" -w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
|
||||||
time.sleep(5)
|
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "nohup ./bin/oai_spgwc -o -c ./etc/spgw_c.conf > spgwc_check_run.log 2>&1"', '\$', 5)
|
|
||||||
time.sleep(5)
|
|
||||||
mySSH.command('docker exec -d ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "nohup ./bin/oai_spgwu -o -c ./etc/spgw_u.conf > spgwu_check_run.log 2>&1"', '\$', 5)
|
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('Using the OAI EPC Release 14 SPGW-CUPS')
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm -f spgwc_' + self.testCase_id + '.log spgwu_' + self.testCase_id + '.log', '\$', 5)
|
|
||||||
mySSH.command('echo "spgwc -c /usr/local/etc/oai/spgw_c.conf" > ./my-spgwc.sh', '\$', 5)
|
|
||||||
mySSH.command('chmod 755 ./my-spgwc.sh', '\$', 5)
|
|
||||||
mySSH.command('sudo daemon --unsafe --name=spgwc_daemon --chdir=' + self.SourceCodePath + '/scripts -o ' + self.SourceCodePath + '/scripts/spgwc_' + self.testCase_id + '.log ./my-spgwc.sh', '\$', 5)
|
|
||||||
time.sleep(5)
|
|
||||||
mySSH.command('echo "spgwu -c /usr/local/etc/oai/spgw_u.conf" > ./my-spgwu.sh', '\$', 5)
|
|
||||||
mySSH.command('chmod 755 ./my-spgwu.sh', '\$', 5)
|
|
||||||
mySSH.command('sudo daemon --unsafe --name=spgwu_daemon --chdir=' + self.SourceCodePath + '/scripts -o ' + self.SourceCodePath + '/scripts/spgwu_' + self.testCase_id + '.log ./my-spgwu.sh', '\$', 5)
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath, '\$', 5)
|
|
||||||
mySSH.command('source oaienv', '\$', 5)
|
|
||||||
mySSH.command('cd scripts', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./run_spgw 2>&1 | stdbuf -o0 tee -a spgw_' + self.testCase_id + '.log &', 'Initializing SPGW-APP task interface: DONE', 30)
|
|
||||||
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd /opt/ltebox/tools', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./start_xGw', '\$', 5)
|
|
||||||
else:
|
|
||||||
logging.error('This option should not occur!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRow(self.Type, 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def Initialize5GCN(self, HTML):
|
|
||||||
if self.IPAddress == '' or self.UserName == '' or self.Password == '' or self.Type == '':
|
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
HELP.EPCSrvHelp(self.IPAddress, self.UserName, self.Password, self.Type)
|
|
||||||
logging.error('Insufficient EPC Parameters')
|
|
||||||
return False
|
|
||||||
mySSH = cls_cmd.getConnection(self.IPAddress)
|
|
||||||
html_cell = ''
|
|
||||||
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)
|
|
||||||
html_cell += 'N/A\n'
|
|
||||||
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('Starting OAI CN5G')
|
|
||||||
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(f'cd {self.SourceCodePath}/docker-compose', '\$', 5)
|
|
||||||
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
|
|
||||||
if re.search('start-mini-as-ue', self.cfgDeploy):
|
|
||||||
dFile = 'docker-compose-mini-nrf-asue.yaml'
|
|
||||||
elif re.search('basic', self.cfgDeploy):\
|
|
||||||
dFile = 'docker-compose-basic-nrf.yaml'
|
|
||||||
else:
|
|
||||||
dFile = 'docker-compose-mini-nrf.yaml'
|
|
||||||
mySSH.command('docker-compose -f ' + dFile + ' ps -a', '\$', 60)
|
|
||||||
if mySSH.getBefore().count('Up (healthy)') != 6:
|
|
||||||
logging.error('Not all container healthy')
|
|
||||||
else:
|
|
||||||
logging.debug('OK --> all containers are healthy')
|
|
||||||
mySSH.command('docker-compose -f ' + dFile + ' config | grep --colour=never image', '\$', 10)
|
|
||||||
listOfImages = mySSH.getBefore()
|
|
||||||
for imageLine in listOfImages.split('\\r\\n'):
|
|
||||||
res1 = re.search('image: (?P<name>[a-zA-Z0-9\-/]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine))
|
|
||||||
res2 = re.search('mysql', str(imageLine))
|
|
||||||
if res1 is not None and res2 is None:
|
|
||||||
html_cell += res1.group('name') + ':' + res1.group('tag') + ' '
|
|
||||||
nbChars = len(res1.group('name')) + len(res1.group('tag')) + 2
|
|
||||||
while (nbChars < 32):
|
|
||||||
html_cell += ' '
|
|
||||||
nbChars += 1
|
|
||||||
mySSH.command('docker image inspect --format="Size = {{.Size}} bytes" ' + res1.group('name') + ':' + res1.group('tag'), '\$', 10)
|
|
||||||
res3 = re.search('Size *= *(?P<size>[0-9\-]*) *bytes', mySSH.getBefore())
|
|
||||||
if res3 is not None:
|
|
||||||
imageSize = int(res3.group('size'))
|
|
||||||
imageSize = int(imageSize/(1024*1024))
|
|
||||||
html_cell += str(imageSize) + ' MBytes '
|
|
||||||
mySSH.command('docker image inspect --format="Date = {{.Created}}" ' + res1.group('name') + ':' + res1.group('tag'), '\$', 10)
|
|
||||||
res4 = re.search('Date *= *(?P<date>[0-9\-]*)T', mySSH.getBefore())
|
|
||||||
if res4 is not None:
|
|
||||||
html_cell += '(' + res4.group('date') + ')'
|
|
||||||
html_cell += '\n'
|
|
||||||
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
|
|
||||||
cn = cls_module.Module_UE(self.cnID)
|
|
||||||
succeeded, report = OC.OC_deploy_CN(mySSH, self.OCUserName, self.OCPassword, cn.getNamespace(), cn.getCNPath())
|
|
||||||
if not succeeded:
|
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', report)
|
|
||||||
HTML.CreateHtmlTabFooter(False)
|
|
||||||
mySSH.close()
|
|
||||||
logging.error("OC OAI CN5G: CN deployment failed!")
|
|
||||||
return False
|
|
||||||
for line in report.stdout.split('\n')[1:]:
|
|
||||||
columns = line.strip().split()
|
|
||||||
name = columns[0]
|
|
||||||
status = columns[2]
|
|
||||||
html_cell += status + ' ' + name
|
|
||||||
html_cell += '\n'
|
|
||||||
else:
|
|
||||||
logging.error('This option should not occur!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [html_cell])
|
|
||||||
return True
|
|
||||||
|
|
||||||
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
|
|
||||||
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
|
||||||
mySSH = SSH.SSHConnection()
|
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
||||||
response=mySSH.command3('docker container ls -f name=oai-amf', 10)
|
|
||||||
if len(response)>1:
|
|
||||||
response=mySSH.command3('docker inspect --format=\'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}\' oai-amf', 10)
|
|
||||||
tmp = str(response[0],'utf-8')
|
|
||||||
self.MmeIPAddress = tmp.rstrip()
|
|
||||||
logging.debug('AMF IP Address ' + self.MmeIPAddress)
|
|
||||||
else:
|
|
||||||
logging.error('no container with name oai-amf found, could not retrieve AMF IP address')
|
|
||||||
mySSH.close()
|
|
||||||
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
|
|
||||||
mySSH = SSH.SSHConnection()
|
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
||||||
response=mySSH.command3('oc pods ls -f name=oai-amf', 10)
|
|
||||||
|
|
||||||
def CheckHSSProcess(self, status_queue):
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
else:
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never hss | grep -v grep', '\$', 5)
|
|
||||||
if re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
||||||
result = re.search('oai_hss -j', mySSH.getBefore())
|
|
||||||
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('hss_sim s6as diam_hss', mySSH.getBefore())
|
|
||||||
else:
|
|
||||||
logging.error('This should not happen!')
|
|
||||||
if result is None:
|
|
||||||
logging.debug('\u001B[1;37;41m HSS Process Not Found! \u001B[0m')
|
|
||||||
status_queue.put(CONST.HSS_PROCESS_FAILED)
|
|
||||||
else:
|
|
||||||
status_queue.put(CONST.HSS_PROCESS_OK)
|
|
||||||
mySSH.close()
|
|
||||||
except:
|
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
|
||||||
|
|
||||||
def CheckMMEProcess(self, status_queue):
|
|
||||||
try:
|
|
||||||
mySSH = SSH.SSHConnection()
|
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
||||||
self.isMagmaUsed = False
|
|
||||||
mySSH.command('docker ps -a', '\$', 5)
|
|
||||||
result = re.search('magma', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
self.isMagmaUsed = True
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
mySSH.command('docker top ' + self.containerPrefix + '-magma-mme', '\$', 5)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker top ' + self.containerPrefix + '-oai-mme', '\$', 5)
|
|
||||||
else:
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never mme | grep -v grep', '\$', 5)
|
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
||||||
result = re.search('oai_mme -c ', mySSH.getBefore())
|
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
result = re.search('mme -c', mySSH.getBefore())
|
|
||||||
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|amf', mySSH.getBefore())
|
|
||||||
else:
|
|
||||||
logging.error('This should not happen!')
|
|
||||||
if result is None:
|
|
||||||
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)
|
|
||||||
mySSH.close()
|
|
||||||
except:
|
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
|
||||||
|
|
||||||
def CheckSPGWProcess(self, status_queue):
|
|
||||||
try:
|
|
||||||
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)
|
|
||||||
result = re.search('oai_spgwc -', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('docker top ' + self.containerPrefix + '-oai-spgwu-tiny', '\$', 5)
|
|
||||||
result = re.search('oai_spgwu -', mySSH.getBefore())
|
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep', '\$', 5)
|
|
||||||
result = re.search('spgwu -c ', mySSH.getBefore())
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep', '\$', 5)
|
|
||||||
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|upf', mySSH.getBefore())
|
|
||||||
else:
|
|
||||||
logging.error('This should not happen!')
|
|
||||||
if result is None:
|
|
||||||
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)
|
|
||||||
mySSH.close()
|
|
||||||
except:
|
|
||||||
os.kill(os.getppid(),signal.SIGUSR1)
|
|
||||||
|
|
||||||
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):
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-hss /bin/bash -c "killall --signal SIGINT oai_hss tshark"', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-hss /bin/bash -c "ps aux | grep oai_hss"', '\$', 5)
|
|
||||||
result = re.search('oai_hss -j ', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-hss /bin/bash -c "killall --signal SIGKILL oai_hss"', '\$', 5)
|
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGINT oai_hss || true', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --colour=never hss | grep -v grep', '\$', 5)
|
|
||||||
result = re.search('oai_hss -j', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGKILL oai_hss || true', '\$', 5)
|
|
||||||
mySSH.command('rm -f ' + self.SourceCodePath + '/scripts/my-hss.sh', '\$', 5)
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGINT run_hss oai_hss || true', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep --colour=never hss | grep -v grep', '\$', 5)
|
|
||||||
result = re.search('\/bin\/bash .\/run_', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGKILL run_hss oai_hss || true', '\$', 5)
|
|
||||||
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath, '\$', 5)
|
|
||||||
mySSH.command('cd scripts', '\$', 5)
|
|
||||||
time.sleep(1)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S screen -S simulated_hss -X quit', '\$', 5)
|
|
||||||
time.sleep(5)
|
|
||||||
mySSH.command('ps aux | grep --colour=never hss_sim | grep -v grep', '\$', 5, silent=True)
|
|
||||||
result = re.search('hss_sim s6as diam_hss', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall hss_sim', '\$', 5)
|
|
||||||
else:
|
|
||||||
logging.error('This should not happen!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
return True
|
|
||||||
|
|
||||||
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):
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-mme /bin/bash -c "killall --signal SIGINT oai_mme tshark"', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-mme /bin/bash -c "ps aux | grep oai_mme"', '\$', 5)
|
|
||||||
result = re.search('oai_mme -c ', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-mme /bin/bash -c "killall --signal SIGKILL oai_mme"', '\$', 5)
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGINT run_mme mme || true', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep mme | grep -v grep', '\$', 5)
|
|
||||||
result = re.search('mme -c', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGKILL run_mme mme || true', '\$', 5)
|
|
||||||
mySSH.command('rm -f ' + self.SourceCodePath + '/scripts/my-mme.sh', '\$', 5)
|
|
||||||
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd /opt/ltebox/tools', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./stop_mme', '\$', 5)
|
|
||||||
time.sleep(5)
|
|
||||||
else:
|
|
||||||
logging.error('This should not happen!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
return True
|
|
||||||
|
|
||||||
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):
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "killall --signal SIGINT oai_spgwc tshark"', '\$', 5)
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "killall --signal SIGINT oai_spgwu tshark"', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "ps aux | grep oai_spgwc"', '\$', 5)
|
|
||||||
result = re.search('oai_spgwc -o -c ', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwc /bin/bash -c "killall --signal SIGKILL oai_spgwc"', '\$', 5)
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "ps aux | grep oai_spgwu"', '\$', 5)
|
|
||||||
result = re.search('oai_spgwu -o -c ', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('docker exec -it ' + self.containerPrefix + '-oai-spgwu-tiny /bin/bash -c "killall --signal SIGKILL oai_spgwu"', '\$', 5)
|
|
||||||
elif re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGINT spgwc spgwu || true', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep spgw | grep -v grep', '\$', 5)
|
|
||||||
result = re.search('spgwc -c |spgwu -c ', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGKILL spgwc spgwu || true', '\$', 5)
|
|
||||||
mySSH.command('rm -f ' + self.SourceCodePath + '/scripts/my-spgw*.sh', '\$', 5)
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep tshark | grep -v grep', '\$', 5)
|
|
||||||
result = re.search('-w ', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGINT tshark || true', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S chmod 666 ' + self.SourceCodePath + '/scripts/*.pcap', '\$', 5)
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGINT run_spgw spgw || true', '\$', 5)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('stdbuf -o0 ps -aux | grep spgw | grep -v grep', '\$', 5)
|
|
||||||
result = re.search('\/bin\/bash .\/run_', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S killall --signal SIGKILL run_spgw spgw || true', '\$', 5)
|
|
||||||
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd /opt/ltebox/tools', '\$', 5)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S ./stop_xGw', '\$', 5)
|
|
||||||
else:
|
|
||||||
logging.error('This should not happen!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def Terminate5GCN(self, HTML):
|
|
||||||
mySSH = cls_cmd.getConnection(self.IPAddress)
|
|
||||||
message = ''
|
|
||||||
if re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('Terminating SA BOX')
|
|
||||||
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)
|
|
||||||
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('OAI CN5G Collecting Log files to workspace')
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo rm -rf ' + self.SourceCodePath + '/logs', '\$', 5)
|
|
||||||
mySSH.command('mkdir ' + self.SourceCodePath + '/logs','\$', 5)
|
|
||||||
containers_list=['oai-smf','oai-spgwu','oai-amf','oai-nrf']
|
|
||||||
for c in containers_list:
|
|
||||||
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
|
|
||||||
|
|
||||||
logging.debug('Terminating OAI CN5G')
|
|
||||||
mySSH.command(f'cd {self.SourceCodePath}/docker-compose', '\$', 5)
|
|
||||||
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
|
|
||||||
mySSH.command('docker volume prune --force || true', '\$', 60)
|
|
||||||
time.sleep(2)
|
|
||||||
mySSH.command('tshark -r /tmp/oai-cn5g-v1.5.pcap | grep -E --colour=never "Tracking area update" ','\$', 30)
|
|
||||||
result = re.search('Tracking area update request', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)'
|
|
||||||
else:
|
|
||||||
message = 'No Tracking area update request'
|
|
||||||
mySSH.run(f'cd {self.SourceCodePath}/logs && zip -r -qq test_logs_CN.zip *.log')
|
|
||||||
mySSH.copyin(f'{self.SourceCodePath}/logs/test_logs_CN.zip','test_logs_CN.zip')
|
|
||||||
logging.debug(message)
|
|
||||||
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
|
|
||||||
cn = cls_module.Module_UE(self.cnID)
|
|
||||||
succeeded, report = OC.OC_undeploy_CN(mySSH, self.OCUserName, self.OCPassword, cn.getNamespace(), cn.getCNPath())
|
|
||||||
if not succeeded:
|
|
||||||
HTML.CreateHtmlTestRow('N/A', 'KO', report)
|
|
||||||
HTML.CreateHtmlTabFooter(False)
|
|
||||||
logging.error("OC OAI CN5G: CN undeployment failed!")
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
message = report.stdout
|
|
||||||
else:
|
|
||||||
logging.error('This should not happen!')
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [message])
|
|
||||||
return True
|
|
||||||
|
|
||||||
def DeployEpc(self, HTML):
|
|
||||||
logging.debug('Trying to deploy')
|
|
||||||
if not re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
||||||
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
|
||||||
HTML.CreateHtmlTabFooter(False)
|
|
||||||
logging.error('Deploy not possible with this EPC type: ' + self.Type)
|
|
||||||
return False
|
|
||||||
|
|
||||||
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)
|
|
||||||
logging.error('Insufficient EPC Parameters')
|
|
||||||
return False
|
|
||||||
mySSH = SSH.SSHConnection()
|
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
||||||
mySSH.command('docker-compose --version', '\$', 5)
|
|
||||||
result = re.search('docker-compose version 1|Docker Compose version v2', mySSH.getBefore())
|
|
||||||
if result is None:
|
|
||||||
mySSH.close()
|
|
||||||
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
|
||||||
HTML.CreateHtmlTabFooter(False)
|
|
||||||
logging.error('docker-compose not installed on ' + self.IPAddress)
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Checking if it is a MAGMA deployment
|
|
||||||
self.isMagmaUsed = False
|
|
||||||
if os.path.isfile('./' + self.yamlPath + '/redis_extern.conf'):
|
|
||||||
self.isMagmaUsed = True
|
|
||||||
logging.debug('MAGMA MME is used!')
|
|
||||||
|
|
||||||
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
|
|
||||||
mySSH.command('if [ -d ' + self.SourceCodePath + '/logs ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/logs ; fi', '\$', 5)
|
|
||||||
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts ' + self.SourceCodePath + '/logs', '\$', 5)
|
|
||||||
mySSH.command('rm -f ' + self.SourceCodePath + '/*.log', '\$', 5)
|
|
||||||
|
|
||||||
# deploying and configuring the cassandra database
|
|
||||||
# container names and services are currently hard-coded.
|
|
||||||
# they could be recovered by:
|
|
||||||
# - docker-compose config --services
|
|
||||||
# - docker-compose config | grep container_name
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
||||||
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/docker-compose.yml', self.SourceCodePath + '/scripts')
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/entrypoint.sh', self.SourceCodePath + '/scripts')
|
|
||||||
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/mme.conf', self.SourceCodePath + '/scripts')
|
|
||||||
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/mme_fd.sprint.conf', self.SourceCodePath + '/scripts')
|
|
||||||
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/redis_extern.conf', self.SourceCodePath + '/scripts')
|
|
||||||
mySSH.command('chmod a+x ' + self.SourceCodePath + '/scripts/entrypoint.sh', '\$', 5)
|
|
||||||
else:
|
|
||||||
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/entrypoint.sh', self.SourceCodePath + '/scripts')
|
|
||||||
mySSH.copyout(self.IPAddress, self.UserName, self.Password, './' + self.yamlPath + '/mme.conf', self.SourceCodePath + '/scripts')
|
|
||||||
mySSH.command('chmod 775 entrypoint.sh', '\$', 60)
|
|
||||||
mySSH.command('wget --quiet --tries=3 --retry-connrefused https://raw.githubusercontent.com/OPENAIRINTERFACE/openair-hss/develop/src/hss_rel14/db/oai_db.cql', '\$', 30)
|
|
||||||
mySSH.command('docker-compose down -v', '\$', 60)
|
|
||||||
mySSH.command('docker-compose up -d db_init', '\$', 60)
|
|
||||||
# databases take time...
|
|
||||||
time.sleep(10)
|
|
||||||
cnt = 0
|
|
||||||
db_init_status = False
|
|
||||||
while (cnt < 10):
|
|
||||||
mySSH.command('docker logs prod-db-init', '\$', 5)
|
|
||||||
result = re.search('OK', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
cnt = 10
|
|
||||||
db_init_status = True
|
|
||||||
else:
|
|
||||||
time.sleep(5)
|
|
||||||
cnt += 1
|
|
||||||
mySSH.command('docker rm -f prod-db-init', '\$', 5)
|
|
||||||
if not db_init_status:
|
|
||||||
HTML.CreateHtmlTestRow(self.Type, 'KO', CONST.INVALID_PARAMETER)
|
|
||||||
HTML.CreateHtmlTabFooter(False)
|
|
||||||
logging.error('Cassandra DB deployment/configuration went wrong!')
|
|
||||||
return True
|
|
||||||
|
|
||||||
# deploying EPC cNFs
|
|
||||||
mySSH.command('docker-compose up -d oai_spgwu', '\$', 60)
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
listOfContainers = 'prod-cassandra prod-oai-hss prod-magma-mme prod-oai-spgwc prod-oai-spgwu-tiny prod-redis'
|
|
||||||
expectedHealthyContainers = 6
|
|
||||||
else:
|
|
||||||
listOfContainers = 'prod-cassandra prod-oai-hss prod-oai-mme prod-oai-spgwc prod-oai-spgwu-tiny'
|
|
||||||
expectedHealthyContainers = 5
|
|
||||||
|
|
||||||
# Checking for additional services
|
|
||||||
mySSH.command('docker-compose config', '\$', 5)
|
|
||||||
configResponse = mySSH.getBefore()
|
|
||||||
if configResponse.count('trf_gen') == 1:
|
|
||||||
mySSH.command('docker-compose up -d trf_gen', '\$', 60)
|
|
||||||
listOfContainers += ' prod-trf-gen'
|
|
||||||
expectedHealthyContainers += 1
|
|
||||||
|
|
||||||
mySSH.command('docker-compose config | grep --colour=never image', '\$', 10)
|
|
||||||
html_cell = ''
|
|
||||||
listOfImages = mySSH.getBefore()
|
|
||||||
for imageLine in listOfImages.split('\\r\\n'):
|
|
||||||
res1 = re.search('image: (?P<name>[a-zA-Z0-9\-]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine))
|
|
||||||
res2 = re.search('cassandra|redis', str(imageLine))
|
|
||||||
if res1 is not None and res2 is None:
|
|
||||||
html_cell += res1.group('name') + ':' + res1.group('tag') + ' '
|
|
||||||
nbChars = len(res1.group('name')) + len(res1.group('tag')) + 2
|
|
||||||
while (nbChars < 32):
|
|
||||||
html_cell += ' '
|
|
||||||
nbChars += 1
|
|
||||||
mySSH.command('docker image inspect --format="Size = {{.Size}} bytes" ' + res1.group('name') + ':' + res1.group('tag'), '\$', 10)
|
|
||||||
res3 = re.search('Size *= *(?P<size>[0-9\-]*) *bytes', mySSH.getBefore())
|
|
||||||
if res3 is not None:
|
|
||||||
imageSize = int(res3.group('size'))
|
|
||||||
imageSize = int(imageSize/(1024*1024))
|
|
||||||
html_cell += str(imageSize) + ' MBytes '
|
|
||||||
mySSH.command('docker image inspect --format="Date = {{.Created}}" ' + res1.group('name') + ':' + res1.group('tag'), '\$', 10)
|
|
||||||
res4 = re.search('Date *= *(?P<date>[0-9\-]*)T', mySSH.getBefore())
|
|
||||||
if res4 is not None:
|
|
||||||
html_cell += '(' + res4.group('date') + ')'
|
|
||||||
html_cell += '\n'
|
|
||||||
# Checking if all are healthy
|
|
||||||
cnt = 0
|
|
||||||
while (cnt < 3):
|
|
||||||
mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + listOfContainers, '\$', 10)
|
|
||||||
unhealthyNb = mySSH.getBefore().count('unhealthy')
|
|
||||||
healthyNb = mySSH.getBefore().count('healthy') - unhealthyNb
|
|
||||||
startingNb = mySSH.getBefore().count('starting')
|
|
||||||
if healthyNb == expectedHealthyContainers:
|
|
||||||
cnt = 10
|
|
||||||
else:
|
|
||||||
time.sleep(10)
|
|
||||||
cnt += 1
|
|
||||||
logging.debug(' -- ' + str(healthyNb) + ' healthy container(s)')
|
|
||||||
logging.debug(' -- ' + str(unhealthyNb) + ' unhealthy container(s)')
|
|
||||||
logging.debug(' -- ' + str(startingNb) + ' still starting container(s)')
|
|
||||||
if healthyNb == expectedHealthyContainers:
|
|
||||||
mySSH.command('docker exec -d prod-oai-hss /bin/bash -c "nohup tshark -i any -f \'port 9042 or port 3868\' -w /tmp/hss_check_run.pcap 2>&1 > /dev/null"', '\$', 5)
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
mySSH.command('docker exec -d prod-magma-mme /bin/bash -c "nohup tshark -i any -f \'port 3868 or port 2123 or port 36412\' -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker exec -d prod-oai-mme /bin/bash -c "nohup tshark -i any -f \'port 3868 or port 2123 or port 36412\' -w /tmp/mme_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
|
|
||||||
mySSH.command('docker exec -d prod-oai-spgwc /bin/bash -c "nohup tshark -i any -f \'port 2123 or port 8805\' -w /tmp/spgwc_check_run.pcap 2>&1 > /dev/null"', '\$', 10)
|
|
||||||
# on SPGW-U, not capturing on SGI to avoid huge file
|
|
||||||
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')
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [html_cell])
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
mySSH.close()
|
|
||||||
logging.debug('Deployment went wrong')
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.Type, 'KO', [html_cell])
|
|
||||||
return False
|
|
||||||
|
|
||||||
def UndeployEpc(self, HTML):
|
|
||||||
logging.debug('Trying to undeploy')
|
|
||||||
# No check down, we suppose everything done before.
|
|
||||||
|
|
||||||
mySSH = SSH.SSHConnection()
|
|
||||||
mySSH.open(self.IPAddress, self.UserName, self.Password)
|
|
||||||
# Checking if it is a MAGMA deployment.
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
||||||
mySSH.command('docker-compose ps -a', '\$', 5)
|
|
||||||
self.isMagmaUsed = False
|
|
||||||
result = re.search('magma', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
self.isMagmaUsed = True
|
|
||||||
logging.debug('MAGMA MME is used!')
|
|
||||||
# Recovering logs and pcap files
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/logs', '\$', 5)
|
|
||||||
mySSH.command('docker exec -it prod-oai-hss /bin/bash -c "killall --signal SIGINT oai_hss tshark"', '\$', 5)
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
mySSH.command('docker exec -it prod-magma-mme /bin/bash -c "killall --signal SIGINT tshark"', '\$', 5)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker exec -it prod-oai-mme /bin/bash -c "killall --signal SIGINT tshark"', '\$', 5)
|
|
||||||
mySSH.command('docker exec -it prod-oai-spgwc /bin/bash -c "killall --signal SIGINT oai_spgwc tshark"', '\$', 5)
|
|
||||||
mySSH.command('docker exec -it prod-oai-spgwu-tiny /bin/bash -c "killall --signal SIGINT tshark"', '\$', 5)
|
|
||||||
mySSH.command('docker logs prod-oai-hss > hss_' + self.testCase_id + '.log', '\$', 5)
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
mySSH.command('docker cp --follow-link prod-magma-mme:/var/log/mme.log mme_' + self.testCase_id + '.log', '\$', 15)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker logs prod-oai-mme > mme_' + self.testCase_id + '.log', '\$', 5)
|
|
||||||
mySSH.command('docker logs prod-oai-spgwc > spgwc_' + self.testCase_id + '.log', '\$', 5)
|
|
||||||
mySSH.command('docker logs prod-oai-spgwu-tiny > spgwu_' + self.testCase_id + '.log', '\$', 5)
|
|
||||||
mySSH.command('docker cp prod-oai-hss:/tmp/hss_check_run.pcap hss_' + self.testCase_id + '.pcap', '\$', 60)
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
mySSH.command('docker cp prod-magma-mme:/tmp/mme_check_run.pcap mme_' + self.testCase_id + '.pcap', '\$', 60)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker cp prod-oai-mme:/tmp/mme_check_run.pcap mme_' + self.testCase_id + '.pcap', '\$', 60)
|
|
||||||
mySSH.command('tshark -r mme_' + self.testCase_id + '.pcap | grep -E --colour=never "Tracking area update"', '\$', 60)
|
|
||||||
result = re.search('Tracking area update request', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)'
|
|
||||||
else:
|
|
||||||
message = 'No Tracking area update request'
|
|
||||||
logging.debug(message)
|
|
||||||
mySSH.command('docker cp prod-oai-spgwc:/tmp/spgwc_check_run.pcap spgwc_' + self.testCase_id + '.pcap', '\$', 60)
|
|
||||||
mySSH.command('docker cp prod-oai-spgwu-tiny:/tmp/spgwu_check_run.pcap spgwu_' + self.testCase_id + '.pcap', '\$', 60)
|
|
||||||
# Remove all
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
||||||
if self.isMagmaUsed:
|
|
||||||
listOfContainers = 'prod-cassandra prod-oai-hss prod-magma-mme prod-oai-spgwc prod-oai-spgwu-tiny prod-redis'
|
|
||||||
nbContainers = 6
|
|
||||||
else:
|
|
||||||
listOfContainers = 'prod-cassandra prod-oai-hss prod-oai-mme prod-oai-spgwc prod-oai-spgwu-tiny'
|
|
||||||
nbContainers = 5
|
|
||||||
# Checking for additional services
|
|
||||||
mySSH.command('docker-compose config', '\$', 5)
|
|
||||||
configResponse = mySSH.getBefore()
|
|
||||||
if configResponse.count('trf_gen') == 1:
|
|
||||||
listOfContainers += ' prod-trf-gen'
|
|
||||||
nbContainers += 1
|
|
||||||
|
|
||||||
mySSH.command('docker-compose down -v', '\$', 60)
|
|
||||||
mySSH.command('docker inspect --format=\'{{.State.Health.Status}}\' ' + listOfContainers, '\$', 10)
|
|
||||||
noMoreContainerNb = mySSH.getBefore().count('No such object')
|
|
||||||
mySSH.command('docker inspect --format=\'{{.Name}}\' prod-oai-public-net prod-oai-private-net', '\$', 10)
|
|
||||||
noMoreNetworkNb = mySSH.getBefore().count('No such object')
|
|
||||||
mySSH.close()
|
|
||||||
if noMoreContainerNb == nbContainers and noMoreNetworkNb == 2:
|
|
||||||
logging.debug('Undeployment OK')
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.Type, 'OK', [message])
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
logging.debug('Undeployment went wrong')
|
|
||||||
HTML.CreateHtmlTestRowQueue(self.Type, 'KO', [message])
|
|
||||||
return False
|
|
||||||
|
|
||||||
def LogCollectHSS(self):
|
|
||||||
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)
|
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('docker inspect prod-oai-hss', '\$', 10)
|
|
||||||
result = re.search('No such object', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('cd ../logs', '\$', 5)
|
|
||||||
mySSH.command('rm -f hss.log.zip', '\$', 5)
|
|
||||||
mySSH.command('zip hss.log.zip hss_*.*', '\$', 60)
|
|
||||||
mySSH.command('mv hss.log.zip ../scripts', '\$', 60)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-hss:/openair-hss/hss_check_run.log .', '\$', 60)
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-hss:/tmp/hss_check_run.pcap .', '\$', 60)
|
|
||||||
mySSH.command('zip hss.log.zip hss_check_run.*', '\$', 60)
|
|
||||||
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('LogCollect is bypassed for that variant')
|
|
||||||
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
|
|
||||||
logging.debug('LogCollect is bypassed for that variant')
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('zip hss.log.zip hss*.log', '\$', 60)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm hss*.log', '\$', 5)
|
|
||||||
if re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('zip hss.log.zip logs/hss*.* *.pcap', '\$', 60)
|
|
||||||
mySSH.command('echo ' + self.Password + ' | sudo -S rm -f logs/hss*.* *.pcap', '\$', 5)
|
|
||||||
elif re.match('ltebox', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cp /opt/hss_sim0609/hss.log .', '\$', 60)
|
|
||||||
mySSH.command('zip hss.log.zip hss.log', '\$', 60)
|
|
||||||
else:
|
|
||||||
logging.error('This option should not occur!')
|
|
||||||
mySSH.close()
|
|
||||||
|
|
||||||
def LogCollectMME(self):
|
|
||||||
if self.Type != 'OC-OAI-CN5G':
|
|
||||||
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)
|
|
||||||
else:
|
|
||||||
mySSH = cls_cmd.getConnection(self.IPAddress)
|
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('docker inspect prod-oai-mme', '\$', 10)
|
|
||||||
result = re.search('No such object', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('cd ../logs', '\$', 5)
|
|
||||||
mySSH.command('rm -f mme.log.zip', '\$', 5)
|
|
||||||
mySSH.command('zip mme.log.zip mme_*.*', '\$', 60)
|
|
||||||
mySSH.command('mv mme.log.zip ../scripts', '\$', 60)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-mme:/openair-mme/mme_check_run.log .', '\$', 60)
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-mme:/tmp/mme_check_run.pcap .', '\$', 60)
|
|
||||||
mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60)
|
|
||||||
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
|
|
||||||
mySSH.command('cp -f /tmp/oai-cn5g-v1.5.pcap .','\$', 30)
|
|
||||||
mySSH.command('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap','\$', 30)
|
|
||||||
mySSH.command('mv mme.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
|
|
||||||
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.run('cd ' + self.SourceCodePath + '/logs')
|
|
||||||
mySSH.run('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap')
|
|
||||||
mySSH.run('mv mme.log.zip ' + self.SourceCodePath + '/scripts')
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('zip mme.log.zip mme*.log', '\$', 60)
|
|
||||||
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 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.open(self.IPAddress, self.UserName, self.Password)
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/scripts', '\$', 5)
|
|
||||||
mySSH.command('rm -f spgw.log.zip', '\$', 5)
|
|
||||||
if re.match('OAI-Rel14-Docker', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('docker inspect prod-oai-mme', '\$', 10)
|
|
||||||
result = re.search('No such object', mySSH.getBefore())
|
|
||||||
if result is not None:
|
|
||||||
mySSH.command('cd ../logs', '\$', 5)
|
|
||||||
mySSH.command('rm -f spgw.log.zip', '\$', 5)
|
|
||||||
mySSH.command('zip spgw.log.zip spgw*.*', '\$', 60)
|
|
||||||
mySSH.command('mv spgw.log.zip ../scripts', '\$', 60)
|
|
||||||
else:
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwc:/openair-spgwc/spgwc_check_run.log .', '\$', 60)
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwu-tiny:/openair-spgwu-tiny/spgwu_check_run.log .', '\$', 60)
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwc:/tmp/spgwc_check_run.pcap .', '\$', 60)
|
|
||||||
mySSH.command('docker cp ' + self.containerPrefix + '-oai-spgwu-tiny:/tmp/spgwu_check_run.pcap .', '\$', 60)
|
|
||||||
mySSH.command('zip spgw.log.zip spgw*_check_run.*', '\$', 60)
|
|
||||||
elif re.match('OAICN5G', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
|
|
||||||
mySSH.command('zip spgw.log.zip oai-smf.log oai-spgwu.log','\$', 30)
|
|
||||||
mySSH.command('mv spgw.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
|
|
||||||
elif re.match('OC-OAI-CN5G', self.Type, re.IGNORECASE):
|
|
||||||
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
|
|
||||||
mySSH.command('zip spgw.log.zip oai-smf.log oai-spgwu.log','\$', 30)
|
|
||||||
mySSH.command('mv spgw.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
|
|
||||||
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
|
|
||||||
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/*Log.0 .', '\$', 5)
|
|
||||||
mySSH.command('zip spgw.log.zip xGwLog.0 upfLog.0', '\$', 60)
|
|
||||||
else:
|
|
||||||
logging.error('This option should not occur!')
|
|
||||||
mySSH.close()
|
|
||||||
@@ -42,7 +42,6 @@ def GenericHelp(vers):
|
|||||||
print(' TesteNB')
|
print(' TesteNB')
|
||||||
print(' InitiateHtml, FinalizeHtml')
|
print(' InitiateHtml, FinalizeHtml')
|
||||||
print(' TerminateeNB, TerminateHSS, TerminateMME, TerminateSPGW')
|
print(' TerminateeNB, TerminateHSS, TerminateMME, TerminateSPGW')
|
||||||
print(' LogCollectBuild, LogCollecteNB, LogCollectHSS, LogCollectMME, LogCollectSPGW, LogCollectPing, LogCollectIperf')
|
|
||||||
print(' --local Force local execution: rewrites the test xml script before running to always execute on localhost. Assumes')
|
print(' --local Force local execution: rewrites the test xml script before running to always execute on localhost. Assumes')
|
||||||
print(' images are available locally, will not remove any images and will run inside the current repo directory')
|
print(' images are available locally, will not remove any images and will run inside the current repo directory')
|
||||||
|
|
||||||
@@ -65,13 +64,6 @@ def OAIUESrvHelp(ipaddr, username, password, sourcepath):
|
|||||||
print(' --UEPassword=[UE\'s Login Password] -- ' + password)
|
print(' --UEPassword=[UE\'s Login Password] -- ' + password)
|
||||||
print(' --UESourceCodePath=[UE\'s Source Code Path] -- ' + sourcepath)
|
print(' --UESourceCodePath=[UE\'s Source Code Path] -- ' + sourcepath)
|
||||||
|
|
||||||
def EPCSrvHelp(ipaddr, username, password, sourcepath, epctype):
|
|
||||||
print(' --EPCIPAddress=[EPC\'s IP Address] -- ' + ipaddr)
|
|
||||||
print(' --EPCUserName=[EPC\'s Login User Name] -- ' + username)
|
|
||||||
print(' --EPCPassword=[EPC\'s Login Password] -- ' + password)
|
|
||||||
print(' --EPCSourceCodePath=[EPC\'s Source Code Path] -- ' + sourcepath)
|
|
||||||
print(' --EPCType=[EPC\'s Type: OAI or ltebox or OC-OAI-CN5G] -- ' + epctype)
|
|
||||||
|
|
||||||
def XmlHelp(filename):
|
def XmlHelp(filename):
|
||||||
print(' --XMLTestFile=[XML Test File to be run] -- ' + filename)
|
print(' --XMLTestFile=[XML Test File to be run] -- ' + filename)
|
||||||
print(' Note: multiple xml files can be specified (--XMLFile=File1 ... --XMLTestFile=FileN) when HTML headers are created ("InitiateHtml" mode)')
|
print(' Note: multiple xml files can be specified (--XMLFile=File1 ... --XMLTestFile=FileN) when HTML headers are created ("InitiateHtml" mode)')
|
||||||
|
|||||||
+25
-94
@@ -45,7 +45,6 @@ import cls_physim1 #class PhySim for physical simulators deploy and run
|
|||||||
import cls_cluster # class for building/deploying on cluster
|
import cls_cluster # class for building/deploying on cluster
|
||||||
import cls_native # class for all native/source-based operations
|
import cls_native # class for all native/source-based operations
|
||||||
|
|
||||||
import epc
|
|
||||||
import ran
|
import ran
|
||||||
import cls_oai_html
|
import cls_oai_html
|
||||||
|
|
||||||
@@ -94,7 +93,6 @@ def AssignParams(params_dict):
|
|||||||
setattr(HTML, key, value)
|
setattr(HTML, key, value)
|
||||||
|
|
||||||
def ExecuteActionWithParam(action):
|
def ExecuteActionWithParam(action):
|
||||||
global EPC
|
|
||||||
global RAN
|
global RAN
|
||||||
global HTML
|
global HTML
|
||||||
global CONTAINERS
|
global CONTAINERS
|
||||||
@@ -180,7 +178,7 @@ def ExecuteActionWithParam(action):
|
|||||||
|
|
||||||
cmd_prefix = test.findtext('cmd_prefix')
|
cmd_prefix = test.findtext('cmd_prefix')
|
||||||
if cmd_prefix is not None: RAN.cmd_prefix = cmd_prefix
|
if cmd_prefix is not None: RAN.cmd_prefix = cmd_prefix
|
||||||
success = RAN.InitializeeNB(HTML, EPC)
|
success = RAN.InitializeeNB(HTML)
|
||||||
|
|
||||||
elif action == 'Terminate_eNB':
|
elif action == 'Terminate_eNB':
|
||||||
eNB_instance=test.findtext('eNB_instance')
|
eNB_instance=test.findtext('eNB_instance')
|
||||||
@@ -208,7 +206,7 @@ def ExecuteActionWithParam(action):
|
|||||||
RAN.air_interface[RAN.eNB_instance] = 'lte-softmodem'
|
RAN.air_interface[RAN.eNB_instance] = 'lte-softmodem'
|
||||||
else:
|
else:
|
||||||
RAN.air_interface[RAN.eNB_instance] = air_interface.lower() +'-softmodem'
|
RAN.air_interface[RAN.eNB_instance] = air_interface.lower() +'-softmodem'
|
||||||
success = RAN.TerminateeNB(HTML, EPC)
|
success = RAN.TerminateeNB(HTML)
|
||||||
|
|
||||||
elif action == 'Initialize_UE' or action == 'Attach_UE' or action == 'Detach_UE' or action == 'Terminate_UE' or action == 'CheckStatusUE' or action == 'DataEnable_UE' or action == 'DataDisable_UE':
|
elif action == 'Initialize_UE' or action == 'Attach_UE' or action == 'Detach_UE' or action == 'Terminate_UE' or action == 'CheckStatusUE' or action == 'DataEnable_UE' or action == 'DataDisable_UE':
|
||||||
CiTestObj.ue_ids = test.findtext('id').split(' ')
|
CiTestObj.ue_ids = test.findtext('id').split(' ')
|
||||||
@@ -242,6 +240,9 @@ def ExecuteActionWithParam(action):
|
|||||||
CiTestObj.ping_args = test.findtext('ping_args')
|
CiTestObj.ping_args = test.findtext('ping_args')
|
||||||
CiTestObj.ping_packetloss_threshold = test.findtext('ping_packetloss_threshold')
|
CiTestObj.ping_packetloss_threshold = test.findtext('ping_packetloss_threshold')
|
||||||
CiTestObj.ue_ids = test.findtext('id').split(' ')
|
CiTestObj.ue_ids = test.findtext('id').split(' ')
|
||||||
|
CiTestObj.svr_id = test.findtext('svr_id') or None
|
||||||
|
if test.findtext('svr_node'):
|
||||||
|
CiTestObj.svr_node = test.findtext('svr_node') if not force_local else 'localhost'
|
||||||
if force_local:
|
if force_local:
|
||||||
# Change all execution targets to localhost
|
# Change all execution targets to localhost
|
||||||
CiTestObj.nodes = ['localhost'] * len(CiTestObj.ue_ids)
|
CiTestObj.nodes = ['localhost'] * len(CiTestObj.ue_ids)
|
||||||
@@ -254,7 +255,7 @@ def ExecuteActionWithParam(action):
|
|||||||
else:
|
else:
|
||||||
CiTestObj.nodes = [None] * len(CiTestObj.ue_ids)
|
CiTestObj.nodes = [None] * len(CiTestObj.ue_ids)
|
||||||
ping_rttavg_threshold = test.findtext('ping_rttavg_threshold') or ''
|
ping_rttavg_threshold = test.findtext('ping_rttavg_threshold') or ''
|
||||||
success = CiTestObj.Ping(HTML,EPC,CONTAINERS)
|
success = CiTestObj.Ping(HTML, CONTAINERS)
|
||||||
|
|
||||||
elif action == 'Iperf' or action == 'Iperf2_Unidir':
|
elif action == 'Iperf' or action == 'Iperf2_Unidir':
|
||||||
CiTestObj.iperf_args = test.findtext('iperf_args')
|
CiTestObj.iperf_args = test.findtext('iperf_args')
|
||||||
@@ -285,9 +286,9 @@ def ExecuteActionWithParam(action):
|
|||||||
logging.error('test-case has wrong option ' + CiTestObj.iperf_options)
|
logging.error('test-case has wrong option ' + CiTestObj.iperf_options)
|
||||||
CiTestObj.iperf_options = 'check'
|
CiTestObj.iperf_options = 'check'
|
||||||
if action == 'Iperf':
|
if action == 'Iperf':
|
||||||
success = CiTestObj.Iperf(HTML, EPC, CONTAINERS)
|
success = CiTestObj.Iperf(HTML, CONTAINERS)
|
||||||
elif action == 'Iperf2_Unidir':
|
elif action == 'Iperf2_Unidir':
|
||||||
success = CiTestObj.Iperf2_Unidir(HTML, EPC, CONTAINERS)
|
success = CiTestObj.Iperf2_Unidir(HTML, CONTAINERS)
|
||||||
|
|
||||||
elif action == 'IdleSleep':
|
elif action == 'IdleSleep':
|
||||||
st = test.findtext('idle_sleep_time_in_sec') or "5"
|
st = test.findtext('idle_sleep_time_in_sec') or "5"
|
||||||
@@ -296,47 +297,10 @@ def ExecuteActionWithParam(action):
|
|||||||
elif action == 'Deploy_Run_PhySim':
|
elif action == 'Deploy_Run_PhySim':
|
||||||
success = PHYSIM.Deploy_PhySim(HTML)
|
success = PHYSIM.Deploy_PhySim(HTML)
|
||||||
|
|
||||||
elif action == 'Initialize_MME':
|
elif action == 'DeployCoreNetwork' or action == 'UndeployCoreNetwork':
|
||||||
string_field = test.findtext('option')
|
cn_id = test.findtext('cn_id')
|
||||||
if (string_field is not None):
|
core_op = getattr(cls_oaicitest.OaiCiTest, action)
|
||||||
EPC.mmeConfFile = string_field
|
success = core_op(cn_id, HTML)
|
||||||
success = EPC.InitializeMME(HTML)
|
|
||||||
|
|
||||||
elif action == 'Initialize_HSS' or action == 'Initialize_SPGW':
|
|
||||||
if action == 'Initialize_HSS':
|
|
||||||
success = EPC.InitializeHSS(HTML)
|
|
||||||
elif action == 'Initialize_SPGW':
|
|
||||||
success = EPC.InitializeSPGW(HTML)
|
|
||||||
elif action == 'Terminate_HSS' or action == 'Terminate_MME' or action == 'Terminate_SPGW':
|
|
||||||
if action == 'Terminate_HSS':
|
|
||||||
success = EPC.TerminateHSS(HTML)
|
|
||||||
elif action == 'Terminate_MME':
|
|
||||||
success = EPC.TerminateMME(HTML)
|
|
||||||
elif action == 'Terminate_SPGW':
|
|
||||||
success = EPC.TerminateSPGW(HTML)
|
|
||||||
|
|
||||||
elif action == 'Deploy_EPC':
|
|
||||||
string_field = test.findtext('parameters')
|
|
||||||
if (string_field is not None):
|
|
||||||
EPC.yamlPath = string_field
|
|
||||||
success = EPC.DeployEpc(HTML)
|
|
||||||
|
|
||||||
elif action == 'Undeploy_EPC':
|
|
||||||
success = EPC.UndeployEpc(HTML)
|
|
||||||
|
|
||||||
elif action == 'Initialize_5GCN':
|
|
||||||
string_field = test.findtext('args')
|
|
||||||
if (string_field is not None):
|
|
||||||
EPC.cfgDeploy = string_field
|
|
||||||
EPC.cnID = test.findtext('cn_id')
|
|
||||||
success = EPC.Initialize5GCN(HTML)
|
|
||||||
|
|
||||||
elif action == 'Terminate_5GCN':
|
|
||||||
string_field = test.findtext('args')
|
|
||||||
if (string_field is not None):
|
|
||||||
EPC.cfgUnDeploy = string_field
|
|
||||||
EPC.cnID = test.findtext('cn_id')
|
|
||||||
success = EPC.Terminate5GCN(HTML)
|
|
||||||
|
|
||||||
elif action == 'Deploy_Object' or action == 'Undeploy_Object' or action == "Create_Workspace":
|
elif action == 'Deploy_Object' or action == 'Undeploy_Object' or action == "Create_Workspace":
|
||||||
eNB_instance=test.findtext('eNB_instance')
|
eNB_instance=test.findtext('eNB_instance')
|
||||||
@@ -474,7 +438,6 @@ mode = ''
|
|||||||
|
|
||||||
CiTestObj = cls_oaicitest.OaiCiTest()
|
CiTestObj = cls_oaicitest.OaiCiTest()
|
||||||
|
|
||||||
EPC = epc.EPCManagement()
|
|
||||||
RAN = ran.RANManagement()
|
RAN = ran.RANManagement()
|
||||||
HTML = cls_oai_html.HTMLManagement()
|
HTML = cls_oai_html.HTMLManagement()
|
||||||
CONTAINERS = cls_containerize.Containerize()
|
CONTAINERS = cls_containerize.Containerize()
|
||||||
@@ -489,7 +452,7 @@ CLUSTER = cls_cluster.Cluster()
|
|||||||
import args_parse
|
import args_parse
|
||||||
# Force local execution, move all execution targets to localhost
|
# Force local execution, move all execution targets to localhost
|
||||||
force_local = False
|
force_local = False
|
||||||
py_param_file_present, py_params, mode, force_local = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER)
|
py_param_file_present, py_params, mode, force_local = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -514,22 +477,13 @@ if re.match('^TerminateeNB$', mode, re.IGNORECASE):
|
|||||||
RAN.eNB_instance=0
|
RAN.eNB_instance=0
|
||||||
RAN.eNB_serverId[0]='0'
|
RAN.eNB_serverId[0]='0'
|
||||||
RAN.eNBSourceCodePath='/tmp/'
|
RAN.eNBSourceCodePath='/tmp/'
|
||||||
RAN.TerminateeNB(HTML, EPC)
|
RAN.TerminateeNB(HTML)
|
||||||
elif re.match('^TerminateHSS$', mode, re.IGNORECASE):
|
elif re.match('^TerminateHSS$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
|
logging.warning("Option TerminateHSS ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
EPC.TerminateHSS(HTML)
|
|
||||||
elif re.match('^TerminateMME$', mode, re.IGNORECASE):
|
elif re.match('^TerminateMME$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
|
logging.warning("Option TerminateMME ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
EPC.TerminateMME(HTML)
|
|
||||||
elif re.match('^TerminateSPGW$', mode, re.IGNORECASE):
|
elif re.match('^TerminateSPGW$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath== '':
|
logging.warning("Option TerminateSPGW ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
EPC.TerminateSPGW(HTML)
|
|
||||||
elif re.match('^LogCollectBuild$', mode, re.IGNORECASE):
|
elif re.match('^LogCollectBuild$', mode, re.IGNORECASE):
|
||||||
if (RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '') and (CiTestObj.UEIPAddress == '' or CiTestObj.UEUserName == '' or CiTestObj.UEPassword == '' or CiTestObj.UESourceCodePath == ''):
|
if (RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '') and (CiTestObj.UEIPAddress == '' or CiTestObj.UEUserName == '' or CiTestObj.UEPassword == '' or CiTestObj.UESourceCodePath == ''):
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
@@ -552,35 +506,17 @@ elif re.match('^LogCollecteNB$', mode, re.IGNORECASE):
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
RAN.LogCollecteNB()
|
RAN.LogCollecteNB()
|
||||||
elif re.match('^LogCollectHSS$', mode, re.IGNORECASE):
|
elif re.match('^LogCollectHSS$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
|
logging.warning("Option LogCollectHSS ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
EPC.LogCollectHSS()
|
|
||||||
elif re.match('^LogCollectMME$', mode, re.IGNORECASE):
|
elif re.match('^LogCollectMME$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
|
logging.warning("Option LogCollectMME ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
EPC.LogCollectMME()
|
|
||||||
elif re.match('^LogCollectSPGW$', mode, re.IGNORECASE):
|
elif re.match('^LogCollectSPGW$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
|
logging.warning("Option LogCollectSPGW ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
EPC.LogCollectSPGW()
|
|
||||||
elif re.match('^LogCollectPing$', mode, re.IGNORECASE):
|
elif re.match('^LogCollectPing$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.SourceCodePath == '':
|
logging.warning("Option LogCollectPing ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
CiTestObj.LogCollectPing(EPC)
|
|
||||||
elif re.match('^LogCollectIperf$', mode, re.IGNORECASE):
|
elif re.match('^LogCollectIperf$', mode, re.IGNORECASE):
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.SourceCodePath == '':
|
logging.warning("Option LogCollectIperf ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
CiTestObj.LogCollectIperf(EPC)
|
|
||||||
elif re.match('^LogCollectOAIUE$', mode, re.IGNORECASE):
|
elif re.match('^LogCollectOAIUE$', mode, re.IGNORECASE):
|
||||||
if CiTestObj.UEIPAddress == '' or CiTestObj.UEUserName == '' or CiTestObj.UEPassword == '' or CiTestObj.UESourceCodePath == '':
|
logging.warning("Option LogCollectOAIUE ignored")
|
||||||
HELP.GenericHelp(CONST.Version)
|
|
||||||
sys.exit('Insufficient Parameter')
|
|
||||||
CiTestObj.LogCollectOAIUE()
|
|
||||||
elif re.match('^InitiateHtml$', mode, re.IGNORECASE):
|
elif re.match('^InitiateHtml$', mode, re.IGNORECASE):
|
||||||
count = 0
|
count = 0
|
||||||
foundCount = 0
|
foundCount = 0
|
||||||
@@ -613,10 +549,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
logging.info('\u001B[1m Starting Scenario: ' + CiTestObj.testXMLfiles[0] + '\u001B[0m')
|
logging.info('\u001B[1m Starting Scenario: ' + CiTestObj.testXMLfiles[0] + '\u001B[0m')
|
||||||
logging.info('\u001B[1m----------------------------------------\u001B[0m')
|
logging.info('\u001B[1m----------------------------------------\u001B[0m')
|
||||||
if re.match('^TesteNB$', mode, re.IGNORECASE):
|
if re.match('^TesteNB$', mode, re.IGNORECASE):
|
||||||
if RAN.eNBIPAddress == '' or RAN.ranRepository == '' or RAN.ranBranch == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '' or EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.Type == '' or EPC.SourceCodePath == '':
|
if RAN.eNBIPAddress == '' or RAN.ranRepository == '' or RAN.ranBranch == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '':
|
||||||
HELP.GenericHelp(CONST.Version)
|
HELP.GenericHelp(CONST.Version)
|
||||||
if EPC.IPAddress == '' or EPC.UserName == '' or EPC.Password == '' or EPC.SourceCodePath == '' or EPC.Type == '':
|
|
||||||
HELP.EPCSrvHelp(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath, EPC.Type)
|
|
||||||
if RAN.ranRepository == '':
|
if RAN.ranRepository == '':
|
||||||
HELP.GitSrvHelp(RAN.ranRepository, RAN.ranBranch, RAN.ranCommitID, RAN.ranAllowMerge, RAN.ranTargetBranch)
|
HELP.GitSrvHelp(RAN.ranRepository, RAN.ranBranch, RAN.ranCommitID, RAN.ranAllowMerge, RAN.ranTargetBranch)
|
||||||
if RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '':
|
if RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '':
|
||||||
@@ -667,9 +601,6 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
else:
|
else:
|
||||||
logging.error('requested test is invalidly formatted: ' + test)
|
logging.error('requested test is invalidly formatted: ' + test)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if (EPC.IPAddress != '') and (EPC.IPAddress != 'none'):
|
|
||||||
EPC.SetMmeIPAddress()
|
|
||||||
EPC.SetAmfIPAddress()
|
|
||||||
|
|
||||||
#get the list of tests to be done
|
#get the list of tests to be done
|
||||||
todo_tests=[]
|
todo_tests=[]
|
||||||
@@ -694,12 +625,12 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
|
|||||||
continue
|
continue
|
||||||
CiTestObj.testCase_id = id
|
CiTestObj.testCase_id = id
|
||||||
HTML.testCase_id=CiTestObj.testCase_id
|
HTML.testCase_id=CiTestObj.testCase_id
|
||||||
EPC.testCase_id=CiTestObj.testCase_id
|
|
||||||
CiTestObj.desc = test.findtext('desc')
|
CiTestObj.desc = test.findtext('desc')
|
||||||
always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes']
|
always_exec = test.findtext('always_exec') in ['True', 'true', 'Yes', 'yes']
|
||||||
HTML.desc=CiTestObj.desc
|
HTML.desc=CiTestObj.desc
|
||||||
action = test.findtext('class')
|
action = test.findtext('class')
|
||||||
if (CheckClassValidity(xml_class_list, action, id) == False):
|
if (CheckClassValidity(xml_class_list, action, id) == False):
|
||||||
|
task_set_succeeded = False
|
||||||
continue
|
continue
|
||||||
CiTestObj.ShowTestID()
|
CiTestObj.ShowTestID()
|
||||||
if not task_set_succeeded and not always_exec:
|
if not task_set_succeeded and not always_exec:
|
||||||
|
|||||||
+2
-47
@@ -102,7 +102,7 @@ class RANManagement():
|
|||||||
# RAN management functions
|
# RAN management functions
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
|
|
||||||
def InitializeeNB(self, HTML, EPC):
|
def InitializeeNB(self, HTML):
|
||||||
if self.eNB_serverId[self.eNB_instance] == '0':
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
lIpAddr = self.eNBIPAddress
|
lIpAddr = self.eNBIPAddress
|
||||||
lUserName = self.eNBUserName
|
lUserName = self.eNBUserName
|
||||||
@@ -127,20 +127,6 @@ class RANManagement():
|
|||||||
mySSH = SSH.SSHConnection()
|
mySSH = SSH.SSHConnection()
|
||||||
cwd = os.getcwd()
|
cwd = os.getcwd()
|
||||||
|
|
||||||
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
|
|
||||||
if EPC.IPAddress != "none":
|
|
||||||
localEpcIpAddr = EPC.IPAddress
|
|
||||||
localEpcUserName = EPC.UserName
|
|
||||||
localEpcPassword = EPC.Password
|
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
|
||||||
eth_interface = 'any'
|
|
||||||
fltr = 'sctp'
|
|
||||||
logging.debug('\u001B[1m Launching tshark on EPC on interface ' + eth_interface + ' with filter "' + fltr + '"\u001B[0m')
|
|
||||||
self.epcPcapFile = 'enb_' + self.testCase_id + '_s1log.pcap'
|
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S rm -f /tmp/' + self.epcPcapFile , '\$', 5)
|
|
||||||
mySSH.command('echo $USER; nohup sudo tshark -f "host ' + lIpAddr +'" -i ' + eth_interface + ' -f "' + fltr + '" -w /tmp/' + self.epcPcapFile + ' > /tmp/tshark.log 2>&1 &', localEpcUserName, 5)
|
|
||||||
mySSH.close()
|
|
||||||
|
|
||||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||||
mySSH.command('cd ' + lSourcePath, '\$', 5)
|
mySSH.command('cd ' + lSourcePath, '\$', 5)
|
||||||
# Initialize_eNB_args usually start with -O and followed by the location in repository
|
# Initialize_eNB_args usually start with -O and followed by the location in repository
|
||||||
@@ -166,10 +152,7 @@ class RANManagement():
|
|||||||
result = re.search('^rru|^rcc|^du.band', str(config_file))
|
result = re.search('^rru|^rcc|^du.band', str(config_file))
|
||||||
if result is not None:
|
if result is not None:
|
||||||
rruCheck = True
|
rruCheck = True
|
||||||
# Make a copy and adapt to EPC / eNB IP addresses
|
|
||||||
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
|
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
|
||||||
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_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_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);
|
mySSH.command('sed -i -e \'s/CI_RCC_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2);
|
||||||
@@ -225,20 +208,6 @@ class RANManagement():
|
|||||||
doLoop = False
|
doLoop = False
|
||||||
logging.error('\u001B[1;37;41m eNB/gNB logging system did not show got sync! \u001B[0m')
|
logging.error('\u001B[1;37;41m eNB/gNB logging system did not show got sync! \u001B[0m')
|
||||||
HTML.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
|
|
||||||
localEpcIpAddr = EPC.IPAddress
|
|
||||||
localEpcUserName = EPC.UserName
|
|
||||||
localEpcPassword = EPC.Password
|
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
|
||||||
logging.debug('\u001B[1m Stopping tshark on EPC \u001B[0m')
|
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
|
||||||
if self.epcPcapFile != '':
|
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
|
|
||||||
mySSH.close()
|
|
||||||
if self.epcPcapFile != '':
|
|
||||||
copyin_res = mySSH.copyin(localEpcIpAddr, localEpcUserName, localEpcPassword, '/tmp/' + self.epcPcapFile, '.')
|
|
||||||
if (copyin_res == 0):
|
|
||||||
mySSH.copyout(lIpAddr, lUserName, lPassWord, self.epcPcapFile, lSourcePath + '/cmake_targets/.')
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
mySSH.command('stdbuf -o0 cat enb_' + self.testCase_id + '.log | grep -E --text --color=never -i "wait|sync|Starting|Started"', '\$', 4)
|
mySSH.command('stdbuf -o0 cat enb_' + self.testCase_id + '.log | grep -E --text --color=never -i "wait|sync|Starting|Started"', '\$', 4)
|
||||||
@@ -316,7 +285,7 @@ class RANManagement():
|
|||||||
mySSH.close()
|
mySSH.close()
|
||||||
return success
|
return success
|
||||||
|
|
||||||
def TerminateeNB(self, HTML, EPC):
|
def TerminateeNB(self, HTML):
|
||||||
if self.eNB_serverId[self.eNB_instance] == '0':
|
if self.eNB_serverId[self.eNB_instance] == '0':
|
||||||
lIpAddr = self.eNBIPAddress
|
lIpAddr = self.eNBIPAddress
|
||||||
lUserName = self.eNBUserName
|
lUserName = self.eNBUserName
|
||||||
@@ -359,20 +328,6 @@ class RANManagement():
|
|||||||
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
mySSH.close()
|
mySSH.close()
|
||||||
if EPC.IPAddress != "none" and EPC.IPAddress != '':
|
|
||||||
localEpcIpAddr = EPC.IPAddress
|
|
||||||
localEpcUserName = EPC.UserName
|
|
||||||
localEpcPassword = EPC.Password
|
|
||||||
logging.debug('\u001B[1m Stopping tshark on EPC (' + localEpcIpAddr + ') \u001B[0m')
|
|
||||||
mySSH.open(localEpcIpAddr, localEpcUserName, localEpcPassword)
|
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5)
|
|
||||||
time.sleep(1)
|
|
||||||
if self.epcPcapFile != '':
|
|
||||||
mySSH.command('echo ' + localEpcPassword + ' | sudo -S chmod 666 /tmp/' + self.epcPcapFile, '\$', 5)
|
|
||||||
mySSH.copyin(localEpcIpAddr, localEpcUserName, localEpcPassword, '/tmp/' + self.epcPcapFile, '.')
|
|
||||||
mySSH.copyout(lIpAddr, lUserName, lPassWord, self.epcPcapFile, lSourcePath + '/cmake_targets/.')
|
|
||||||
mySSH.command('killall --signal SIGKILL record', '\$', 5)
|
|
||||||
mySSH.close()
|
|
||||||
# if T tracer was run with option 0 (no logs), analyze logs
|
# if T tracer was run with option 0 (no logs), analyze logs
|
||||||
# from textlog, otherwise do normal analysis (e.g., option 2)
|
# from textlog, otherwise do normal analysis (e.g., option 2)
|
||||||
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
|
result = re.search('T_stdout 0', str(self.Initialize_eNB_args))
|
||||||
|
|||||||
@@ -29,7 +29,5 @@ docker tag oai-gnb oai-ci/oai-gnb:develop-${SHORT_COMMIT_SHA}
|
|||||||
python3 main.py --mode=TesteNB --ranRepository=NONE --ranBranch=${CURRENT_BRANCH} \
|
python3 main.py --mode=TesteNB --ranRepository=NONE --ranBranch=${CURRENT_BRANCH} \
|
||||||
--ranCommitID=${COMMIT_SHA} --ranAllowMerge=false \
|
--ranCommitID=${COMMIT_SHA} --ranAllowMerge=false \
|
||||||
--ranTargetBranch=NONE --eNBIPAddress=NONE --eNBUserName=NONE --eNBPassword=NONE \
|
--ranTargetBranch=NONE --eNBIPAddress=NONE --eNBUserName=NONE --eNBPassword=NONE \
|
||||||
--eNBSourceCodePath=NONE --EPCIPAddress=NONE --EPCType=OAI --eNBPassword=NONE \
|
--eNBSourceCodePath=${REPO_PATH} \
|
||||||
--eNBSourceCodePath=${REPO_PATH} --EPCIPAddress=NONE \
|
|
||||||
--EPCUserName=NONE --EPCPassword=NONE --EPCSourceCodePath=NONE \
|
|
||||||
--XMLTestFile=xml_files/${TESTCASE} --local
|
--XMLTestFile=xml_files/${TESTCASE} --local
|
||||||
|
|||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function die() { echo "${@}"; exit 1; }
|
||||||
|
|
||||||
|
[ $# -eq 1 ] || die "usage: $0 <path>"
|
||||||
|
|
||||||
|
DOCKERFILE="${1}"
|
||||||
|
|
||||||
|
function wait_for() {
|
||||||
|
local timeout=${1}
|
||||||
|
local condition=${2}
|
||||||
|
echo "wait up to ${timeout} seconds for condition \"${condition}\""
|
||||||
|
while [ $timeout -gt 0 ]; do
|
||||||
|
eval ${condition} && return
|
||||||
|
sleep 1
|
||||||
|
let timeout=$timeout-1
|
||||||
|
done
|
||||||
|
die "ERROR: timed out waiting for condition \"${condition}\""
|
||||||
|
}
|
||||||
|
|
||||||
|
# start database
|
||||||
|
docker compose -f ${DOCKERFILE} up -d db_init cassandra
|
||||||
|
wait_for 30 "docker logs prod-db-init 2> /dev/null | grep OK"
|
||||||
|
|
||||||
|
# start EPC
|
||||||
|
docker compose -f ${DOCKERFILE} up -d oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen
|
||||||
|
wait_for 20 "docker inspect --format='{{.State.Health.Status}}' prod-cassandra prod-oai-hss prod-magma-mme prod-oai-spgwc prod-oai-spgwu-tiny prod-redis prod-trf-gen | grep healthy | wc -l | grep 7"
|
||||||
|
echo "deployment OK"
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function die() { echo "${@}"; exit 1; }
|
||||||
|
|
||||||
|
[ $# -eq 1 ] || die "usage: $0 <logdir>"
|
||||||
|
|
||||||
|
DIR=${1}
|
||||||
|
|
||||||
|
docker logs prod-oai-hss &> ${DIR}/oai-hss.log
|
||||||
|
docker logs prod-magma-mme &> ${DIR}/magme-mme.log
|
||||||
|
docker logs prod-oai-spgwc &> ${DIR}/oai-spgwc.log
|
||||||
|
docker logs prod-oai-spgwu-tiny &> ${DIR}/oai-spgwu.log
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function die() { echo $@; exit 1; }
|
||||||
|
[ $# -eq 2 ] || die "usage: $0 <path-to-dir> <namespace>"
|
||||||
|
|
||||||
|
OC_DIR=${1}
|
||||||
|
OC_NS=${2}
|
||||||
|
|
||||||
|
cat ${OC_DIR}/oc-password | oc login -u oaicicd --server https://api.oai.cs.eurecom.fr:6443 > /dev/null
|
||||||
|
oc project ${OC_NS} > /dev/null
|
||||||
|
helm install --wait oai5gcn ${OC_DIR}/ci-scripts/charts/oai-5g-basic/.
|
||||||
|
oc logout > /dev/null
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function die() { echo $@; exit 1; }
|
||||||
|
[ $# -eq 3 ] || die "usage: $0 <path-to-dir> <namespace> <dir>"
|
||||||
|
|
||||||
|
OC_DIR=${1}
|
||||||
|
OC_NS=${2}
|
||||||
|
DIR=${3}
|
||||||
|
|
||||||
|
cat ${OC_DIR}/oc-password | oc login -u oaicicd --server https://api.oai.cs.eurecom.fr:6443 > /dev/null
|
||||||
|
oc project ${OC_NS} > /dev/null
|
||||||
|
oc describe pod > ${DIR}/describe-pods-post-test.log
|
||||||
|
oc get pods.metrics.k8s &> ${DIR}/nf-resource-consumption.log
|
||||||
|
for p in nrf amf smf upf ausf udm udr; do
|
||||||
|
oc logs -l app.kubernetes.io/name=oai-${p} -c ${p} --tail=-1 > ${DIR}/oai-${p}.log
|
||||||
|
done
|
||||||
|
oc logs -l app.kubernetes.io/name=mysql --tail=-1 > ${DIR}/mysql.log
|
||||||
|
oc logs -l app.kubernetes.io/name=oai-traffic-server --tail=-1 > ${DIR}/oai-traffic-server.log
|
||||||
|
oc logout > /dev/null
|
||||||
Executable
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function die() { echo $@; exit 1; }
|
||||||
|
[ $# -eq 2 ] || die "usage: $0 <path-to-dir> <namespace>"
|
||||||
|
|
||||||
|
OC_DIR=${1}
|
||||||
|
OC_NS=${2}
|
||||||
|
|
||||||
|
cat ${OC_DIR}/oc-password | oc login -u oaicicd --server https://api.oai.cs.eurecom.fr:6443 > /dev/null
|
||||||
|
oc project ${OC_NS} > /dev/null
|
||||||
|
helm uninstall oai5gcn --wait
|
||||||
|
oc logout > /dev/null
|
||||||
@@ -12,6 +12,7 @@ To run individual unit tests, start them like so:
|
|||||||
|
|
||||||
python tests/build.py -v
|
python tests/build.py -v
|
||||||
python tests/cmd.py -v
|
python tests/cmd.py -v
|
||||||
|
python tests/corenetwork.py -v
|
||||||
python tests/deployment.py -v
|
python tests/deployment.py -v
|
||||||
python tests/iperf-analysis.py -v
|
python tests/iperf-analysis.py -v
|
||||||
python tests/ping-iperf.py -v
|
python tests/ping-iperf.py -v
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
test:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: echo "inet 127.0.0.1 mtu 1500"
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
test:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: echo "inet 127.0.0.1 mtu 1500"
|
||||||
|
Deploy: echo deploy
|
||||||
|
Undeploy: echo undeploy
|
||||||
|
LogCollect: echo logs > %%log_dir%%/logs
|
||||||
|
|
||||||
|
test_list:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: echo "inet 127.0.0.1 mtu 1500"
|
||||||
|
Deploy:
|
||||||
|
- echo deploy
|
||||||
|
- echo multistep deploy!!
|
||||||
|
Undeploy:
|
||||||
|
- "echo undeploy"
|
||||||
|
- "echo terminated"
|
||||||
|
LogCollect:
|
||||||
|
- echo logs > %%log_dir%%/logs
|
||||||
|
RunIperf3Server: false
|
||||||
|
|
||||||
|
test_fail:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: echo "inet 127.0.0.1 mtu 1500"
|
||||||
|
Deploy:
|
||||||
|
- echo deploy
|
||||||
|
- "false"
|
||||||
|
- echo multistep deploy!!
|
||||||
|
Undeploy:
|
||||||
|
- "echo undeploy"
|
||||||
|
- "echo terminated"
|
||||||
|
LogCollect:
|
||||||
|
- echo logs > %%log_dir%%/logs
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: echo "inet 127.0.0.1 mtu 1500"
|
||||||
|
Deploy: ! tests/scripts/deploy-core.sh
|
||||||
|
Undeploy: "echo undeploy"
|
||||||
|
LogCollect: echo logs > %%log_dir%%/logs
|
||||||
|
|
||||||
|
test_script_fail:
|
||||||
|
Host: localhost
|
||||||
|
NetworkScript: echo "inet 127.0.0.1 mtu 1500"
|
||||||
|
Deploy: ! tests/scripts/deploy-core.sh WILLFAIL
|
||||||
|
Undeploy: "echo undeploy"
|
||||||
|
LogCollect: echo logs > %%log_dir%%/logs
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.DEBUG,
|
||||||
|
stream=sys.stdout,
|
||||||
|
format="[%(asctime)s] %(levelname)8s: %(message)s"
|
||||||
|
)
|
||||||
|
import os
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
sys.path.append('./') # to find OAI imports below
|
||||||
|
import cls_corenetwork
|
||||||
|
import cls_cmd
|
||||||
|
|
||||||
|
class TestCoreNetwork(unittest.TestCase):
|
||||||
|
def test_simple_core(self):
|
||||||
|
c = cls_corenetwork.CoreNetwork("test", filename="tests/config/test_core_infra.yaml")
|
||||||
|
success, output = c.deploy()
|
||||||
|
self.assertTrue(success)
|
||||||
|
self.assertEqual(output, "deploy")
|
||||||
|
# should not have it set in config
|
||||||
|
self.assertTrue(c.runIperf3Server())
|
||||||
|
self.assertEqual(c.getIP(), "127.0.0.1")
|
||||||
|
log_files, output = c.undeploy(log_dir="/tmp")
|
||||||
|
self.assertEqual(output, "undeploy")
|
||||||
|
with cls_cmd.LocalCmd() as cmd:
|
||||||
|
# there must be one log file for this (test) core
|
||||||
|
self.assertEqual(len(log_files), 1)
|
||||||
|
# test core writes to %%log_dir%%/logs, which expands to /tmp/logs
|
||||||
|
l = log_files[0]
|
||||||
|
self.assertEqual(l, "/tmp/logs")
|
||||||
|
ret = cmd.run(f"cat {l}")
|
||||||
|
self.assertEqual(ret.returncode, 0) # command must succeed
|
||||||
|
self.assertEqual(ret.stdout, "logs") # output should be "logs"
|
||||||
|
|
||||||
|
def test_core_list(self):
|
||||||
|
c = cls_corenetwork.CoreNetwork("test_list", filename="tests/config/test_core_infra.yaml")
|
||||||
|
success, _ = c.deploy()
|
||||||
|
self.assertTrue(success)
|
||||||
|
self.assertFalse(c.runIperf3Server())
|
||||||
|
c.undeploy(log_dir="/tmp")
|
||||||
|
|
||||||
|
def test_core_fail(self):
|
||||||
|
c = cls_corenetwork.CoreNetwork("test_fail", filename="tests/config/test_core_infra.yaml")
|
||||||
|
success, _ = c.deploy()
|
||||||
|
self.assertFalse(success)
|
||||||
|
# undeployment should still work
|
||||||
|
c.undeploy(log_dir="/tmp")
|
||||||
|
|
||||||
|
def test_core_script(self):
|
||||||
|
c = cls_corenetwork.CoreNetwork("test_script", filename="tests/config/test_core_infra.yaml")
|
||||||
|
success, output = c.deploy()
|
||||||
|
self.assertTrue(success)
|
||||||
|
self.assertEqual(output, "deployment from script")
|
||||||
|
c.undeploy()
|
||||||
|
|
||||||
|
def test_core_script_fail(self):
|
||||||
|
c = cls_corenetwork.CoreNetwork("test_script_fail", filename="tests/config/test_core_infra.yaml")
|
||||||
|
success, output = c.deploy()
|
||||||
|
self.assertFalse(success)
|
||||||
|
self.assertEqual(output, "deployment from script\nfailing")
|
||||||
|
c.undeploy()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
@@ -73,5 +73,17 @@ class TestIperfAnalysis(unittest.TestCase):
|
|||||||
self.assertEqual(msg, "Iperf3 UDP: Log file not present")
|
self.assertEqual(msg, "Iperf3 UDP: Log file not present")
|
||||||
self.assertFalse(success)
|
self.assertFalse(success)
|
||||||
|
|
||||||
|
def test_iperf_analyzeV2UDP(self):
|
||||||
|
filename_ok = "tests/log/iperf_udp_v2_ok.log"
|
||||||
|
msg_filename_ok = "tests/log/iperf_udp_v2_ok.txt"
|
||||||
|
target_bitrate = "2.00"
|
||||||
|
bitrate_thresh = 80
|
||||||
|
packetloss_thresh = 25
|
||||||
|
with open(msg_filename_ok, 'r') as file:
|
||||||
|
expected_msg_ok = file.read().strip()
|
||||||
|
success, msg = cls_oaicitest.Iperf_analyzeV2UDP(filename_ok, bitrate_thresh, packetloss_thresh, target_bitrate)
|
||||||
|
self.assertEqual(msg, expected_msg_ok)
|
||||||
|
self.assertTrue(success)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
------------------------------------------------------------
|
||||||
|
Server listening on UDP port 5001
|
||||||
|
Binding to local address 10.0.2.2
|
||||||
|
Receiving 1470 byte datagrams
|
||||||
|
UDP buffer size: 208 KByte (default)
|
||||||
|
------------------------------------------------------------
|
||||||
|
[ 3] local 10.0.2.2 port 5001 connected with 10.0.2.1 port 45771
|
||||||
|
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
|
||||||
|
[ 3] 0.0- 1.0 sec 258 KBytes 2.12 Mbits/sec 7.930 ms 0/ 180 (0%)
|
||||||
|
[ 3] 1.0- 2.0 sec 257 KBytes 2.11 Mbits/sec 7.839 ms 0/ 179 (0%)
|
||||||
|
[ 3] 2.0- 3.0 sec 256 KBytes 2.09 Mbits/sec 7.154 ms 0/ 178 (0%)
|
||||||
|
[ 3] 3.0- 4.0 sec 257 KBytes 2.11 Mbits/sec 7.834 ms 0/ 179 (0%)
|
||||||
|
[ 3] 4.0- 5.0 sec 258 KBytes 2.12 Mbits/sec 7.943 ms 0/ 180 (0%)
|
||||||
|
[ 3] 5.0- 6.0 sec 256 KBytes 2.09 Mbits/sec 6.986 ms 0/ 178 (0%)
|
||||||
|
[ 3] 6.0- 7.0 sec 250 KBytes 2.05 Mbits/sec 8.111 ms 0/ 174 (0%)
|
||||||
|
[ 3] 7.0- 8.0 sec 257 KBytes 2.11 Mbits/sec 8.026 ms 0/ 179 (0%)
|
||||||
|
[ 3] 8.0- 9.0 sec 258 KBytes 2.12 Mbits/sec 7.993 ms 0/ 180 (0%)
|
||||||
|
[ 3] 9.0-10.0 sec 258 KBytes 2.12 Mbits/sec 7.997 ms 0/ 180 (0%)
|
||||||
|
[ 3] 10.0-11.0 sec 251 KBytes 2.06 Mbits/sec 7.973 ms 0/ 175 (0%)
|
||||||
|
[ 3] 11.0-12.0 sec 258 KBytes 2.12 Mbits/sec 7.871 ms 0/ 180 (0%)
|
||||||
|
[ 3] 12.0-13.0 sec 257 KBytes 2.11 Mbits/sec 8.005 ms 0/ 179 (0%)
|
||||||
|
[ 3] 13.0-14.0 sec 258 KBytes 2.12 Mbits/sec 7.890 ms 0/ 180 (0%)
|
||||||
|
[ 3] 14.0-15.0 sec 250 KBytes 2.05 Mbits/sec 8.119 ms 0/ 174 (0%)
|
||||||
|
[ 3] 15.0-16.0 sec 260 KBytes 2.13 Mbits/sec 7.940 ms 0/ 181 (0%)
|
||||||
|
[ 3] 16.0-17.0 sec 258 KBytes 2.12 Mbits/sec 8.078 ms 0/ 180 (0%)
|
||||||
|
[ 3] 17.0-18.0 sec 251 KBytes 2.06 Mbits/sec 7.839 ms 0/ 175 (0%)
|
||||||
|
[ 3] 18.0-19.0 sec 257 KBytes 2.11 Mbits/sec 8.033 ms 0/ 179 (0%)
|
||||||
|
[ 3] 19.0-20.0 sec 260 KBytes 2.13 Mbits/sec 7.936 ms 0/ 181 (0%)
|
||||||
|
[ 3] 20.0-21.0 sec 250 KBytes 2.05 Mbits/sec 8.032 ms 0/ 174 (0%)
|
||||||
|
[ 3] 21.0-22.0 sec 260 KBytes 2.13 Mbits/sec 8.089 ms 0/ 181 (0%)
|
||||||
|
[ 3] 22.0-23.0 sec 256 KBytes 2.09 Mbits/sec 7.889 ms 0/ 178 (0%)
|
||||||
|
[ 3] 23.0-24.0 sec 258 KBytes 2.12 Mbits/sec 8.115 ms 0/ 180 (0%)
|
||||||
|
[ 3] 24.0-25.0 sec 253 KBytes 2.07 Mbits/sec 7.976 ms 0/ 176 (0%)
|
||||||
|
[ 3] 25.0-26.0 sec 256 KBytes 2.09 Mbits/sec 7.597 ms 0/ 178 (0%)
|
||||||
|
[ 3] 26.0-27.0 sec 258 KBytes 2.12 Mbits/sec 7.924 ms 0/ 180 (0%)
|
||||||
|
[ 3] 27.0-28.0 sec 254 KBytes 2.08 Mbits/sec 7.957 ms 0/ 177 (0%)
|
||||||
|
[ 3] 28.0-29.0 sec 257 KBytes 2.11 Mbits/sec 7.276 ms 0/ 179 (0%)
|
||||||
|
[ 3] 29.0-30.0 sec 253 KBytes 2.07 Mbits/sec 21.383 ms 0/ 176 (0%)
|
||||||
|
[ 3] 0.0-30.2 sec 7.50 MBytes 2.08 Mbits/sec 21.383 ms 0/ 5350 (0%)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
Req Bitrate : 2.00
|
||||||
|
Bitrate : 2.08
|
||||||
|
Bitrate Perf: 104.00 %
|
||||||
|
Jitter : 21.383
|
||||||
|
Packet Loss : 0.0
|
||||||
@@ -14,7 +14,6 @@ sys.path.append('./') # to find OAI imports below
|
|||||||
import cls_oai_html
|
import cls_oai_html
|
||||||
import cls_oaicitest
|
import cls_oaicitest
|
||||||
import cls_containerize
|
import cls_containerize
|
||||||
import epc
|
|
||||||
|
|
||||||
class TestPingIperf(unittest.TestCase):
|
class TestPingIperf(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@@ -24,17 +23,14 @@ class TestPingIperf(unittest.TestCase):
|
|||||||
self.ci.ue_ids = ["test"]
|
self.ci.ue_ids = ["test"]
|
||||||
self.ci.nodes = ["localhost"]
|
self.ci.nodes = ["localhost"]
|
||||||
self.cont = cls_containerize.Containerize()
|
self.cont = cls_containerize.Containerize()
|
||||||
self.epc = epc.EPCManagement()
|
|
||||||
self.epc.IPAddress = "localhost"
|
|
||||||
self.epc.UserName = None
|
|
||||||
self.epc.Password = None
|
|
||||||
self.epc.SourceCodePath = os.getcwd()
|
|
||||||
|
|
||||||
def test_ping(self):
|
def test_ping(self):
|
||||||
self.ci.ping_args = "-c3 127.0.0.1"
|
self.ci.ping_args = "-c3"
|
||||||
self.ci.ping_packetloss_threshold = "0"
|
self.ci.ping_packetloss_threshold = "0"
|
||||||
|
self.ci.svr_id = "test"
|
||||||
|
infra_file = "tests/config/infra_ping_iperf.yaml"
|
||||||
# TODO Should need nothing but options and UE(s) to use
|
# TODO Should need nothing but options and UE(s) to use
|
||||||
success = self.ci.Ping(self.html, self.epc, self.cont)
|
success = self.ci.Ping(self.html, self.cont, infra_file=infra_file)
|
||||||
self.assertTrue(success)
|
self.assertTrue(success)
|
||||||
|
|
||||||
def test_iperf(self):
|
def test_iperf(self):
|
||||||
@@ -47,8 +43,21 @@ class TestPingIperf(unittest.TestCase):
|
|||||||
self.ci.iperf_packetloss_threshold = "0"
|
self.ci.iperf_packetloss_threshold = "0"
|
||||||
self.ci.iperf_bitrate_threshold = "0"
|
self.ci.iperf_bitrate_threshold = "0"
|
||||||
self.ci.iperf_profile = "balanced"
|
self.ci.iperf_profile = "balanced"
|
||||||
|
infra_file = "tests/config/infra_ping_iperf.yaml"
|
||||||
# TODO Should need nothing but options and UE(s) to use
|
# TODO Should need nothing but options and UE(s) to use
|
||||||
success = self.ci.Iperf(self.html, self.epc, self.cont)
|
success = self.ci.Iperf(self.html, self.cont, infra_file=infra_file)
|
||||||
|
self.assertTrue(success)
|
||||||
|
|
||||||
|
def test_iperf2_unidir(self):
|
||||||
|
self.ci.iperf_args = "-u -t 5 -b 1M"
|
||||||
|
self.ci.svr_id = "test"
|
||||||
|
self.ci.svr_node = "localhost"
|
||||||
|
self.ci.iperf_packetloss_threshold = "0"
|
||||||
|
self.ci.iperf_bitrate_threshold = "0"
|
||||||
|
self.ci.iperf_profile = "balanced"
|
||||||
|
infra_file = "tests/config/infra_ping_iperf.yaml"
|
||||||
|
# TODO Should need nothing but options and UE(s) to use
|
||||||
|
success = self.ci.Iperf2_Unidir(self.html, self.cont, infra_file=infra_file)
|
||||||
self.assertTrue(success)
|
self.assertTrue(success)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
function die() {
|
||||||
|
echo $@
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "deployment from script"
|
||||||
|
|
||||||
|
[ $# -gt 0 ] && die "failing"
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -30,11 +30,6 @@ python3 main.py \
|
|||||||
--UEUserName=NONE \
|
--UEUserName=NONE \
|
||||||
--UEPassword=NONE \
|
--UEPassword=NONE \
|
||||||
--UESourceCodePath=NONE \
|
--UESourceCodePath=NONE \
|
||||||
--EPCIPAddress=localhost \
|
|
||||||
--EPCType=OAI \
|
|
||||||
--EPCUserName=NONE \
|
|
||||||
--EPCPassword=NONE \
|
|
||||||
--EPCSourceCodePath=NONE \
|
|
||||||
--XMLTestFile=tests/test-runner/test.xml
|
--XMLTestFile=tests/test-runner/test.xml
|
||||||
|
|
||||||
python3 main.py \
|
python3 main.py \
|
||||||
|
|||||||
@@ -15,16 +15,8 @@
|
|||||||
- Ping
|
- Ping
|
||||||
- Iperf
|
- Iperf
|
||||||
- Iperf2_Unidir
|
- Iperf2_Unidir
|
||||||
- Deploy_EPC
|
- DeployCoreNetwork
|
||||||
- Undeploy_EPC
|
- UndeployCoreNetwork
|
||||||
- Initialize_HSS
|
|
||||||
- Terminate_HSS
|
|
||||||
- Initialize_MME
|
|
||||||
- Terminate_MME
|
|
||||||
- Initialize_SPGW
|
|
||||||
- Terminate_SPGW
|
|
||||||
- Initialize_5GCN
|
|
||||||
- Terminate_5GCN
|
|
||||||
- IdleSleep
|
- IdleSleep
|
||||||
- Build_Image
|
- Build_Image
|
||||||
- Build_Run_Tests
|
- Build_Run_Tests
|
||||||
@@ -32,8 +24,6 @@
|
|||||||
- Undeploy_Object
|
- Undeploy_Object
|
||||||
- Cppcheck_Analysis
|
- Cppcheck_Analysis
|
||||||
- Deploy_Run_PhySim
|
- Deploy_Run_PhySim
|
||||||
- DeployGenObject
|
|
||||||
- UndeployGenObject
|
|
||||||
- LicenceAndFormattingCheck
|
- LicenceAndFormattingCheck
|
||||||
- Push_Local_Registry
|
- Push_Local_Registry
|
||||||
- Pull_Local_Registry
|
- Pull_Local_Registry
|
||||||
|
|||||||
@@ -101,7 +101,9 @@
|
|||||||
<desc>Ping trf-gen from LTE-UE 1</desc>
|
<desc>Ping trf-gen from LTE-UE 1</desc>
|
||||||
<id>l2sim4g_ue</id>
|
<id>l2sim4g_ue</id>
|
||||||
<nodes>obelix</nodes>
|
<nodes>obelix</nodes>
|
||||||
<ping_args> -c 20 192.168.61.11</ping_args>
|
<svr_id>l2sim4g_ext_dn</svr_id>
|
||||||
|
<svr_node>obelix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -110,7 +112,9 @@
|
|||||||
<desc>Ping LTE-UE 1 from trf-gen</desc>
|
<desc>Ping LTE-UE 1 from trf-gen</desc>
|
||||||
<id>l2sim4g_ext_dn</id>
|
<id>l2sim4g_ext_dn</id>
|
||||||
<nodes>obelix</nodes>
|
<nodes>obelix</nodes>
|
||||||
<ping_args>-c 20 12.0.0.2</ping_args>
|
<svr_id>l2sim4g_ue</svr_id>
|
||||||
|
<svr_node>obelix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,9 @@
|
|||||||
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
<id>rfsim4g_ue</id>
|
<id>rfsim4g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 192.168.61.11</ping_args>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -124,8 +126,10 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
||||||
<id>rfsim4g_ext_dn</id>
|
<id>rfsim4g_ext_dn</id>
|
||||||
<ping_args>-c 20 12.0.0.2</ping_args>
|
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
|
<svr_id>rfsim4g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,9 @@
|
|||||||
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
<id>rfsim4g_ue</id>
|
<id>rfsim4g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 10.0.1.1</ping_args>
|
<svr_id>rfsim4g_enb_nos1</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -96,7 +98,9 @@
|
|||||||
<desc>Ping LTE-UE from eNB</desc>
|
<desc>Ping LTE-UE from eNB</desc>
|
||||||
<id>rfsim4g_enb_nos1</id>
|
<id>rfsim4g_enb_nos1</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 10.0.1.2</ping_args>
|
<svr_id>rfsim4g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,9 @@
|
|||||||
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
<id>rfsim4g_ue</id>
|
<id>rfsim4g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 192.168.61.11</ping_args>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -125,7 +127,9 @@
|
|||||||
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
||||||
<id>rfsim4g_ext_dn</id>
|
<id>rfsim4g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 12.0.0.2</ping_args>
|
<svr_id>rfsim4g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -116,7 +116,9 @@
|
|||||||
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
<id>rfsim4g_ue</id>
|
<id>rfsim4g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 192.168.61.11</ping_args>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -125,7 +127,9 @@
|
|||||||
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
||||||
<id>rfsim4g_ext_dn</id>
|
<id>rfsim4g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 12.0.0.2</ping_args>
|
<svr_id>rfsim4g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -109,7 +109,9 @@
|
|||||||
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
<desc>Ping Traffic-Gen from LTE-UE</desc>
|
||||||
<id>rfsim4g_ue</id>
|
<id>rfsim4g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 192.168.61.11</ping_args>
|
<svr_id>rfsim4g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -118,7 +120,9 @@
|
|||||||
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
<desc>Ping LTE-UE from Traffic-Gen</desc>
|
||||||
<id>rfsim4g_ext_dn</id>
|
<id>rfsim4g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 12.0.0.2</ping_args>
|
<svr_id>rfsim4g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,9 @@
|
|||||||
<desc>Ping ext-dn from all NR-UEs</desc>
|
<desc>Ping ext-dn from all NR-UEs</desc>
|
||||||
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3</id>
|
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3</id>
|
||||||
<nodes>cacofonix cacofonix cacofonix</nodes>
|
<nodes>cacofonix cacofonix cacofonix</nodes>
|
||||||
<ping_args> -c 20 12.1.1.1 -i0.25</ping_args>
|
<svr_id>rfsim5g_5gc_fixed_ip</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,9 @@
|
|||||||
<desc>Ping ext-dn from all NR-UEs</desc>
|
<desc>Ping ext-dn from all NR-UEs</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 192.168.72.135 -i0.25</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -163,19 +165,12 @@
|
|||||||
|
|
||||||
<testCase id="020022">
|
<testCase id="020022">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping ext-dn from all NR-UEs</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 192.168.72.135 -i0.5 -w25</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<ping_packetloss_threshold>80</ping_packetloss_threshold>
|
<svr_node>cacofonix</svr_node>
|
||||||
</testCase>
|
<ping_args>-c 20 -i0.5 -w25</ping_args>
|
||||||
|
|
||||||
<testCase id="020023">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping ext-dn from all NR-UEs</desc>
|
|
||||||
<id>rfsim5g_ue</id>
|
|
||||||
<nodes>cacofonix</nodes>
|
|
||||||
<ping_args> -c 5 192.168.72.135 -i0.5 -w25</ping_args>
|
|
||||||
<ping_packetloss_threshold>80</ping_packetloss_threshold>
|
<ping_packetloss_threshold>80</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,9 @@
|
|||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -90,7 +92,9 @@
|
|||||||
<desc>Ping NR-UE from ext-dn</desc>
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 12.1.1.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,9 @@
|
|||||||
<desc>Ping ext-dn from both UEs</desc>
|
<desc>Ping ext-dn from both UEs</desc>
|
||||||
<id>rfsim5g_ue rfsim5g_ue2</id>
|
<id>rfsim5g_ue rfsim5g_ue2</id>
|
||||||
<nodes>carabe carabe</nodes>
|
<nodes>carabe carabe</nodes>
|
||||||
<ping_args>-c 20 192.168.70.135</ping_args>
|
<svr_id>oai_ext_dn</svr_id>
|
||||||
|
<svr_node>carabe</svr_node>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
020005
|
020005
|
||||||
444444
|
444444
|
||||||
333333
|
333333
|
||||||
020006
|
020005
|
||||||
100001
|
100001
|
||||||
222222
|
222222
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
@@ -141,7 +141,9 @@
|
|||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 -i 0.25 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -150,16 +152,20 @@
|
|||||||
<desc>Ping NR-UE from ext-dn</desc>
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 12.1.1.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="020003">
|
<testCase id="020003">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping ext-dn from Second NR-UE</desc>
|
<desc>Ping ext-dn from Second NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue2</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 -i 0.25 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -168,7 +174,9 @@
|
|||||||
<desc>Ping Second NR-UE from ext-dn</desc>
|
<desc>Ping Second NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 12.1.1.3</ping_args>
|
<svr_id>rfsim5g_ue2</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -177,16 +185,9 @@
|
|||||||
<desc>Ping ext-dn from both UEs</desc>
|
<desc>Ping ext-dn from both UEs</desc>
|
||||||
<id>rfsim5g_ue rfsim5g_ue2</id>
|
<id>rfsim5g_ue rfsim5g_ue2</id>
|
||||||
<nodes>cacofonix cacofonix</nodes>
|
<nodes>cacofonix cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<svr_node>cacofonix</svr_node>
|
||||||
</testCase>
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
|
|
||||||
<testCase id="020006">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping ext-dn from both UEs</desc>
|
|
||||||
<id>rfsim5g_ue rfsim5g_ue2</id>
|
|
||||||
<nodes>cacofonix cacofonix</nodes>
|
|
||||||
<ping_args>-c 20 -i 0.25 192.168.72.135</ping_args>
|
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -195,7 +196,9 @@
|
|||||||
<desc>Ping ext-dn from all UEs</desc>
|
<desc>Ping ext-dn from all UEs</desc>
|
||||||
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10</id>
|
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3 rfsim5g_ue4 rfsim5g_ue5 rfsim5g_ue6 rfsim5g_ue7 rfsim5g_ue8 rfsim5g_ue9 rfsim5g_ue10</id>
|
||||||
<nodes>cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix</nodes>
|
<nodes>cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix cacofonix</nodes>
|
||||||
<ping_args>-c 20 192.168.72.135 -i 0.25 -s 1016</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25 -s 1016</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,9 @@
|
|||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args> -c 20 -i0.2 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args> -c 20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -99,7 +101,9 @@
|
|||||||
<desc>Ping NR-UE from ext-dn</desc>
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 12.1.1.2 -i0.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,9 @@
|
|||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -90,7 +92,9 @@
|
|||||||
<desc>Ping NR-UE from ext-dn</desc>
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 12.1.1.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,9 @@
|
|||||||
<desc>Ping gNB from NR-UE</desc>
|
<desc>Ping gNB from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c20 -i0.2 10.0.1.1</ping_args>
|
<svr_id>rfsim5g_gnb_nos1</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -90,7 +92,9 @@
|
|||||||
<desc>Ping NR-UE from gNB</desc>
|
<desc>Ping NR-UE from gNB</desc>
|
||||||
<id>rfsim5g_gnb_nos1</id>
|
<id>rfsim5g_gnb_nos1</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c20 -i0.2 10.0.1.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,9 @@
|
|||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i0.2 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -82,7 +84,9 @@
|
|||||||
<desc>Ping NR-UE from ext-dn</desc>
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 12.1.1.2 -i0.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,9 @@
|
|||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -90,7 +92,9 @@
|
|||||||
<desc>Ping NR-UE from ext-dn</desc>
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 12.1.1.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,9 @@
|
|||||||
<desc>Ping gNB from NR-UE</desc>
|
<desc>Ping gNB from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c20 -i0.2 10.0.1.1</ping_args>
|
<svr_id>rfsim5g_gnb_nos1</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -89,7 +91,9 @@
|
|||||||
<desc>Ping NR-UE from gNB</desc>
|
<desc>Ping NR-UE from gNB</desc>
|
||||||
<id>rfsim5g_gnb_nos1</id>
|
<id>rfsim5g_gnb_nos1</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c20 -i0.2 10.0.1.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c20 -i0.2</ping_args>
|
||||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,9 @@
|
|||||||
<desc>Ping ext-dn from NR-UE</desc>
|
<desc>Ping ext-dn from NR-UE</desc>
|
||||||
<id>rfsim5g_ue</id>
|
<id>rfsim5g_ue</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 192.168.72.135</ping_args>
|
<svr_id>rfsim5g_ext_dn</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -90,7 +92,9 @@
|
|||||||
<desc>Ping NR-UE from ext-dn</desc>
|
<desc>Ping NR-UE from ext-dn</desc>
|
||||||
<id>rfsim5g_ext_dn</id>
|
<id>rfsim5g_ext_dn</id>
|
||||||
<nodes>cacofonix</nodes>
|
<nodes>cacofonix</nodes>
|
||||||
<ping_args>-c 20 -i 0.25 12.1.1.2</ping_args>
|
<svr_id>rfsim5g_ue</svr_id>
|
||||||
|
<svr_node>cacofonix</svr_node>
|
||||||
|
<ping_args>-c 20 -i 0.25</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
|
|||||||
@@ -121,9 +121,10 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
|
|||||||
<testCase id="040501">
|
<testCase id="040501">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (5MHz - 20 sec)</desc>
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040603">
|
<testCase id="040603">
|
||||||
|
|||||||
@@ -129,9 +129,10 @@
|
|||||||
<testCase id="040531">
|
<testCase id="040531">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (5MHz - 20 sec)</desc>
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040633">
|
<testCase id="040633">
|
||||||
|
|||||||
@@ -159,17 +159,19 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
|
|||||||
<testCase id="040502">
|
<testCase id="040502">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (5MHz - 20 sec)</desc>
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040503">
|
<testCase id="040503">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (5MHz - 20 sec)</desc>
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="222222">
|
<testCase id="222222">
|
||||||
|
|||||||
@@ -115,9 +115,10 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<testCase id="040511">
|
<testCase id="040511">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (10MHz - 20 sec)</desc>
|
<desc>ping (10MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040613">
|
<testCase id="040613">
|
||||||
|
|||||||
@@ -108,9 +108,10 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<testCase id="040512">
|
<testCase id="040512">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (10MHz - 20 sec)</desc>
|
<desc>ping (10MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040612">
|
<testCase id="040612">
|
||||||
|
|||||||
@@ -144,9 +144,10 @@
|
|||||||
<testCase id="040511">
|
<testCase id="040511">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (10MHz - 20 sec)</desc>
|
<desc>ping (10MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 192.168.61.200</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>lte_oai_ue_carabe</id>
|
<id>lte_oai_ue_carabe</id>
|
||||||
|
<svr_id>nano-cn4g</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040613">
|
<testCase id="040613">
|
||||||
|
|||||||
@@ -114,9 +114,10 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
|
|||||||
<testCase id="040521">
|
<testCase id="040521">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (20MHz - 20 sec)</desc>
|
<desc>ping (20MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040623">
|
<testCase id="040623">
|
||||||
|
|||||||
@@ -122,9 +122,10 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
|
|||||||
<testCase id="040501">
|
<testCase id="040501">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (5MHz - 20 sec)</desc>
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040601">
|
<testCase id="040601">
|
||||||
|
|||||||
@@ -129,9 +129,10 @@
|
|||||||
<testCase id="040532">
|
<testCase id="040532">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (5MHz - 20 sec)</desc>
|
<desc>ping (5MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040631">
|
<testCase id="040631">
|
||||||
|
|||||||
@@ -1,205 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
|
|
||||||
|
|
||||||
-->
|
|
||||||
<testCaseList>
|
|
||||||
<htmlTabRef>test-tdd-05-tm2</htmlTabRef>
|
|
||||||
<htmlTabName>Test-TDD-05MHz-TM2</htmlTabName>
|
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
|
||||||
<TestCaseRequestedList>
|
|
||||||
100000
|
|
||||||
111110
|
|
||||||
040101
|
|
||||||
800813
|
|
||||||
030105
|
|
||||||
040301 040502 040606 040608 040646 040648 040401 040201
|
|
||||||
030205
|
|
||||||
200000
|
|
||||||
</TestCaseRequestedList>
|
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
|
||||||
|
|
||||||
<testCase id="111110">
|
|
||||||
<class>Pull_Local_Registry</class>
|
|
||||||
<desc>Pull Images from Local Registry</desc>
|
|
||||||
<svr_id>0</svr_id>
|
|
||||||
<images>oai-enb</images>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="100000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Disable Sleep States</desc>
|
|
||||||
<node>starsky</node>
|
|
||||||
<command>sudo cpupower idle-set -D 0</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="200000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Enable Sleep States</desc>
|
|
||||||
<node>starsky</node>
|
|
||||||
<command>sudo cpupower idle-set -E</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="800813">
|
|
||||||
<class>Create_Workspace</class>
|
|
||||||
<desc>Create new Workspace for server 0</desc>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="030105">
|
|
||||||
<class>Deploy_Object</class>
|
|
||||||
<desc>Deploy eNB (TDD/Band40/5MHz/B200) in a container</desc>
|
|
||||||
<yaml_path>ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm2</yaml_path>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000001">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="030205">
|
|
||||||
<class>Undeploy_Object</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Undeploy eNB</desc>
|
|
||||||
<yaml_path>ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm2</yaml_path>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040101">
|
|
||||||
<class>Initialize_UE</class>
|
|
||||||
<desc>Initialize UE</desc>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="040201">
|
|
||||||
<class>Terminate_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate UE</desc>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="040301">
|
|
||||||
<class>Attach_UE</class>
|
|
||||||
<desc>Attach UE</desc>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="040401">
|
|
||||||
<class>Detach_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Detach UE</desc>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040502">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>ping (5MHz - 20 sec)</desc>
|
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040601">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(balanced)</desc>
|
|
||||||
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040606">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(single-ue)</desc>
|
|
||||||
<iperf_args>-u -b 6.5M -t 30 -R</iperf_args>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<id>adb_ue_1</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040603">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - DL/6.5Mbps/UDP)(30 sec)(unbalanced)</desc>
|
|
||||||
<iperf_args>-u -b 6.5M -t 30</iperf_args>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040608">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-t 30 -R</iperf_args>
|
|
||||||
<id>adb_ue_1</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040605">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - DL/TCP)(30 sec)</desc>
|
|
||||||
<iperf_args>-t 30 -R</iperf_args>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040641">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(balanced)</desc>
|
|
||||||
<iperf_args>-u -b 2M -t 30</iperf_args>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>balanced</iperf_profile>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
<svr_id>ltebox-nano</svr_id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040646">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(single-ue)</desc>
|
|
||||||
<iperf_args>-u -b 2M -t 30</iperf_args>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<id>adb_ue_1</id>
|
|
||||||
<svr_id>ltebox-nano</svr_id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040643">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)(unbalanced)</desc>
|
|
||||||
<iperf_args>-u -b 2M -t 30</iperf_args>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
<iperf_profile>unbalanced</iperf_profile>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
<svr_id>ltebox-nano</svr_id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040648">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)(single-ue)</desc>
|
|
||||||
<iperf_args>-t 30</iperf_args>
|
|
||||||
<id>adb_ue_1</id>
|
|
||||||
<svr_id>ltebox-nano</svr_id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040645">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (5MHz - UL/TCP)(30 sec)</desc>
|
|
||||||
<iperf_args>-t 30</iperf_args>
|
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
|
||||||
<svr_id>ltebox-nano</svr_id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
</testCaseList>
|
|
||||||
@@ -113,9 +113,10 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml
|
|||||||
<testCase id="040511">
|
<testCase id="040511">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (10MHz - 20 sec)</desc>
|
<desc>ping (10MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040611">
|
<testCase id="040611">
|
||||||
|
|||||||
@@ -113,9 +113,10 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
|
|||||||
<testCase id="040521">
|
<testCase id="040521">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (20MHz - 20 sec)</desc>
|
<desc>ping (20MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040621">
|
<testCase id="040621">
|
||||||
|
|||||||
@@ -114,9 +114,10 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
|
|||||||
<testCase id="040522">
|
<testCase id="040522">
|
||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>ping (20MHz - 20 sec)</desc>
|
<desc>ping (20MHz - 20 sec)</desc>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
<ping_packetloss_threshold>25</ping_packetloss_threshold>
|
||||||
<id>adb_ue_1 adb_ue_2</id>
|
<id>adb_ue_1 adb_ue_2</id>
|
||||||
|
<svr_id>ltebox-nano</svr_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="040626">
|
<testCase id="040626">
|
||||||
|
|||||||
@@ -95,7 +95,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20 pings</desc>
|
<desc>Ping: 20 pings</desc>
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -104,7 +105,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100 pings, size 1024</desc>
|
<desc>Ping: 100 pings, size 1024</desc>
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
<ping_args>-c 100 -s 1024 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
|
<ping_args>-c 100 -s 1024 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -95,7 +95,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20 pings</desc>
|
<desc>Ping: 20 pings</desc>
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -104,7 +105,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100 pings, size 1024</desc>
|
<desc>Ping: 100 pings, size 1024</desc>
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
<ping_args>-c 100 -s 1024 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>porcepix-cn4g</svr_id>
|
||||||
|
<ping_args>-c 100 -s 1024 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
<ping_rttavg_threshold>60</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -168,7 +168,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>ltebox-nepes</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -177,7 +178,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>ltebox-nepes</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -186,7 +188,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>ltebox-nepes</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -195,7 +198,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>ltebox-nepes</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
<testCase id="555000">
|
<testCase id="555000">
|
||||||
<class>Initialize_5GCN</class>
|
<class>DeployCoreNetwork</class>
|
||||||
<desc>Initialize 5G Core</desc>
|
<desc>Initialize 5G Core</desc>
|
||||||
<cn_id>oc-cn5g-20897-aerial2</cn_id>
|
<cn_id>oc-cn5g-20897-aerial2</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -89,7 +89,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>up2-aerial</id>
|
<id>up2-aerial</id>
|
||||||
<ping_args>-c 100 -i 0.2 172.21.6.104</ping_args>
|
<svr_id>oc-cn5g-20897-aerial2</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
@@ -140,7 +141,7 @@
|
|||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
<testCase id="000555">
|
<testCase id="000555">
|
||||||
<class>Terminate_5GCN</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<always_exec>true</always_exec>
|
<always_exec>true</always_exec>
|
||||||
<desc>Terminate 5G Core</desc>
|
<desc>Terminate 5G Core</desc>
|
||||||
<cn_id>oc-cn5g-20897-aerial2</cn_id>
|
<cn_id>oc-cn5g-20897-aerial2</cn_id>
|
||||||
|
|||||||
@@ -225,7 +225,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 50 pings in 10sec, multi-ue</desc>
|
<desc>Ping: 50 pings in 10sec, multi-ue</desc>
|
||||||
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
||||||
<ping_args>-c 50 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
<ping_args>-c 50 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -240,7 +241,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 50pings in 10sec, multi-ue</desc>
|
<desc>Ping: 50pings in 10sec, multi-ue</desc>
|
||||||
<id>amarisoft_ue_16</id>
|
<id>amarisoft_ue_16</id>
|
||||||
<ping_args>-c 50 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
<ping_args>-c 50 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>30</ping_rttavg_threshold>
|
<ping_rttavg_threshold>30</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -222,7 +222,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec, multi-ue</desc>
|
<desc>Ping: 20pings in 20sec, multi-ue</desc>
|
||||||
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
<id>amarisoft_ue_1 amarisoft_ue_2 amarisoft_ue_3 amarisoft_ue_4 amarisoft_ue_5 amarisoft_ue_6 amarisoft_ue_7 amarisoft_ue_8 amarisoft_ue_9 amarisoft_ue_10 amarisoft_ue_11 amarisoft_ue_12 amarisoft_ue_13 amarisoft_ue_14 amarisoft_ue_15</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -237,7 +238,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 50pings in 10sec, multi-ue</desc>
|
<desc>Ping: 50pings in 10sec, multi-ue</desc>
|
||||||
<id>amarisoft_ue_16</id>
|
<id>amarisoft_ue_16</id>
|
||||||
<ping_args>-c 50 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
<ping_args>-c 50 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>30</ping_rttavg_threshold>
|
<ping_rttavg_threshold>30</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -130,7 +130,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -139,7 +140,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -131,7 +131,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 50pings in 10sec</desc>
|
<desc>Ping: 50pings in 10sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 20 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 20 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -143,7 +143,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -152,7 +153,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>110</ping_rttavg_threshold>
|
<ping_rttavg_threshold>110</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -161,7 +163,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>110</ping_rttavg_threshold>
|
<ping_rttavg_threshold>110</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -170,7 +173,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>110</ping_rttavg_threshold>
|
<ping_rttavg_threshold>110</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -84,7 +84,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100 pings in 10 sec</desc>
|
<desc>Ping: 100 pings in 10 sec</desc>
|
||||||
<id>up2-fhi72</id>
|
<id>up2-fhi72</id>
|
||||||
<ping_args>-c 100 -i 0.1 172.21.6.104</ping_args>
|
<svr_id>oc-cn5g-20897</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.1</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100 pings in 10 sec</desc>
|
<desc>Ping: 100 pings in 10 sec</desc>
|
||||||
<id>up2-fhi72</id>
|
<id>up2-fhi72</id>
|
||||||
<ping_args>-c 100 -i 0.1 172.21.6.104</ping_args>
|
<svr_id>oc-cn5g-20897</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.1</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -108,7 +108,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>matix-cn5g</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -108,7 +108,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>matix-cn5g</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -108,7 +108,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>up2</id>
|
<id>up2</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>matix-cn5g</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -127,7 +127,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<id>oai_ue_caracal</id>
|
<id>oai_ue_caracal</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
<ping_rttavg_threshold>25</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -136,7 +137,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>oai_ue_caracal</id>
|
<id>oai_ue_caracal</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>oc-cn5g</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>30</ping_rttavg_threshold>
|
<ping_rttavg_threshold>30</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -124,7 +124,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
<desc>Ping: 20pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 20</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
@@ -133,7 +134,8 @@
|
|||||||
<class>Ping</class>
|
<class>Ping</class>
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
<desc>Ping: 100pings in 20sec</desc>
|
||||||
<id>idefix</id>
|
<id>idefix</id>
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
<svr_id>sabox-nepes</svr_id>
|
||||||
|
<ping_args>-c 100 -i 0.2</ping_args>
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
@@ -30,8 +30,9 @@
|
|||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="060000">
|
<testCase id="060000">
|
||||||
<class>Terminate_5GCN</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<desc>Terminate 5GC</desc>
|
<desc>Terminate 5GC</desc>
|
||||||
|
<cn_id>sabox-nepes</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -31,8 +31,9 @@
|
|||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000100">
|
<testCase id="000100">
|
||||||
<class>Initialize_5GCN</class>
|
<class>DeployCoreNetwork</class>
|
||||||
<desc>Initialize 5GC</desc>
|
<desc>Initialize 5GC</desc>
|
||||||
|
<cn_id>sabox-nepes</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -26,20 +26,13 @@
|
|||||||
<htmlTabIcon>log-in</htmlTabIcon>
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
000100
|
000100
|
||||||
000200
|
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList>
|
<TestCaseExclusionList>
|
||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000100">
|
<testCase id="000100">
|
||||||
<class>Terminate_5GCN</class>
|
<class>DeployCoreNetwork</class>
|
||||||
<desc>Terminate 5G Core</desc>
|
|
||||||
<args>--type stop-basic</args>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000200">
|
|
||||||
<class>Initialize_5GCN</class>
|
|
||||||
<desc>Initialize 5G Core</desc>
|
<desc>Initialize 5G Core</desc>
|
||||||
<args>--type start-basic</args>
|
<cn_id>matix-cn5g</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -31,9 +31,9 @@
|
|||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000300">
|
<testCase id="000300">
|
||||||
<class>Terminate_5GCN</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<desc>Terminate 5G Core</desc>
|
<desc>Terminate 5G Core</desc>
|
||||||
<args>--type stop-basic</args>
|
<cn_id>matix-cn5g</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|
||||||
|
|||||||
@@ -25,23 +25,14 @@
|
|||||||
<htmlTabName>EPC-Closure</htmlTabName>
|
<htmlTabName>EPC-Closure</htmlTabName>
|
||||||
<htmlTabIcon>log-out</htmlTabIcon>
|
<htmlTabIcon>log-out</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
060000 060001 060002
|
060000
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="060000">
|
<testCase id="060000">
|
||||||
<class>Terminate_HSS</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<desc>Terminate HSS</desc>
|
<desc>Terminate EPC</desc>
|
||||||
</testCase>
|
<cn_id>ltebox-nano</cn_id>
|
||||||
|
|
||||||
<testCase id="060001">
|
|
||||||
<class>Terminate_MME</class>
|
|
||||||
<desc>Terminate MME</desc>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="060002">
|
|
||||||
<class>Terminate_SPGW</class>
|
|
||||||
<desc>Terminate SPGW</desc>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -25,24 +25,15 @@
|
|||||||
<htmlTabName>EPC-Start</htmlTabName>
|
<htmlTabName>EPC-Start</htmlTabName>
|
||||||
<htmlTabIcon>log-in</htmlTabIcon>
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
000100 000101 000102
|
000100
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList>
|
<TestCaseExclusionList>
|
||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000100">
|
<testCase id="000100">
|
||||||
<class>Initialize_HSS</class>
|
<class>DeployCoreNetwork</class>
|
||||||
<desc>Initialize HSS</desc>
|
<desc>Initialize EPC</desc>
|
||||||
</testCase>
|
<cn_id>ltebox-nano</cn_id>
|
||||||
|
|
||||||
<testCase id="000101">
|
|
||||||
<class>Initialize_MME</class>
|
|
||||||
<desc>Initialize MME</desc>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000102">
|
|
||||||
<class>Initialize_SPGW</class>
|
|
||||||
<desc>Initialize SPGW</desc>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -1,204 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
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-NSA-FR1-TM2-Tab1</htmlTabRef>
|
|
||||||
<htmlTabName>NSA 2x2 Ping DL UL with QUECTEL</htmlTabName>
|
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
|
||||||
<TestCaseRequestedList>
|
|
||||||
100000
|
|
||||||
700000
|
|
||||||
010002
|
|
||||||
300000
|
|
||||||
030000
|
|
||||||
040000
|
|
||||||
000002
|
|
||||||
010000 010010
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
050001
|
|
||||||
000002
|
|
||||||
070000
|
|
||||||
070001
|
|
||||||
070002
|
|
||||||
000001
|
|
||||||
010011 010002
|
|
||||||
080001
|
|
||||||
080000
|
|
||||||
200000
|
|
||||||
800000
|
|
||||||
</TestCaseRequestedList>
|
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
|
||||||
|
|
||||||
<testCase id="100000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Disable Sleep States (obelix)</desc>
|
|
||||||
<node>obelix</node>
|
|
||||||
<command>sudo cpupower idle-set -D 0</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="200000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Enable Sleep States (obelix)</desc>
|
|
||||||
<node>obelix</node>
|
|
||||||
<command>sudo cpupower idle-set -E</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="700000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Disable Sleep States (asterix)</desc>
|
|
||||||
<node>asterix</node>
|
|
||||||
<command>sudo cpupower idle-set -D 0</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="800000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Enable Sleep States (asterix)</desc>
|
|
||||||
<node>asterix</node>
|
|
||||||
<command>sudo cpupower idle-set -E</command>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="010000">
|
|
||||||
<class>Initialize_UE</class>
|
|
||||||
<desc>Initialize Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010002">
|
|
||||||
<class>Terminate_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010010">
|
|
||||||
<class>Attach_UE</class>
|
|
||||||
<desc>Attach Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010011">
|
|
||||||
<class>Detach_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Detach Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="030000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize eNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band38.nsa_2x2.100prb.usrpn310.conf --usrp-tx-thread-config 1 --thread-pool 0,2,4,6 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="040000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize gNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.nsa.band78.106prb.usrpn310.2x2.conf --nsa -q --usrp-tx-thread-config 1 --T_stdout 2 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
|
||||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
|
||||||
</testCase>
|
|
||||||
<testCase id = "300000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Reboot USRP</desc>
|
|
||||||
<node>asterix</node>
|
|
||||||
<command>ssh root@172.21.19.14 reboot ; sleep 45</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="000001">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000002">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="050001">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
<ping_args>-c 100 -i 0,2 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070000">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 125M -t 60 -R</iperf_args>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
<iperf_packetloss_threshold>15</iperf_packetloss_threshold>
|
|
||||||
<iperf_bitrate_threshold>85</iperf_bitrate_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070001">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (UL/1Mbps/UDP)(20 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
<iperf_packetloss_threshold>5</iperf_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070002">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (BIDIR TCP)(10 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-t 10 --bidir</iperf_args>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="080000">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate eNB</desc>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="080001">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate gNB</desc>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
</testCaseList>
|
|
||||||
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
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-NSA-FR1-TM2-Tab2</htmlTabRef>
|
|
||||||
<htmlTabName>NSA 2x2 Attach-Detach with QUECTEL</htmlTabName>
|
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
|
||||||
<TestCaseRequestedList>
|
|
||||||
100000
|
|
||||||
300000
|
|
||||||
010002
|
|
||||||
031000
|
|
||||||
041000
|
|
||||||
000002
|
|
||||||
010000
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
000002
|
|
||||||
010004
|
|
||||||
000002
|
|
||||||
010003
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
000002
|
|
||||||
010004
|
|
||||||
000002
|
|
||||||
010003
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
000002
|
|
||||||
010002
|
|
||||||
080001
|
|
||||||
080000
|
|
||||||
200000
|
|
||||||
400000
|
|
||||||
</TestCaseRequestedList>
|
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
|
||||||
|
|
||||||
<testCase id="010000">
|
|
||||||
<class>Initialize_UE</class>
|
|
||||||
<desc>Initialize Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010002">
|
|
||||||
<class>Terminate_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010003">
|
|
||||||
<class>Attach_UE</class>
|
|
||||||
<desc>Attach Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010004">
|
|
||||||
<class>Detach_UE</class>
|
|
||||||
<desc>Detach Quectel</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="100000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Disable Sleep States (asterix)</desc>
|
|
||||||
<node>asterix</node>
|
|
||||||
<command>sudo cpupower idle-set -D 0</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="200000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Enable Sleep States (asterix)</desc>
|
|
||||||
<node>asterix</node>
|
|
||||||
<command>sudo cpupower idle-set -E</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="300000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Disable Sleep States (obelix)</desc>
|
|
||||||
<node>obelix</node>
|
|
||||||
<command>sudo cpupower idle-set -D 0</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="400000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Enable Sleep States (obelix)</desc>
|
|
||||||
<node>obelix</node>
|
|
||||||
<command>sudo cpupower idle-set -E</command>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="031000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize eNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band38.nsa_2x2.100prb.usrpn310.conf --usrp-tx-thread-config 1 --thread-pool 0,2,4,6 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
<USRP_IPAddress>172.21.19.13</USRP_IPAddress>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="041000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize gNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.nsa.band78.106prb.usrpn310.2x2.conf --nsa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
|
|
||||||
<USRP_IPAddress>172.21.19.14</USRP_IPAddress>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000001">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000002">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
|
||||||
<id>nrmodule2_quectel</id>
|
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>5</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="080000">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate eNB</desc>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="080001">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate gNB</desc>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
</testCaseList>
|
|
||||||
|
|
||||||
@@ -1,195 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
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-NSA-FR1-TM1</htmlTabRef>
|
|
||||||
<htmlTabName>NSA Ping DL UL with QUECTEL</htmlTabName>
|
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
|
||||||
<TestCaseRequestedList>
|
|
||||||
100000
|
|
||||||
200000
|
|
||||||
400000
|
|
||||||
010002
|
|
||||||
030000
|
|
||||||
040000
|
|
||||||
000002
|
|
||||||
010000
|
|
||||||
010010
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
050001
|
|
||||||
000001
|
|
||||||
070000
|
|
||||||
070001
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
050001
|
|
||||||
010011
|
|
||||||
010002
|
|
||||||
080001
|
|
||||||
080000
|
|
||||||
300000
|
|
||||||
500000
|
|
||||||
</TestCaseRequestedList>
|
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
|
||||||
|
|
||||||
<testCase id="100000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>To reset USRP</desc>
|
|
||||||
<node>obelix</node>
|
|
||||||
<command>sudo -S b2xx_fx3_utils --reset-device</command>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="200000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Disable Sleep States (obelix)</desc>
|
|
||||||
<node>obelix</node>
|
|
||||||
<command>sudo cpupower idle-set -D 0</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="300000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Enable Sleep States (obelix)</desc>
|
|
||||||
<node>obelix</node>
|
|
||||||
<command>sudo cpupower idle-set -E</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="400000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Disable Sleep States (nepes)</desc>
|
|
||||||
<node>nepes</node>
|
|
||||||
<command>sudo cpupower idle-set -D 0</command>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="500000">
|
|
||||||
<class>Custom_Command</class>
|
|
||||||
<desc>Enable Sleep States (nepes)</desc>
|
|
||||||
<node>nepes</node>
|
|
||||||
<command>sudo cpupower idle-set -E</command>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="010000">
|
|
||||||
<class>Initialize_UE</class>
|
|
||||||
<desc>Initialize Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010002">
|
|
||||||
<class>Terminate_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010010">
|
|
||||||
<class>Attach_UE</class>
|
|
||||||
<desc>Attach Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010011">
|
|
||||||
<class>Detach_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Detach Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="030000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize eNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="040000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize gNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E -q --RUs.[0].sdr_addrs "serial=30C51D4" --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000001">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000002">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="050000">
|
|
||||||
<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>15</ping_rttavg_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="050001">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>1</ping_packetloss_threshold>
|
|
||||||
<ping_rttavg_threshold>15</ping_rttavg_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070000">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 125M -t 60 -R</iperf_args>
|
|
||||||
<id>idefix</id>
|
|
||||||
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
|
|
||||||
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070001">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 8M -t 60</iperf_args>
|
|
||||||
<id>idefix</id>
|
|
||||||
<iperf_packetloss_threshold>1</iperf_packetloss_threshold>
|
|
||||||
<iperf_bitrate_threshold>95</iperf_bitrate_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="080000">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate eNB</desc>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="080001">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate gNB</desc>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
</testCaseList>
|
|
||||||
|
|
||||||
@@ -1,159 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
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-NSA-FR1-TM1</htmlTabRef>
|
|
||||||
<htmlTabName>NSA Ping Attach Detach with QUECTEL</htmlTabName>
|
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
|
||||||
<TestCaseRequestedList>
|
|
||||||
030000
|
|
||||||
040000
|
|
||||||
000002
|
|
||||||
010000
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
000001
|
|
||||||
010004
|
|
||||||
000001
|
|
||||||
010003
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
000001
|
|
||||||
010004
|
|
||||||
000001
|
|
||||||
010003
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
000001
|
|
||||||
010002
|
|
||||||
080001
|
|
||||||
080000
|
|
||||||
</TestCaseRequestedList>
|
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
|
||||||
|
|
||||||
<testCase id="010000">
|
|
||||||
<class>Initialize_UE</class>
|
|
||||||
<desc>Initialize Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010002">
|
|
||||||
<class>Terminate_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010003">
|
|
||||||
<class>Attach_UE</class>
|
|
||||||
<desc>Attach Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010004">
|
|
||||||
<class>Detach_UE</class>
|
|
||||||
<desc>Detach Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="030000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize eNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="040000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize gNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E -q --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000001">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000002">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="050001">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070000">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (DL/20Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 20M -t 60 -R</iperf_args>
|
|
||||||
<id>idefix</id>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070001">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 3M -t 60</iperf_args>
|
|
||||||
<id>idefix</id>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="080000">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate eNB</desc>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="080001">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate gNB</desc>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
</testCaseList>
|
|
||||||
|
|
||||||
@@ -1,157 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
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-NSA-FR1-TM1</htmlTabRef>
|
|
||||||
<htmlTabName>NSA Ping DL UL with QUECTEL (Longer)</htmlTabName>
|
|
||||||
<htmlTabIcon>tasks</htmlTabIcon>
|
|
||||||
<TestCaseRequestedList>
|
|
||||||
030000
|
|
||||||
040000
|
|
||||||
000002
|
|
||||||
010000 010010
|
|
||||||
000001
|
|
||||||
050000
|
|
||||||
050001
|
|
||||||
000001
|
|
||||||
070000
|
|
||||||
000001
|
|
||||||
070001
|
|
||||||
000001
|
|
||||||
010011
|
|
||||||
010002
|
|
||||||
080001
|
|
||||||
080000
|
|
||||||
</TestCaseRequestedList>
|
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
|
||||||
|
|
||||||
<testCase id="010000">
|
|
||||||
<class>Initialize_UE</class>
|
|
||||||
<desc>Initialize Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="010002">
|
|
||||||
<class>Terminate_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010010">
|
|
||||||
<class>Attach_UE</class>
|
|
||||||
<desc>Attach Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
<testCase id="010011">
|
|
||||||
<class>Detach_UE</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Detach Quectel</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="030000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize eNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.fr1.25PRB.usrpb210.conf --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="040000">
|
|
||||||
<class>Initialize_eNB</class>
|
|
||||||
<desc>Initialize gNB</desc>
|
|
||||||
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E -q --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000001">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000002">
|
|
||||||
<class>IdleSleep</class>
|
|
||||||
<desc>Sleep</desc>
|
|
||||||
<idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="050000">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 20pings in 20sec</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
<ping_args>-c 20 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="050001">
|
|
||||||
<class>Ping</class>
|
|
||||||
<desc>Ping: 100pings in 20sec</desc>
|
|
||||||
<id>idefix</id>
|
|
||||||
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
|
|
||||||
<ping_packetloss_threshold>50</ping_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070000">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (DL/20Mbps/UDP)(600 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 20M -t 600 -R</iperf_args>
|
|
||||||
<id>idefix</id>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="070001">
|
|
||||||
<class>Iperf</class>
|
|
||||||
<desc>iperf (UL/3Mbps/UDP)(600 sec)(single-ue profile)</desc>
|
|
||||||
<iperf_args>-u -b 3M -t 600</iperf_args>
|
|
||||||
<id>idefix</id>
|
|
||||||
<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
|
|
||||||
<testCase id="080000">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate eNB</desc>
|
|
||||||
<eNB_instance>0</eNB_instance>
|
|
||||||
<eNB_serverId>0</eNB_serverId>
|
|
||||||
<air_interface>lte</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="080001">
|
|
||||||
<class>Terminate_eNB</class>
|
|
||||||
<always_exec>true</always_exec>
|
|
||||||
<desc>Terminate gNB</desc>
|
|
||||||
<eNB_instance>1</eNB_instance>
|
|
||||||
<eNB_serverId>1</eNB_serverId>
|
|
||||||
<air_interface>nr</air_interface>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
</testCaseList>
|
|
||||||
|
|
||||||
@@ -31,9 +31,9 @@
|
|||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000100">
|
<testCase id="000100">
|
||||||
<class>Deploy_EPC</class>
|
<class>DeployCoreNetwork</class>
|
||||||
<desc>Deploy all EPC containers</desc>
|
<desc>Deploy EPC</desc>
|
||||||
<parameters>yaml_files/magma_nsa_20897</parameters>
|
<cn_id>porcepix-cn4g</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -31,8 +31,9 @@
|
|||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000200">
|
<testCase id="000200">
|
||||||
<class>Undeploy_EPC</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<desc>Undeploy all EPC containers</desc>
|
<desc>Undeploy EPC</desc>
|
||||||
|
<cn_id>porcepix-cn4g</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -31,9 +31,9 @@
|
|||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000100">
|
<testCase id="000100">
|
||||||
<class>Deploy_EPC</class>
|
<class>DeployCoreNetwork</class>
|
||||||
<desc>Deploy all EPC containers</desc>
|
<desc>Deploy EPC</desc>
|
||||||
<parameters>yaml_files/magma_lte_20892</parameters>
|
<cn_id>nano-cn4g</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -31,8 +31,9 @@
|
|||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000200">
|
<testCase id="000200">
|
||||||
<class>Undeploy_EPC</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<desc>Undeploy all EPC containers</desc>
|
<desc>Undeploy EPC</desc>
|
||||||
|
<cn_id>nano-cn4g</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -25,23 +25,14 @@
|
|||||||
<htmlTabName>EPC-Closure</htmlTabName>
|
<htmlTabName>EPC-Closure</htmlTabName>
|
||||||
<htmlTabIcon>log-out</htmlTabIcon>
|
<htmlTabIcon>log-out</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
060000 060001 060002
|
060000
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="060000">
|
<testCase id="060000">
|
||||||
<class>Terminate_HSS</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<desc>Terminate HSS</desc>
|
<desc>Terminate EPC</desc>
|
||||||
</testCase>
|
<cn_id>ltebox-nepes</cn_id>
|
||||||
|
|
||||||
<testCase id="060001">
|
|
||||||
<class>Terminate_MME</class>
|
|
||||||
<desc>Terminate MME</desc>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="060002">
|
|
||||||
<class>Terminate_SPGW</class>
|
|
||||||
<desc>Terminate SPGW</desc>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -25,24 +25,15 @@
|
|||||||
<htmlTabName>EPC-Start</htmlTabName>
|
<htmlTabName>EPC-Start</htmlTabName>
|
||||||
<htmlTabIcon>log-in</htmlTabIcon>
|
<htmlTabIcon>log-in</htmlTabIcon>
|
||||||
<TestCaseRequestedList>
|
<TestCaseRequestedList>
|
||||||
000100 000101 000102
|
000100
|
||||||
</TestCaseRequestedList>
|
</TestCaseRequestedList>
|
||||||
<TestCaseExclusionList>
|
<TestCaseExclusionList>
|
||||||
</TestCaseExclusionList>
|
</TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="000100">
|
<testCase id="000100">
|
||||||
<class>Initialize_HSS</class>
|
<class>DeployCoreNetwork</class>
|
||||||
<desc>Initialize HSS</desc>
|
<desc>Start EPC</desc>
|
||||||
</testCase>
|
<cn_id>ltebox-nepes</cn_id>
|
||||||
|
|
||||||
<testCase id="000101">
|
|
||||||
<class>Initialize_MME</class>
|
|
||||||
<desc>Initialize MME</desc>
|
|
||||||
</testCase>
|
|
||||||
|
|
||||||
<testCase id="000102">
|
|
||||||
<class>Initialize_SPGW</class>
|
|
||||||
<desc>Initialize SPGW</desc>
|
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|
||||||
</testCaseList>
|
</testCaseList>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
<TestCaseExclusionList></TestCaseExclusionList>
|
<TestCaseExclusionList></TestCaseExclusionList>
|
||||||
|
|
||||||
<testCase id="060000">
|
<testCase id="060000">
|
||||||
<class>Terminate_5GCN</class>
|
<class>UndeployCoreNetwork</class>
|
||||||
<desc>Terminate 5G Core</desc>
|
<desc>Terminate 5G Core</desc>
|
||||||
<cn_id>oc-cn5g-20897</cn_id>
|
<cn_id>oc-cn5g-20897</cn_id>
|
||||||
</testCase>
|
</testCase>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user