diff --git a/CMakeLists.txt b/CMakeLists.txt index 667ad2a8b3..898b387237 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,7 +280,6 @@ endif() add_boolean_option(TRACE_ASN1C_ENC_DEC OFF "Enable ASN1 encoder/decoder debug traces via OAI logging system" ON) add_boolean_option(T_TRACER True "Activate the T tracer, a debugging/monitoring framework" ON) add_boolean_option(ENABLE_LTTNG False "Activate the LTTNG tracer, a debugging/monitoring framework" ON) -add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs" ON) add_boolean_option(UE_DEBUG_TRACE False "Activate UE debug trace" ON) add_boolean_option(UE_TIMING_TRACE False "Activate UE timing trace" ON) diff --git a/ci-scripts/Jenkinsfile-cluster b/ci-scripts/Jenkinsfile-cluster index e91b27426e..174ccab62f 100644 --- a/ci-scripts/Jenkinsfile-cluster +++ b/ci-scripts/Jenkinsfile-cluster @@ -98,18 +98,10 @@ pipeline { echo "no LockResources given" allParametersPresent = false } - if (params.eNB_IPAddress == null) { - echo "no eNB_IPAddress given" - allParametersPresent = false - } if (params.eNB_SourceCodePath == null) { echo "no eNB_SourceCodePath given" allParametersPresent = false } - if (params.eNB_Credentials == null) { - echo "no eNB_Credentials given" - allParametersPresent = false - } // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { @@ -188,7 +180,6 @@ pipeline { } } withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_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}" @@ -196,7 +187,7 @@ pipeline { if (fileExists(xmlFile)) { try { 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} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}" + sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}" } } catch (Exception e) { currentBuild.result = 'FAILURE' @@ -204,7 +195,7 @@ pipeline { } } } - sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}" + sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}" } } } diff --git a/ci-scripts/Jenkinsfile-nrue b/ci-scripts/Jenkinsfile-nrue index aed99b3568..3f7ef9b9ed 100644 --- a/ci-scripts/Jenkinsfile-nrue +++ b/ci-scripts/Jenkinsfile-nrue @@ -91,24 +91,9 @@ pipeline { echo "no LockResources given" allParametersPresent = false } - if (params.eNB_IPAddress == null) { - allParametersPresent = false - } if (params.eNB_SourceCodePath == null) { allParametersPresent = false } - if (params.eNB_Credentials == null) { - allParametersPresent = false - } - if (params.eNB1_IPAddress == null) { - allParametersPresent = false - } - if (params.eNB1_SourceCodePath == null) { - allParametersPresent = false - } - if (params.eNB1_Credentials == null) { - allParametersPresent = false - } // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { @@ -187,8 +172,6 @@ pipeline { } } withCredentials([ - [$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.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}" @@ -197,7 +180,7 @@ pipeline { if (fileExists(xmlFile)) { try { 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} --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 --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}" } } catch (Exception e) { currentBuild.result = 'FAILURE' @@ -205,7 +188,7 @@ pipeline { } } } - sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}" + sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}" } } } diff --git a/ci-scripts/Jenkinsfile-physim-deploy b/ci-scripts/Jenkinsfile-physim-deploy index ffeff8685b..e3d243d07b 100644 --- a/ci-scripts/Jenkinsfile-physim-deploy +++ b/ci-scripts/Jenkinsfile-physim-deploy @@ -92,15 +92,9 @@ pipeline { echo "no LockResources given" allParametersPresent = false } - if (params.eNB_IPAddress == null) { - allParametersPresent = false - } if (params.eNB_SourceCodePath == null) { allParametersPresent = false } - if (params.eNB_Credentials == null) { - allParametersPresent = false - } // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { @@ -179,7 +173,6 @@ pipeline { } } withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_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}" @@ -188,7 +181,7 @@ pipeline { if (fileExists(xmlFile)) { try { 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} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}" + sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile} --OCUserName=${OC_Username} --OCPassword=${OC_Password} --OCProjectName=${OC_ProjectName}" } } catch (Exception e) { currentBuild.result = 'FAILURE' @@ -196,7 +189,7 @@ pipeline { } } } - sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}" + sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}" } } } diff --git a/ci-scripts/Jenkinsfile-tmp-full-ran b/ci-scripts/Jenkinsfile-tmp-full-ran index 3bc1d6ad8e..07b10ab980 100644 --- a/ci-scripts/Jenkinsfile-tmp-full-ran +++ b/ci-scripts/Jenkinsfile-tmp-full-ran @@ -91,15 +91,9 @@ pipeline { echo "no LockResources given" allParametersPresent = false } - if (params.eNB_IPAddress == null) { - allParametersPresent = false - } if (params.eNB_SourceCodePath == null) { allParametersPresent = false } - if (params.eNB_Credentials == null) { - allParametersPresent = false - } // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { @@ -170,25 +164,21 @@ pipeline { } } } - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'], - ]) { - 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") - for (xmlFile in myXmlTestSuite) { + 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") + for (xmlFile in myXmlTestSuite) { if (fileExists(xmlFile)) { try { 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} --XMLTestFile=${xmlFile}" + sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}" } } catch (Exception e) { currentBuild.result = 'FAILURE' buildStageStatus = false } } - } - sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}" } + sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}" } } } @@ -198,11 +188,7 @@ pipeline { stage('Terminate eNB') { steps { echo '\u2705 \u001B[32mTerminate eNB\u001B[0m' - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - 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" } post { success { @@ -218,15 +204,9 @@ pipeline { parallel { stage('Log Collection (eNB - Run)') { steps { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' - sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" + echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' + sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" - echo '\u2705 \u001B[32mLog Transfer (eNB - Run)\u001B[0m' - sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/enb.log.zip ./enb.log.${env.BUILD_ID}.zip || true" - } script { if(fileExists("enb.log.${env.BUILD_ID}.zip")) { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" @@ -262,11 +242,7 @@ pipeline { failure { script { if (!termStatusArray[termENB]) { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - 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" } } } diff --git a/ci-scripts/Jenkinsfile-tmp-multi-enb b/ci-scripts/Jenkinsfile-tmp-multi-enb index 7c7397f30b..c01c8daf7e 100644 --- a/ci-scripts/Jenkinsfile-tmp-multi-enb +++ b/ci-scripts/Jenkinsfile-tmp-multi-enb @@ -81,36 +81,9 @@ pipeline { echo "no LockResources given" allParametersPresent = false } - // 1st eNB parameters - if (params.eNB_IPAddress == null) { - allParametersPresent = false - } if (params.eNB_SourceCodePath == null) { allParametersPresent = false } - if (params.eNB_Credentials == null) { - allParametersPresent = false - } - // 2nd eNB parameters - if (params.eNB1_IPAddress == null) { - allParametersPresent = false - } - if (params.eNB1_SourceCodePath == null) { - allParametersPresent = false - } - if (params.eNB1_Credentials == null) { - allParametersPresent = false - } - // 3rd eNB parameters - if (params.eNB2_IPAddress == null) { - allParametersPresent = false - } - if (params.eNB2_SourceCodePath == null) { - allParametersPresent = false - } - if (params.eNB2_Credentials == null) { - allParametersPresent = false - } // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { @@ -181,27 +154,21 @@ pipeline { } } } - withCredentials([ - [$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.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_Password'], - ]) { - 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") - for (xmlFile in myXmlTestSuite) { - if (fileExists(xmlFile)) { - try { - 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} --XMLTestFile=${xmlFile}" - } - } catch (Exception e) { - currentBuild.result = 'FAILURE' - buildStageStatus = false - } + 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") + for (xmlFile in myXmlTestSuite) { + if (fileExists(xmlFile)) { + try { + 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} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}" + } + } catch (Exception e) { + currentBuild.result = 'FAILURE' + buildStageStatus = false } } - sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}" } + sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}" } } } @@ -211,11 +178,7 @@ pipeline { stage('Terminate eNB') { steps { echo '\u2705 \u001B[32mTerminate eNB\u001B[0m' - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - 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" } } } @@ -224,15 +187,9 @@ pipeline { parallel { stage('Log Collection (eNB - Run)') { steps { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' - sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" + echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' + sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" - echo '\u2705 \u001B[32mLog Transfer (eNB - Run)\u001B[0m' - sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/enb.log.zip ./enb.log.${env.BUILD_ID}.zip || true" - } script { if(fileExists("enb.log.${env.BUILD_ID}.zip")) { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" diff --git a/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa b/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa index 89daaec8c1..67aa6b4511 100644 --- a/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa +++ b/ci-scripts/Jenkinsfile-tmp-multi-enb-nsa @@ -83,36 +83,9 @@ pipeline { echo "no LockResources given" allParametersPresent = false } - // 1st eNB parameters - if (params.eNB_IPAddress == null) { - allParametersPresent = false - } if (params.eNB_SourceCodePath == null) { allParametersPresent = false } - if (params.eNB_Credentials == null) { - allParametersPresent = false - } - // 2nd eNB parameters - if (params.eNB1_IPAddress == null) { - allParametersPresent = false - } - if (params.eNB1_SourceCodePath == null) { - allParametersPresent = false - } - if (params.eNB1_Credentials == null) { - allParametersPresent = false - } - // 3rd eNB parameters - if (params.eNB2_IPAddress == null) { - allParametersPresent = false - } - if (params.eNB2_SourceCodePath == null) { - allParametersPresent = false - } - if (params.eNB2_Credentials == null) { - allParametersPresent = false - } // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { @@ -183,27 +156,21 @@ pipeline { } } } - withCredentials([ - [$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.eNB2_Credentials}", usernameVariable: 'eNB2_Username', passwordVariable: 'eNB2_Password'], - ]) { - 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") - for (xmlFile in myXmlTestSuite) { - if (fileExists(xmlFile)) { - try { - 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} --XMLTestFile=${xmlFile}" - } - } catch (Exception e) { - currentBuild.result = 'FAILURE' - buildStageStatus = false - } + 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") + for (xmlFile in myXmlTestSuite) { + if (fileExists(xmlFile)) { + try { + 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} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}" + } + } catch (Exception e) { + currentBuild.result = 'FAILURE' + buildStageStatus = false } } - sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}" } + sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}" } } } @@ -212,15 +179,8 @@ pipeline { parallel { stage('Log Collection (eNB - Run)') { steps { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' - sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" - - echo '\u2705 \u001B[32mLog Transfer (eNB - Run)\u001B[0m' - sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/enb.log.zip ./enb.log.${env.BUILD_ID}.zip || true" - } + echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' + sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" script { if(fileExists("enb.log.${env.BUILD_ID}.zip")) { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 82db6641e3..526899a5a2 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -96,15 +96,9 @@ pipeline { echo "no LockResources given" allParametersPresent = false } - if (params.eNB_IPAddress == null) { - allParametersPresent = false - } if (params.eNB_SourceCodePath == null) { allParametersPresent = false } - if (params.eNB_Credentials == null) { - allParametersPresent = false - } // the following 4 parameters should be pushed by the master trigger // if not present, take the job GIT variables (used for developing) if (params.eNB_Repository == null) { @@ -181,25 +175,21 @@ pipeline { } } } - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'], - ]) { - 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") - for (xmlFile in myXmlTestSuite) { + 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") + for (xmlFile in myXmlTestSuite) { if (fileExists(xmlFile)) { try { 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} --XMLTestFile=${xmlFile}" + sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} --eNBSourceCodePath=${params.eNB_SourceCodePath} --XMLTestFile=${xmlFile}" } } catch (Exception e) { currentBuild.result = 'FAILURE' buildStageStatus = false } } - } - sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password}" } + sh "python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus}" } } } @@ -209,11 +199,7 @@ pipeline { stage('Terminate eNB') { steps { echo '\u2705 \u001B[32mTerminate eNB\u001B[0m' - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - 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" } post { success { @@ -229,15 +215,8 @@ pipeline { parallel { stage('Log Collection (eNB - Run)') { steps { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' - sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" - - echo '\u2705 \u001B[32mLog Transfer (eNB - Run)\u001B[0m' - sh "sshpass -p \'${eNB_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${eNB_Username}@${params.eNB_IPAddress}:${eNB_SourceCodePath}/cmake_targets/enb.log.zip ./enb.log.${env.BUILD_ID}.zip || true" - } + echo '\u2705 \u001B[32mLog Collection (eNB - Run)\u001B[0m' + sh "python3 ci-scripts/main.py --mode=LogCollecteNB --eNBSourceCodePath=${params.eNB_SourceCodePath} --BuildId=${env.BUILD_ID}" script { if(fileExists("enb.log.${env.BUILD_ID}.zip")) { archiveArtifacts "enb.log.${env.BUILD_ID}.zip" @@ -273,11 +252,7 @@ pipeline { failure { script { if (!termStatusArray[termENB]) { - withCredentials([ - [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'] - ]) { - 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" } } } diff --git a/ci-scripts/README.md b/ci-scripts/README.md new file mode 100644 index 0000000000..becd518e4c --- /dev/null +++ b/ci-scripts/README.md @@ -0,0 +1,60 @@ +This document outlines how to use the OAI CI framework and gives a quickstart. + +[[_TOC_]] + +# Quickstart + +There is a script `main.py` that + +- reads scenario files from XML +- executes the steps (e.g., deployment of CN/gNB/UE, attach, ping, ...) + +To simplify, a script `run_locally.sh` can be used to run a single scenario +locally. First, download images for gNB&UE (we assume you already downloaded +the CN) and tag them "latest", which is expected by `run_locally.sh`: + + docker pull oaisoftwarealliance/oai-gnb:develop + docker tag oaisoftwarealliance/oai-gnb:develop oai-gnb + docker pull oaisoftwarealliance/oai-nr-ue:develop + docker tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue + +Now, run the scenario: + + cd ~/openairinterface5g/ci-scripts/ + ./run_locally.sh xml_files/container_5g_rfsim_simple.xml + +Output should look like + +``` +[2025-08-07 18:07:49,631] INFO: ---------------------------------------- +[2025-08-07 18:07:49,631] INFO: Creating HTML header +[2025-08-07 18:07:49,631] INFO: ---------------------------------------- +[2025-08-07 18:07:49,766] INFO: ---------------------------------------- +[2025-08-07 18:07:49,767] INFO: Starting Scenario: xml_files/container_5g_rfsim_simple.xml +[2025-08-07 18:07:49,767] INFO: ---------------------------------------- +[2025-08-07 18:07:49,767] INFO: placing all artifacts for this run in /home/richie/oai/cmake_targets/log/container_5g_rfsim_simple.xml.d/ + +[...] + +[2025-08-07 18:07:49,771] INFO: ---------------------------------------- +[2025-08-07 18:07:49,771] INFO: Test ID: 1 (#1) +[2025-08-07 18:07:49,771] INFO: Deploy OAI 5G CoreNetwork +[2025-08-07 18:07:49,771] INFO: ---------------------------------------- +``` + +it will run an end-to-end test, connecting one UE to the gNB, and ping, before +undeploying. As shown, logs will be under +`/home/richie/oai/cmake_targets/log/container_5g_rfsim_simple.xml.d/`. The +python code also produces an HTML report in `ci-scripts/test_results.html`. + +# Running with local changes + +In order to run the tests as above, with local changes, please [build images +locally](../docker/README.md). + +It is not yet possible to override an existing image with changes made locally +to a source file and run it directly through the CI framework. However, it is +possible to override an existing image with local changes, and run the scenario +manually following the console logs steps provided above. This is described in +the [5G RFsimulator +README](yaml_files/5g_rfsimulator/README.md#6-running-with-local-changes). diff --git a/ci-scripts/args_parse.py b/ci-scripts/args_parse.py index 92cb0d163f..4953f049fb 100644 --- a/ci-scripts/args_parse.py +++ b/ci-scripts/args_parse.py @@ -59,17 +59,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,CLUSTER): force_local = True - #--apply= as parameters file, to replace inline parameters - elif re.match(r'^\-\-Apply=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-Apply=(.+)$', myArgv, re.IGNORECASE) - py_params_file = matchReg.group(1) - with open(py_params_file,'r') as file: - # The FullLoader parameter handles the conversion from YAML - # scalar values to Python dictionary format - py_params = yaml.load(file,Loader=yaml.FullLoader) - py_param_file_present = True #to be removed once validated - #AssignParams(py_params) #to be uncommented once validated - #consider inline parameters elif re.match(r'^\-\-mode=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match(r'^\-\-mode=(.+)$', myArgv, re.IGNORECASE) @@ -132,50 +121,11 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,CLUSTER): SCA.ranTargetBranch=matchReg.group(1) CLUSTER.ranTargetBranch=matchReg.group(1) elif re.match(r'^\-\-eNBIPAddress=(.+)$|^\-\-eNB[1-2]IPAddress=(.+)$', myArgv, re.IGNORECASE): - if re.match(r'^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE) - RAN.eNBIPAddress=matchReg.group(1) - CONTAINERS.eNBIPAddress=matchReg.group(1) - SCA.eNBIPAddress=matchReg.group(1) - CLUSTER.eNBIPAddress=matchReg.group(1) - elif re.match(r'^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB1IPAddress=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB1IPAddress=matchReg.group(1) - CONTAINERS.eNB1IPAddress=matchReg.group(1) - elif re.match(r'^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB2IPAddress=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB2IPAddress=matchReg.group(1) - CONTAINERS.eNB2IPAddress=matchReg.group(1) + print("parameters --eNB*IPAddress ignored") elif re.match(r'^\-\-eNBUserName=(.+)$|^\-\-eNB[1-2]UserName=(.+)$', myArgv, re.IGNORECASE): - if re.match(r'^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE) - RAN.eNBUserName=matchReg.group(1) - CONTAINERS.eNBUserName=matchReg.group(1) - SCA.eNBUserName=matchReg.group(1) - CLUSTER.eNBUserName=matchReg.group(1) - elif re.match(r'^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB1UserName=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB1UserName=matchReg.group(1) - CONTAINERS.eNB1UserName=matchReg.group(1) - elif re.match(r'^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB2UserName=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB2UserName=matchReg.group(1) - CONTAINERS.eNB2UserName=matchReg.group(1) + print("parameters --eNB*UserName ignored") elif re.match(r'^\-\-eNBPassword=(.+)$|^\-\-eNB[1-2]Password=(.+)$', myArgv, re.IGNORECASE): - if re.match(r'^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE) - RAN.eNBPassword=matchReg.group(1) - CONTAINERS.eNBPassword=matchReg.group(1) - SCA.eNBPassword=matchReg.group(1) - CLUSTER.eNBPassword=matchReg.group(1) - elif re.match(r'^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB1Password=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB1Password=matchReg.group(1) - CONTAINERS.eNB1Password=matchReg.group(1) - elif re.match(r'^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB2Password=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB2Password=matchReg.group(1) - CONTAINERS.eNB2Password=matchReg.group(1) + print("parameter --eNB*Password ignored") elif re.match(r'^\-\-eNBSourceCodePath=(.+)$|^\-\-eNB[1-2]SourceCodePath=(.+)$', myArgv, re.IGNORECASE): if re.match(r'^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match(r'^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE) @@ -184,26 +134,14 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,CONTAINERS,HELP,SCA,CLUSTER): SCA.eNBSourceCodePath=matchReg.group(1) CLUSTER.eNBSourceCodePath=matchReg.group(1) elif re.match(r'^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB1SourceCodePath=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB1SourceCodePath=matchReg.group(1) - CONTAINERS.eNB1SourceCodePath=matchReg.group(1) + print("parameter --eNB1SourceCodePath ignored") elif re.match(r'^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE): - matchReg = re.match(r'^\-\-eNB2SourceCodePath=(.+)$', myArgv, re.IGNORECASE) - RAN.eNB2SourceCodePath=matchReg.group(1) - CONTAINERS.eNB2SourceCodePath=matchReg.group(1) + print("parameter --eNB2SourceCodePath ignored") elif re.match(r'^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match(r'^\-\-XMLTestFile=(.+)$', myArgv, re.IGNORECASE) CiTestObj.testXMLfiles.append(matchReg.group(1)) HTML.testXMLfiles.append(matchReg.group(1)) HTML.nbTestXMLfiles=HTML.nbTestXMLfiles+1 - elif re.match(r'^\-\-UEIPAddress=(.+)$', myArgv, re.IGNORECASE): # cleanup - print("parameter --UEIPAddress ignored") - elif re.match(r'^\-\-UEUserName=(.+)$', myArgv, re.IGNORECASE): - print("parameter --UEUserName ignored") - elif re.match(r'^\-\-UEPassword=(.+)$', myArgv, re.IGNORECASE): - print("parameter --UEPassword ignored") - elif re.match(r'^\-\-UESourceCodePath=(.+)$', myArgv, re.IGNORECASE): - print("parameter --UESourceCodePath ignored") elif re.match(r'^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match(r'^\-\-finalStatus=(.+)$', myArgv, re.IGNORECASE) finalStatus = matchReg.group(1) diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py index 185e90a13e..ae4e718ecf 100644 --- a/ci-scripts/cls_cluster.py +++ b/ci-scripts/cls_cluster.py @@ -69,9 +69,7 @@ def OC_logout(cmd): class Cluster: def __init__(self): - self.eNBIPAddress = "" self.eNBSourceCodePath = "" - self.forcedWorkspaceCleanup = False self.OCUserName = "" self.OCPassword = "" self.OCProjectName = "" @@ -165,24 +163,6 @@ class Cluster: return -1 return int(result.group("size")) - def _deploy_pod(self, filename, timeout = 120): - ret = self.cmd.run(f'oc create -f {filename}') - result = re.search(r'pod/(?P[a-zA-Z0-9_\-]+) created', ret.stdout) - if result is None: - logging.error(f'could not deploy pod: {ret.stdout}') - return None - pod = result.group("pod") - logging.debug(f'checking if pod {pod} is in Running state') - ret = self.cmd.run(f'oc wait --for=condition=ready pod {pod} --timeout={timeout}s', silent=True) - if ret.returncode == 0: - return pod - logging.error(f'pod {pod} did not reach Running state') - self._undeploy_pod(filename) - return None - - def _undeploy_pod(self, filename): - self.cmd.run(f'oc delete -f {filename}') - def PullClusterImage(self, HTML, node, images, tag_prefix): logging.debug(f'Pull OC image {images} to server {node}') self.testCase_id = HTML.testCase_id @@ -213,13 +193,12 @@ class Cluster: self.cmd.run(f'oc logs {job} &> {fn}') return (image, archiveArtifact(self.cmd, ctx, fn)) - def BuildClusterImage(self, ctx, HTML): + def BuildClusterImage(self, ctx, node, HTML): if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '': HELP.GenericHelp(CONST.Version) raise ValueError(f'Insufficient Parameter: ranRepository {self.ranRepository} ranBranch {ranBranch} ranCommitID {self.ranCommitID}') - lIpAddr = self.eNBIPAddress lSourcePath = self.eNBSourceCodePath - if lIpAddr == '' or lSourcePath == '': + if node == '' or lSourcePath == '': raise ValueError('Insufficient Parameter: eNBSourceCodePath missing') ocUserName = self.OCUserName ocPassword = self.OCPassword @@ -230,8 +209,8 @@ class Cluster: if self.OCRegistry.startswith("http") or self.OCRegistry.endswith("/"): raise ValueError(f'ocRegistry {self.OCRegistry} should not start with http:// or https:// and not end on a slash /') - logging.debug(f'Building on cluster triggered from server: {lIpAddr}') - self.cmd = cls_cmd.RemoteCmd(lIpAddr) + logging.debug(f'Building on cluster triggered from server: {node}') + self.cmd = cls_cmd.RemoteCmd(node) self.testCase_id = HTML.testCase_id @@ -296,21 +275,12 @@ class Cluster: if not status: logging.error('failure during build of ran-base') log_files.append(self._retrieveOCLog(ctx, ranbase_job, lSourcePath, 'ran-base')) - # recover logs by mounting image - self._retag_image_statement('ran-base', 'ran-base', baseTag, 'openshift/ran-base-log-retrieval.yaml') - pod = self._deploy_pod('openshift/ran-base-log-retrieval.yaml') - if pod is not None: - logdir = f'{lSourcePath}/cmake_targets/log/ran-base' - self.cmd.run(f'mkdir -p {logdir}') - self.cmd.run(f'oc rsync {pod}:/oai-ran/cmake_targets/log/ {logdir}') - self._undeploy_pod('openshift/ran-base-log-retrieval.yaml') - ret = self.cmd.run(f'ls {logdir}') - for f in ret.stdout.splitlines(): - archiveArtifact(self.cmd, ctx, f"{logdir}/{f}") - else: - status = False - if status: + self._recreate_is_tag('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-is.yaml') + self._recreate_bc('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-bc.yaml') + self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.build.fhi72.rhel9') + ranbuildfhi72_job = self._start_build('ran-build-fhi72') + self._recreate_is_tag('oai-physim', imageTag, 'openshift/oai-physim-is.yaml') self._recreate_bc('oai-physim', imageTag, 'openshift/oai-physim-bc.yaml') self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.phySim.rhel9') @@ -326,15 +296,22 @@ class Cluster: self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.clang.rhel9') clang_job = self._start_build('oai-clang') - wait = ranbuild_job is not None and physim_job is not None and clang_job is not None and self._wait_build_end([ranbuild_job, physim_job, clang_job], 1200) - if not wait: logging.error('error during build of ranbuild_job or physim_job or clang_job') + wait = ranbuildfhi72_job is not None and ranbuild_job is not None and physim_job is not None and clang_job is not None and self._wait_build_end([ranbuildfhi72_job, ranbuild_job, physim_job, clang_job], 1200) + if not wait: logging.error('error during build of ranbuildfhi72_job or ranbuild_job or physim_job or clang_job') status = status and wait + log_files.append(self._retrieveOCLog(ctx, ranbuildfhi72_job, lSourcePath, 'ran-build-fhi72')) log_files.append(self._retrieveOCLog(ctx, ranbuild_job, lSourcePath, 'ran-build')) log_files.append(self._retrieveOCLog(ctx, physim_job, lSourcePath, 'oai-physim')) log_files.append(self._retrieveOCLog(ctx, clang_job, lSourcePath, 'oai-clang')) self.cmd.run(f'oc get pods.metrics.k8s.io &>> {build_metrics}') if status: + self._recreate_is_tag('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-is.yaml') + self._recreate_bc('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-bc.yaml') + self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.gNB.fhi72.rhel9') + self._retag_image_statement('ran-build-fhi72', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build-fhi72', imageTag, 'docker/Dockerfile.gNB.fhi72.rhel9') + gnb_fhi72_job = self._start_build('oai-gnb-fhi72') + self._recreate_is_tag('oai-enb', imageTag, 'openshift/oai-enb-is.yaml') self._recreate_bc('oai-enb', imageTag, 'openshift/oai-enb-bc.yaml') self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.eNB.rhel9') @@ -353,10 +330,11 @@ class Cluster: self._retag_image_statement('ran-build', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build', imageTag, 'docker/Dockerfile.gNB.aw2s.rhel9') gnb_aw2s_job = self._start_build('oai-gnb-aw2s') - wait = enb_job is not None and gnb_job is not None and gnb_aw2s_job is not None and self._wait_build_end([enb_job, gnb_job, gnb_aw2s_job], 800) + wait = gnb_fhi72_job is not None and enb_job is not None and gnb_job is not None and gnb_aw2s_job is not None and self._wait_build_end([gnb_fhi72_job, enb_job, gnb_job, gnb_aw2s_job], 800) if not wait: logging.error('error during build of eNB/gNB') status = status and wait # recover logs + log_files.append(self._retrieveOCLog(ctx, gnb_fhi72_job, lSourcePath, 'oai-gnb-fhi72')) log_files.append(self._retrieveOCLog(ctx, enb_job, lSourcePath, 'oai-enb')) log_files.append(self._retrieveOCLog(ctx, gnb_job, lSourcePath, 'oai-gnb')) log_files.append(self._retrieveOCLog(ctx, gnb_aw2s_job, lSourcePath, 'oai-gnb-aw2s')) @@ -389,32 +367,6 @@ class Cluster: log_files.append(self._retrieveOCLog(ctx, nrue_job, lSourcePath, 'oai-nr-ue')) self.cmd.run(f'oc get pods.metrics.k8s.io &>> {build_metrics}') - if status: - self._recreate_is_tag('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-is.yaml') - self._recreate_bc('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-bc.yaml') - self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.build.fhi72.rhel9') - ranbuildfhi72_job = self._start_build('ran-build-fhi72') - - wait = ranbuildfhi72_job is not None and self._wait_build_end([ranbuildfhi72_job], 1200) - if not wait: logging.error('error during build of ranbuildfhi72_job') - status = status and wait - log_files.append(self._retrieveOCLog(ctx, ranbuildfhi72_job, lSourcePath, 'ran-build-fhi72')) - self.cmd.run(f'oc get pods.metrics.k8s.io &>> {build_metrics}') - - if status: - self._recreate_is_tag('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-is.yaml') - self._recreate_bc('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-bc.yaml') - self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.gNB.fhi72.rhel9') - self._retag_image_statement('ran-build-fhi72', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build-fhi72', imageTag, 'docker/Dockerfile.gNB.fhi72.rhel9') - gnb_fhi72_job = self._start_build('oai-gnb-fhi72') - - wait = gnb_fhi72_job is not None and self._wait_build_end([gnb_fhi72_job], 600) - if not wait: logging.error('error during build of gNB-fhi72') - status = status and wait - # recover logs - log_files.append(self._retrieveOCLog(ctx, gnb_fhi72_job, lSourcePath, 'oai-gnb-fhi72')) - self.cmd.run(f'oc get pods.metrics.k8s.io &>> {build_metrics}') - # split and analyze logs imageSize = {} for image, _ in log_files: @@ -444,21 +396,18 @@ class Cluster: self.cmd.close() # Analyze the logs - collectInfo = cls_containerize.AnalyzeBuildLogs(log_files, status) - for img in collectInfo: - for f in collectInfo[img]: - status = status and collectInfo[img][f]['status'] - if not status: - logging.debug(collectInfo) + collectInfo = {} + for image, lf in log_files: + ret = cls_containerize.AnalyzeBuildLogs(image, lf) + imgStatus = ret['status'] + msg = f"size {imageSize[image]}, analysis of {os.path.basename(lf)}: {ret['errors']} errors, {ret['warnings']} warnings" + HTML.CreateHtmlTestRowQueue(image, 'OK' if imgStatus else 'KO', [msg]) + status = status and imgStatus if status: logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m') - HTML.CreateHtmlTestRow('all', 'OK', CONST.ALL_PROCESSES_OK) else: logging.error('\u001B[1m Building OAI Images Failed\u001B[0m') - HTML.CreateHtmlTestRow('all', 'KO', CONST.ALL_PROCESSES_OK) - - HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, imageSize) # TODO fix groovy script, remove the following. # the groovy scripts expects all logs in @@ -469,17 +418,17 @@ class Cluster: return status - def deploy_oc_physim(self, ctx, HTML, oc_release, svr_id): + def deploy_oc_physim(self, ctx, HTML, oc_release, node): if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '': HELP.GenericHelp(CONST.Version) raise ValueError(f'Insufficient Parameter: ranRepository {self.ranRepository} ranBranch {self.ranBranch} ranCommitID {self.ranCommitID}') image_tag = cls_containerize.CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) - logging.debug(f'Running physims from server: {svr_id}') + logging.debug(f'Running physims from server: {node}') script = "scripts/oc-deploy-physims.sh" options = f"oaicicd-core-for-ci-ran {oc_release} {image_tag} {self.eNBSourceCodePath}" - ret = cls_cmd.runScript(svr_id, script, 600, options) + ret = cls_cmd.runScript(node, script, 600, options) logging.debug(f'"{script}" finished with code {ret.returncode}, output:\n{ret.stdout}') - with cls_cmd.getConnection(svr_id) as ssh: + with cls_cmd.getConnection(node) as ssh: details_json = archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/{oc_release}-tests.json') result_junit = archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/{oc_release}-run.xml') archiveArtifact(ssh, ctx, f'{self.eNBSourceCodePath}/ci-scripts/physim_log.txt') @@ -492,7 +441,7 @@ class Cluster: HTML.CreateHtmlTestRowPhySimTestResult(test_summary, test_result) logging.info('\u001B[1m Physical Simulator Pass\u001B[0m') else: - HTML.CreateHtmlTestRow('Some test(s) failed!', 'KO', CONST.OC_PHYSIM_DEPLOY_FAIL) + HTML.CreateHtmlTestRowQueue('At least one physical simulator test failed!', 'KO', ["See below for details"]) HTML.CreateHtmlTestRowPhySimTestResult(test_summary, test_result) logging.error('\u001B[1m Physical Simulator Fail\u001B[0m') else: diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index a4e1ddea8b..cc057a60d9 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -82,28 +82,23 @@ def CreateTag(ranCommitID, ranBranch, ranAllowMerge): tagToUse = f'develop-{shortCommit}' return tagToUse -def AnalyzeBuildLogs(logfiles, globalStatus): - collectInfo = {} - for image, lf in logfiles: - files = {} - errorandwarnings = {} - committed = False - tagged = False - with open(lf, mode='r') as inputfile: - for line in inputfile: - lineHasTag = re.search(f'Successfully tagged {image}:', str(line)) is not None - lineHasTag2 = re.search(f'naming to docker.io/library/{image}:', str(line)) is not None - tagged = tagged or lineHasTag or lineHasTag2 - # the OpenShift Cluster builder prepends image registry URL - lineHasCommit = re.search(r'COMMIT [a-zA-Z0-9\.:/\-]*' + image, str(line)) is not None - committed = committed or lineHasCommit - errorandwarnings['errors'] = 0 if committed or tagged else 1 - errorandwarnings['warnings'] = 0 - errorandwarnings['status'] = committed or tagged - logging.info(f"Analyzing {image}, file {lf}: {errorandwarnings}") - files['Target Image Creation'] = errorandwarnings - collectInfo[image] = files - return collectInfo +def AnalyzeBuildLogs(image, lf): + errorandwarnings = {} + committed = False + tagged = False + with open(lf, mode='r') as inputfile: + for line in inputfile: + lineHasTag = re.search(f'Successfully tagged {image}:', str(line)) is not None + lineHasTag2 = re.search(f'naming to docker.io/library/{image}:', str(line)) is not None + tagged = tagged or lineHasTag or lineHasTag2 + # the OpenShift Cluster builder prepends image registry URL + lineHasCommit = re.search(r'COMMIT [a-zA-Z0-9\.:/\-]*' + image, str(line)) is not None + committed = committed or lineHasCommit + errorandwarnings['errors'] = 0 if committed or tagged else 1 + errorandwarnings['warnings'] = 0 + errorandwarnings['status'] = committed or tagged + logging.info(f"Analyzing {image}, file {lf}: {errorandwarnings}") + return errorandwarnings def GetImageName(ssh, svcName, file): ret = ssh.run(f"docker compose -f {file} config --format json {svcName} | jq -r '.services.\"{svcName}\".image'", silent=True) @@ -219,7 +214,6 @@ def CheckLogs(self, filename, HTML, RAN): HTML.htmleNBFailureMsg = "" else: logging.info(f"Skipping analysis of log '{filename}': no submatch for xNB/UE") - HTML.CreateHtmlTestRowQueue(f"file {name}", 'OK', ["no analysis function"]) logging.debug(f"log check: file {filename} passed analysis {success}") return success @@ -235,25 +229,11 @@ class Containerize(): self.ranAllowMerge = False self.ranCommitID = '' self.ranTargetBranch = '' - self.eNBIPAddress = '' - self.eNBUserName = '' - self.eNBPassword = '' self.eNBSourceCodePath = '' - self.eNB1IPAddress = '' - self.eNB1UserName = '' - self.eNB1Password = '' - self.eNB1SourceCodePath = '' - self.eNB2IPAddress = '' - self.eNB2UserName = '' - self.eNB2Password = '' - self.eNB2SourceCodePath = '' - self.forcedWorkspaceCleanup = False self.imageKind = '' self.proxyCommit = None - self.eNB_instance = 0 - self.eNB_serverId = ['', '', ''] - self.yamlPath = ['', '', ''] - self.services = ['', '', ''] + self.yamlPath = '' + self.services = '' self.deploymentTag = '' self.cli = '' @@ -271,25 +251,10 @@ class Containerize(): # Container management functions #----------------------------------------------------------- - def GetCredentials(self, server_id): - if server_id == '0': - ip, path = self.eNBIPAddress, self.eNBSourceCodePath - elif server_id == '1': - ip, path = self.eNB1IPAddress, self.eNB1SourceCodePath - elif server_id == '2': - ip, path = self.eNB2IPAddress, self.eNB2SourceCodePath - else: - raise ValueError(f"unknown server ID '{server_id}'") - if ip == '' or path == '': - HELP.GenericHelp(CONST.Version) - raise ValueError(f'Insufficient Parameter: IP/node {ip}, path {path}') - return (ip, path) - - def BuildImage(self, ctx, HTML): - svr = self.eNB_serverId[self.eNB_instance] - lIpAddr, lSourcePath = self.GetCredentials(svr) - logging.debug('Building on server: ' + lIpAddr) - cmd = cls_cmd.getConnection(lIpAddr) + def BuildImage(self, ctx, node, HTML): + lSourcePath = self.eNBSourceCodePath + logging.debug('Building on server: ' + node) + cmd = cls_cmd.getConnection(node) log_files = [] # Checking the hostname to get adapted on cli and dockerfileprefixes @@ -386,13 +351,6 @@ class Containerize(): t = ("ran-base", archiveArtifact(cmd, ctx, logfile)) log_files.append(t) - # Recover build logs, for the moment only possible when build is successful - cmd.run(f"{self.cli} create --name test {baseImage}:{baseTag}") - cmd.run("mkdir -p cmake_targets/log/ran-base") - logfile = f'{lSourcePath}/cmake_targets/log/ran-base.log' - cmd.run(f"{self.cli} cp test:/oai-ran/cmake_targets/log/all.txt {logfile}") - cmd.run(f"{self.cli} rm -f test") - archiveArtifact(cmd, ctx, logfile) # First verify if the base image was properly created. ret = cmd.run(f"{self.cli} image inspect --format=\'Size = {{{{.Size}}}} bytes\' {baseImage}:{baseTag}") allImagesSize = {} @@ -438,12 +396,6 @@ class Containerize(): log_files.append(t) if image == 'oai-gnb-aerial': cmd.run('rm -f nvipc.src.2025.05.20.tar.gz') - if image == 'ran-build' or image == 'ran-build-asan' or image == 'ran-build-fhi72': - cmd.run(f"docker run --name test-log -d {name}:{imageTag} /bin/true") - logfile = f'{lSourcePath}/{image}.ninja.log' - cmd.run(f"docker cp test-log:/oai-ran/cmake_targets/log/all.txt {logfile}") - cmd.run(f"docker rm -f test-log") - archiveArtifact(cmd, ctx, logfile) # check the status of the build ret = cmd.run(f"{self.cli} image inspect --format=\'Size = {{{{.Size}}}} bytes\' {name}:{imageTag}") if ret.returncode != 0: @@ -480,25 +432,23 @@ class Containerize(): cmd.close() # Analyze the logs - collectInfo = AnalyzeBuildLogs(log_files, status) + for name, lf in log_files: + ret = AnalyzeBuildLogs(name, lf) + imgStatus = ret['status'] + msg = f"size {allImagesSize[name]}, analysis of {os.path.basename(lf)}: {ret['errors']} errors, {ret['warnings']} warnings" + HTML.CreateHtmlTestRowQueue(name, 'OK' if imgStatus else 'KO', [msg]) + status = status and imgStatus if status: logging.info('\u001B[1m Building OAI Image(s) Pass\u001B[0m') - HTML.CreateHtmlTestRow(self.imageKind, 'OK', CONST.ALL_PROCESSES_OK) - HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize) - return True else: logging.error('\u001B[1m Building OAI Images Failed\u001B[0m') - HTML.CreateHtmlTestRow(self.imageKind, 'KO', CONST.ALL_PROCESSES_OK) - HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize) - HTML.CreateHtmlTabFooter(False) - return False + return status - def BuildProxy(self, ctx, HTML): - svr = self.eNB_serverId[self.eNB_instance] - lIpAddr, lSourcePath = self.GetCredentials(svr) - logging.debug('Building on server: ' + lIpAddr) - ssh = cls_cmd.getConnection(lIpAddr) + def BuildProxy(self, ctx, node, HTML): + lSourcePath = self.eNBSourceCodePath + logging.debug('Building on server: ' + node) + ssh = cls_cmd.getConnection(node) oldRanCommidID = self.ranCommitID oldRanRepository = self.ranRepository @@ -521,7 +471,7 @@ class Containerize(): buildProxy = ret.returncode != 0 # if no image, build new proxy if buildProxy: ssh.run(f'rm -Rf {lSourcePath}') - success = CreateWorkspace(lIpAddr, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge) + success = CreateWorkspace(node, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge) if not success: raise Exception("could not clone proxy repository") @@ -557,16 +507,6 @@ class Containerize(): self.ranAllowMerge = oldRanAllowMerge self.ranTargetBranch = oldRanTargetBranch - # we do not analyze the logs (we assume the proxy builds fine at this stage), - # but need to have the following information to correctly display the HTML - files = {} - errorandwarnings = {} - errorandwarnings['errors'] = 0 - errorandwarnings['warnings'] = 0 - errorandwarnings['status'] = True - files['Target Image Creation'] = errorandwarnings - collectInfo = {} - collectInfo['proxy'] = files ret = ssh.run(f'docker image inspect --format=\'Size = {{{{.Size}}}} bytes\' proxy:{tag}') result = re.search(r'Size *= *(?P[0-9\-]+) *bytes', ret.stdout) # Cleaning any created tmp volume @@ -580,21 +520,18 @@ class Containerize(): allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes' logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m') HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK) - HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize) return True else: logging.error('proxy size is unknown') allImagesSize['proxy'] = 'unknown' logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m') HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK) - HTML.CreateHtmlTabFooter(False) return False - def BuildRunTests(self, ctx, HTML): - svr = self.eNB_serverId[self.eNB_instance] - lIpAddr, lSourcePath = self.GetCredentials(svr) - logging.debug('Building on server: ' + lIpAddr) - cmd = cls_cmd.RemoteCmd(lIpAddr) + def BuildRunTests(self, ctx, node, HTML): + lSourcePath = self.eNBSourceCodePath + logging.debug('Building on server: ' + node) + cmd = cls_cmd.RemoteCmd(node) cmd.cd(lSourcePath) ret = cmd.run('hostnamectl') @@ -605,9 +542,6 @@ class Containerize(): raise Exception("Can build unit tests only on Ubuntu server") logging.debug('running on Ubuntu as expected') - if self.forcedWorkspaceCleanup: - cmd.run(f'sudo -S rm -Rf {lSourcePath}') - # check that ran-base image exists as we expect it baseImage = 'ran-base' baseTag = 'develop' @@ -658,10 +592,10 @@ class Containerize(): HTML.CreateHtmlTabFooter(False) return False - def Push_Image_to_Local_Registry(self, HTML, svr_id, tag_prefix=""): - lIpAddr, lSourcePath = self.GetCredentials(svr_id) - logging.debug('Pushing images to server: ' + lIpAddr) - ssh = cls_cmd.getConnection(lIpAddr) + def Push_Image_to_Local_Registry(self, node, HTML, tag_prefix=""): + lSourcePath = self.eNBSourceCodePath + logging.debug('Pushing images to server: ' + node) + ssh = cls_cmd.getConnection(node) imagePrefix = 'porcepix.sboai.cs.eurecom.fr' ret = ssh.run(f'docker login -u oaicicd -p oaicicd {imagePrefix}') if ret.returncode != 0: @@ -733,28 +667,26 @@ class Containerize(): msg = "Pulled Images:\n" + '\n'.join(pulled_images) return True, msg - def Pull_Image_from_Registry(self, HTML, svr_id, images, tag=None, tag_prefix="", registry="porcepix.sboai.cs.eurecom.fr", username="oaicicd", password="oaicicd"): - lIpAddr, lSourcePath = self.GetCredentials(svr_id) - logging.debug('\u001B[1m Pulling image(s) on server: ' + lIpAddr + '\u001B[0m') + def Pull_Image_from_Registry(self, HTML, node, images, tag=None, tag_prefix="", registry="porcepix.sboai.cs.eurecom.fr", username="oaicicd", password="oaicicd"): + logging.debug(f'\u001B[1m Pulling image(s) on server: {node}\u001B[0m') if not tag: tag = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) - with cls_cmd.getConnection(lIpAddr) as cmd: + with cls_cmd.getConnection(node) as cmd: success, msg = Containerize.Pull_Image(cmd, images, tag, tag_prefix, registry, username, password) - param = f"on node {lIpAddr}" + param = f"on node {node}" if success: HTML.CreateHtmlTestRowQueue(param, 'OK', [msg]) else: HTML.CreateHtmlTestRowQueue(param, 'KO', [msg]) return success - def Clean_Test_Server_Images(self, HTML, svr_id, images, tag=None): - lIpAddr, lSourcePath = self.GetCredentials(svr_id) - logging.debug(f'\u001B[1m Cleaning image(s) from server: {lIpAddr}\u001B[0m') + def Clean_Test_Server_Images(self, HTML, node, images, tag=None): + logging.debug(f'\u001B[1m Cleaning image(s) from server: {node}\u001B[0m') if not tag: tag = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) status = True - with cls_cmd.getConnection(lIpAddr) as myCmd: + with cls_cmd.getConnection(node) as myCmd: removed_images = [] for image in images: fullImage = f"oai-ci/{image}:{tag}" @@ -765,30 +697,28 @@ class Containerize(): msg = "Removed Images:\n" + '\n'.join(removed_images) s = 'OK' if status else 'KO' - param = f"on node {lIpAddr}" + param = f"on node {node}" HTML.CreateHtmlTestRowQueue(param, s, [msg]) return status - def Create_Workspace(self,HTML): - svr = self.eNB_serverId[self.eNB_instance] - lIpAddr, lSourcePath = self.GetCredentials(svr) - success = CreateWorkspace(lIpAddr, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge) + def Create_Workspace(self, node, HTML): + lSourcePath = self.eNBSourceCodePath + success = CreateWorkspace(node, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge) if success: HTML.CreateHtmlTestRowQueue('N/A', 'OK', [f"created workspace {lSourcePath}"]) else: HTML.CreateHtmlTestRowQueue('N/A', 'KO', ["cannot create workspace"]) return success - def DeployObject(self, ctx, HTML): - svr = self.eNB_serverId[self.eNB_instance] + def DeployObject(self, ctx, node, HTML): num_attempts = self.num_attempts - lIpAddr, lSourcePath = self.GetCredentials(svr) - logging.debug(f'Deploying OAI Object on server: {lIpAddr}') - yaml = self.yamlPath[self.eNB_instance].strip('/') + lSourcePath = self.eNBSourceCodePath + logging.debug(f'Deploying OAI Object on server: {node}') + yaml = self.yamlPath.strip('/') wd = f'{lSourcePath}/{yaml}' wd_yaml = f'{wd}/docker-compose.y*ml' - with cls_cmd.getConnection(lIpAddr) as ssh: - services = GetServices(ssh, self.services[self.eNB_instance], wd_yaml) + with cls_cmd.getConnection(node) as ssh: + services = GetServices(ssh, self.services, wd_yaml) if services == [] or services == ' ' or services == None: msg = 'Cannot determine services to start' logging.error(msg) @@ -823,13 +753,12 @@ class Containerize(): HTML.CreateHtmlTestRowQueue('N/A', 'KO', ['\n'.join(imagesInfo)]) return deployed - def UndeployObject(self, ctx, HTML, RAN): - svr = self.eNB_serverId[self.eNB_instance] - lIpAddr, lSourcePath = self.GetCredentials(svr) - logging.debug(f'\u001B[1m Undeploying OAI Object from server: {lIpAddr}\u001B[0m') - yaml = self.yamlPath[self.eNB_instance].strip('/') + def UndeployObject(self, ctx, node, HTML, RAN): + lSourcePath = self.eNBSourceCodePath + logging.debug(f'\u001B[1m Undeploying OAI Object from server: {node}\u001B[0m') + yaml = self.yamlPath.strip('/') wd = f'{lSourcePath}/{yaml}' - with cls_cmd.getConnection(lIpAddr) as ssh: + with cls_cmd.getConnection(node) as ssh: ExistEnvFilePrint(ssh, wd) services = GetRunningServices(ssh, f"{wd}/docker-compose.y*ml") copyin_res = None diff --git a/ci-scripts/cls_native.py b/ci-scripts/cls_native.py index 3dde286c3a..1736cc144d 100644 --- a/ci-scripts/cls_native.py +++ b/ci-scripts/cls_native.py @@ -34,16 +34,16 @@ DPDK_PATH = '/opt/dpdk-t2-22.11.0' class Native(): - def Build(ctx, test_case, HTML, host, directory, options): - logging.debug(f'Building on server: {host}') + def Build(ctx, node, test_case, HTML, directory, options): + logging.debug(f'Building on server: {node}') HTML.testCase_id = test_case - with cls_cmd.getConnection(host) as ssh: + with cls_cmd.getConnection(node) as ssh: base = f"{directory}/cmake_targets" ret = ssh.run(f"C_INCLUDE_PATH={DPDK_PATH}/include/ PKG_CONFIG_PATH={DPDK_PATH}/lib64/pkgconfig/ {base}/build_oai {options} > {base}/build_oai.log", timeout=900) success = ret.returncode == 0 logs = ssh.run(f"cat {base}/build_oai.log", silent=True) - logging.debug(f"build finished with code {ret.returncode}, output:\n{logs.stdout}") + logging.debug(f"build finished with code {ret.returncode}") archiveArtifact(ssh, ctx, f'{base}/build_oai.log') @@ -70,7 +70,7 @@ class Native(): workSpacePath = f'{directory}/cmake_targets' runLogFile=f'{workSpacePath}/physim.log' with cls_cmd.getConnection(host) as cmd: - cmd.run(f'sudo LD_LIBRARY_PATH=.:{DPDK_PATH}/lib64/ {workSpacePath}/ran_build/build/{physim_test} {options} >> {runLogFile}') + cmd.run(f'sudo LD_LIBRARY_PATH=.:{DPDK_PATH}/lib64/ {workSpacePath}/ran_build/build/{physim_test} {options} > {runLogFile} 2>&1') physim_file = archiveArtifact(cmd, ctx, runLogFile) success, msg = cls_analysis.Analysis.analyze_physim(physim_file, physim_test, options, threshold) if success: diff --git a/ci-scripts/cls_oai_html.py b/ci-scripts/cls_oai_html.py index c90b01a338..c4e13b2e62 100644 --- a/ci-scripts/cls_oai_html.py +++ b/ci-scripts/cls_oai_html.py @@ -70,16 +70,6 @@ class HTMLManagement(): self.testCase_id = '' self.desc = '' - self.OsVersion = ['', ''] - self.KernelVersion = ['', ''] - self.UhdVersion = ['', ''] - self.UsrpBoard = ['', ''] - self.CpuNb = ['', ''] - self.CpuModel = ['', ''] - self.CpuMHz = ['', ''] - - - #----------------------------------------------------------- # HTML structure creation functions #----------------------------------------------------------- @@ -342,58 +332,6 @@ class HTMLManagement(): self.htmlFile.write(' \n') self.htmlFile.close() - - def CreateHtmlNextTabHeaderTestRow(self, collectInfo, allImagesSize, machine='eNB'): - if (self.htmlFooterCreated or (not self.htmlHeaderCreated)): - return - self.htmlFile = open('test_results.html', 'a') - if bool(collectInfo) == False: - self.htmlFile.write(' \n') - self.htmlFile.write(' ----IMAGES BUILDING FAILED - Unable to recover the image logs ---- \n') - self.htmlFile.write(' \n') - else: - for image in collectInfo: - files = collectInfo[image] - # TabHeader for image logs on built shared and target images - if allImagesSize[image].count('unknown') > 0: - self.htmlFile.write(' \n') - elif allImagesSize[image].count('Build Failed') > 0: - self.htmlFile.write(' \n') - else: - self.htmlFile.write(' \n') - self.htmlFile.write(' ---- ' + image + ' IMAGE STATUS ----> Size ' + allImagesSize[image] + ' \n') - self.htmlFile.write(' \n') - self.htmlFile.write(' \n') - self.htmlFile.write(' Element\n') - self.htmlFile.write(' Nb Errors\n') - self.htmlFile.write(' Nb Warnings\n') - self.htmlFile.write(' Status\n') - self.htmlFile.write(' \n') - - for fil in files: - parameters = files[fil] - # TestRow for image logs on built shared and target images - self.htmlFile.write(' \n') - self.htmlFile.write(' ' + fil + ' \n') - if (parameters['errors'] == 0): - self.htmlFile.write(' ' + str(parameters['errors']) + '\n') - else: - self.htmlFile.write(' ' + str(parameters['errors']) + '\n') - if (parameters['errors'] > 0): - self.htmlFile.write(' ' + str(parameters['warnings']) + '\n') - elif (parameters['warnings'] == 0): - self.htmlFile.write(' ' + str(parameters['warnings']) + '\n') - else: - self.htmlFile.write(' ' + str(parameters['warnings']) + '\n') - if (parameters['errors'] == 0) and (parameters['warnings'] == 0): - self.htmlFile.write(' OK \n') - elif (parameters['errors'] == 0): - self.htmlFile.write(' OK \n') - else: - self.htmlFile.write(' NOT OK \n') - self.htmlFile.write(' \n') - self.htmlFile.close() - #for the moment it is limited to 4 columns, to be made generic later def CreateHtmlDataLogTable(self, DataLog): if (self.htmlFooterCreated or (not self.htmlHeaderCreated)): diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 37b0ca76a9..18631134c0 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -244,6 +244,7 @@ def Custom_Script(HTML, node, script): return status == 'OK' or status == 'Warning' def IdleSleep(HTML, idle_sleep_time): + logging.debug(f"sleep for {idle_sleep_time} seconds") time.sleep(idle_sleep_time) HTML.CreateHtmlTestRow(f"{idle_sleep_time} sec", 'OK', CONST.ALL_PROCESSES_OK) return True diff --git a/ci-scripts/cls_static_code_analysis.py b/ci-scripts/cls_static_code_analysis.py index 62e9416082..63b5b5b6dd 100644 --- a/ci-scripts/cls_static_code_analysis.py +++ b/ci-scripts/cls_static_code_analysis.py @@ -76,25 +76,18 @@ class StaticCodeAnalysis(): self.ranAllowMerge = False self.ranCommitID = '' self.ranTargetBranch = '' - self.eNBIPAddress = '' - self.eNBUserName = '' - self.eNBPassword = '' self.eNBSourceCodePath = '' - def CppCheckAnalysis(self, ctx, HTML): + def CppCheckAnalysis(self, ctx, node, HTML): if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '': HELP.GenericHelp(CONST.Version) sys.exit('Insufficient Parameter') - lIpAddr = self.eNBIPAddress - lUserName = self.eNBUserName - lPassWord = self.eNBPassword lSourcePath = self.eNBSourceCodePath - if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '': - HELP.GenericHelp(CONST.Version) - sys.exit('Insufficient Parameter') - logging.debug('Building on server: ' + lIpAddr) - cmd = cls_cmd.getConnection(lIpAddr) + if not lSourcePath or not node: + raise ValueError(f"{lSourcePath=} {node=}") + logging.debug('Building on server: ' + node) + cmd = cls_cmd.getConnection(node) self.testCase_id = HTML.testCase_id # on RedHat/CentOS .git extension is mandatory result = re.search('([a-zA-Z0-9\:\-\.\/])+\.git', self.ranRepository) @@ -184,20 +177,16 @@ class StaticCodeAnalysis(): return True - def LicenceAndFormattingCheck(self, ctx, HTML): + def LicenceAndFormattingCheck(self, ctx, node, HTML): # Workspace is no longer recreated from scratch. # It implies that this method shall be called last within a build pipeline # where workspace is already created - lIpAddr = self.eNBIPAddress - lUserName = self.eNBUserName - lPassWord = self.eNBPassword lSourcePath = self.eNBSourceCodePath - if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '': - HELP.GenericHelp(CONST.Version) - sys.exit('Insufficient Parameter') - logging.debug('Building on server: ' + lIpAddr) - cmd = cls_cmd.getConnection(lIpAddr) + if not node or not lSourcePath: + raise ValueError(f"{lSourcePath=} {node=}") + logging.debug('Building on server: ' + node) + cmd = cls_cmd.getConnection(node) self.testCase_id = HTML.testCase_id check_options = '' diff --git a/ci-scripts/helpreadme.py b/ci-scripts/helpreadme.py index ce4c594f58..a9783bd1f0 100644 --- a/ci-scripts/helpreadme.py +++ b/ci-scripts/helpreadme.py @@ -52,10 +52,7 @@ def GitSrvHelp(repository,branch,commit,mergeallow,targetbranch): print(' --ranAllowMerge=[Allow Merge Request (with target branch) (true or false)] -- ' + mergeallow) print(' --ranTargetBranch=[Target Branch in case of a Merge Request] -- ' + targetbranch) -def eNBSrvHelp(ipaddr, username, password, sourcepath): - print(' --eNBIPAddress=[eNB\'s IP Address] -- ' + ipaddr) - print(' --eNBUserName=[eNB\'s Login User Name] -- ' + username) - print(' --eNBPassword=[eNB\'s Login Password] -- ' + password) +def eNBSrvHelp(sourcepath): print(' --eNBSourceCodePath=[eNB\'s Source Code Path] -- ' + sourcepath) def XmlHelp(filename): diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 0fdf538052..cbc03a47d5 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -102,98 +102,46 @@ def ExecuteActionWithParam(action, ctx): if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy' or action == "Build_Cluster_Image" or action == "Build_Run_Tests": RAN.Build_eNB_args=test.findtext('Build_eNB_args') CONTAINERS.imageKind=test.findtext('kind') - forced_workspace_cleanup = test.findtext('forced_workspace_cleanup') - RAN.Build_eNB_forced_workspace_cleanup=False - CONTAINERS.forcedWorkspaceCleanup=False - CLUSTER.forcedWorkspaceCleanup = False - if forced_workspace_cleanup is not None and re.match('true', forced_workspace_cleanup, re.IGNORECASE): - RAN.Build_eNB_forced_workspace_cleanup = True - CONTAINERS.forcedWorkspaceCleanup = True - CLUSTER.forcedWorkspaceCleanup = True - eNB_instance=test.findtext('eNB_instance') - if (eNB_instance is None): - RAN.eNB_instance=0 - CONTAINERS.eNB_instance=0 - else: - RAN.eNB_instance=int(eNB_instance) - CONTAINERS.eNB_instance=int(eNB_instance) - eNB_serverId=test.findtext('eNB_serverId') - if (eNB_serverId is None): - RAN.eNB_serverId[RAN.eNB_instance]='0' - CONTAINERS.eNB_serverId[RAN.eNB_instance]='0' - else: - RAN.eNB_serverId[RAN.eNB_instance]=eNB_serverId - CONTAINERS.eNB_serverId[CONTAINERS.eNB_instance]=eNB_serverId - xmlBgBuildField = test.findtext('backgroundBuild') - if (xmlBgBuildField is None): - RAN.backgroundBuild=False - else: - if re.match('true', xmlBgBuildField, re.IGNORECASE): - RAN.backgroundBuild=True - else: - RAN.backgroundBuild=False + node = test.findtext('node') proxy_commit = test.findtext('proxy_commit') if proxy_commit is not None: CONTAINERS.proxyCommit = proxy_commit if action == 'Build_eNB': - success = cls_native.Native.Build(ctx, HTML.testCase_id, HTML, RAN.eNBIPAddress, RAN.eNBSourceCodePath, RAN.Build_eNB_args) + success = cls_native.Native.Build(ctx, node, HTML.testCase_id, HTML, RAN.eNBSourceCodePath, RAN.Build_eNB_args) elif action == 'Build_Image': - success = CONTAINERS.BuildImage(ctx, HTML) + success = CONTAINERS.BuildImage(ctx, node, HTML) elif action == 'Build_Proxy': - success = CONTAINERS.BuildProxy(ctx, HTML) + success = CONTAINERS.BuildProxy(ctx, node, HTML) elif action == 'Build_Cluster_Image': - success = CLUSTER.BuildClusterImage(ctx, HTML) + success = CLUSTER.BuildClusterImage(ctx, node, HTML) elif action == 'Build_Run_Tests': - success = CONTAINERS.BuildRunTests(ctx, HTML) + success = CONTAINERS.BuildRunTests(ctx, node, HTML) elif action == 'Initialize_eNB': + node = test.findtext('node') datalog_rt_stats_file=test.findtext('rt_stats_cfg') if datalog_rt_stats_file is None: RAN.datalog_rt_stats_file='datalog_rt_stats.default.yaml' else: RAN.datalog_rt_stats_file=datalog_rt_stats_file RAN.Initialize_eNB_args=test.findtext('Initialize_eNB_args') - eNB_instance=test.findtext('eNB_instance') - USRPIPAddress=test.findtext('USRP_IPAddress') - if USRPIPAddress is None: - RAN.USRPIPAddress='' - else: - RAN.USRPIPAddress=USRPIPAddress - if (eNB_instance is None): - RAN.eNB_instance=0 - else: - RAN.eNB_instance=int(eNB_instance) - eNB_serverId=test.findtext('eNB_serverId') - if (eNB_serverId is None): - RAN.eNB_serverId[RAN.eNB_instance]='0' - else: - RAN.eNB_serverId[RAN.eNB_instance]=eNB_serverId - + USRPIPAddress = test.findtext('USRP_IPAddress') or '' + #local variable air_interface air_interface = test.findtext('air_interface') if (air_interface is None) or (air_interface.lower() not in ['nr','lte']): - RAN.air_interface[RAN.eNB_instance] = 'lte-softmodem' + RAN.air_interface = 'lte-softmodem' else: - RAN.air_interface[RAN.eNB_instance] = air_interface.lower() +'-softmodem' + RAN.air_interface = air_interface.lower() +'-softmodem' cmd_prefix = test.findtext('cmd_prefix') if cmd_prefix is not None: RAN.cmd_prefix = cmd_prefix - success = RAN.InitializeeNB(HTML) + success = RAN.InitializeeNB(ctx, node, HTML) elif action == 'Terminate_eNB': - eNB_instance=test.findtext('eNB_instance') - if (eNB_instance is None): - RAN.eNB_instance=0 - else: - RAN.eNB_instance=int(eNB_instance) - eNB_serverId=test.findtext('eNB_serverId') - if (eNB_serverId is None): - RAN.eNB_serverId[RAN.eNB_instance]='0' - else: - RAN.eNB_serverId[RAN.eNB_instance]=eNB_serverId - + node = test.findtext('node') #retx checkers - string_field=test.findtext('d_retx_th') + string_field = test.findtext('d_retx_th') if (string_field is not None): RAN.ran_checkers['d_retx_th'] = [float(x) for x in string_field.split(',')] string_field=test.findtext('u_retx_th') @@ -203,10 +151,10 @@ def ExecuteActionWithParam(action, ctx): #local variable air_interface air_interface = test.findtext('air_interface') if (air_interface is None) or (air_interface.lower() not in ['nr','lte']): - RAN.air_interface[RAN.eNB_instance] = 'lte-softmodem' + RAN.air_interface = 'lte-softmodem' else: - RAN.air_interface[RAN.eNB_instance] = air_interface.lower() +'-softmodem' - success = RAN.TerminateeNB(ctx, HTML) + RAN.air_interface = air_interface.lower() +'-softmodem' + success = RAN.TerminateeNB(ctx, node, 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': CiTestObj.ue_ids = test.findtext('id').split(' ') @@ -296,8 +244,8 @@ def ExecuteActionWithParam(action, ctx): elif action == 'Deploy_Run_PhySim': oc_release = test.findtext('oc_release') - svr_id = test.findtext('svr_id') or None - success = CLUSTER.deploy_oc_physim(ctx, HTML, oc_release, svr_id) + node = test.findtext('node') or None + success = CLUSTER.deploy_oc_physim(ctx, HTML, oc_release, node) elif action == 'DeployCoreNetwork' or action == 'UndeployCoreNetwork': cn_id = test.findtext('cn_id') @@ -305,62 +253,52 @@ def ExecuteActionWithParam(action, ctx): success = core_op(cn_id, ctx, HTML) elif action == 'Deploy_Object' or action == 'Undeploy_Object' or action == "Create_Workspace": - eNB_instance=test.findtext('eNB_instance') - if (eNB_instance is None): - CONTAINERS.eNB_instance=0 - else: - CONTAINERS.eNB_instance=int(eNB_instance) - eNB_serverId=test.findtext('eNB_serverId') - if (eNB_serverId is None): - CONTAINERS.eNB_serverId[CONTAINERS.eNB_instance]='0' - else: - CONTAINERS.eNB_serverId[CONTAINERS.eNB_instance]=eNB_serverId - string_field = test.findtext('yaml_path') - if (string_field is not None): - CONTAINERS.yamlPath[CONTAINERS.eNB_instance] = string_field + node = test.findtext('node') + CONTAINERS.yamlPath = test.findtext('yaml_path') string_field=test.findtext('d_retx_th') if (string_field is not None): CONTAINERS.ran_checkers['d_retx_th'] = [float(x) for x in string_field.split(',')] string_field=test.findtext('u_retx_th') if (string_field is not None): CONTAINERS.ran_checkers['u_retx_th'] = [float(x) for x in string_field.split(',')] - string_field = test.findtext('services') - if string_field is not None: - CONTAINERS.services[CONTAINERS.eNB_instance] = string_field + CONTAINERS.services = test.findtext('services') CONTAINERS.num_attempts = int(test.findtext('num_attempts') or 1) CONTAINERS.deploymentTag = cls_containerize.CreateTag(CONTAINERS.ranCommitID, CONTAINERS.ranBranch, CONTAINERS.ranAllowMerge) if action == 'Deploy_Object': - success = CONTAINERS.DeployObject(ctx, HTML) + success = CONTAINERS.DeployObject(ctx, node, HTML) elif action == 'Undeploy_Object': - success = CONTAINERS.UndeployObject(ctx, HTML, RAN) + success = CONTAINERS.UndeployObject(ctx, node, HTML, RAN) elif action == 'Create_Workspace': if force_local: # Do not create a working directory when running locally. Current repo directory will be used return True - success = CONTAINERS.Create_Workspace(HTML) + success = CONTAINERS.Create_Workspace(node, HTML) elif action == 'Run_Physim': physim_options = test.findtext('physim_run_args') physim_test = test.findtext('physim_test') physim_threshold = test.findtext('physim_time_threshold') or 'inf' - success = cls_native.Native.Run_Physim(ctx, HTML, RAN.eNBIPAddress, RAN.eNBSourceCodePath, physim_options, physim_test, physim_threshold) + node = test.findtext('node') + success = cls_native.Native.Run_Physim(ctx, HTML, node, RAN.eNBSourceCodePath, physim_options, physim_test, physim_threshold) elif action == 'LicenceAndFormattingCheck': - success = SCA.LicenceAndFormattingCheck(ctx, HTML) + node = test.findtext('node') + success = SCA.LicenceAndFormattingCheck(ctx, node, HTML) elif action == 'Cppcheck_Analysis': - success = SCA.CppCheckAnalysis(ctx, HTML) + node = test.findtext('node') + success = SCA.CppCheckAnalysis(ctx, node, HTML) elif action == 'Push_Local_Registry': - svr_id = test.findtext('svr_id') + node = test.findtext('node') tag_prefix = test.findtext('tag_prefix') or "" - success = CONTAINERS.Push_Image_to_Local_Registry(HTML, svr_id, tag_prefix) + success = CONTAINERS.Push_Image_to_Local_Registry(node, HTML, tag_prefix) elif action == 'Pull_Local_Registry' or action == 'Clean_Test_Server_Images': if force_local: # Do not pull or remove images when running locally. User is supposed to handle image creation & cleanup return True - svr_id = test.findtext('svr_id') + node = test.findtext('node') tag_prefix = test.findtext('tag_prefix') or "" images = test.findtext('images').split() # hack: for FlexRIC, we need to overwrite the tag to use @@ -368,9 +306,9 @@ def ExecuteActionWithParam(action, ctx): if len(images) == 1 and images[0] == "oai-flexric": tag = CONTAINERS.flexricTag if action == "Pull_Local_Registry": - success = CONTAINERS.Pull_Image_from_Registry(HTML, svr_id, images, tag=tag, tag_prefix=tag_prefix) + success = CONTAINERS.Pull_Image_from_Registry(HTML, node, images, tag=tag, tag_prefix=tag_prefix) if action == "Clean_Test_Server_Images": - success = CONTAINERS.Clean_Test_Server_Images(HTML, svr_id, images, tag=tag) + success = CONTAINERS.Clean_Test_Server_Images(HTML, node, images, tag=tag) elif action == 'Custom_Command': node = test.findtext('node') @@ -479,7 +417,7 @@ elif re.match('^TerminateSPGW$', mode, re.IGNORECASE): elif re.match('^LogCollectBuild$', mode, re.IGNORECASE): logging.warning("Option LogCollectBuild ignored") elif re.match('^LogCollecteNB$', mode, re.IGNORECASE): - if RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '': + if RAN.eNBSourceCodePath == '': HELP.GenericHelp(CONST.Version) sys.exit('Insufficient Parameter') if os.path.isdir('cmake_targets/log'): @@ -491,7 +429,6 @@ elif re.match('^LogCollecteNB$', mode, re.IGNORECASE): logging.error("Command '{}' returned non-zero exit status {}.".format(e.cmd, e.returncode)) logging.error("Error output:\n{}".format(e.output)) sys.exit(0) - RAN.LogCollecteNB() elif re.match('^LogCollectHSS$', mode, re.IGNORECASE): logging.warning("Option LogCollectHSS ignored") elif re.match('^LogCollectMME$', mode, re.IGNORECASE): @@ -536,12 +473,12 @@ 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----------------------------------------\u001B[0m') 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 == '': + if RAN.ranRepository == '' or RAN.ranBranch == '' or RAN.eNBSourceCodePath == '': HELP.GenericHelp(CONST.Version) if RAN.ranRepository == '': HELP.GitSrvHelp(RAN.ranRepository, RAN.ranBranch, RAN.ranCommitID, RAN.ranAllowMerge, RAN.ranTargetBranch) - if RAN.eNBIPAddress == '' or RAN.eNBUserName == '' or RAN.eNBPassword == '' or RAN.eNBSourceCodePath == '': - HELP.eNBSrvHelp(RAN.eNBIPAddress, RAN.eNBUserName, RAN.eNBPassword, RAN.eNBSourceCodePath) + if RAN.eNBSourceCodePath == '': + HELP.eNBSrvHelp(RAN.eNBSourceCodePath) sys.exit('Insufficient Parameter') else: if CiTestObj.ranRepository == '' or CiTestObj.ranBranch == '': diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py index 48039aa2e7..e440fc3a62 100644 --- a/ci-scripts/ran.py +++ b/ci-scripts/ran.py @@ -43,7 +43,7 @@ import cls_cmd #----------------------------------------------------------- # OAI Testing modules #----------------------------------------------------------- -import sshconnection as SSH +import cls_cmd import helpreadme as HELP import constants as CONST from cls_ci_helper import archiveArtifact @@ -60,33 +60,14 @@ class RANManagement(): self.ranAllowMerge = False self.ranCommitID = '' self.ranTargetBranch = '' - self.eNBIPAddress = '' - self.eNBUserName = '' - self.eNBPassword = '' self.eNBSourceCodePath = '' - self.eNB1IPAddress = '' - self.eNB1UserName = '' - self.eNB1Password = '' - self.eNB1SourceCodePath = '' - self.eNB2IPAddress = '' - self.eNB2UserName = '' - self.eNB2Password = '' - self.eNB2SourceCodePath = '' - self.Build_eNB_args = '' - self.backgroundBuild = False - self.backgroundBuildTestId = ['', '', ''] - self.Build_eNB_forced_workspace_cleanup = False self.Initialize_eNB_args = '' self.imageKind = '' - self.air_interface = ['', '', ''] #changed from 'lte' to '' may lead to side effects in main - self.eNB_instance = 0 - self.eNB_serverId = ['', '', ''] - self.eNBLogFiles = ['', '', ''] + self.air_interface = '' self.eNBOptions = ['', '', ''] self.eNBmbmsEnables = [False, False, False] self.eNBstatuses = [-1, -1, -1] self.testCase_id = '' - self.epcPcapFile = '' self.runtime_stats= '' self.datalog_rt_stats={} self.datalog_rt_stats_file='datalog_rt_stats.default.yaml' @@ -102,286 +83,98 @@ class RANManagement(): # RAN management functions #----------------------------------------------------------- - def InitializeeNB(self, HTML): - if self.eNB_serverId[self.eNB_instance] == '0': - lIpAddr = self.eNBIPAddress - lUserName = self.eNBUserName - lPassWord = self.eNBPassword - lSourcePath = self.eNBSourceCodePath - elif self.eNB_serverId[self.eNB_instance] == '1': - lIpAddr = self.eNB1IPAddress - lUserName = self.eNB1UserName - lPassWord = self.eNB1Password - lSourcePath = self.eNB1SourceCodePath - elif self.eNB_serverId[self.eNB_instance] == '2': - lIpAddr = self.eNB2IPAddress - lUserName = self.eNB2UserName - lPassWord = self.eNB2Password - lSourcePath = self.eNB2SourceCodePath - if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '': - HELP.GenericHelp(CONST.Version) - sys.exit('Insufficient Parameter') - logging.debug('Starting eNB/gNB on server: ' + lIpAddr) + def InitializeeNB(self, ctx, node, HTML): + if not node: + raise ValueError(f"{node=}") + logging.debug('Starting eNB/gNB on server: ' + node) self.testCase_id = HTML.testCase_id - mySSH = SSH.SSHConnection() + lSourcePath = self.eNBSourceCodePath + cmd = cls_cmd.getConnection(node) - mySSH.open(lIpAddr, lUserName, lPassWord) - mySSH.command('cd ' + lSourcePath, '\$', 5) # Initialize_eNB_args usually start with -O and followed by the location in repository full_config_file = self.Initialize_eNB_args.replace('-O ','') extra_options = '' extIdx = full_config_file.find('.conf') - if (extIdx > 0): - extra_options = full_config_file[extIdx + 5:] - # if tracer options is on, compiling and running T Tracer - result = re.search('T_stdout', str(extra_options)) - if result is not None: - logging.debug('\u001B[1m Compiling and launching T Tracer\u001B[0m') - mySSH.command('cd common/utils/T/tracer', '\$', 5) - mySSH.command('make', '\$', 10) - mySSH.command('echo $USER; nohup ./record -d ../T_messages.txt -o ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '_record.raw -ON -off VCD -off HEAVY -off LEGACY_GROUP_TRACE -off LEGACY_GROUP_DEBUG > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '_record.log 2>&1 &', lUserName, 5) - mySSH.command('cd ' + lSourcePath, '\$', 5) - full_config_file = full_config_file[:extIdx + 5] - config_path, config_file = os.path.split(full_config_file) - else: - sys.exit('Insufficient Parameter') - ci_full_config_file = config_path + '/ci-' + config_file - rruCheck = False - result = re.search('^rru|^rcc|^du.band', str(config_file)) - if result is not None: - rruCheck = True - mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5) - mySSH.command('sed -i -e \'s/CI_ENB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2); - mySSH.command('sed -i -e \'s/CI_GNB_IP_ADDR/' + lIpAddr + '/\' ' + ci_full_config_file, '\$', 2); - mySSH.command('sed -i -e \'s/CI_RCC_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2); - mySSH.command('sed -i -e \'s/CI_RRU1_IP_ADDR/' + self.eNB1IPAddress + '/\' ' + ci_full_config_file, '\$', 2); - mySSH.command('sed -i -e \'s/CI_RRU2_IP_ADDR/' + self.eNB2IPAddress + '/\' ' + ci_full_config_file, '\$', 2); - mySSH.command('sed -i -e \'s/CI_FR1_CTL_ENB_IP_ADDR/' + self.eNBIPAddress + '/\' ' + ci_full_config_file, '\$', 2); - self.eNBmbmsEnables[int(self.eNB_instance)] = False - mySSH.command('grep --colour=never enable_enb_m2 ' + ci_full_config_file, '\$', 2); - result = re.search('yes', mySSH.getBefore()) - if result is not None: - self.eNBmbmsEnables[int(self.eNB_instance)] = True - logging.debug('\u001B[1m MBMS is enabled on this eNB\u001B[0m') - result = re.search('noS1', str(self.Initialize_eNB_args)) - eNBinNoS1 = False - if result is not None: - eNBinNoS1 = True - logging.debug('\u001B[1m eNB is in noS1 configuration \u001B[0m') - # Launch eNB with the modified config file - mySSH.command('source oaienv', '\$', 5) - mySSH.command('cd cmake_targets', '\$', 5) - if self.air_interface[self.eNB_instance] == 'nr-softmodem': - mySSH.command('if [ -e rbconfig.raw ]; then echo ' + lPassWord + ' | sudo -S rm rbconfig.raw; fi', '\$', 5) - mySSH.command('if [ -e reconfig.raw ]; then echo ' + lPassWord + ' | sudo -S rm reconfig.raw; fi', '\$', 5) - # NOTE: WE SHALL do a check if the executable is present (in case build went wrong) + if (extIdx <= 0): + raise ValueError(f"no config file in {self.Initialize_eNB_args}") + extra_options = full_config_file[extIdx + 5:] + full_config_file = full_config_file[:extIdx + 5] + config_path, config_file = os.path.split(full_config_file) - #hack UHD_RFNOC_DIR variable for gNB / N310 on RHEL8 server: - #if the USRP address is in the xml then we are using an eth USRP (N3xx) - if self.air_interface[self.eNB_instance] == 'lte-softmodem': - gNB = False - else: - gNB = True - mySSH.command(f'echo "ulimit -c unlimited && {self.cmd_prefix} ./ran_build/build/{self.air_interface[self.eNB_instance]} -O {lSourcePath}/{ci_full_config_file} {extra_options}" > ./my-lte-softmodem-run{self.eNB_instance}.sh', '\$', 5) + logfile = f'{lSourcePath}/cmake_targets/enb.log' + cmd.cd(f"{lSourcePath}/cmake_targets/") # important: set wd so nrL1_stats.log etc are logged here + cmd.run(f'sudo -E stdbuf -o0 {self.cmd_prefix} {lSourcePath}/cmake_targets/ran_build/build/{self.air_interface} -O {lSourcePath}/{full_config_file} {extra_options} > {logfile} 2>&1 &') - mySSH.command('chmod 775 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5) - mySSH.command('echo ' + lPassWord + ' | sudo -S rm -Rf enb_' + self.testCase_id + '.log', '\$', 5) - mySSH.command('echo $USER; nohup sudo -E stdbuf -o0 ./my-lte-softmodem-run' + str(self.eNB_instance) + '.sh > ' + lSourcePath + '/cmake_targets/enb_' + self.testCase_id + '.log 2>&1 &', lUserName, 10) - - self.eNBLogFiles[int(self.eNB_instance)] = 'enb_' + self.testCase_id + '.log' if extra_options != '': - self.eNBOptions[int(self.eNB_instance)] = extra_options - time.sleep(6) - doLoop = True - loopCounter = 20 + self.eNBOptions = extra_options + enbDidSync = False - while (doLoop): - loopCounter = loopCounter - 1 - if (loopCounter == 0): - # In case of T tracer recording, we may need to kill it - result = re.search('T_stdout', str(self.Initialize_eNB_args)) - if result is not None: - mySSH.command('killall --signal SIGKILL record', '\$', 5) - mySSH.close() - doLoop = False - 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) - return False - else: - mySSH.command('stdbuf -o0 cat enb_' + self.testCase_id + '.log | grep -E --text --color=never -i "wait|sync|Starting|Started"', '\$', 4) - if rruCheck: - result = re.search('wait RUs', mySSH.getBefore()) - else: - result = re.search('got sync|Starting F1AP at CU', mySSH.getBefore()) - if result is None: - time.sleep(6) - else: - doLoop = False - enbDidSync = True - time.sleep(10) - - rruCheck = False - result = re.search('^rru|^du.band', str(config_file)) - if result is not None: - rruCheck = True - if enbDidSync and eNBinNoS1 and not rruCheck: - mySSH.command('ifconfig oaitun_enb1', '\$', 4) - mySSH.command('ifconfig oaitun_enb1', '\$', 4) - result = re.search('inet addr:1|inet 1', mySSH.getBefore()) + for _ in range(10): + time.sleep(5) + ret = cmd.run(f'grep --text -E --color=never -i "wait|sync|Starting|Started" {logfile}', reportNonZero=False) + result = re.search('got sync|Starting F1AP at CU', ret.stdout) if result is not None: - logging.debug('\u001B[1m oaitun_enb1 interface is mounted and configured\u001B[0m') - else: - logging.error('\u001B[1m oaitun_enb1 interface is either NOT mounted or NOT configured\u001B[0m') - if self.eNBmbmsEnables[int(self.eNB_instance)]: - mySSH.command('ifconfig oaitun_enm1', '\$', 4) - result = re.search('inet addr', mySSH.getBefore()) - if result is not None: - logging.debug('\u001B[1m oaitun_enm1 interface is mounted and configured\u001B[0m') - else: - logging.error('\u001B[1m oaitun_enm1 interface is either NOT mounted or NOT configured\u001B[0m') + enbDidSync = True + break + if not enbDidSync: + cmd.run(f'sudo killall -9 {self.air_interface}') # in case it did not stop automatically + archiveArtifact(cmd, ctx, logfile) + + cmd.close() + + msg = f'{self.cmd_prefix} {self.air_interface} -O {config_file} {extra_options}' if enbDidSync: - self.eNBstatuses[int(self.eNB_instance)] = int(self.eNB_serverId[self.eNB_instance]) + logging.debug('\u001B[1m Initialize eNB/gNB Completed\u001B[0m') + HTML.CreateHtmlTestRowQueue(msg, 'OK', []) + else: + logging.error('\u001B[1;37;41m eNB/gNB logging system did not show got sync! \u001B[0m') + HTML.CreateHtmlTestRowQueue(msg, 'KO', []) - mySSH.close() - - HTML.CreateHtmlTestRow(f'{self.cmd_prefix} {self.air_interface[self.eNB_instance]} -O {config_file} {extra_options}', 'OK', CONST.ALL_PROCESSES_OK) - logging.debug('\u001B[1m Initialize eNB/gNB Completed\u001B[0m') return enbDidSync - def TerminateeNB(self, ctx, HTML): - if self.eNB_serverId[self.eNB_instance] == '0': - lIpAddr = self.eNBIPAddress - lUserName = self.eNBUserName - lPassWord = self.eNBPassword - lSourcePath = self.eNBSourceCodePath - elif self.eNB_serverId[self.eNB_instance] == '1': - lIpAddr = self.eNB1IPAddress - lUserName = self.eNB1UserName - lPassWord = self.eNB1Password - lSourcePath = self.eNB1SourceCodePath - elif self.eNB_serverId[self.eNB_instance] == '2': - lIpAddr = self.eNB2IPAddress - lUserName = self.eNB2UserName - lPassWord = self.eNB2Password - lSourcePath = self.eNB2SourceCodePath - if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '': - HELP.GenericHelp(CONST.Version) - sys.exit('Insufficient Parameter') - logging.debug('Stopping eNB/gNB on server: ' + lIpAddr) - mySSH = SSH.SSHConnection() - mySSH.open(lIpAddr, lUserName, lPassWord) - mySSH.command('cd ' + lSourcePath + '/cmake_targets', '\$', 5) - if self.air_interface[self.eNB_instance] == 'lte-softmodem': - nodeB_prefix = 'e' - else: - nodeB_prefix = 'g' - mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem | grep -v grep', '\$', 5) - result = re.search('-softmodem', mySSH.getBefore()) + def TerminateeNB(self, ctx, node, HTML): + logging.debug('Stopping eNB/gNB on server: ' + node) + lSourcePath = self.eNBSourceCodePath + cmd = cls_cmd.getConnection(node) + ret = cmd.run('ps -aux | grep --color=never -e softmodem | grep -v grep') + result = re.search('-softmodem', ret.stdout) if result is not None: - mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT -r .*-softmodem || true', '\$', 5) - time.sleep(10) - mySSH.command('stdbuf -o0 ps -aux | grep --color=never -e softmodem | grep -v grep', '\$', 5) - result = re.search('-softmodem', mySSH.getBefore()) - if result is not None: - mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL -r .*-softmodem || true', '\$', 5) - time.sleep(5) - mySSH.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5) - #stopping tshark (valid if eNB and enabled in xml, will not harm otherwise) - logging.debug('\u001B[1m Stopping tshark on xNB \u001B[0m') - mySSH.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL tshark', '\$', 5) - time.sleep(1) - mySSH.close() - # if T tracer was run with option 0 (no logs), analyze logs - # from textlog, otherwise do normal analysis (e.g., option 2) - result = re.search('T_stdout 0', str(self.Initialize_eNB_args)) - if (result is not None): - logging.debug('\u001B[1m Replaying RAW record file\u001B[0m') - mySSH.open(lIpAddr, lUserName, lPassWord) - mySSH.command('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5) - enbLogFile = self.eNBLogFiles[int(self.eNB_instance)] - raw_record_file = enbLogFile.replace('.log', '_record.raw') - replay_log_file = enbLogFile.replace('.log', '_replay.log') - extracted_txt_file = enbLogFile.replace('.log', '_extracted_messages.txt') - extracted_log_file = enbLogFile.replace('.log', '_extracted_messages.log') - mySSH.command('./extract_config -i ' + lSourcePath + '/cmake_targets/' + raw_record_file + ' > ' + lSourcePath + '/cmake_targets/' + extracted_txt_file, '\$', 5) - mySSH.command('echo $USER; nohup ./replay -i ' + lSourcePath + '/cmake_targets/' + raw_record_file + ' > ' + lSourcePath + '/cmake_targets/' + replay_log_file + ' 2>&1 &', lUserName, 5) - mySSH.command('./textlog -d ' + lSourcePath + '/cmake_targets/' + extracted_txt_file + ' -no-gui -ON -full > ' + lSourcePath + '/cmake_targets/' + extracted_log_file, '\$', 5) - mySSH.close() - mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + extracted_log_file, '.') - logging.debug('\u001B[1m Analyzing eNB replay logfile \u001B[0m') - logStatus = self.AnalyzeLogFile_eNB(extracted_log_file, HTML, self.ran_checkers) + cmd.run('sudo -S killall --signal SIGINT -r .*-softmodem') + time.sleep(6) + + ret = cmd.run('ps -aux | grep --color=never -e softmodem | grep -v grep') + result = re.search('-softmodem', ret.stdout) + if result is not None: + cmd.run('sudo -S killall --signal SIGKILL -r .*-softmodem') + time.sleep(5) + + # see InitializeeNB() + logfile = f'{lSourcePath}/cmake_targets/enb.log' + logdir = os.path.dirname(logfile) + + file = archiveArtifact(cmd, ctx, logfile) + archiveArtifact(cmd, ctx, f"{logdir}/nrL1_stats.log") + archiveArtifact(cmd, ctx, f"{logdir}/nrMAC_stats.log") + cmd.close() + if file is None: + logging.debug('\u001B[1;37;41m Could not copy xNB logfile to analyze it! \u001B[0m') + msg = 'Could not copy xNB logfile to analyze it!' + HTML.CreateHtmlTestRowQueue('N/A', 'KO', [msg]) + return False + + logging.debug('\u001B[1m Analyzing xNB logfile \u001B[0m ' + file) + logStatus = self.AnalyzeLogFile_eNB(file, HTML, self.ran_checkers) + if logStatus < 0: + HTML.CreateHtmlTestRow('N/A', 'KO', logStatus) + else: HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK) - self.eNBLogFiles[int(self.eNB_instance)] = '' - return True - else: - analyzeFile = False - if self.eNBLogFiles[int(self.eNB_instance)] != '': - analyzeFile = True - fileToAnalyze = self.eNBLogFiles[int(self.eNB_instance)] - self.eNBLogFiles[int(self.eNB_instance)] = '' - if analyzeFile: - with cls_cmd.getConnection(lIpAddr) as cmd: - file = archiveArtifact(cmd, ctx, lSourcePath + '/cmake_targets/' + fileToAnalyze) - archiveArtifact(cmd, ctx, lSourcePath + '/cmake_targets/nrL1_stats.log') - archiveArtifact(cmd, ctx, lSourcePath + '/cmake_targets/nrMAC_stats.log') - if file is None: - logging.debug('\u001B[1;37;41m Could not copy ' + nodeB_prefix + 'NB logfile to analyze it! \u001B[0m') - HTML.htmleNBFailureMsg='Could not copy ' + nodeB_prefix + 'NB logfile to analyze it!' - HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE) - self.eNBmbmsEnables[int(self.eNB_instance)] = False - return False - if self.eNB_serverId[self.eNB_instance] != '0': - #*stats.log files + pickle + png - #debug / tentative - mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrL1_stats.log', self.eNBSourceCodePath + '/cmake_targets/') - mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrMAC_stats.log', self.eNBSourceCodePath + '/cmake_targets/') - mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/') - logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + file) - logStatus = self.AnalyzeLogFile_eNB(file, HTML, self.ran_checkers) - if (logStatus < 0): - HTML.CreateHtmlTestRow('N/A', 'KO', logStatus) - #display rt stats for gNB only - if len(self.datalog_rt_stats)!=0 and nodeB_prefix == 'g': - HTML.CreateHtmlDataLogTable(self.datalog_rt_stats) - self.eNBmbmsEnables[int(self.eNB_instance)] = False - return False - else: - HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK) - else: - HTML.CreateHtmlTestRow(self.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK) #display rt stats for gNB only - if len(self.datalog_rt_stats)!=0 and nodeB_prefix == 'g': + if len(self.datalog_rt_stats) != 0: HTML.CreateHtmlDataLogTable(self.datalog_rt_stats) - self.eNBmbmsEnables[int(self.eNB_instance)] = False - self.eNBstatuses[int(self.eNB_instance)] = -1 - return True - def LogCollecteNB(self): - mySSH = SSH.SSHConnection() - # Copying back to xNB server any log from all the runs. - # Should also contains ping and iperf logs - absPath = os.path.abspath('.') - if absPath.count('ci-scripts') == 0: - os.chdir('./ci-scripts') - - for x in os.listdir(): - if x.endswith('.log') or x.endswith('.log.png'): - mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, x, self.eNBSourceCodePath + '/cmake_targets/', silent=True, ignorePermDenied=True) - # Back to normal - mySSH.open(self.eNBIPAddress, self.eNBUserName, self.eNBPassword) - mySSH.command('cd ' + self.eNBSourceCodePath, '\$', 5) - mySSH.command('cd cmake_targets', '\$', 5) - mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/enb_*.pcap .','\$',20) - mySSH.command('echo ' + self.eNBPassword + ' | sudo -S mv /tmp/gnb_*.pcap .','\$',20) - mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm -f enb.log.zip', '\$', 5) - mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip *.log enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log* iperf*.log log/*/*.log log/*/*.pcap', '\$', 60) - result = re.search('core.\d+', mySSH.getBefore()) - if result is not None: - mySSH.command('echo ' + self.eNBPassword + ' | sudo -S zip enb.log.zip core* ran_build/build/{lte,nr}-softmodem', '\$', 60) # add core and executable to zip - mySSH.command('echo ' + self.eNBPassword + ' | sudo -S rm enb*.log core* enb_*record.raw enb_*.pcap gnb_*.pcap enb_*txt physim_*.log *stats.log *monitor.pickle *monitor*.png ping*.log* iperf*.log log/*/*.log log/*/*.pcap', '\$', 15) - mySSH.close() + return logStatus >= 0 def _analyzeUeRetx(self, rounds, checkers, regex): if len(rounds) == 0 or len(checkers) == 0: @@ -528,16 +321,16 @@ class RANManagement(): X2HO_state = CONST.X2_HO_REQ_STATE__IDLE X2HO_outNbProcedures += 1 - if self.eNBOptions[int(self.eNB_instance)] != '': - res1 = re.search('max_rxgain (?P[0-9]+)', self.eNBOptions[int(self.eNB_instance)]) + if self.eNBOptions[0] != '': + res1 = re.search('max_rxgain (?P[0-9]+)', self.eNBOptions[0]) res2 = re.search('max_rxgain (?P[0-9]+)', str(line)) if res1 is not None and res2 is not None: requested_option = int(res1.group('requested_option')) applied_option = int(res2.group('applied_option')) if requested_option == applied_option: - htmleNBFailureMsg += ' Command line option(s) correctly applied ' + self.eNBOptions[int(self.eNB_instance)] + '\n\n' + htmleNBFailureMsg += ' Command line option(s) correctly applied ' + self.eNBOptions[0] + '\n\n' else: - htmleNBFailureMsg += ' Command line option(s) NOT applied ' + self.eNBOptions[int(self.eNB_instance)] + '\n\n' + htmleNBFailureMsg += ' Command line option(s) NOT applied ' + self.eNBOptions[0] + '\n\n' result = re.search('Exiting OAI softmodem|Caught SIGTERM, shutting down', str(line)) if result is not None: exitSignalReceived = True @@ -624,7 +417,7 @@ class RANManagement(): result = re.search('dropping, not enough RBs', str(line)) if result is not None: dropNotEnoughRBs += 1 - if self.eNBmbmsEnables[int(self.eNB_instance)]: + if self.eNBmbmsEnables[0]: result = re.search('MBMS USER-PLANE.*Requesting.*bytes from RLC', str(line)) if result is not None: mbmsRequestMsg += 1 @@ -700,8 +493,8 @@ class RANManagement(): # nrL1_stats.log/nrMAC_stats.log should be in the same directory as main log file # currently the link is only implicit as below based on pattern matching # I will rework this to give the file explicitly - l1_stats_fn = re.sub(r'enb_[0-9]+', 'nrL1_stats', eNBlogFile) - mac_stats_fn = re.sub(r'enb_[0-9]+', 'nrMAC_stats', eNBlogFile) + l1_stats_fn = re.sub(r'-enb.log$', '-nrL1_stats.log', eNBlogFile) + mac_stats_fn = re.sub(r'-enb.log$', '-nrMAC_stats.log', eNBlogFile) if os.path.isfile(l1_stats_fn) and os.path.isfile(mac_stats_fn): # don't use CI-nrL1_stats.log, as this will increase the processing time for # no reason, we just need the last occurence @@ -733,7 +526,7 @@ class RANManagement(): #post processing depending on the node type if not nodeB_prefix_found: - if self.air_interface[self.eNB_instance] == 'lte-softmodem': + if self.air_interface == 'lte-softmodem': nodeB_prefix = 'e' else: nodeB_prefix = 'g' @@ -937,7 +730,7 @@ class RANManagement(): rrcMsg = ' -- ' + str(rrcReestablishReject) + ' were rejected' logging.debug('\u001B[1;30;43m ' + rrcMsg + ' \u001B[0m') htmleNBFailureMsg += rrcMsg + '\n' - if self.eNBmbmsEnables[int(self.eNB_instance)]: + if self.eNBmbmsEnables[0]: if mbmsRequestMsg > 0: rrcMsg = 'eNB requested ' + str(mbmsRequestMsg) + ' times the RLC for MBMS USER-PLANE' logging.debug('\u001B[1;30;43m ' + rrcMsg + ' \u001B[0m') @@ -950,8 +743,8 @@ class RANManagement(): rrcMsg = 'eNB completed ' + str(X2HO_outNbProcedures) + ' X2 Handover Release procedure(s)' logging.debug('\u001B[1;30;43m ' + rrcMsg + ' \u001B[0m') htmleNBFailureMsg += rrcMsg + '\n' - if self.eNBOptions[int(self.eNB_instance)] != '': - res1 = re.search('drx_Config_present prSetup', self.eNBOptions[int(self.eNB_instance)]) + if self.eNBOptions[0] != '': + res1 = re.search('drx_Config_present prSetup', self.eNBOptions[0]) if res1 is not None: if cdrxActivationMessageCount > 0: rrcMsg = 'eNB activated the CDRX Configuration for ' + str(cdrxActivationMessageCount) + ' time(s)' diff --git a/ci-scripts/run_locally.sh b/ci-scripts/run_locally.sh index 60010ea30a..1d4a73e919 100755 --- a/ci-scripts/run_locally.sh +++ b/ci-scripts/run_locally.sh @@ -26,8 +26,18 @@ fi docker tag oai-nr-ue oai-ci/oai-nr-ue:develop-${SHORT_COMMIT_SHA} docker tag oai-gnb oai-ci/oai-gnb:develop-${SHORT_COMMIT_SHA} +python3 main.py --mode=InitiateHtml --ranRepository=NONE --ranBranch=${CURRENT_BRANCH} \ + --ranCommitID=${COMMIT_SHA} --ranAllowMerge=false \ + --ranTargetBranch=NONE \ + --XMLTestFile=xml_files/${TESTCASE} --local + python3 main.py --mode=TesteNB --ranRepository=NONE --ranBranch=${CURRENT_BRANCH} \ --ranCommitID=${COMMIT_SHA} --ranAllowMerge=false \ - --ranTargetBranch=NONE --eNBIPAddress=NONE --eNBUserName=NONE --eNBPassword=NONE \ + --ranTargetBranch=NONE \ --eNBSourceCodePath=${REPO_PATH} \ - --XMLTestFile=xml_files/${TESTCASE} --local + --XMLTestFile=${TESTCASE} --local +RET=$? + +python3 main.py --mode=FinalizeHtml --local + +exit ${RET} diff --git a/ci-scripts/sshconnection.py b/ci-scripts/sshconnection.py deleted file mode 100644 index a41b8bf7f1..0000000000 --- a/ci-scripts/sshconnection.py +++ /dev/null @@ -1,281 +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 pexpect # pexpect -import logging -import time # sleep -import re -import subprocess -import sys - -#----------------------------------------------------------- -# Class Declaration -#----------------------------------------------------------- -class SSHConnection(): - def __init__(self): - self.ssh = '' - self.picocom_closure = False - self.ipaddress = '' - self.username = '' - self.cmd2Results = '' - - def disablePicocomClosure(self): - self.picocom_closure = False - - def enablePicocomClosure(self): - self.picocom_closure = True - - def open(self, ipaddress, username, password): - prompt = "\$" - count = 0 - connect_status = False - while count < 4: - self.ssh = pexpect.spawn('ssh -o PubkeyAuthentication=yes {}@{}'.format(username,ipaddress)) - # Longer timeout at connection due to asterix slowness - self.ssh.timeout = 25 - self.sshresponse = self.ssh.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', 'Last login', pexpect.EOF, pexpect.TIMEOUT]) - if self.sshresponse == 0: - self.ssh.sendline('yes') - self.sshresponse = self.ssh.expect(['password:', username + '@']) - if self.sshresponse == 0: - self.ssh.sendline(password) - self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if self.sshresponse == 0: - count = 10 - connect_status = True - else: - logging.warning('self.sshresponse = ' + str(self.sshresponse)) - elif self.sshresponse == 1: - self.ssh.sendline(password) - self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if self.sshresponse == 0: - count = 10 - connect_status = True - else: - logging.warning('self.sshresponse = ' + str(self.sshresponse)) - elif self.sshresponse == 2: - # We directly ended up on the remote server because of pubkey auth - count = 10 - connect_status = True - # this expect() seems to be necessary to advance the read buffer until the prompt, or getBefore() will not return the last command - self.sshresponse = self.ssh.expect([prompt]) - else: - # debug output - logging.warning(str(self.ssh.before)) - logging.warning('self.sshresponse = ' + str(self.sshresponse)) - # adding a tempo when failure - if not connect_status: - time.sleep(1) - count += 1 - if connect_status: - self.command('unset HISTFILE', prompt, 5, silent=True) - else: - raise ConnectionError('SSH Connection Failed') - self.ipaddress = ipaddress - self.username = username - - - - - def cde_check_value(self, commandline, expected, timeout): - logging.info(commandline) - self.ssh.timeout = timeout - self.ssh.sendline(commandline) - expected.append(pexpect.EOF) - expected.append(pexpect.TIMEOUT) - self.sshresponse = self.ssh.expect(expected) - return self.sshresponse - - def command(self, commandline, expectedline, timeout, silent=False, resync=False): - if not silent: - logging.info(commandline) - self.ssh.timeout = timeout - # Nasty patch when pexpect output is out of sync. - # Much pronounced when running back-to-back-back oc commands - if resync: - self.ssh.send(commandline) - self.ssh.expect([commandline, pexpect.TIMEOUT]) - self.ssh.send('\r\n') - self.sshresponse = self.ssh.expect([expectedline, pexpect.EOF, pexpect.TIMEOUT]) - else: - self.ssh.sendline(commandline) - self.sshresponse = self.ssh.expect([expectedline, pexpect.EOF, pexpect.TIMEOUT]) - if self.sshresponse == 0: - return 0 - elif self.sshresponse == 1: - logging.error('\u001B[1;37;41m Unexpected EOF \u001B[0m') - logging.error('Expected Line : ' + expectedline) - logging.error(str(self.ssh.before)) - raise ConnectionError(self.sshresponse) - elif self.sshresponse == 2: - logging.error('\u001B[1;37;41m Unexpected TIMEOUT \u001B[0m') - logging.error('Expected Line : ' + expectedline) - result = re.search('ping |iperf |picocom', str(commandline)) - if result is None: - logging.warning(str(self.ssh.before)) - raise ConnectionError(self.sshresponse) - else: - return -1 - else: - logging.error('\u001B[1;37;41m Unexpected Others \u001B[0m') - logging.error('Expected Line : ' + expectedline) - raise ConnectionError(self.sshresponse) - - def command2(self, commandline, timeout, silent=False): - if not silent: - logging.info(commandline) - self.cmd2Results = '' - noHistoryCmd = 'unset HISTFILE; ' + commandline - myHost = self.username + '@' + self.ipaddress - # CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS - # BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST - # OTHERWISE IT WON'T WORK - lSsh = subprocess.Popen(["ssh", "%s" % myHost, noHistoryCmd],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) - self.cmd2Results = str(lSsh.stdout.readlines()) - - def command3(self, commandline, timeout, silent=False): - if not silent: - logging.info(commandline) - self.cmd2Results = '' - noHistoryCmd = 'unset HISTFILE; ' + commandline - myHost = self.username + '@' + self.ipaddress - # CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS - # BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST - # OTHERWISE IT WON'T WORK - lSsh = subprocess.Popen(["ssh", "%s" % myHost, noHistoryCmd],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) - return lSsh.stdout.readlines() - - - def close(self): - self.ssh.timeout = 5 - self.ssh.sendline('exit') - self.sshresponse = self.ssh.expect([pexpect.EOF, pexpect.TIMEOUT]) - self.ipaddress = '' - self.username = '' - if self.sshresponse == 0: - pass - elif self.sshresponse == 1: - if not self.picocom_closure: - logging.warning('\u001B[1;37;41m Unexpected TIMEOUT during closing\u001B[0m') - else: - logging.warning('\u001B[1;37;41m Unexpected Others during closing\u001B[0m') - - def copyin(self, ipaddress, username, password, source, destination): - count = 0 - copy_status = False - logging.info('scp -r '+ username + '@' + ipaddress + ':' + source + ' ' + destination) - while count < 10: - scp_spawn = pexpect.spawn('scp -r '+ username + '@' + ipaddress + ':' + source + ' ' + destination, timeout = 100) - scp_response = scp_spawn.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if scp_response == 0: - scp_spawn.sendline('yes') - scp_spawn.expect('password:') - scp_spawn.sendline(password) - scp_response = scp_spawn.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if scp_response == 0: - count = 10 - copy_status = True - else: - logging.warning('1 - scp_response = ' + str(scp_response)) - elif scp_response == 1: - scp_spawn.sendline(password) - scp_response = scp_spawn.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if scp_response == 0 or scp_response == 3: - count = 10 - copy_status = True - else: - logging.warning('2 - scp_response = ' + str(scp_response)) - elif scp_response == 2: - count = 10 - copy_status = True - else: - logging.warning('3 - scp_response = ' + str(scp_response)) - # adding a tempo when failure - if not copy_status: - time.sleep(1) - count += 1 - if copy_status: - return 0 - else: - return -1 - - def copyout(self, ipaddress, username, password, source, destination, silent=False, ignorePermDenied=False): - count = 0 - copy_status = False - if not silent: - logging.info('scp -r ' + source + ' ' + username + '@' + ipaddress + ':' + destination) - while count < 4: - scp_spawn = pexpect.spawn('scp -r ' + source + ' ' + username + '@' + ipaddress + ':' + destination, timeout = 100) - scp_response = scp_spawn.expect(['Are you sure you want to continue connecting (yes/no)?', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if scp_response == 0: - scp_spawn.sendline('yes') - scp_spawn.expect('password:') - scp_spawn.sendline(password) - scp_response = scp_spawn.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if scp_response == 0: - count = 10 - copy_status = True - elif scp_response == 1 and ignorePermDenied: - logging.warning(f'copyout(): permission denied, not copying file ({source})') - count = 10 - copy_status = True - else: - logging.warning('1 - scp_response = ' + str(scp_response)) - elif scp_response == 1: - scp_spawn.sendline(password) - scp_response = scp_spawn.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) - if scp_response == 0 or scp_response == 3: - count = 10 - copy_status = True - elif scp_response == 1 and ignorePermDenied: - logging.warning(f'copyout(): permission denied, not copying file ({source})') - count = 10 - copy_status = True - else: - logging.warning('2 - scp_response = ' + str(scp_response)) - elif scp_response == 2: - count = 10 - copy_status = True - else: - logging.warning('3 - scp_response = ' + str(scp_response)) - # adding a tempo when failure - if not copy_status: - time.sleep(1) - count += 1 - if copy_status: - pass - else: - raise ConnectionError('SCP failed') - - def getBefore(self): - return self.ssh.before.decode('utf-8') diff --git a/ci-scripts/tests/build.py b/ci-scripts/tests/build.py index 669e6711b4..013486a560 100644 --- a/ci-scripts/tests/build.py +++ b/ci-scripts/tests/build.py @@ -11,6 +11,7 @@ import tempfile sys.path.append('./') # to find OAI imports below import cls_oai_html import cls_containerize +from cls_ci_helper import TestCaseCtx import cls_cmd class TestBuild(unittest.TestCase): @@ -18,22 +19,21 @@ class TestBuild(unittest.TestCase): self.html = cls_oai_html.HTMLManagement() self.html.testCase_id = "000000" self.cont = cls_containerize.Containerize() - self.cont.eNB_serverId[0] = '0' - self.cont.eNBIPAddress = 'localhost' - self.cont.eNBUserName = None - self.cont.eNBPassword = None self._d = tempfile.mkdtemp() logging.warning(f"temporary directory: {self._d}") + self.node = 'localhost' self.cont.eNBSourceCodePath = self._d + self.ctx = TestCaseCtx.Default(tempfile.mkdtemp()) def tearDown(self): logging.warning(f"removing directory contents") with cls_cmd.getConnection(None) as cmd: cmd.run(f"rm -rf {self._d}") + cmd.run(f'rm -rf {self.ctx.logPath}') def test_build_proxy(self): self.cont.proxyCommit = "b64d9bce986b38ca59e8582864ade3fcdd05c0dc" - success = self.cont.BuildProxy(self.html) + success = self.cont.BuildProxy(self.ctx, self.node, self.html) self.assertTrue(success) if __name__ == '__main__': diff --git a/ci-scripts/tests/deployment.py b/ci-scripts/tests/deployment.py index d2fb0cda57..e7efc707bf 100644 --- a/ci-scripts/tests/deployment.py +++ b/ci-scripts/tests/deployment.py @@ -40,76 +40,83 @@ class TestDeploymentMethods(unittest.TestCase): self.ci = cls_oaicitest.OaiCiTest() self.cont = cls_containerize.Containerize() self.ran = ran.RANManagement() - self.cont.yamlPath[0] = '' + self.cont.yamlPath = '' self.cont.ranAllowMerge = True self.cont.ranBranch = '' self.cont.ranCommitID = '' - self.cont.eNB_serverId[0] = '0' - self.cont.eNBIPAddress = 'localhost' - self.cont.eNBUserName = None - self.cont.eNBPassword = None self.cont.eNBSourceCodePath = os.getcwd() self.cont.num_attempts = 3 + self.node = 'localhost' self.ctx = TestCaseCtx.Default(tempfile.mkdtemp()) def tearDown(self): with cls_cmd.LocalCmd() as c: c.run(f'rm -rf {self.ctx.logPath}') def test_deploy(self): - self.cont.yamlPath[0] = 'tests/simple-dep/' + self.cont.yamlPath = 'tests/simple-dep/' self.cont.deploymentTag = "noble" - deploy = self.cont.DeployObject(self.ctx, self.html) - undeploy = self.cont.UndeployObject(self.ctx, self.html, self.ran) + deploy = self.cont.DeployObject(self.ctx, self.node, self.html) + undeploy = self.cont.UndeployObject(self.ctx, self.node, self.html, self.ran) self.assertTrue(deploy) self.assertTrue(undeploy) def test_deployfails(self): # fails reliably old = self.cont.yamlPath - self.cont.yamlPath[0] = 'tests/simple-fail/' - deploy = self.cont.DeployObject(self.ctx, self.html) - self.cont.UndeployObject(self.ctx, self.html, self.ran) + self.cont.yamlPath = 'tests/simple-fail/' + deploy = self.cont.DeployObject(self.ctx, self.node, self.html) + self.cont.UndeployObject(self.ctx, self.node, self.html, self.ran) self.assertFalse(deploy) self.cont.yamlPath = old def test_deployfails_2svc(self): # fails reliably old = self.cont.yamlPath - self.cont.yamlPath[0] = 'tests/simple-fail-2svc/' - deploy = self.cont.DeployObject(self.ctx, self.html) - self.cont.UndeployObject(self.ctx, self.html, self.ran) + self.cont.yamlPath = 'tests/simple-fail-2svc/' + deploy = self.cont.DeployObject(self.ctx, self.node, self.html) + self.cont.UndeployObject(self.ctx, self.node, self.html, self.ran) self.assertFalse(deploy) self.cont.yamlPath = old def test_deploy_ran(self): - self.cont.yamlPath[0] = 'yaml_files/5g_rfsimulator_tdd_dora' - self.cont.services[0] = "oai-gnb" + self.cont.yamlPath = 'yaml_files/5g_rfsimulator_tdd_dora' + self.cont.services = "oai-gnb" self.cont.deploymentTag = 'develop-12345678' - deploy = self.cont.DeployObject(self.ctx, self.html) - undeploy = self.cont.UndeployObject(self.ctx, self.html, self.ran) + deploy = self.cont.DeployObject(self.ctx, self.node, self.html) + undeploy = self.cont.UndeployObject(self.ctx, self.node, self.html, self.ran) self.assertTrue(deploy) self.assertTrue(undeploy) def test_deploy_multiran(self): - self.cont.yamlPath[0] = 'yaml_files/5g_rfsimulator_tdd_dora' - self.cont.services[0] = "oai-gnb oai-nr-ue" + self.cont.yamlPath = 'yaml_files/5g_rfsimulator_tdd_dora' + self.cont.services = "oai-gnb oai-nr-ue" self.cont.deploymentTag = 'develop-12345678' - deploy = self.cont.DeployObject(self.ctx, self.html) - undeploy = self.cont.UndeployObject(self.ctx, self.html, self.ran) + deploy = self.cont.DeployObject(self.ctx, self.node, self.html) + undeploy = self.cont.UndeployObject(self.ctx, self.node, self.html, self.ran) self.assertTrue(deploy) self.assertTrue(undeploy) def test_deploy_staged(self): - self.cont.yamlPath[0] = 'yaml_files/5g_rfsimulator_tdd_dora' - self.cont.services[0] = "oai-gnb" + self.cont.yamlPath = 'yaml_files/5g_rfsimulator_tdd_dora' + self.cont.services = "oai-gnb" self.cont.deploymentTag = 'develop-12345678' - deploy1 = self.cont.DeployObject(self.ctx, self.html) - self.cont.services[0] = "oai-nr-ue" - deploy2 = self.cont.DeployObject(self.ctx, self.html) - undeploy = self.cont.UndeployObject(self.ctx, self.html, self.ran) + deploy1 = self.cont.DeployObject(self.ctx, self.node, self.html) + self.cont.services = "oai-nr-ue" + deploy2 = self.cont.DeployObject(self.ctx, self.node, self.html) + undeploy = self.cont.UndeployObject(self.ctx, self.node, self.html, self.ran) self.assertTrue(deploy1) self.assertTrue(deploy2) self.assertTrue(undeploy) + def test_create_workspace(self): + self.cont.eNBSourceCodePath = tempfile.mkdtemp() + self.cont.ranRepository = "https://gitlab.eurecom.fr/oai/openairinterface5g.git" + self.cont.ranCommitID = "05f9c975eeecbca1bdff5940affad44465f1301f" + self.cont.ranBranch = "develop" + ws = self.cont.Create_Workspace(self.node, self.html) + with cls_cmd.LocalCmd() as cmd: + cmd.run(f"rm -rf {self.cont.eNBSourceCodePath}") + self.assertTrue(ws) + if __name__ == '__main__': unittest.main() diff --git a/ci-scripts/tests/ping-iperf.py b/ci-scripts/tests/ping-iperf.py index f63ce323d6..bd30768a9f 100644 --- a/ci-scripts/tests/ping-iperf.py +++ b/ci-scripts/tests/ping-iperf.py @@ -77,7 +77,7 @@ class TestPingIperf(unittest.TestCase): 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.Iperf(self.html, self.cont, infra_file=infra_file) + success = self.ci.Iperf(self.ctx, self.html, infra_file=infra_file) self.assertTrue(success) if __name__ == '__main__': diff --git a/ci-scripts/tests/pull-clean-int-registry.py b/ci-scripts/tests/pull-clean-int-registry.py index d4d5b4fc0a..f17c1c7a1d 100644 --- a/ci-scripts/tests/pull-clean-int-registry.py +++ b/ci-scripts/tests/pull-clean-int-registry.py @@ -20,7 +20,6 @@ class TestDeploymentMethods(unittest.TestCase): self.html = cls_oai_html.HTMLManagement() self.html.testCaseId = "000000" self.cont = cls_containerize.Containerize() - self.cont.eNBIPAddress = 'localhost' self.cont.eNBSourceCodePath = os.getcwd() def test_pull_clean_local_reg(self): @@ -32,21 +31,21 @@ class TestDeploymentMethods(unittest.TestCase): ret = cmd.run(f"ping -c1 -w1 {registry}") if ret.returncode != 0: # could not ping once -> skip test self.skipTest(f"test_pull_clean_local_reg: could not reach {registry} (run inside sboai)") - svr_id = '0' + node = 'localhost' images = ["oai-gnb"] tag = "develop" - pull = self.cont.Pull_Image_from_Registry(self.html, svr_id, images, tag=tag) - clean = self.cont.Clean_Test_Server_Images(self.html, svr_id, images, tag=tag) + pull = self.cont.Pull_Image_from_Registry(self.html, node, images, tag=tag) + clean = self.cont.Clean_Test_Server_Images(self.html, node, images, tag=tag) self.assertTrue(pull) self.assertTrue(clean) def test_pull_clean_docker_hub(self): - svr_id = '0' + node = 'localhost' r = "docker.io" images = ["hello-world"] tag = "latest" - pull = self.cont.Pull_Image_from_Registry(self.html, svr_id, images, tag=tag, registry=r, username=None, password=None) - clean = self.cont.Clean_Test_Server_Images(self.html, svr_id, images, tag=tag) + pull = self.cont.Pull_Image_from_Registry(self.html, node, images, tag=tag, registry=r, username=None, password=None) + clean = self.cont.Clean_Test_Server_Images(self.html, node, images, tag=tag) self.assertTrue(pull) self.assertTrue(clean) diff --git a/ci-scripts/tests/test-runner/run.sh b/ci-scripts/tests/test-runner/run.sh index 9c02186a5f..55d421cdb0 100755 --- a/ci-scripts/tests/test-runner/run.sh +++ b/ci-scripts/tests/test-runner/run.sh @@ -22,9 +22,6 @@ python3 main.py \ --ranCommitID=${commit} \ --ranAllowMerge=true \ --ranTargetBranch=develop \ - --eNBIPAddress=localhost \ - --eNBUserName=NONE \ - --eNBPassword=NONE \ --eNBSourceCodePath=NONE \ --XMLTestFile=tests/test-runner/test.xml diff --git a/ci-scripts/xml_files/cluster_image_build.xml b/ci-scripts/xml_files/cluster_image_build.xml index 6810873b1c..a80d1cd7d4 100644 --- a/ci-scripts/xml_files/cluster_image_build.xml +++ b/ci-scripts/xml_files/cluster_image_build.xml @@ -32,10 +32,12 @@ Create_Workspace Create new Workspace + poseidon Build_Cluster_Image Build Images on OpenShift Cluster + poseidon diff --git a/ci-scripts/xml_files/container_4g_l2sim_proxy.xml b/ci-scripts/xml_files/container_4g_l2sim_proxy.xml deleted file mode 100644 index cd57a24b6a..0000000000 --- a/ci-scripts/xml_files/container_4g_l2sim_proxy.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - l2sim-4glte-proxy-build - Build L2sim proxy image - wrench - - 100001 - 000001 - - - - Create_Workspace - Create new Workspace - 1 - 1 - - - Build_Proxy - Build L2sim Proxy Image - 1 - 1 - True - b64d9bce986b38ca59e8582864ade3fcdd05c0dc - - - diff --git a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml index 98e0ec7d08..eabece50cd 100644 --- a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml +++ b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml @@ -44,49 +44,44 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + obelix oai-enb oai-lte-ue Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy Cassandra Database + localhost ci-scripts/yaml_files/4g_l2sim_fdd cassandra db_init - 0 - 0 Deploy_Object Deploy OAI 4G CoreNetwork + localhost ci-scripts/yaml_files/4g_l2sim_fdd oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - 0 - 0 Deploy_Object Deploy OAI 4G eNB L2 sim + localhost ci-scripts/yaml_files/4g_l2sim_fdd oai_enb - 0 - 0 Deploy_Object Deploy OAI L2 sim 4G LTE-UE 1 and Proxy + localhost ci-scripts/yaml_files/4g_l2sim_fdd proxy oai_ue1 - 0 - 0 @@ -145,6 +140,7 @@ Undeploy_Object true + localhost Undeploy all OAI 4G stack ci-scripts/yaml_files/4g_l2sim_fdd @@ -153,7 +149,7 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + obelix oai-enb oai-lte-ue diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml index 235546928a..4b93c10fcd 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml @@ -46,23 +46,21 @@ Create_Workspace Create new Workspace - 0 - 0 + localhost Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-enb-asan oai-lte-ue-asan Deploy_Object Deploy Cassandra Database + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz cassandra db_init - 0 - 0 @@ -80,28 +78,25 @@ Deploy_Object Deploy OAI 4G CoreNetwork + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - 0 - 0 Deploy_Object Deploy OAI 4G eNB RF sim (FDD 05MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz oai_enb0 - 0 - 0 Deploy_Object Deploy OAI 4G LTE-UE RF sim (FDD 05MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz oai_ue0 - 0 - 0 @@ -161,16 +156,15 @@ Undeploy_Object true Undeploy all OAI 4G stack + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml index 9b27ba1f8c..968e30071a 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml @@ -43,14 +43,13 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-enb-asan oai-lte-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost IdleSleep @@ -67,19 +66,17 @@ Deploy_Object Deploy OAI 4G eNB RF sim (FDD 05MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 oai_enb0 - 0 - 0 Deploy_Object Deploy OAI 4G LTE-UE RF sim (FDD 05MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 oai_ue0 - 0 - 0 @@ -132,16 +129,15 @@ Undeploy_Object true Undeploy all OAI 4G stack + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz_noS1 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml index 2b8141a71d..076ee6995b 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml @@ -47,22 +47,20 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-enb-asan oai-lte-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy Cassandra Database + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz cassandra db_init - 0 - 0 @@ -80,28 +78,25 @@ Deploy_Object Deploy OAI 4G CoreNetwork + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - 0 - 0 Deploy_Object Deploy OAI 4G eNB RF sim (FDD 10MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz oai_enb0 - 0 - 0 Deploy_Object Deploy OAI 4G LTE-UE RF sim (FDD 10MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz oai_ue0 - 0 - 0 @@ -161,16 +156,15 @@ Undeploy_Object true Undeploy all OAI 4G stack + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml index 7afcc2f7c1..2e049e4efe 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml @@ -47,22 +47,20 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-enb-asan oai-lte-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy Cassandra Database + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz cassandra db_init - 0 - 0 @@ -80,28 +78,25 @@ Deploy_Object Deploy OAI 4G CoreNetwork + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz oai_hss redis magma_mme oai_spgwc oai_spgwu trf_gen - 0 - 0 Deploy_Object Deploy OAI 4G eNB RF sim (FDD 20MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz oai_enb0 - 0 - 0 Deploy_Object Deploy OAI 4G LTE-UE RF sim (FDD 20MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz oai_ue0 - 0 - 0 @@ -161,16 +156,15 @@ Undeploy_Object true Undeploy all OAI 4G stack + localhost ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml index 1f869ecdde..7ab434c804 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml @@ -40,14 +40,13 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-enb-asan oai-lte-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost IdleSleep @@ -64,19 +63,17 @@ Deploy_Object Deploy OAI 4G eNB RF sim (FeMBMS) + localhost ci-scripts/yaml_files/4g_rfsimulator_fembms oai_enb0 - 0 - 0 Deploy_Object Deploy OAI 4G LTE-UE RF sim (FeMBMS) + localhost ci-scripts/yaml_files/4g_rfsimulator_fembms oai_ue0 - 0 - 0 @@ -95,16 +92,15 @@ Undeploy_Object true Undeploy all OAI 4G stack + localhost ci-scripts/yaml_files/4g_rfsimulator_fembms - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml index 4c3691e466..e6a4cde19a 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml @@ -40,14 +40,13 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-enb-asan oai-lte-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost IdleSleep @@ -64,19 +63,17 @@ Deploy_Object Deploy OAI 4G eNB RF sim (MBMS) + localhost ci-scripts/yaml_files/4g_rfsimulator_mbms oai_enb0 - 0 - 0 Deploy_Object Deploy OAI 4G LTE-UE RF sim (MBMS) + localhost ci-scripts/yaml_files/4g_rfsimulator_mbms oai_ue0 - 0 - 0 @@ -95,16 +92,15 @@ Undeploy_Object true Undeploy all OAI 4G stack + localhost ci-scripts/yaml_files/4g_rfsimulator_mbms - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml index f84269b16e..2e22577879 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml @@ -47,22 +47,20 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-enb oai-lte-ue Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy Cassandra Database + localhost ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz cassandra db_init - 0 - 0 @@ -80,28 +78,25 @@ Deploy_Object Deploy OAI 4G CoreNetwork + localhost ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz oai_hss oai_mme oai_spgwc oai_spgwu trf_gen - 0 - 0 Deploy_Object Deploy OAI 4G eNB RF sim (TDD 05MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz oai_enb0 - 0 - 0 Deploy_Object Deploy OAI 4G LTE-UE RF sim (TDD 05MHz) + localhost ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz oai_ue0 - 0 - 0 @@ -154,16 +149,15 @@ Undeploy_Object true Undeploy all OAI 4G stack + localhost ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-enb oai-lte-ue diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml index 51f0270b19..d27091ac63 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml @@ -40,40 +40,36 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb oai-nr-cuup oai-nr-ue Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_rfsimulator_e1 mysql oai-amf oai-smf oai-upf - 0 - 0 Deploy_Object Deploy OAI 5G RAN RF sim SA (1 CU-CP, 3 CU-UPs, 3 DUs) + localhost ci-scripts/yaml_files/5g_rfsimulator_e1 oai-cucp oai-cuup oai-cuup2 oai-cuup3 oai-du oai-du2 oai-du3 - 0 - 0 Deploy_Object Deploy OAI 5G NR-UE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_e1 oai-nr-ue oai-nr-ue2 oai-nr-ue3 - 0 - 0 @@ -97,19 +93,18 @@ Undeploy_Object true + localhost Undeploy all OAI 5G stack ci-scripts/yaml_files/5g_rfsimulator_e1 1,0,0,0 1,0,0,0 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb oai-nr-cuup oai-nr-ue diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml index 17f52daeb7..efe8fce8e2 100644 --- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml @@ -63,31 +63,28 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_f1_rfsimulator mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G CU + DU-PCI0 + UE RF sim SA + localhost ci-scripts/yaml_files/5g_f1_rfsimulator oai-cu oai-du-pci0 oai-nr-ue - 0 - 0 @@ -112,10 +109,9 @@ Deploy_Object Deploy OAI 5G (target) DU-PCI1 RF sim SA + localhost ci-scripts/yaml_files/5g_f1_rfsimulator oai-du-pci1 - 0 - 0 @@ -238,18 +234,17 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_f1_rfsimulator 30,100,100,100 30,100,100,100 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml index 1fd3de1ad5..6ce1e37b90 100644 --- a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml @@ -42,31 +42,28 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb oai-nr-ue Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_fdd_rfsimulator mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G gNB+UE RF sim SA + localhost ci-scripts/yaml_files/5g_fdd_rfsimulator oai-gnb oai-nr-ue - 0 - 0 @@ -126,18 +123,17 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_fdd_rfsimulator 1,0,0,0 1,0,0,0 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb oai-nr-ue diff --git a/ci-scripts/xml_files/container_5g_flexric_rfsim.xml b/ci-scripts/xml_files/container_5g_flexric_rfsim.xml index a56248fe0e..8ee9326b5e 100644 --- a/ci-scripts/xml_files/container_5g_flexric_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_flexric_rfsim.xml @@ -51,21 +51,21 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb oai-nr-ue Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-flexric Clean_Test_Server_Images Clean Test Images on Test Server - 0 + localhost oai-gnb oai-nr-ue true @@ -73,7 +73,7 @@ Clean_Test_Server_Images Clean Test Images on Test Server - 0 + localhost oai-flexric true @@ -88,37 +88,33 @@ Deploy_Object Deploy OAI 5G CoreNetwork + localhost doc/tutorial_resources/oai-cn5g mysql oai-nrf oai-udr oai-udm oai-ausf oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI FlexRIC + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric oai-flexric - 0 - 0 Deploy_Object Deploy OAI 5G gNB in RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric oai-gnb - 0 - 0 Deploy_Object Deploy 2 OAI 5G NR-UEs in RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric oai-nr-ue oai-nr-ue2 - 0 - 0 @@ -149,55 +145,49 @@ Undeploy_Object Undeploy Core Network + localhost doc/tutorial_resources/oai-cn5g - 0 - 0 true Undeploy_Object Undeploy RAN and Flexric + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric - 0 - 0 true Deploy_Object RC monitoring + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric xapp-rc-moni - 0 - 0 Deploy_Object KPM monitoring + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric xapp-kpm-moni - 0 - 0 Deploy_Object KPM monitoring and RC control + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric xapp-kpm-rc - 0 - 0 Deploy_Object Custom SMs monitoring + localhost ci-scripts/yaml_files/5g_rfsimulator_flexric xapp-gtp-mac-rlc-pdcp-moni - 0 - 0 diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index 910a2dcbb5..d7fb38ef8f 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -57,76 +57,68 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_rfsimulator mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G gNB RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator oai-gnb - 0 - 0 Deploy_Object Deploy OAI 5G NR-UE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator oai-nr-ue - 0 - 0 Deploy_Object Deploy Second OAI 5G NR-UE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator oai-nr-ue2 - 0 - 0 Deploy_Object Deploy OAI 5G NR-UEs (#3, #4, #5) RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator oai-nr-ue3 oai-nr-ue4 oai-nr-ue5 - 0 - 0 Deploy_Object Deploy OAI 5G NR-UEs (#6, #7, #8) RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator oai-nr-ue6 oai-nr-ue7 oai-nr-ue8 - 0 - 0 Deploy_Object Deploy OAI 5G NR-UEs (#9, #10) RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator oai-nr-ue9 oai-nr-ue10 - 0 - 0 @@ -251,18 +243,17 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator 1,0,0,0 1,0,0,0 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue diff --git a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml index 60bb0011fc..7db37d8e63 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml @@ -60,31 +60,28 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_rfsimulator_24prb mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G gNB+UE RFsim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_24prb oai-gnb oai-nr-ue - 0 - 0 @@ -164,16 +161,15 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_24prb - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml index 5efb2e708b..75924e1ca2 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml @@ -42,31 +42,28 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_rfsimulator_2x2 mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G gNB+UE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_2x2 oai-gnb oai-nr-ue - 0 - 0 @@ -126,9 +123,8 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_2x2 - 0 - 0 1,0,0,0 1,0,0,0 @@ -137,7 +133,7 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml index 58ff14102b..b376df99f4 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml @@ -42,7 +42,7 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan @@ -55,25 +55,22 @@ Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G gNB RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest oai-gnb - 0 - 0 Deploy_Object Deploy OAI 5G NR-UE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest oai-nr-ue - 0 - 0 @@ -126,18 +123,17 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_fdd_phytest 10,100,100,100 10,100,100,100 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml index 3aa9a395b3..6a47da0ff9 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml @@ -40,33 +40,30 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI gNB + localhost ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI NR-UE + localhost ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb oai-gnb oai-nr-ue - 0 - 0 @@ -102,18 +99,17 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_fr2_32prb 10,0,0,0 10,0,0,0 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml index 88173b3659..7107b7971b 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml @@ -45,32 +45,29 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_rfsimulator_ntn_geo mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G gNB+nrUE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_ntn_geo oai-gnb oai-nr-ue - 0 - 0 @@ -133,16 +130,15 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_ntn_geo - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml b/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml index 0d2634192d..63897cfb8b 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_ntn_leo.xml @@ -40,32 +40,29 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_rfsimulator_ntn_leo mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G gNB+nrUE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_ntn_leo oai-gnb oai-nr-ue - 0 - 0 @@ -101,16 +98,15 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_ntn_leo - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml index 1e11870b88..58bff964d4 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml @@ -39,33 +39,30 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G UE 1 + localhost ci-scripts/yaml_files/5g_rfsimulator_sidelink oai-nr-ue-1 - 0 - 0 Deploy_Object Deploy OAI 5G UE 2 + localhost ci-scripts/yaml_files/5g_rfsimulator_sidelink oai-nr-ue-2 - 0 - 0 @@ -85,18 +82,17 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_sidelink 1,0,0,0 1,0,0,0 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_simple.xml b/ci-scripts/xml_files/container_5g_rfsim_simple.xml new file mode 100644 index 0000000000..738ce1a077 --- /dev/null +++ b/ci-scripts/xml_files/container_5g_rfsim_simple.xml @@ -0,0 +1,97 @@ + + + rfsim-5gnr-tdd + Monolithic SA TDD gNB + wrench + + 000001 + 000002 + 000003 + 000008 + 020001 + 444444 + 100001 + + + + + Deploy_Object + Deploy OAI 5G CoreNetwork + localhost + ci-scripts/yaml_files/5g_rfsimulator + mysql oai-amf oai-smf oai-upf oai-ext-dn + + + + Deploy_Object + Deploy OAI 5G gNB RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-gnb + + + + Deploy_Object + Deploy OAI 5G NR-UE RF sim SA + localhost + ci-scripts/yaml_files/5g_rfsimulator + oai-nr-ue + + + + Attach_UE + Attach OAI UE (Wait for IP) + rfsim5g_ue + localhost + + + + Ping + Ping ext-dn from NR-UE + rfsim5g_ue + localhost + rfsim5g_ext_dn + localhost + -c 20 -i 0.25 + 5 + + + + Detach_UE + Detach OAI UE 1 + rfsim5g_ue + localhost + + + + Undeploy_Object + true + Undeploy all OAI 5G stack + localhost + ci-scripts/yaml_files/5g_rfsimulator + 1,0,0,0 + 1,0,0,0 + + + diff --git a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml index 5efa8d3401..97730bd233 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml @@ -42,7 +42,7 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan @@ -55,25 +55,22 @@ Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI gNB + localhost ci-scripts/yaml_files/5g_rfsimulator_tdd_dora oai-gnb - 0 - 0 Deploy_Object Deploy OAI NR-UE + localhost ci-scripts/yaml_files/5g_rfsimulator_tdd_dora oai-nr-ue - 0 - 0 @@ -108,18 +105,17 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost ci-scripts/yaml_files/5g_rfsimulator_tdd_dora 0,0,0,0 0,0,0,0 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml index 40f3ad4607..c5c76124d3 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml @@ -44,31 +44,28 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + localhost oai-gnb-asan oai-nr-ue-asan Create_Workspace Create new Workspace - 0 - 0 + localhost Deploy_Object Deploy OAI 5G CoreNetwork + localhost ci-scripts/yaml_files/5g_rfsimulator_u0_25prb mysql oai-amf oai-smf oai-upf oai-ext-dn - 0 - 0 Deploy_Object Deploy OAI 5G VNF+PNF+nrUE RF sim SA + localhost ci-scripts/yaml_files/5g_rfsimulator_u0_25prb oai-vnf oai-pnf oai-nr-ue - 0 - 0 @@ -146,19 +143,18 @@ Undeploy_Object true Undeploy all OAI 5G stack + localhost oai-vnf oai-pnf ci-scripts/yaml_files/5g_rfsimulator_u0_25prb 1,0,0,0 1,0,0,0 - 0 - 0 Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + localhost oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_build_run_tests.xml b/ci-scripts/xml_files/container_build_run_tests.xml index 479bb20a5d..087c5af598 100644 --- a/ci-scripts/xml_files/container_build_run_tests.xml +++ b/ci-scripts/xml_files/container_build_run_tests.xml @@ -32,9 +32,8 @@ Build_Run_Tests Build and Run UnitTests + obelix all - 0 - 0 diff --git a/ci-scripts/xml_files/container_image_build.xml b/ci-scripts/xml_files/container_image_build.xml index 7db63e4281..afd58d4d6d 100644 --- a/ci-scripts/xml_files/container_image_build.xml +++ b/ci-scripts/xml_files/container_image_build.xml @@ -34,22 +34,19 @@ Create_Workspace Create new Workspace for server 0 - 0 - 0 + obelix Build_Image Build all Images + obelix all - 0 - 0 - True Push_Local_Registry Push Images to Local Registry - 0 + obelix diff --git a/ci-scripts/xml_files/container_image_build_arm.xml b/ci-scripts/xml_files/container_image_build_arm.xml index 722d23ddcf..7c731fd3a1 100644 --- a/ci-scripts/xml_files/container_image_build_arm.xml +++ b/ci-scripts/xml_files/container_image_build_arm.xml @@ -34,21 +34,19 @@ Create_Workspace Create new Workspace for server 0 - 0 - 0 + gracehopper3-oai Build_Image Build all Images + gracehopper3-oai native_arm - 0 - 0 Push_Local_Registry Push Images to Local Registry - 0 + gracehopper3-oai arm_ diff --git a/ci-scripts/xml_files/container_image_build_cross.xml b/ci-scripts/xml_files/container_image_build_cross.xml index 046ceb5413..ab94d847c8 100644 --- a/ci-scripts/xml_files/container_image_build_cross.xml +++ b/ci-scripts/xml_files/container_image_build_cross.xml @@ -32,16 +32,13 @@ Create_Workspace Create new Workspace - 0 - 0 + alambix Build_Image Cross-Compile for ARM64 build_cross_arm64 - 0 - 0 - True + alambix diff --git a/ci-scripts/xml_files/container_l2sim_proxy.xml b/ci-scripts/xml_files/container_l2sim_proxy.xml index 197baf429b..c2f19f9471 100644 --- a/ci-scripts/xml_files/container_l2sim_proxy.xml +++ b/ci-scripts/xml_files/container_l2sim_proxy.xml @@ -32,9 +32,7 @@ Build_Proxy Build L2sim Proxy Image - 1 - 1 - True + localhost b64d9bce986b38ca59e8582864ade3fcdd05c0dc diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml index a6d39d3f98..10ab1fd3b0 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml @@ -43,7 +43,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 + hutch oai-enb @@ -69,15 +69,13 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + hutch Deploy_Object Deploy eNB (FDD/Band7/5MHz/B200) in a container + hutch ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1 - 0 - 0 @@ -90,9 +88,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Undeploy_Object true Undeploy eNB + hutch ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1 - 0 - 0 @@ -212,7 +209,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + hutch oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml index 3e306844de..ebc59e746d 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml @@ -42,7 +42,7 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + hutch oai-enb @@ -68,24 +68,21 @@ Create_Workspace Create new Workspace for server 0 - 0 - 0 + hutch Deploy_Object Deploy RRU (FDD/Band7/5MHz/B200) in a container + hutch ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 rru_fdd - 0 - 0 Deploy_Object Deploy RCC (FDD/Band7/5MHz) in a container + hutch ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 rcc_fdd - 0 - 0 @@ -98,9 +95,8 @@ Undeploy_Object true Undeploy RCC/RRU + hutch ci-scripts/yaml_files/lte_b200_fdd_05Mhz_if4.5 - 0 - 0 @@ -195,7 +191,7 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + hutch oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml index 9d54eceaeb..8936a3928e 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml @@ -42,7 +42,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm Pull_Local_Registry Pull Images from Local Registry - 0 + hutch oai-enb @@ -61,24 +61,21 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm Create_Workspace Create new Workspace for server 0 - 0 - 0 + hutch Deploy_Object Deploy eNB (FDD/Band7/5MHz/B200) in a container + hutch ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1_no_rrc_activity - 0 - 0 Undeploy_Object true Undeploy eNB + hutch ci-scripts/yaml_files/lte_b200_fdd_05Mhz_tm1_no_rrc_activity - 0 - 0 @@ -178,7 +175,7 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + hutch oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml index 2889101ee8..1456418475 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml @@ -44,7 +44,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 + hutch oai-enb @@ -63,15 +63,13 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + hutch Deploy_Object Deploy eNB (FDD/Band7/10MHz/B200) in a container + hutch ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1 - 0 - 0 @@ -84,9 +82,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Undeploy_Object true Undeploy eNB + hutch ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1 - 0 - 0 @@ -207,7 +204,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + hutch oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml index fb18ce090f..aafcdff6ea 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml @@ -43,7 +43,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 + hutch oai-enb @@ -62,24 +62,21 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + hutch Deploy_Object Deploy eNB (FDD/Band7/10MHz/B200) in a container + hutch ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_cdrx - 0 - 0 Undeploy_Object true Undeploy eNB + hutch ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_cdrx - 0 - 0 @@ -139,7 +136,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + hutch oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml index 5501ad86fb..f50330ab89 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml @@ -49,13 +49,13 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + hutch oai-enb Pull_Local_Registry Pull Images from Local Registry - 1 + carabe oai-lte-ue @@ -87,28 +87,24 @@ Create_Workspace Create new Workspace for server 0 - 0 - 0 + hutch Deploy_Object Deploy eNB (FDD/Band7/10MHz/B200) in a container ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma - 0 - 0 + hutch Create_Workspace Create new Workspace for server 1 - 1 - 1 + carabe Deploy_Object Deploy LTE-UE (FDD/Band7/10MHz/B200) in a container + carabe ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma - 1 - 1 @@ -127,18 +123,16 @@ Undeploy_Object true Undeploy eNB + hutch ci-scripts/yaml_files/lte_b200_fdd_10Mhz_tm1_magma - 0 - 0 Undeploy_Object true Undeploy LTE-UE + carabe ci-scripts/yaml_files/lte_b200_fdd_10Mhz_oai_ue_magma - 1 - 1 @@ -191,7 +185,7 @@ Clean_Test_Server_Images true Clean Test Images on eNB Test Server - 0 + hutch oai-enb @@ -199,7 +193,7 @@ Clean_Test_Server_Images true Clean Test Images on LTE-UE Test Server - 1 + carabe oai-lte-ue diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml index 3a64107484..52dbcb8972 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml @@ -43,7 +43,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 + hutch oai-enb @@ -62,15 +62,13 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + hutch Deploy_Object Deploy eNB (FDD/Band7/20MHz/B200) in a container + hutch ci-scripts/yaml_files/lte_b200_fdd_20Mhz_tm1 - 0 - 0 @@ -83,9 +81,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Undeploy_Object true Undeploy eNB + hutch ci-scripts/yaml_files/lte_b200_fdd_20Mhz_tm1 - 0 - 0 @@ -207,7 +204,7 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + hutch oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml index bb6359d636..f46697a106 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml @@ -43,7 +43,7 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 + starsky oai-enb @@ -70,15 +70,13 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + starsky Deploy_Object Deploy eNB (TDD/Band40/5MHz/B200) in a container + starsky ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm1 - 0 - 0 @@ -91,9 +89,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml Undeploy_Object true Undeploy eNB + starsky ci-scripts/yaml_files/lte_b200_tdd_05Mhz_tm1 - 0 - 0 @@ -224,7 +221,7 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + starsky oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml index 0d4d1cae81..da187e2120 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml @@ -41,7 +41,7 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + starsky oai-enb @@ -68,24 +68,21 @@ Create_Workspace Create new Workspace for server 0 - 0 - 0 + starsky Deploy_Object Deploy RRU (TDD/Band40/5MHz/B200) in a container + starsky ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 rru_tdd - 0 - 0 Deploy_Object Deploy RCC (TDD/Band40/5MHz) in a container + starsky ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 rcc_tdd - 0 - 0 @@ -98,9 +95,8 @@ Undeploy_Object true Undeploy RRU/RCC + starsky ci-scripts/yaml_files/lte_b200_tdd_05Mhz_if4.5 - 0 - 0 @@ -210,7 +206,7 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + starsky oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml index e261a3a057..88b3330508 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml @@ -42,7 +42,7 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 + starsky oai-enb @@ -61,15 +61,13 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + starsky Deploy_Object Deploy eNB (TDD/Band40/10MHz/B200) in a container + starsky ci-scripts/yaml_files/lte_b200_tdd_10Mhz_tm1 - 0 - 0 @@ -82,9 +80,8 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml Undeploy_Object true Undeploy eNB + starsky ci-scripts/yaml_files/lte_b200_tdd_10Mhz_tm1 - 0 - 0 @@ -215,7 +212,7 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + starsky oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml index dd8ef337b8..65f4dfc6b4 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml @@ -42,7 +42,7 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 + starsky oai-enb @@ -61,15 +61,13 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + starsky Deploy_Object Deploy eNB (TDD/Band40/20MHz/B200) in a container + starsky ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1 - 0 - 0 @@ -82,9 +80,8 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml Undeploy_Object true Undeploy eNB + starsky ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1 - 0 - 0 @@ -213,7 +210,7 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + starsky oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml index 1719ad2691..6a0cb0f892 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml @@ -42,7 +42,7 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml Pull_Local_Registry Pull Images from Local Registry - 0 + starsky oai-enb @@ -62,15 +62,13 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml Create_Workspace Create new Workspace for server 0 - 0 - 0 + starsky Deploy_Object Deploy eNB (TDD/Band40/20MHz/B200) in a container + starsky ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1_default_scheduler - 0 - 0 @@ -83,9 +81,8 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml Undeploy_Object true Undeploy eNB + starsky ci-scripts/yaml_files/lte_b200_tdd_20Mhz_tm1_default_scheduler - 0 - 0 @@ -218,7 +215,7 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + starsky oai-enb diff --git a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml index f127601e39..3337bba999 100644 --- a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml +++ b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml @@ -48,7 +48,7 @@ Pull_Local_Registry Pull Images from Local Registry - 0 + obelix oai-enb @@ -68,15 +68,13 @@ Create_Workspace Create new Workspace - 0 - 0 + obelix Deploy_Object Deploy eNB (TDD/Band38/2.6Ghz/N3XX) in a container + obelix ci-scripts/yaml_files/lte_n3xx_tdd_2x2_tm1 - 0 - 0 @@ -142,9 +140,8 @@ Undeploy_Object true Undeploy gNB + obelix ci-scripts/yaml_files/lte_n3xx_tdd_2x2_tm1 - 0 - 0 - - epc-closure - EPC-Closure - log-out - -060000 - - - - - UndeployCoreNetwork - Terminate EPC - ltebox-nepes - - - diff --git a/ci-scripts/xml_files/nsa_epc_start.xml b/ci-scripts/xml_files/nsa_epc_start.xml deleted file mode 100644 index 89761ddb74..0000000000 --- a/ci-scripts/xml_files/nsa_epc_start.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - epc-start-tab - EPC-Start - log-in - - 000100 - - - - - - DeployCoreNetwork - Start EPC - ltebox-nepes - - - diff --git a/ci-scripts/xml_files/physim_4g_deploy_run.xml b/ci-scripts/xml_files/physim_4g_deploy_run.xml index f8fb8781d5..bdad3e412f 100644 --- a/ci-scripts/xml_files/physim_4g_deploy_run.xml +++ b/ci-scripts/xml_files/physim_4g_deploy_run.xml @@ -33,15 +33,14 @@ Create_Workspace Create new Workspace - 0 - 0 + avra Deploy_Run_PhySim Deploy and run physical simulator on openshift physims-4g - avra + avra diff --git a/ci-scripts/xml_files/physim_5g_deploy_run.xml b/ci-scripts/xml_files/physim_5g_deploy_run.xml index bd8bb0a121..08de47aaac 100644 --- a/ci-scripts/xml_files/physim_5g_deploy_run.xml +++ b/ci-scripts/xml_files/physim_5g_deploy_run.xml @@ -33,15 +33,14 @@ Create_Workspace Create new Workspace - 0 - 0 + avra Deploy_Run_PhySim Deploy and run physical simulator on openshift physims-5g - avra + avra diff --git a/ci-scripts/xml_files/sa_oaiue_cn5g_deploy.xml b/ci-scripts/xml_files/sa_oaiue_cn5g_deploy.xml deleted file mode 100644 index a49a2cda18..0000000000 --- a/ci-scripts/xml_files/sa_oaiue_cn5g_deploy.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - cn5g-start-tab - CN5G-Start - log-in - -000100 - - - - - - DeployCoreNetwork - Initialize 5G Core - oc-cn5g - - diff --git a/ci-scripts/xml_files/sa_oaiue_cn5g_undeploy.xml b/ci-scripts/xml_files/sa_oaiue_cn5g_undeploy.xml deleted file mode 100644 index beb490dbed..0000000000 --- a/ci-scripts/xml_files/sa_oaiue_cn5g_undeploy.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - cn5g-closure - CN5G-Closure - log-out - -060000 - - - - - UndeployCoreNetwork - Terminate 5G Core - oc-cn5g - - - diff --git a/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml b/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml index f82c54e8de..4a2daf0b97 100644 --- a/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml +++ b/ci-scripts/xml_files/t2_offload_dec_nr_ulsim.xml @@ -51,6 +51,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 5, 106 PRBs, 1 layer true + caracal nr_ulsim 300 -n1000 -s30 -S30.2 -m5 -r106 -R106 -C10 -P @@ -60,6 +61,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 5, 106 PRBs, 1 layer true + caracal nr_ulsim 100 -n1000 -s30 -S30.2 -m5 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -69,6 +71,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 15, 106 PRBs, 1 layer true + caracal nr_ulsim 300 -n1000 -s30 -S30.2 -m15 -r106 -R106 -C10 -P @@ -78,6 +81,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 15, 106 PRBs, 1 layer true + caracal nr_ulsim 150 -n1000 -s30 -S30.2 -m15 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -87,6 +91,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 25, 106 PRBs, 1 layer true + caracal nr_ulsim 250 -n1000 -s30 -S30.2 -m25 -r106 -R106 -C10 -P @@ -96,6 +101,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 25, 106 PRBs, 1 layer true + caracal nr_ulsim 250 -n1000 -s30 -S30.2 -m25 -r106 -R106 -C10 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -105,6 +111,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 5, 273 PRBs, 1 layer true + caracal nr_ulsim 300 -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -P @@ -114,6 +121,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 5, 273 PRBs, 1 layer true + caracal nr_ulsim 150 -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -123,6 +131,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 15, 273 PRBs, 1 layer true + caracal nr_ulsim 400 -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -P @@ -132,6 +141,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 15, 273 PRBs, 1 layer true + caracal nr_ulsim 350 -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -141,6 +151,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 25, 273 PRBs, 1 layer true + caracal nr_ulsim 400 -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -P @@ -150,6 +161,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 25, 273 PRBs, 1 layer true + caracal nr_ulsim 550 -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -159,6 +171,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 5, 273 PRBs, 2 layers true + caracal nr_ulsim 300 -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -W2 -z2 -y2 -P @@ -168,6 +181,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 5, 273 PRBs, 2 layers true + caracal nr_ulsim 250 -n1000 -s30 -S30.2 -m5 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -177,6 +191,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 15, 273 PRBs, 2 layers true + caracal nr_ulsim 600 -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -W2 -z2 -y2 -P @@ -186,6 +201,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 15, 273 PRBs, 2 layers true + caracal nr_ulsim 650 -n1000 -s30 -S30.2 -m15 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -195,6 +211,7 @@ Run_Physim Run nr_ulsim with CPU: SNR = 30, MCS = 25, 273 PRBs, 2 layers true + caracal nr_ulsim 650 -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -W2 -z2 -y2 -P @@ -204,6 +221,7 @@ Run_Physim Run nr_ulsim with T2 LDPC offload: SNR = 30, MCS = 25, 273 PRBs, 2 layers true + caracal nr_ulsim 1100 -n1000 -s30 -S30.2 -m25 -r273 -R273 -C10 -W2 -z2 -y2 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 diff --git a/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml b/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml index 9b7a84c51f..69dc27943c 100644 --- a/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml +++ b/ci-scripts/xml_files/t2_offload_enc_nr_dlsim.xml @@ -52,6 +52,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 5, 106 PRBs, 1 layer true + caracal nr_dlsim 230 -n1000 -s30 -S30.2 -e5 -b106 -R106 -X 8,9,10,11,12 -P @@ -61,6 +62,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 5, 106 PRBs, 1 layer true + caracal nr_dlsim 100 -n1000 -s30 -S30.2 -e5 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -70,6 +72,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 15, 106 PRBs, 1 layer true + caracal nr_dlsim 300 -n1000 -s30 -S30.2 -e15 -b106 -R106 -X 8,9,10,11,12 -P @@ -79,6 +82,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 15, 106 PRBs, 1 layer true + caracal nr_dlsim 100 -n1000 -s30 -S30.2 -e15 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -88,6 +92,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 25, 106 PRBs, 1 layer true + caracal nr_dlsim 350 -n1000 -s30 -S30.2 -e25 -b106 -R106 -X 8,9,10,11,12 -P @@ -97,6 +102,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 25, 106 PRBs, 1 layer true + caracal nr_dlsim 200 -n1000 -s30 -S30.2 -e25 -b106 -R106 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -106,6 +112,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 5, 273 PRBs, 1 layer true + caracal nr_dlsim 300 -n1000 -s30 -S30.2 -e5 -b273 -R273 -X 8,9,10,11,12 -P @@ -115,6 +122,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 5, 273 PRBs, 1 layer true + caracal nr_dlsim 150 -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -124,6 +132,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 15, 273 PRBs, 1 layer true + caracal nr_dlsim 350 -n1000 -s30 -S30.2 -e15 -b273 -R273 -X 8,9,10,11,12 -P @@ -133,6 +142,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 15, 273 PRBs, 1 layer true + caracal nr_dlsim 250 -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -142,6 +152,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 25, 273 PRBs, 1 layer true + caracal nr_dlsim 400 -n1000 -s30 -S30.2 -e25 -b273 -R273 -X 8,9,10,11,12 -P @@ -151,6 +162,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 25, 273 PRBs, 1 layer true + caracal nr_dlsim 400 -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -160,6 +172,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 5, 273 PRBs, 2 layers true + caracal nr_dlsim 400 -n1000 -s30 -S30.2 -e5 -b273 -R273 -X 8,9,10,11,12 -x2 -z2 -y2 -P @@ -169,6 +182,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 5, 273 PRBs, 2 layers true + caracal nr_dlsim 200 -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -178,6 +192,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 15, 273 PRBs, 2 layers true + caracal nr_dlsim 450 -n1000 -s30 -S30.2 -e15 -b273 -R273 -X 8,9,10,11,12 -x2 -z2 -y2 -P @@ -187,6 +202,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 15, 273 PRBs, 2 layers true + caracal nr_dlsim 500 -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -196,6 +212,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 25, 273 PRBs, 2 layers true + caracal nr_dlsim 500 -n1000 -s30 -S30.2 -e25 -b273 -R273 -X 8,9,10,11,12 -x2 -z2 -y2 -P @@ -205,6 +222,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 25, 273 PRBs, 2 layers true + caracal nr_dlsim 500 -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -x2 -z2 -y2 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -214,6 +232,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 5, 273 PRBs, 2 layers, 4 antennas true + caracal nr_dlsim 400 -n1000 -s30 -S30.2 -e5 -b273 -R273 -X8,9,10,11,12 -x2 -z4 -y4 -P @@ -223,6 +242,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 5, 273 PRBs, 2 layers, 4 antennas true + caracal nr_dlsim 200 -n1000 -s30 -S30.2 -e5 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -232,6 +252,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 20, 273 PRBs, 2 layers, 4 antennas true + caracal nr_dlsim 400 -n1000 -s30 -S30.2 -e15 -b273 -R273 -X8,9,10,11,12 -x2 -z4 -y4 -P @@ -241,6 +262,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 20, 273 PRBs, 2 layers, 4 antennas true + caracal nr_dlsim 300 -n1000 -s30 -S30.2 -e15 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 @@ -250,6 +272,7 @@ Run_Physim Run nr_dlsim with CPU: SNR = 30, MCS = 27, 273 PRBs, 2 layers, 4 antennas true + caracal nr_dlsim 450 -n1000 -s30 -S30.2 -e25 -b273 -R273 -X8,9,10,11,12 -x2 -z4 -y4 -P @@ -259,6 +282,7 @@ Run_Physim Run nr_dlsim with T2 LDPC offload: SNR = 30, MCS = 27, 273 PRBs, 2 layers, 4 antennas true + caracal nr_dlsim 450 -n1000 -s30 -S30.2 -e25 -b273 -R273 -X4,5,6,7,8,9 -x2 -z4 -y4 -P --loader.ldpc.shlibversion _aal --nrLDPC_coding_aal.dpdk_dev af:00.0 --nrLDPC_coding_aal.dpdk_core_list 11-12 --nrLDPC_coding_aal.is_t2 1 diff --git a/ci-scripts/xml_files/test_case_list_template.xml b/ci-scripts/xml_files/test_case_list_template.xml deleted file mode 100644 index bcc8f94c09..0000000000 --- a/ci-scripts/xml_files/test_case_list_template.xml +++ /dev/null @@ -1,105 +0,0 @@ - - - - 010101 050101 060101 070101 030101 030201 050201 070201 060201 - 010102 030102 030103 030104 030105 030106 - - - - - Build_eNB - Build eNB (USRP) - -w USRP -c --eNB - - - - Build_eNB - Build eNB (USRP) - -w BLADERF -c --eNB - - - - Initialize_eNB - Initialize eNB (FDD/Band1/5MHz/info) - -O enb.band7.tm1.50prb.usrpb210.conf --log_config.global_log_options level,nocolor,time - - - - Initialize_eNB - Initialize eNB (FDD/Band1/10MHz/info) - -O 10M.band1.FDD.info.conf --log_config.global_log_options level,nocolor,time - - - - Initialize_eNB - Initialize eNB (FDD/Band1/20MHz/info) - -O 20M.band1.FDD.info.conf --log_config.global_log_options level,nocolor,time - - - - Initialize_eNB - Initialize eNB (TDD/Band38/5MHz/info) - -O 5M.band38.TDD.info.conf --log_config.global_log_options level,nocolor,time - - - - Initialize_eNB - Initialize eNB (TDD/Band38/10MHz/info) - -O 10M.band38.TDD.info.conf --log_config.global_log_options level,nocolor,time - - - - Initialize_eNB - Initialize eNB (TDD/Band38/20MHz/info) - -O 20M.band38.TDD.info.conf --log_config.global_log_options level,nocolor,time - - - - Terminate_eNB - Terminate eNB - - - - - - Initialize_UE - Initialize UE - - - - Terminate_UE - Terminate UE - - - - Attach_UE - Attach UE - - - - Detach_UE - Detach UE - - - diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 292e8d0575..b1b305c596 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -37,11 +37,7 @@ set_openair_env conf_nvram_path=$OPENAIR_DIR/openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf HW="" -VERBOSE_COMPILE=0 -RUN_GROUP=0 -TEST_CASE_GROUP="" BUILD_DIR=ran_build -BUILD_DOXYGEN=0 DISABLE_HARDWARE_DEPENDENCY="False" CMAKE_BUILD_TYPE="RelWithDebInfo" CMAKE_CMD="$CMAKE" @@ -99,14 +95,8 @@ Options: Selects the transport protocol type, options: None, Ethernet, benetel4g, benetel5g, oran_fhlib_5g, oran_fhlib_5g_mplane, WLS -P | --phy_simulators Makes the unitary tests Layer 1 simulators --s | --check - runs a set of auto-tests based on simulators and several compilation tests ---run-group - runs only specified test cases specified here. This flag is only valid with -s -V | --vcd Adds a debgging facility to the binary files: GUI with major internal synchronization events ---verbose-compile - Shows detailed compilation instructions in makefile --build-doxygen Builds doxygen based documentation. --trace-asn1c-enc-dec @@ -117,8 +107,6 @@ Options: Disables the T tracer. --disable-hardware-dependency Disable HW dependency during installation ---ue-autotest-trace - Enable specific traces for UE autotest framework --ue-trace Enable traces for UE debugging --ue-timing @@ -319,28 +307,14 @@ function main() { TARGET_LIST="$TARGET_LIST dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim nr_psbchsim" echo_info "Will compile dlsim, ulsim, ..." shift;; - -s | --check) - OAI_TEST=1 - echo_info "Will run auto-tests" - shift;; - --run-group) - RUN_GROUP=1 - TEST_CASE_GROUP=$2 - echo_info "executing test cases only in group: $TEST_CASE_GROUP" - shift 2;; -V | --vcd) echo_info "Setting gtk-wave output" CMAKE_CMD="$CMAKE_CMD -DENABLE_VCD_FIFO=True" shift;; - --verbose-compile) - VERBOSE_COMPILE=1 - echo_info "Will compile with verbose instructions" - shift;; --build-doxygen) CMAKE_CMD="$CMAKE_CMD -DGENERATE_DOXYGEN=ON" - TARGET_LIST="$TARGET_LIST doc" - BUILD_DOXYGEN=1 - echo_info "Will build doxygen support" + TARGET_LIST="$TARGET_LIST doc" + echo_info "Will build Doxygen documentation: $DIR/$BUILD_DIR/build/doc/html/index.html" shift;; --enable-LTTNG) CMAKE_CMD="$CMAKE_CMD -DENABLE_LTTNG=ON -DT_TRACER=OFF" @@ -355,10 +329,6 @@ function main() { echo_info "Disabling hardware dependency for compiling software" DISABLE_HARDWARE_DEPENDENCY="True" shift 1;; - --ue-autotest-trace) - CMAKE_CMD="$CMAKE_CMD -DUE_AUTOTEST_TRACE=True" - echo_info "Enabling autotest specific trace for UE" - shift 1;; --ue-trace) CMAKE_CMD="$CMAKE_CMD -DUE_DEBUG_TRACE=False" echo_info "Enabling UE trace for debug" @@ -498,13 +468,10 @@ function main() { CMAKE_CMD="$CMAKE_CMD ../../.." echo_info "Running \"$CMAKE_CMD\"" eval $CMAKE_CMD - compilations $BUILD_DIR all.txt "$TARGET_LIST" "${BUILD_TOOL_OPT}" - ################### - # Doxygen Support # - ################### - if [ "$BUILD_DOXYGEN" = "1" ] ; then - echo_info "Built Doxygen based documentation. The documentation file is located here: $DIR/$BUILD_DIR/build/doc/html/index.html" - fi + cmd="$CMAKE --build . --target ${TARGET_LIST} -- ${BUILD_TOOL_OPT}" + echo_info "Running \"${cmd}\"" $green + eval $cmd + ret=$? if [ "$UE" = 1 ] ; then echo_info "Generate LTE USIM default sim content UE specific part" @@ -517,26 +484,7 @@ function main() { fi fi - - ############## - # Auto-tests # - ############## - if [ "$OAI_TEST" = "1" ] ; then - echo_info "The log file for the autotest script for debugging is located here: $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log " - echo_info "The results of autotests results is located here: $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " - echo_info "You can hit CTRL-C at any time to terminate the autotests..." - rm -fr $OPENAIR_DIR/cmake_targets/autotests/log - mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log - if [ "$RUN_GROUP" -eq "1" ]; then - $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log - else - $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log - fi - wait - else - echo_success "BUILD SHOULD BE SUCCESSFUL" - fi - + echo_success "BUILD SHOULD BE SUCCESSFUL" } main "$@" diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index dc9678263b..2b11412e94 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -181,73 +181,12 @@ clean_all_files() { rm -rf $dir/autotests/bin $dir/autotests/log $dir/autotests/*/build } -################################### -# Compilers -################################### - -#check_warnings: -# print error message if the compilation had warnings -#argument: -# $1: log file -check_warnings() { - #we look for 'warning:' in the compilation log file - #this is how gcc starts a warning - #this is not perfect, we may get false positive - warning_count=`grep "warning:" "$1" | grep -E -v "jobserver unavailable|disabling jobserver mode" | wc -l` - if [ $warning_count -gt 0 ]; then - echo_error "WARNING: $warning_count warnings. See $1" - fi -} - -#check_errors: -# print error message if the compilation had errors -#argument: -# $1: log file -check_errors() { - #we look for 'error:' in the compilation log file - error_count=`grep -c "error:" "$1"` - if [ $error_count -gt 0 ]; then - echo_error "ERROR: $error_count error. See $1" - fi -} - -compilations() { - [[ $# -eq 4 ]] || echo_fatal "compilations " - local dir=$1 - local logfile=$2 - local targets=$3 - local build_tool_opt=$4 - local verbose=$([ "$VERBOSE_COMPILE" == "1" ] && echo "-v" || echo "") - echo cd $OPENAIR_DIR/cmake_targets/$dir/build - cd $OPENAIR_DIR/cmake_targets/$dir/build - cmd="$CMAKE --build . ${verbose} --target ${targets} -- ${build_tool_opt}" - echo_info "Running \"${cmd}\"" $green - echo "Log file for compilation is being written to: $dlog/$logfile" - set +e - { - eval ${cmd} - ret=$? - } > $dlog/$logfile 2>&1 - # Print the errors and warnings for CI purposes - grep -E -A5 -B5 "warning:|error:| Error " $dlog/$logfile || true - check_warnings "$dlog/$logfile" - if [[ $ret -eq 0 ]]; then - echo_success "$targets compiled" - else - check_errors "$dlog/$logfile" - echo_error "compilation of $targets failed" - exit 1 - fi -} - ############################################ # External packages installers ############################################ install_usrp_uhd_driver_from_source(){ - uhd_install_log=$OPENAIR_DIR/cmake_targets/log/uhd_install_log.txt - echo_info "\nInstalling UHD driver from sources. The log file for UHD driver installation is here: $uhd_install_log " - ( + echo_info "\nInstalling UHD driver from sources." pushd /tmp echo "Cloning UHD driver repository" rm -rf /tmp/uhd @@ -292,7 +231,7 @@ install_usrp_uhd_driver_from_source(){ git diff mkdir -p host/build cd host/build || true - $CMAKE ../ -GNinja -DENABLE_TESTS=OFF -DENABLE_EXAMPLES=OFF + $CMAKE ../ -GNinja -DENABLE_TESTS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_B100=OFF -DENABLE_DOXYGEN=OFF -DENABLE_MANUAL=OFF -DENABLE_MAN_PAGES=OFF -DENABLE_MAN_PAGE_COMPRESSION=OFF -DENABLE_OCTOCLOCK=ON -DENABLE_USRP1=OFF -DENABLE_USRP2=OFF echo "Compiling UHD" ninja $SUDO ninja install @@ -307,25 +246,13 @@ install_usrp_uhd_driver_from_source(){ fi popd rm -rf /tmp/uhd - ) >& $uhd_install_log } check_install_usrp_uhd_driver(){ if [[ "$OS_BASEDISTRO" == "debian" ]]; then boost_libs_ubuntu="libboost-chrono-dev libboost-date-time-dev libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev libboost-test-dev libboost-regex-dev" #first we remove old installation - $SUDO apt-get remove uhd -y || true - $SUDO apt-get remove uhd-host -y || true - $SUDO apt-get remove libuhd-dev -y || true - $SUDO apt-get remove libuhd003 -y || true - $SUDO apt-get remove libuhd3.13.1 -y || true - $SUDO apt-get remove libuhd3.14.0 -y || true - $SUDO apt-get remove libuhd3.14.1 -y || true - $SUDO apt-get remove libuhd3.15.0 -y || true - local distribution=$(get_distribution_release) - if [[ "$distribution" == "ubuntu20.04" || "$distribution" == "ubuntu22.04" || "$distribution" == "ubuntu24.04" ]]; then - $SUDO apt-get remove libuhd4.?.? -y || true - fi + $SUDO apt-get remove uhd* libuhd* -y || true v=$(lsb_release -cs) $SUDO apt-add-repository --remove "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main" if [[ -v BUILD_UHD_FROM_SOURCE ]] || [[ "$OS_DISTRO" == "debian" ]]; then @@ -404,9 +331,7 @@ install_usrp_uhd_driver() { } install_bladerf_driver_from_source(){ - bladerf_install_log=$OPENAIR_DIR/cmake_targets/log/bladerf_install_log.txt - echo_info "\nInstalling BladeRF driver from sources. The log file for BladeRF driver installation is here: $bladerf_install_log " - ( + echo_info "\nInstalling BladeRF driver from sources." cd /tmp echo "Downloading BladeRF driver" rm -rf /tmp/bladeRF @@ -429,7 +354,6 @@ install_bladerf_driver_from_source(){ sudo mkdir -p /usr/share/Nuand/bladeRF sudo mv bladeRF_fw_latest.img /usr/share/Nuand/bladeRF/bladeRF_fw.img sudo mv hostedx40-latest.rbf /usr/share/Nuand/bladeRF/hostedx40.rbf - ) >& $bladerf_install_log } check_install_bladerf_driver(){ @@ -464,9 +388,7 @@ check_install_lmssdr_driver(){ } install_soapy_from_source(){ - soapy_install_log=$OPENAIR_DIR/cmake_targets/log/soapy_install_log.txt - echo_info "\nInstalling Soapy EcoSystem from source. The log file for Soapy installation is here: $soapy_install_log " - ( + echo_info "\nInstalling Soapy EcoSystem from source." cd /tmp echo "Downloading SoapySDR" rm -rf /tmp/SoapySDR @@ -493,13 +415,10 @@ install_soapy_from_source(){ make -j`nproc` $SUDO make install $SUDO ldconfig - ) >& $soapy_install_log } install_soapy_iris_from_source(){ - iris_install_log=$OPENAIR_DIR/cmake_targets/log/iris_install_log.txt - echo_info "\nInstalling Iris driver from source. The log file for Iris driver installation is here: $iris_install_log " - ( + echo_info "\nInstalling Iris driver from source." cd /tmp echo "Downloading SoapyIris" rm -rf /tmp/sklk-soapyiris @@ -512,7 +431,6 @@ install_soapy_iris_from_source(){ make -j`nproc` $SUDO make install $SUDO ldconfig - ) >& $iris_install_log } check_install_soapy () { @@ -644,10 +562,7 @@ check_install_oai_software() { } install_asn1c_from_source(){ - mkdir -p $OPENAIR_DIR/cmake_targets/log - asn1_install_log=$OPENAIR_DIR/cmake_targets/log/asn1c_install_log.txt - echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log " - ( + echo_info "\nInstalling ASN1." $SUDO $INSTALLER -y install bison flex $SUDO rm -rf /tmp/asn1c # GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c @@ -668,7 +583,6 @@ install_asn1c_from_source(){ if [[ -v CI_ENV ]]; then $SUDO rm -rf /tmp/asn1c fi - ) > $asn1_install_log 2>&1 } install_simde_from_source(){ @@ -808,43 +722,3 @@ set_openair_env(){ export OPENAIR3_DIR=$openair_path/openair3 export OPENAIR_TARGETS=$openair_path/targets } - -################################ -# Function to killall the subprocesses when Ctrl-C Key is hit -############################### -function handle_ctrl_c(){ -CURPID=$$ -ppid=$$ -arraycounter=1 -echo_info "** Trapped CTRL-C. Killing all subprocesses now..." -echo_info "** Calling sync now..." -sync -while true -do - FORLOOP=FALSE - # Get all the child process id - for i in `ps -ef| awk '$3 == '$ppid' { print $2 }'` - do - if [ $i -ne $CURPID ] ; then - procid[$arraycounter]=$i - arraycounter=`expr $arraycounter + 1` - ppid=$i - FORLOOP=TRUE - fi - done - if [ "$FORLOOP" = "FALSE" ] ; then - arraycounter=`expr $arraycounter - 1` - ## We want to kill child process id first and then parent id's - while [ $arraycounter -ne 0 ] - do - echo "first we send ctrl-c to program" - $SUDO kill -INT "${procid[$arraycounter]}" - sleep 5 - echo "Now we force kill if that didn't work" - $SUDO kill -9 "${procid[$arraycounter]}" >/dev/null - arraycounter=`expr $arraycounter - 1` - done - exit - fi -done -} diff --git a/doc/README.md b/doc/README.md index f3e30b57ce..f2049bac04 100644 --- a/doc/README.md +++ b/doc/README.md @@ -133,6 +133,8 @@ The other SDRs (AW2S, LimeSDR, ...) have no READMEs. - Component tests are under `tests/`. Currently, there is a simple CU-UP tester, see the corresponding [README.md](../tests/nr-cuup/README.md). - [TESTBenches.md](./TESTBenches.md) lists the CI setup and links to pipelines +- The CI setup uses a [custom framework](../ci-scripts/README.md) to run + end-to-end tests. # Developer tools diff --git a/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c index 2b8a725787..e4a34eb376 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c @@ -482,13 +482,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) { LOG_I(PHY, "[UE%d] In synch, rx_offset %d samples\n",ue->Mod_id, ue->rx_offset); if (ue->UE_scan_carrier == 0) { -#if UE_AUTOTEST_TRACE - LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n", - ue->Mod_id, - ue->proc.proc_rxtx[0].frame_rx, - ue->rx_offset, - ue->common_vars.freq_offset ); -#endif // send sync status to higher layers later when timing offset converge to target timing generate_pcfich_reg_mapping(frame_parms); generate_phich_reg_mapping(frame_parms); diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index e31d0491bc..b95c7b8f79 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -1205,13 +1205,6 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, const UE_nr_rxtx_proc_t *proc, nr_phy_ LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", ue->Mod_id,frame_rx,ue->total_TBS[gNB_id], ue->total_TBS_last[gNB_id],(float) ue->bitrate[gNB_id]/1000.0); - -#if UE_AUTOTEST_TRACE - if ((frame_rx % 100 == 0)) { - LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[gNB_id]/1000.0, frame_rx); - } -#endif - } #ifdef EMOS diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index 0b336fdce6..0e4c59dc0e 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -4320,13 +4320,6 @@ int phy_procedures_slot_parallelization_UE_RX(PHY_VARS_UE *ue, LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", ue->Mod_id,frame_rx,ue->total_TBS[eNB_id], ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0); -#if UE_AUTOTEST_TRACE - - if ((frame_rx % 100 == 0)) { - LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx); - } - -#endif } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT);