Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zzha zzha
OpenXG-RAN
Commits
50962242
Commit
50962242
authored
Oct 11, 2019
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop_inria_ci_deployment' into develop_integration_2019_w41
parents
0fe0dd89
09fefc71
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1503 additions
and
130 deletions
+1503
-130
ci-scripts/.gitignore
ci-scripts/.gitignore
+7
-0
ci-scripts/Jenkinsfile-inria-r2lab
ci-scripts/Jenkinsfile-inria-r2lab
+421
-0
ci-scripts/main.py
ci-scripts/main.py
+422
-130
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_start.xml
...cripts/xml_files/inria/enb_ue_usrp210_band7_epc_start.xml
+53
-0
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_stop.xml
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_stop.xml
+47
-0
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_terminate.xml
...cripts/xml_files/inria/enb_ue_usrp210_band7_terminate.xml
+42
-0
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
...s/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
+103
-0
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
..._files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
+118
-0
ci-scripts/xml_files/inria/enb_usrp210_band7_build.xml
ci-scripts/xml_files/inria/enb_usrp210_band7_build.xml
+38
-0
ci-scripts/xml_files/inria/enb_usrp210_band7_epc_start.xml
ci-scripts/xml_files/inria/enb_usrp210_band7_epc_start.xml
+53
-0
ci-scripts/xml_files/inria/enb_usrp210_band7_epc_stop.xml
ci-scripts/xml_files/inria/enb_usrp210_band7_epc_stop.xml
+53
-0
ci-scripts/xml_files/inria/enb_usrp210_band7_test_05mhz_tm1.xml
...ipts/xml_files/inria/enb_usrp210_band7_test_05mhz_tm1.xml
+108
-0
ci-scripts/xml_files/inria/ue_usrp210_band7_build.xml
ci-scripts/xml_files/inria/ue_usrp210_band7_build.xml
+38
-0
No files found.
ci-scripts/.gitignore
0 → 100644
View file @
50962242
enb_*.log
ue_*.log
ping_*.*
iperf_*.*
phones_list.txt
modules_list.txt
test_results*.html
ci-scripts/Jenkinsfile-inria-r2lab
0 → 100644
View file @
50962242
#
!
/bin/
groovy
/*
* 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
*/
// Abstraction function to send social media messages:
// like on Slack or Mattermost
def
sendSocialMediaMessage
(
pipeChannel
,
pipeColor
,
pipeMessage
)
{
if
(
params
.
pipelineUsesSlack
!=
null
)
{
if
(
params
.
pipelineUsesSlack
)
{
slackSend
channel:
pipeChannel
,
color:
pipeColor
,
message:
pipeMessage
}
}
}
// Location of the test XML file to be run
def
testXMLFile
=
params
.
pythonTestXmlFile
def
mainPythonAllXmlFiles
=
""
def
buildStageStatus
=
true
// Name of the test stage
def
testStageName
=
params
.
pipelineTestStageName
// Name of the branch to work on
def
ranRepoBranch
=
params
.
pythonWorkingBranch
// Lease booking parameters
def
r2labStartTime
=
params
.
R2LAB_LeaseBookStartTime
def
r2labDuration
=
params
.
R2LAB_LeaseBookDuration
// Fixed deployment
def
r2labBaseIpAddr
=
'192.168.3.'
def
r2labPythonExeIdx
=
'14'
def
r2labPythonExe
=
'fit'
+
r2labPythonExeIdx
def
r2labENB0Idx
=
'23'
def
r2labENB0
=
'fit'
+
r2labENB0Idx
def
r2labENB0IpAddr
=
r2labBaseIpAddr
+
r2labENB0Idx
def
r2labEPC0Idx
=
'17'
def
r2labEPC0
=
'fit'
+
r2labEPC0Idx
def
r2labEPC0IpAddr
=
r2labBaseIpAddr
+
r2labEPC0Idx
def
r2labUE0Idx
=
'6'
def
r2labUE0
=
'fit0'
+
r2labUE0Idx
def
r2labUE0IpAddr
=
r2labBaseIpAddr
+
r2labUE0Idx
pipeline
{
agent
{
label
'master'
}
options
{
disableConcurrentBuilds
()
timestamps
()
ansiColor
(
'xterm'
)
}
stages
{
stage
(
"Book session"
)
{
steps
{
script
{
echo
'\u2705 \u001B[32mVerify Parameters\u001B[0m'
def
allParametersPresent
=
true
if
(
params
.
R2LAB_Credentials
==
null
)
{
allParametersPresent
=
false
}
if
(
params
.
R2LAB_FitNode_Credentials
==
null
)
{
allParametersPresent
=
false
}
if
(
params
.
R2LAB_LeaseBookStartTime
==
null
)
{
allParametersPresent
=
false
}
if
(
params
.
R2LAB_LeaseBookDuration
==
null
)
{
allParametersPresent
=
false
}
// If not present picking a default Stage Name
if
(
params
.
pipelineTestStageName
==
null
)
{
// picking default
testStageName
=
'Tests at Inria R2LAB'
}
// If not present picking a default branch name
if
(
params
.
pythonWorkingBranch
==
null
)
{
ranRepoBranch
=
'develop'
}
if
(
params
.
pythonTestXmlFile
==
null
)
{
// picking default
testXMLFile
=
'xml_files/inria/enb_usrp210_band7_build.xml'
echo
"Test XML file(default): ${testXMLFile}"
mainPythonAllXmlFiles
+=
"--XMLTestFile="
+
testXMLFile
+
" "
}
else
{
String
[]
myXmlTestSuite
=
testXMLFile
.
split
(
"\\r?\\n"
)
for
(
xmlFile
in
myXmlTestSuite
)
{
mainPythonAllXmlFiles
+=
"--XMLTestFile="
+
xmlFile
+
" "
echo
"Test XML file : ${xmlFile}"
}
}
if
(!
allParametersPresent
)
{
currentBuild
.
result
=
'ABORTED'
error
(
'Stopping early because no R2LAB credentials'
)
}
JOB_TIMESTAMP
=
sh
returnStdout:
true
,
script:
'date --rfc-3339=seconds | sed -e "s#+00:00##"'
JOB_TIMESTAMP
=
JOB_TIMESTAMP
.
trim
()
echo
'\u2705 \u001B[32mBook a Session\u001B[0m'
BOOK_TIMESTAMP
=
sh
returnStdout:
true
,
script:
'date --rfc-3339=date'
BOOK_TIMESTAMP
=
BOOK_TIMESTAMP
.
trim
()
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_Credentials}"
,
usernameVariable:
'r2labuser'
,
passwordVariable:
'r2labpassword'
]
])
{
sh
"python3 /home/eurecom/inria-scripts/booking-lease.py --book-lease --from ${BOOK_TIMESTAMP}T${r2labStartTime} --duration ${r2labDuration} --slice inria_oaici ${r2labuser} ${r2labpassword}"
sh
"python3 /home/eurecom/inria-scripts/booking-lease.py --get-leases ${r2labuser} ${r2labpassword}"
}
}
}
}
stage
(
"Load Images"
)
{
steps
{
script
{
echo
'\u2705 \u001B[32mLoad Image for Python Executor\u001B[0m'
sh
"ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-enb-ue ${r2labPythonExeIdx} > /dev/null 2>&1'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labPythonExeIdx}'"
echo
'\u2705 \u001B[32mLoad Image for one eNB\u001B[0m'
sh
"ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-enb-ue ${r2labENB0Idx} > /dev/null 2>&1'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labENB0Idx}'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'uon ${r2labENB0Idx}'"
echo
'\u2705 \u001B[32mLoad Image for one OAI UE\u001B[0m'
sh
"ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-enb-ue ${r2labUE0Idx} > /dev/null 2>&1'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labUE0Idx}'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'uon ${r2labUE0Idx}'"
echo
'\u2705 \u001B[32mLoad Image for one EPC\u001B[0m'
sh
"ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-epc ${r2labEPC0Idx} > /dev/null 2>&1'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labEPC0Idx}'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'nodes ${r2labUE0Idx},${r2labPythonExeIdx},${r2labEPC0Idx},${r2labENB0Idx} && st'"
}
}
}
stage
(
"Prepare Python Executor"
)
{
steps
{
script
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git fetch --all --prune --quiet\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git checkout --quiet ${ranRepoBranch}\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git pull --quiet origin ${ranRepoBranch}\"'"
GIT_COMMIT_TO_RUN
=
sh
returnStdout:
true
,
script:
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git log -n1 --pretty=format:%H\"' | grep -v fit"
GIT_COMMIT_TO_RUN
=
GIT_COMMIT_TO_RUN
.
trim
()
echo
"Latest commit to use is ${GIT_COMMIT_TO_RUN}"
// Putting the adaptation parameters for the OAI UE
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp /home/inria_oaici/for-ci/adapt_usim_parameters_${r2labUE0}.sed ${fituser}@${r2labUE0}:/tmp/adapt_usim_parameters.sed'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp /home/inria_oaici/for-ci/phones_list.txt ${fituser}@${r2labEPC0}:/tmp'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S cp /tmp/phones_list.txt /etc/ci\"'"
// Out of rload, the sub-network-interfaces are not up
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:m11 172.16.1.102 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:m10 192.168.10.110 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:sxu 172.55.55.102 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:s1u 192.168.248.159 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:sxc 172.55.55.101 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:s5c 172.58.58.102 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:p5c 172.58.58.101 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:s11 172.16.1.104 up\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"ifconfig\"'"
// Adding routes on the EPC
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ip route add default via 192.168.3.100 dev control table lte\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ip rule add from 12.0.0.0/8 table lte\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ip rule add from 12.1.1.0/8 table lte\"'"
// Adding a route on the eNB for the S1U interface
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labENB0} \"echo ${fitpasswd} | sudo -S ip route add 192.168.248.0/24 via ${r2labEPC0IpAddr} dev control\"'"
// For the moment, simple way to route traffic from python executor to any UEs
sh
"ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"echo ${fitpasswd} | sudo -S ip route add 12.1.1.0/24 via ${r2labEPC0IpAddr} dev control\"'"
}
}
}
}
stage
(
"Build and Test"
)
{
steps
{
script
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=InitiateHtml --ranRepository=https://gitlab.eurecom.fr/oai/openairinterface5g --ranBranch=${ranRepoBranch} --ranCommitID=${GIT_COMMIT_TO_RUN} --ranAllowMerge=false --ADBIPAddress=${r2labEPC0IpAddr} --ADBUserName=${fituser} --ADBPassword=${fitpasswd} --ADBType=distributed ${mainPythonAllXmlFiles}\"'"
String
[]
myXmlTestSuite
=
testXMLFile
.
split
(
"\\r?\\n"
)
for
(
xmlFile
in
myXmlTestSuite
)
{
try
{
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=TesteNB --ranRepository=https://gitlab.eurecom.fr/oai/openairinterface5g --ranBranch=${ranRepoBranch} --ranCommitID=${GIT_COMMIT_TO_RUN} --ranAllowMerge=false --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd} --eNBSourceCodePath=/home/${fituser}/openairinterface5g --UEIPAddress=${r2labUE0IpAddr} --UEUserName=${fituser} --UEPassword=${fitpasswd} --UESourceCodePath=/home/${fituser}/openairinterface5g --EPCIPAddress=${r2labEPC0IpAddr} --EPCType=OAI-Rel14-CUPS --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --ADBIPAddress=${r2labEPC0IpAddr} --ADBUserName=${fituser} --ADBPassword=${fitpasswd} --ADBType=distributed --XMLTestFile=${xmlFile}\"'"
}
catch
(
Exception
e
)
{
currentBuild
.
result
=
'FAILURE'
buildStageStatus
=
false
}
}
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd}\"'"
}
}
}
}
stage
(
"Prepare Log Collection"
)
{
steps
{
sh
"ssh -t inria_oaici@faraday.inria.fr 'mkdir -p /home/inria_oaici/archives'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'touch /home/inria_oaici/archives/no_error.txt'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'rm -f /home/inria_oaici/archives/*.*'"
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labPythonExe}:/home/${fituser}/openairinterface5g/ci-scripts/test_results.html /home/inria_oaici/archives'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/test_results.html ."
script
{
if
(
fileExists
(
"./test_results.html"
))
{
sh
"mv ./test_results.html test_results-${JOB_NAME}.html"
sh
"sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' test_results-${JOB_NAME}.html"
archiveArtifacts
"test_results-${JOB_NAME}.html"
}
}
}
}
stage
(
"Log Collection"
)
{
parallel
{
stage
(
'Log Collection (OAI eNB - Build)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (OAI eNB - Build)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectBuild --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd} --eNBSourceCodePath=/home/${fituser}/openairinterface5g\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labENB0}:/home/${fituser}/openairinterface5g/cmake_targets/build.log.zip /home/inria_oaici/archives/enb.build.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/enb.build.log.zip enb.build.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"enb.build.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"enb.build.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (OAI UE - Build)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (OAI UE - Build)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectBuild --UEIPAddress=${r2labUE0IpAddr} --UEUserName=${fituser} --UEPassword=${fitpasswd} --UESourceCodePath=/home/${fituser}/openairinterface5g\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labUE0}:/home/${fituser}/openairinterface5g/cmake_targets/build.log.zip /home/inria_oaici/archives/ue.build.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/ue.build.log.zip ue.build.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"ue.build.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"ue.build.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (OAI eNB - Runs)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (OAI eNB - Runs)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollecteNB --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd} --eNBSourceCodePath=/home/${fituser}/openairinterface5g\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labENB0}:/home/${fituser}/openairinterface5g/cmake_targets/enb.log.zip /home/inria_oaici/archives/enb.run.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/enb.run.log.zip enb.run.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"enb.run.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"enb.run.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (OAI UE - Runs)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (OAI UE - Runs)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectOAIUE --UEIPAddress=${r2labUE0IpAddr} --UEUserName=${fituser} --UEPassword=${fitpasswd} --UESourceCodePath=/home/${fituser}/openairinterface5g\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labUE0}:/home/${fituser}/openairinterface5g/cmake_targets/ue.log.zip /home/inria_oaici/archives/ue.run.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/ue.run.log.zip ue.run.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"ue.run.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"ue.run.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (MME)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectMME --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/mme.log.zip /home/inria_oaici/archives/mme.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/mme.log.zip mme.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"mme.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"mme.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (HSS)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectHSS --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/hss.log.zip /home/inria_oaici/archives/hss.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/hss.log.zip hss.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"hss.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"hss.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (SPGW)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectSPGW --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/spgw.log.zip /home/inria_oaici/archives/spgw.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/spgw.log.zip spgw.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"spgw.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"spgw.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (Ping)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectPing --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/ping.log.zip /home/inria_oaici/archives/ping.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/ping.log.zip ping.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"ping.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"ping.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (Iperf)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.R2LAB_FitNode_Credentials}"
,
usernameVariable:
'fituser'
,
passwordVariable:
'fitpasswd'
]
])
{
echo
'\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
sh
"ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectIperf --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
sh
"ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/iperf.log.zip /home/inria_oaici/archives/iperf.log.zip'"
}
sh
"scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/iperf.log.zip iperf.log.${env.BUILD_ID}.zip"
script
{
if
(
fileExists
(
"iperf.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"iperf.log.${env.BUILD_ID}.zip"
}
}
}
}
}
}
stage
(
"Clean-up Log Collection"
)
{
steps
{
sh
"ssh -t inria_oaici@faraday.inria.fr 'rm -Rf /home/inria_oaici/archives'"
}
}
}
post
{
always
{
script
{
echo
'\u2705 \u001B[32mShutdown every node\u001B[0m'
sh
'ssh -t inria_oaici@faraday.inria.fr "all-off"'
sh
'ssh -t inria_oaici@faraday.inria.fr "all-off"'
}
}
}
}
ci-scripts/main.py
View file @
50962242
...
@@ -120,6 +120,7 @@ class SSHConnection():
...
@@ -120,6 +120,7 @@ class SSHConnection():
self
.
ADBIPAddress
=
''
self
.
ADBIPAddress
=
''
self
.
ADBUserName
=
''
self
.
ADBUserName
=
''
self
.
ADBPassword
=
''
self
.
ADBPassword
=
''
self
.
ADBCentralized
=
True
self
.
testCase_id
=
''
self
.
testCase_id
=
''
self
.
testXMLfiles
=
[]
self
.
testXMLfiles
=
[]
self
.
nbTestXMLfiles
=
0
self
.
nbTestXMLfiles
=
0
...
@@ -140,6 +141,11 @@ class SSHConnection():
...
@@ -140,6 +141,11 @@ class SSHConnection():
self
.
nbMaxUEtoAttach
=
-
1
self
.
nbMaxUEtoAttach
=
-
1
self
.
UEDevices
=
[]
self
.
UEDevices
=
[]
self
.
UEDevicesStatus
=
[]
self
.
UEDevicesStatus
=
[]
self
.
UEDevicesRemoteServer
=
[]
self
.
UEDevicesRemoteUser
=
[]
self
.
UEDevicesOffCmd
=
[]
self
.
UEDevicesOnCmd
=
[]
self
.
UEDevicesRebootCmd
=
[]
self
.
CatMDevices
=
[]
self
.
CatMDevices
=
[]
self
.
UEIPAddresses
=
[]
self
.
UEIPAddresses
=
[]
self
.
htmlFile
=
''
self
.
htmlFile
=
''
...
@@ -177,6 +183,7 @@ class SSHConnection():
...
@@ -177,6 +183,7 @@ class SSHConnection():
self
.
flexranCtrlInstalled
=
False
self
.
flexranCtrlInstalled
=
False
self
.
flexranCtrlStarted
=
False
self
.
flexranCtrlStarted
=
False
self
.
expectedNbOfConnectedUEs
=
0
self
.
expectedNbOfConnectedUEs
=
0
self
.
startTime
=
0
def
open
(
self
,
ipaddress
,
username
,
password
):
def
open
(
self
,
ipaddress
,
username
,
password
):
count
=
0
count
=
0
...
@@ -204,7 +211,7 @@ class SSHConnection():
...
@@ -204,7 +211,7 @@ class SSHConnection():
logging
.
debug
(
'self.sshresponse = '
+
str
(
self
.
sshresponse
))
logging
.
debug
(
'self.sshresponse = '
+
str
(
self
.
sshresponse
))
elif
self
.
sshresponse
==
2
:
elif
self
.
sshresponse
==
2
:
# Checking if we are really on the remote client defined by its IP address
# Checking if we are really on the remote client defined by its IP address
self
.
command
(
'stdbuf -o0 ifconfig | egrep --color=never "inet addr:"'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ifconfig | egrep --color=never "inet addr:
|inet
"'
,
'\$'
,
5
)
result
=
re
.
search
(
str
(
ipaddress
),
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
str
(
ipaddress
),
str
(
self
.
ssh
.
before
))
if
result
is
None
:
if
result
is
None
:
self
.
close
()
self
.
close
()
...
@@ -604,19 +611,33 @@ class SSHConnection():
...
@@ -604,19 +611,33 @@ class SSHConnection():
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
logging
.
debug
(
'Using the OAI EPC Release 14 Cassandra-based HSS'
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
logging
.
debug
(
'
\u001B
[1m Launching tshark on all interfaces
\u001B
[0m'
)
EPC_PcapFileName
=
'epc_'
+
self
.
testCase_id
+
'.pcap'
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f '
+
EPC_PcapFileName
,
'\$'
,
5
)
self
.
command
(
'echo $USER; nohup sudo tshark -f "tcp port not 22 and port not 53" -i any -w '
+
self
.
EPCSourceCodePath
+
'/scripts/'
+
EPC_PcapFileName
+
' > /tmp/tshark.log 2>&1 &'
,
self
.
EPCUserName
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S mkdir -p logs'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f hss_'
+
self
.
testCase_id
+
'.log logs/hss*.*'
,
'\$'
,
5
)
self
.
command
(
'echo "oai_hss -j /usr/local/etc/oai/hss_rel14.json" > ./my-hss.sh'
,
'\$'
,
5
)
self
.
command
(
'chmod 755 ./my-hss.sh'
,
'\$'
,
5
)
self
.
command
(
'sudo daemon --unsafe --name=hss_daemon --chdir='
+
self
.
EPCSourceCodePath
+
'/scripts -o '
+
self
.
EPCSourceCodePath
+
'/scripts/hss_'
+
self
.
testCase_id
+
'.log ./my-hss.sh'
,
'\$'
,
5
)
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
logging
.
debug
(
'Using the OAI EPC HSS'
)
logging
.
debug
(
'Using the OAI EPC HSS'
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'source oaienv'
,
'\$'
,
5
)
self
.
command
(
'source oaienv'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./run_hss 2>&1 | stdbuf -o0 awk
\'
{ print strftime("[%Y/%m/%d %H:%M:%S] ",systime()) $0 }
\'
| stdbuf -o0 tee -a hss_'
+
self
.
testCase_id
+
'.log &'
,
'Core state: 2 -> 3'
,
35
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./run_hss 2>&1 | stdbuf -o0 awk
\'
{ print strftime("[%Y/%m/%d %H:%M:%S] ",systime()) $0 }
\'
| stdbuf -o0 tee -a hss_'
+
self
.
testCase_id
+
'.log &'
,
'Core state: 2 -> 3'
,
35
)
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
logging
.
debug
(
'Using the ltebox simulated HSS'
)
logging
.
debug
(
'Using the ltebox simulated HSS'
)
self
.
command
(
'if [ -d '
+
self
.
EPCSourceCodePath
+
'/scripts ]; then echo '
+
self
.
eNBPassword
+
' | sudo -S rm -Rf '
+
self
.
EPCSourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
self
.
command
(
'if [ -d '
+
self
.
EPCSourceCodePath
+
'/scripts ]; then echo '
+
self
.
eNBPassword
+
' | sudo -S rm -Rf '
+
self
.
EPCSourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
self
.
command
(
'mkdir -p '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'mkdir -p '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'cd /opt/hss_sim0609'
,
'\$'
,
5
)
self
.
command
(
'cd /opt/hss_sim0609'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f hss.log daemon.log'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f hss.log daemon.log'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S echo "Starting sudo session" && sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real '
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S echo "Starting sudo session" && sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real '
,
'\$'
,
5
)
else
:
logging
.
error
(
'This option should not occur!'
)
self
.
close
()
self
.
close
()
self
.
CreateHtmlTestRow
(
self
.
EPCType
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
self
.
EPCType
,
'OK'
,
ALL_PROCESSES_OK
)
...
@@ -625,7 +646,14 @@ class SSHConnection():
...
@@ -625,7 +646,14 @@ class SSHConnection():
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
logging
.
debug
(
'Using the OAI EPC Release 14 MME'
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f mme_'
+
self
.
testCase_id
+
'.log'
,
'\$'
,
5
)
self
.
command
(
'echo "./run_mme --config-file /usr/local/etc/oai/mme.conf --set-virt-if" > ./my-mme.sh'
,
'\$'
,
5
)
self
.
command
(
'chmod 755 ./my-mme.sh'
,
'\$'
,
5
)
self
.
command
(
'sudo daemon --unsafe --name=mme_daemon --chdir='
+
self
.
EPCSourceCodePath
+
'/scripts -o '
+
self
.
EPCSourceCodePath
+
'/scripts/mme_'
+
self
.
testCase_id
+
'.log ./my-mme.sh'
,
'\$'
,
5
)
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'source oaienv'
,
'\$'
,
5
)
self
.
command
(
'source oaienv'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
...
@@ -636,9 +664,11 @@ class SSHConnection():
...
@@ -636,9 +664,11 @@ class SSHConnection():
sys
.
exit
(
1
)
sys
.
exit
(
1
)
host_name
=
result
.
group
(
'host_name'
)
host_name
=
result
.
group
(
'host_name'
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./run_mme 2>&1 | stdbuf -o0 tee -a mme_'
+
self
.
testCase_id
+
'.log &'
,
'MME app initialization complete'
,
100
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./run_mme 2>&1 | stdbuf -o0 tee -a mme_'
+
self
.
testCase_id
+
'.log &'
,
'MME app initialization complete'
,
100
)
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./start_mme'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./start_mme'
,
'\$'
,
5
)
else
:
logging
.
error
(
'This option should not occur!'
)
self
.
close
()
self
.
close
()
self
.
CreateHtmlTestRow
(
self
.
EPCType
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
self
.
EPCType
,
'OK'
,
ALL_PROCESSES_OK
)
...
@@ -647,14 +677,27 @@ class SSHConnection():
...
@@ -647,14 +677,27 @@ class SSHConnection():
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
logging
.
debug
(
'Using the OAI EPC Release 14 SPGW-CUPS'
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f spgwc_'
+
self
.
testCase_id
+
'.log spgwu_'
+
self
.
testCase_id
+
'.log'
,
'\$'
,
5
)
self
.
command
(
'echo "spgwc -c /usr/local/etc/oai/spgw_c.conf" > ./my-spgwc.sh'
,
'\$'
,
5
)
self
.
command
(
'chmod 755 ./my-spgwc.sh'
,
'\$'
,
5
)
self
.
command
(
'sudo daemon --unsafe --name=spgwc_daemon --chdir='
+
self
.
EPCSourceCodePath
+
'/scripts -o '
+
self
.
EPCSourceCodePath
+
'/scripts/spgwc_'
+
self
.
testCase_id
+
'.log ./my-spgwc.sh'
,
'\$'
,
5
)
time
.
sleep
(
5
)
self
.
command
(
'echo "spgwu -c /usr/local/etc/oai/spgw_u.conf" > ./my-spgwu.sh'
,
'\$'
,
5
)
self
.
command
(
'chmod 755 ./my-spgwu.sh'
,
'\$'
,
5
)
self
.
command
(
'sudo daemon --unsafe --name=spgwu_daemon --chdir='
+
self
.
EPCSourceCodePath
+
'/scripts -o '
+
self
.
EPCSourceCodePath
+
'/scripts/spgwu_'
+
self
.
testCase_id
+
'.log ./my-spgwu.sh'
,
'\$'
,
5
)
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'source oaienv'
,
'\$'
,
5
)
self
.
command
(
'source oaienv'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./run_spgw 2>&1 | stdbuf -o0 tee -a spgw_'
+
self
.
testCase_id
+
'.log &'
,
'Initializing SPGW-APP task interface: DONE'
,
30
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./run_spgw 2>&1 | stdbuf -o0 tee -a spgw_'
+
self
.
testCase_id
+
'.log &'
,
'Initializing SPGW-APP task interface: DONE'
,
30
)
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./start_xGw'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./start_xGw'
,
'\$'
,
5
)
else
:
logging
.
error
(
'This option should not occur!'
)
self
.
close
()
self
.
close
()
self
.
CreateHtmlTestRow
(
self
.
EPCType
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
self
.
EPCType
,
'OK'
,
ALL_PROCESSES_OK
)
...
@@ -831,12 +874,31 @@ class SSHConnection():
...
@@ -831,12 +874,31 @@ class SSHConnection():
self
.
close
()
self
.
close
()
def
InitializeUE_common
(
self
,
device_id
):
def
InitializeUE_common
(
self
,
device_id
,
idx
):
logging
.
debug
(
'send adb commands'
)
try
:
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
if
not
self
.
ADBCentralized
:
# Reboot UE
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesRebootCmd
[
idx
],
'\$'
,
60
)
# Wait
time
.
sleep
(
60
)
# Put in LTE-Mode only
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "settings put global preferred_network_mode 11"
\'
'
,
'\$'
,
60
)
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "settings put global preferred_network_mode1 11"
\'
'
,
'\$'
,
60
)
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "settings put global preferred_network_mode2 11"
\'
'
,
'\$'
,
60
)
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "settings put global preferred_network_mode3 11"
\'
'
,
'\$'
,
60
)
# enable data service
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "svc data enable"
\'
'
,
'\$'
,
60
)
# we need to do radio on/off cycle to make sure of above changes
# airplane mode off // radio on
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesOnCmd
[
idx
],
'\$'
,
60
)
time
.
sleep
(
10
)
# airplane mode on // radio off
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesOffCmd
[
idx
],
'\$'
,
60
)
self
.
close
()
return
# enable data service
# enable data service
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell
svc data enable
'
,
'\$'
,
60
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell
"svc data enable"
'
,
'\$'
,
60
)
# The following commands are deprecated since we no longer work on Android 7+
# The following commands are deprecated since we no longer work on Android 7+
# self.command('stdbuf -o0 adb -s ' + device_id + ' shell settings put global airplane_mode_on 1', '\$', 10)
# self.command('stdbuf -o0 adb -s ' + device_id + ' shell settings put global airplane_mode_on 1', '\$', 10)
...
@@ -858,11 +920,13 @@ class SSHConnection():
...
@@ -858,11 +920,13 @@ class SSHConnection():
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
multi_jobs
=
[]
multi_jobs
=
[]
i
=
0
for
device_id
in
self
.
UEDevices
:
for
device_id
in
self
.
UEDevices
:
p
=
Process
(
target
=
self
.
InitializeUE_common
,
args
=
(
device_id
,))
p
=
Process
(
target
=
self
.
InitializeUE_common
,
args
=
(
device_id
,
i
,
))
p
.
daemon
=
True
p
.
daemon
=
True
p
.
start
()
p
.
start
()
multi_jobs
.
append
(
p
)
multi_jobs
.
append
(
p
)
i
+=
1
for
job
in
multi_jobs
:
for
job
in
multi_jobs
:
job
.
join
()
job
.
join
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
...
@@ -897,7 +961,12 @@ class SSHConnection():
...
@@ -897,7 +961,12 @@ class SSHConnection():
result
=
re
.
search
(
'--no-L2-connect'
,
str
(
self
.
Initialize_OAI_UE_args
))
result
=
re
.
search
(
'--no-L2-connect'
,
str
(
self
.
Initialize_OAI_UE_args
))
# We may have to regenerate the .u* files
# We may have to regenerate the .u* files
if
result
is
None
:
if
result
is
None
:
self
.
command
(
'sed -e "s#93#92#" -e "s#8baf473f2f8fd09487cccbd7097c6862#fec86ba6eb707ed08905757b1bb44b8f#" -e "s#e734f8734007d6c5ce7a0508809e7e9c#C42449363BBAD02B66D16BC975D77CC1#" ../../../openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf > ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf'
,
'\$'
,
5
)
self
.
command
(
'ls /tmp/*.sed'
,
'\$'
,
5
)
result
=
re
.
search
(
'adapt_usim_parameters'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
self
.
command
(
'sed -f /tmp/adapt_usim_parameters.sed ../../../openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf > ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf'
,
'\$'
,
5
)
else
:
self
.
command
(
'sed -e "s#93#92#" -e "s#8baf473f2f8fd09487cccbd7097c6862#fec86ba6eb707ed08905757b1bb44b8f#" -e "s#e734f8734007d6c5ce7a0508809e7e9c#C42449363BBAD02B66D16BC975D77CC1#" ../../../openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf > ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S rm -Rf .u*'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S rm -Rf .u*'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S ../../../targets/bin/conf2uedata -c ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf -o .'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S ../../../targets/bin/conf2uedata -c ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf -o .'
,
'\$'
,
5
)
# Launch UE with the modified config file
# Launch UE with the modified config file
...
@@ -975,11 +1044,13 @@ class SSHConnection():
...
@@ -975,11 +1044,13 @@ class SSHConnection():
result
=
re
.
search
(
'--no-L2-connect'
,
str
(
self
.
Initialize_OAI_UE_args
))
result
=
re
.
search
(
'--no-L2-connect'
,
str
(
self
.
Initialize_OAI_UE_args
))
if
result
is
None
:
if
result
is
None
:
self
.
command
(
'ifconfig oaitun_ue1'
,
'\$'
,
4
)
self
.
command
(
'ifconfig oaitun_ue1'
,
'\$'
,
4
)
result
=
re
.
search
(
'inet addr'
,
str
(
self
.
ssh
.
before
))
# ifconfig output is different between ubuntu 16 and ubuntu 18
result
=
re
.
search
(
'inet addr:1|inet 1'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
logging
.
debug
(
'
\u001B
[1m oaitun_ue1 interface is mounted and configured
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m oaitun_ue1 interface is mounted and configured
\u001B
[0m'
)
tunnelInterfaceStatus
=
True
tunnelInterfaceStatus
=
True
else
:
else
:
logging
.
debug
(
str
(
self
.
ssh
.
before
))
logging
.
error
(
'
\u001B
[1m oaitun_ue1 interface is either NOT mounted or NOT configured
\u001B
[0m'
)
logging
.
error
(
'
\u001B
[1m oaitun_ue1 interface is either NOT mounted or NOT configured
\u001B
[0m'
)
tunnelInterfaceStatus
=
False
tunnelInterfaceStatus
=
False
else
:
else
:
...
@@ -989,6 +1060,11 @@ class SSHConnection():
...
@@ -989,6 +1060,11 @@ class SSHConnection():
if
fullSyncStatus
and
gotSyncStatus
and
tunnelInterfaceStatus
:
if
fullSyncStatus
and
gotSyncStatus
and
tunnelInterfaceStatus
:
self
.
CreateHtmlTestRow
(
self
.
Initialize_OAI_UE_args
,
'OK'
,
ALL_PROCESSES_OK
,
'OAI UE'
)
self
.
CreateHtmlTestRow
(
self
.
Initialize_OAI_UE_args
,
'OK'
,
ALL_PROCESSES_OK
,
'OAI UE'
)
logging
.
debug
(
'
\u001B
[1m Initialize OAI UE Completed
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m Initialize OAI UE Completed
\u001B
[0m'
)
if
(
self
.
ADBIPAddress
!=
'none'
):
self
.
UEDevices
=
[]
self
.
UEDevices
.
append
(
'OAI-UE'
)
self
.
UEDevicesStatus
=
[]
self
.
UEDevicesStatus
.
append
(
UE_STATUS_DETACHED
)
else
:
else
:
self
.
htmlUEFailureMsg
=
'oaitun_ue1 interface is either NOT mounted or NOT configured'
self
.
htmlUEFailureMsg
=
'oaitun_ue1 interface is either NOT mounted or NOT configured'
self
.
CreateHtmlTestRow
(
self
.
Initialize_OAI_UE_args
,
'KO'
,
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE
,
'OAI UE'
)
self
.
CreateHtmlTestRow
(
self
.
Initialize_OAI_UE_args
,
'KO'
,
OAI_UE_PROCESS_NO_TUNNEL_INTERFACE
,
'OAI UE'
)
...
@@ -1234,18 +1310,25 @@ class SSHConnection():
...
@@ -1234,18 +1310,25 @@ class SSHConnection():
except
:
except
:
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
def
AttachUE_common
(
self
,
device_id
,
statusQueue
,
lock
):
def
AttachUE_common
(
self
,
device_id
,
statusQueue
,
lock
,
idx
):
try
:
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
if
device_id
==
'84B7N16418004022'
:
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/on"'
,
'\$'
,
60
)
if
device_id
==
'84B7N16418004022'
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/on"'
,
'\$'
,
60
)
else
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/on'
,
'\$'
,
60
)
else
:
else
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/on'
,
'\$'
,
60
)
# airplane mode off // radio on
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesOnCmd
[
idx
],
'\$'
,
60
)
time
.
sleep
(
2
)
time
.
sleep
(
2
)
max_count
=
45
max_count
=
45
count
=
max_count
count
=
max_count
while
count
>
0
:
while
count
>
0
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell dumpsys telephony.registry | grep mDataConnectionState'
,
'\$'
,
15
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "dumpsys telephony.registry" | grep -m 1 mDataConnectionState'
,
'\$'
,
15
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "dumpsys telephony.registry"
\'
| grep -m 1 mDataConnectionState'
,
'\$'
,
60
)
result
=
re
.
search
(
'mDataConnectionState.*=(?P<state>[0-9\-]+)'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'mDataConnectionState.*=(?P<state>[0-9\-]+)'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m mDataConnectionState Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m mDataConnectionState Not Found!
\u001B
[0m'
)
...
@@ -1267,15 +1350,21 @@ class SSHConnection():
...
@@ -1267,15 +1350,21 @@ class SSHConnection():
count
=
count
-
1
count
=
count
-
1
if
count
==
15
or
count
==
30
:
if
count
==
15
or
count
==
30
:
logging
.
debug
(
'
\u001B
[1;30;43m Retry UE ('
+
device_id
+
') Flight Mode Off
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;30;43m Retry UE ('
+
device_id
+
') Flight Mode Off
\u001B
[0m'
)
if
device_id
==
'84B7N16418004022'
:
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/off"'
,
'\$'
,
60
)
if
device_id
==
'84B7N16418004022'
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/off"'
,
'\$'
,
60
)
else
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/off'
,
'\$'
,
60
)
else
:
else
:
self
.
command
(
's
tdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/off'
,
'\$'
,
60
)
self
.
command
(
's
sh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesOffCmd
[
idx
]
,
'\$'
,
60
)
time
.
sleep
(
0.5
)
time
.
sleep
(
0.5
)
if
device_id
==
'84B7N16418004022'
:
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/on"'
,
'\$'
,
60
)
if
device_id
==
'84B7N16418004022'
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/on"'
,
'\$'
,
60
)
else
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/on'
,
'\$'
,
60
)
else
:
else
:
self
.
command
(
's
tdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/on'
,
'\$'
,
60
)
self
.
command
(
's
sh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesOnCmd
[
idx
]
,
'\$'
,
60
)
time
.
sleep
(
0.5
)
time
.
sleep
(
0.5
)
logging
.
debug
(
'
\u001B
[1mWait UE ('
+
device_id
+
') a second until mDataConnectionState=2 ('
+
str
(
max_count
-
count
)
+
' times)
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1mWait UE ('
+
device_id
+
') a second until mDataConnectionState=2 ('
+
str
(
max_count
-
count
)
+
' times)
\u001B
[0m'
)
time
.
sleep
(
1
)
time
.
sleep
(
1
)
...
@@ -1308,7 +1397,7 @@ class SSHConnection():
...
@@ -1308,7 +1397,7 @@ class SSHConnection():
for
device_id
in
self
.
UEDevices
:
for
device_id
in
self
.
UEDevices
:
if
(
self
.
nbMaxUEtoAttach
==
-
1
)
or
(
nb_ue_to_connect
<
self
.
nbMaxUEtoAttach
):
if
(
self
.
nbMaxUEtoAttach
==
-
1
)
or
(
nb_ue_to_connect
<
self
.
nbMaxUEtoAttach
):
self
.
UEDevicesStatus
[
nb_ue_to_connect
]
=
UE_STATUS_ATTACHING
self
.
UEDevicesStatus
[
nb_ue_to_connect
]
=
UE_STATUS_ATTACHING
p
=
Process
(
target
=
self
.
AttachUE_common
,
args
=
(
device_id
,
status_queue
,
lock
,))
p
=
Process
(
target
=
self
.
AttachUE_common
,
args
=
(
device_id
,
status_queue
,
lock
,
nb_ue_to_connect
,
))
p
.
daemon
=
True
p
.
daemon
=
True
p
.
start
()
p
.
start
()
multi_jobs
.
append
(
p
)
multi_jobs
.
append
(
p
)
...
@@ -1349,13 +1438,16 @@ class SSHConnection():
...
@@ -1349,13 +1438,16 @@ class SSHConnection():
self
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
self
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
self
.
AutoTerminateUEandeNB
()
self
.
AutoTerminateUEandeNB
()
def
DetachUE_common
(
self
,
device_id
):
def
DetachUE_common
(
self
,
device_id
,
idx
):
try
:
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
if
device_id
==
'84B7N16418004022'
:
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/off"'
,
'\$'
,
60
)
if
device_id
==
'84B7N16418004022'
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/off"'
,
'\$'
,
60
)
else
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/off'
,
'\$'
,
60
)
else
:
else
:
self
.
command
(
's
tdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/off'
,
'\$'
,
60
)
self
.
command
(
's
sh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesOffCmd
[
idx
]
,
'\$'
,
60
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Detach Completed
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Detach Completed
\u001B
[0m'
)
self
.
close
()
self
.
close
()
except
:
except
:
...
@@ -1376,7 +1468,7 @@ class SSHConnection():
...
@@ -1376,7 +1468,7 @@ class SSHConnection():
cnt
=
0
cnt
=
0
for
device_id
in
self
.
UEDevices
:
for
device_id
in
self
.
UEDevices
:
self
.
UEDevicesStatus
[
cnt
]
=
UE_STATUS_DETACHING
self
.
UEDevicesStatus
[
cnt
]
=
UE_STATUS_DETACHING
p
=
Process
(
target
=
self
.
DetachUE_common
,
args
=
(
device_id
,))
p
=
Process
(
target
=
self
.
DetachUE_common
,
args
=
(
device_id
,
cnt
,
))
p
.
daemon
=
True
p
.
daemon
=
True
p
.
start
()
p
.
start
()
multi_jobs
.
append
(
p
)
multi_jobs
.
append
(
p
)
...
@@ -1453,11 +1545,14 @@ class SSHConnection():
...
@@ -1453,11 +1545,14 @@ class SSHConnection():
job
.
join
()
job
.
join
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
def
DataDisableUE_common
(
self
,
device_id
):
def
DataDisableUE_common
(
self
,
device_id
,
idx
):
try
:
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
# enable data service
# disable data service
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell svc data disable'
,
'\$'
,
60
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "svc data disable"'
,
'\$'
,
60
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "svc data disable"
\'
'
,
'\$'
,
60
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Disabled Data Service
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Disabled Data Service
\u001B
[0m'
)
self
.
close
()
self
.
close
()
except
:
except
:
...
@@ -1468,20 +1563,25 @@ class SSHConnection():
...
@@ -1468,20 +1563,25 @@ class SSHConnection():
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
multi_jobs
=
[]
multi_jobs
=
[]
i
=
0
for
device_id
in
self
.
UEDevices
:
for
device_id
in
self
.
UEDevices
:
p
=
Process
(
target
=
self
.
DataDisableUE_common
,
args
=
(
device_id
,))
p
=
Process
(
target
=
self
.
DataDisableUE_common
,
args
=
(
device_id
,
i
,
))
p
.
daemon
=
True
p
.
daemon
=
True
p
.
start
()
p
.
start
()
multi_jobs
.
append
(
p
)
multi_jobs
.
append
(
p
)
i
+=
1
for
job
in
multi_jobs
:
for
job
in
multi_jobs
:
job
.
join
()
job
.
join
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
def
DataEnableUE_common
(
self
,
device_id
):
def
DataEnableUE_common
(
self
,
device_id
,
idx
):
try
:
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
# enable data service
# enable data service
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell svc data enable'
,
'\$'
,
60
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "svc data enable"'
,
'\$'
,
60
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "svc data enable"
\'
'
,
'\$'
,
60
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Enabled Data Service
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Enabled Data Service
\u001B
[0m'
)
self
.
close
()
self
.
close
()
except
:
except
:
...
@@ -1492,11 +1592,13 @@ class SSHConnection():
...
@@ -1492,11 +1592,13 @@ class SSHConnection():
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
multi_jobs
=
[]
multi_jobs
=
[]
i
=
0
for
device_id
in
self
.
UEDevices
:
for
device_id
in
self
.
UEDevices
:
p
=
Process
(
target
=
self
.
DataEnableUE_common
,
args
=
(
device_id
,))
p
=
Process
(
target
=
self
.
DataEnableUE_common
,
args
=
(
device_id
,
i
,
))
p
.
daemon
=
True
p
.
daemon
=
True
p
.
start
()
p
.
start
()
multi_jobs
.
append
(
p
)
multi_jobs
.
append
(
p
)
i
+=
1
for
job
in
multi_jobs
:
for
job
in
multi_jobs
:
job
.
join
()
job
.
join
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
...
@@ -1506,8 +1608,34 @@ class SSHConnection():
...
@@ -1506,8 +1608,34 @@ class SSHConnection():
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
command
(
'adb devices'
,
'\$'
,
15
)
if
self
.
ADBCentralized
:
self
.
UEDevices
=
re
.
findall
(
"
\\\\
r
\\\\
n([A-Za-z0-9]+)
\\\\
tdevice"
,
str
(
self
.
ssh
.
before
))
self
.
command
(
'adb devices'
,
'\$'
,
15
)
self
.
UEDevices
=
re
.
findall
(
"
\\\\
r
\\\\
n([A-Za-z0-9]+)
\\\\
tdevice"
,
str
(
self
.
ssh
.
before
))
self
.
close
()
else
:
if
(
os
.
path
.
isfile
(
'./phones_list.txt'
)):
os
.
remove
(
'./phones_list.txt'
)
self
.
command
(
'ls /etc/*/phones*.txt'
,
'\$'
,
5
)
result
=
re
.
search
(
'/etc/ci/phones_list.txt'
,
str
(
self
.
ssh
.
before
))
self
.
close
()
if
(
result
is
not
None
)
and
(
len
(
self
.
UEDevices
)
==
0
):
self
.
copyin
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
,
'/etc/ci/phones_list.txt'
,
'.'
)
if
(
os
.
path
.
isfile
(
'./phones_list.txt'
)):
phone_list_file
=
open
(
'./phones_list.txt'
,
'r'
)
for
line
in
phone_list_file
.
readlines
():
line
=
line
.
strip
()
result
=
re
.
search
(
'^#'
,
line
)
if
result
is
not
None
:
continue
comma_split
=
line
.
split
(
","
)
self
.
UEDevices
.
append
(
comma_split
[
0
])
self
.
UEDevicesRemoteServer
.
append
(
comma_split
[
1
])
self
.
UEDevicesRemoteUser
.
append
(
comma_split
[
2
])
self
.
UEDevicesOffCmd
.
append
(
comma_split
[
3
])
self
.
UEDevicesOnCmd
.
append
(
comma_split
[
4
])
self
.
UEDevicesRebootCmd
.
append
(
comma_split
[
5
])
phone_list_file
.
close
()
if
terminate_ue_flag
==
False
:
if
terminate_ue_flag
==
False
:
if
len
(
self
.
UEDevices
)
==
0
:
if
len
(
self
.
UEDevices
)
==
0
:
logging
.
debug
(
'
\u001B
[1;37;41m UE Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m UE Not Found!
\u001B
[0m'
)
...
@@ -1517,25 +1645,36 @@ class SSHConnection():
...
@@ -1517,25 +1645,36 @@ class SSHConnection():
while
cnt
<
len
(
self
.
UEDevices
):
while
cnt
<
len
(
self
.
UEDevices
):
self
.
UEDevicesStatus
.
append
(
UE_STATUS_DETACHED
)
self
.
UEDevicesStatus
.
append
(
UE_STATUS_DETACHED
)
cnt
+=
1
cnt
+=
1
self
.
close
()
def
GetAllCatMDevices
(
self
,
terminate_ue_flag
):
def
GetAllCatMDevices
(
self
,
terminate_ue_flag
):
if
self
.
ADBIPAddress
==
''
or
self
.
ADBUserName
==
''
or
self
.
ADBPassword
==
''
:
if
self
.
ADBIPAddress
==
''
or
self
.
ADBUserName
==
''
or
self
.
ADBPassword
==
''
:
Usage
()
Usage
()
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
command
(
'lsusb | egrep "Future Technology Devices International, Ltd FT2232C" | sed -e "s#:.*##" -e "s# #_#g"'
,
'\$'
,
15
)
if
self
.
ADBCentralized
:
self
.
CatMDevices
=
re
.
findall
(
"
\\\\
r
\\\\
n([A-Za-z0-9_]+)"
,
str
(
self
.
ssh
.
before
))
self
.
command
(
'lsusb | egrep "Future Technology Devices International, Ltd FT2232C" | sed -e "s#:.*##" -e "s# #_#g"'
,
'\$'
,
15
)
self
.
CatMDevices
=
re
.
findall
(
"
\\\\
r
\\\\
n([A-Za-z0-9_]+)"
,
str
(
self
.
ssh
.
before
))
else
:
if
(
os
.
path
.
isfile
(
'./modules_list.txt'
)):
os
.
remove
(
'./modules_list.txt'
)
self
.
command
(
'ls /etc/*/modules*.txt'
,
'\$'
,
5
)
result
=
re
.
search
(
'/etc/ci/modules_list.txt'
,
str
(
self
.
ssh
.
before
))
self
.
close
()
if
result
is
not
None
:
logging
.
debug
(
'Found a module list file on ADB server'
)
if
terminate_ue_flag
==
False
:
if
terminate_ue_flag
==
False
:
if
len
(
self
.
CatMDevices
)
==
0
:
if
len
(
self
.
CatMDevices
)
==
0
:
logging
.
debug
(
'
\u001B
[1;37;41m CAT-M UE Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m CAT-M UE Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
sys
.
exit
(
1
)
self
.
close
()
self
.
close
()
def
CheckUEStatus_common
(
self
,
lock
,
device_id
,
statusQueue
):
def
CheckUEStatus_common
(
self
,
lock
,
device_id
,
statusQueue
,
idx
):
try
:
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell dumpsys telephony.registry'
,
'\$'
,
15
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "dumpsys telephony.registry"'
,
'\$'
,
15
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "dumpsys telephony.registry"
\'
'
,
'\$'
,
60
)
result
=
re
.
search
(
'mServiceState=(?P<serviceState>[0-9]+)'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'mServiceState=(?P<serviceState>[0-9]+)'
,
str
(
self
.
ssh
.
before
))
serviceState
=
'Service State: UNKNOWN'
serviceState
=
'Service State: UNKNOWN'
if
result
is
not
None
:
if
result
is
not
None
:
...
@@ -1592,11 +1731,13 @@ class SSHConnection():
...
@@ -1592,11 +1731,13 @@ class SSHConnection():
multi_jobs
=
[]
multi_jobs
=
[]
lock
=
Lock
()
lock
=
Lock
()
status_queue
=
SimpleQueue
()
status_queue
=
SimpleQueue
()
i
=
0
for
device_id
in
self
.
UEDevices
:
for
device_id
in
self
.
UEDevices
:
p
=
Process
(
target
=
self
.
CheckUEStatus_common
,
args
=
(
lock
,
device_id
,
status_queue
,))
p
=
Process
(
target
=
self
.
CheckUEStatus_common
,
args
=
(
lock
,
device_id
,
status_queue
,
i
,
))
p
.
daemon
=
True
p
.
daemon
=
True
p
.
start
()
p
.
start
()
multi_jobs
.
append
(
p
)
multi_jobs
.
append
(
p
)
i
+=
1
for
job
in
multi_jobs
:
for
job
in
multi_jobs
:
job
.
join
()
job
.
join
()
if
self
.
flexranCtrlInstalled
and
self
.
flexranCtrlStarted
:
if
self
.
flexranCtrlInstalled
and
self
.
flexranCtrlStarted
:
...
@@ -1652,9 +1793,12 @@ class SSHConnection():
...
@@ -1652,9 +1793,12 @@ class SSHConnection():
sys
.
exit
(
'Insufficient Parameter'
)
sys
.
exit
(
'Insufficient Parameter'
)
self
.
open
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
)
self
.
open
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
)
self
.
command
(
'ifconfig oaitun_ue1'
,
'\$'
,
4
)
self
.
command
(
'ifconfig oaitun_ue1'
,
'\$'
,
4
)
result
=
re
.
search
(
'inet addr:(?P<ueipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'inet addr:(?P<ueipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
|inet (?P<ueipaddress2>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
UE_IPAddress
=
result
.
group
(
'ueipaddress'
)
if
result
.
group
(
'ueipaddress'
)
is
not
None
:
UE_IPAddress
=
result
.
group
(
'ueipaddress'
)
else
:
UE_IPAddress
=
result
.
group
(
'ueipaddress2'
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
self
.
UEDevices
[
0
]
+
') IP Address is '
+
UE_IPAddress
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
self
.
UEDevices
[
0
]
+
') IP Address is '
+
UE_IPAddress
+
'
\u001B
[0m'
)
self
.
UEIPAddresses
.
append
(
UE_IPAddress
)
self
.
UEIPAddresses
.
append
(
UE_IPAddress
)
else
:
else
:
...
@@ -1670,7 +1814,10 @@ class SSHConnection():
...
@@ -1670,7 +1814,10 @@ class SSHConnection():
continue
continue
count
=
0
count
=
0
while
count
<
4
:
while
count
<
4
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell ip addr show | grep rmnet'
,
'\$'
,
15
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "ip addr show | grep rmnet"'
,
'\$'
,
15
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "ip addr show | grep rmnet"
\'
'
,
'\$'
,
60
)
result
=
re
.
search
(
'inet (?P<ueipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\/[0-9]+[0-9a-zA-Z\.\s]+'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'inet (?P<ueipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\/[0-9]+[0-9a-zA-Z\.\s]+'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m UE IP Address Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m UE IP Address Not Found!
\u001B
[0m'
)
...
@@ -2214,17 +2361,33 @@ class SSHConnection():
...
@@ -2214,17 +2361,33 @@ class SSHConnection():
ipnumbers
[
3
]
=
'1'
ipnumbers
[
3
]
=
'1'
EPC_Iperf_UE_IPAddress
=
ipnumbers
[
0
]
+
'.'
+
ipnumbers
[
1
]
+
'.'
+
ipnumbers
[
2
]
+
'.'
+
ipnumbers
[
3
]
EPC_Iperf_UE_IPAddress
=
ipnumbers
[
0
]
+
'.'
+
ipnumbers
[
1
]
+
'.'
+
ipnumbers
[
2
]
+
'.'
+
ipnumbers
[
3
]
# Launch iperf server on EPC side
# Launch iperf server on EPC side (true for ltebox and old open-air-cn0
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
# But for OAI-Rel14-CUPS, we launch from python executor and we are using its IP address as iperf client address
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
launchFromEpc
=
True
self
.
command
(
'rm -f iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
launchFromEpc
=
False
cmd
=
'hostname -I'
ret
=
subprocess
.
run
(
cmd
,
shell
=
True
,
stdout
=
subprocess
.
PIPE
,
encoding
=
'utf-8'
)
if
ret
.
stdout
is
not
None
:
EPC_Iperf_UE_IPAddress
=
ret
.
stdout
.
strip
()
port
=
5001
+
idx
port
=
5001
+
idx
if
udpIperf
:
if
launchFromEpc
:
self
.
command
(
'echo $USER; nohup iperf -u -s -i 1 -p '
+
str
(
port
)
+
' > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
EPCUserName
,
5
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'rm -f iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
if
udpIperf
:
self
.
command
(
'echo $USER; nohup iperf -u -s -i 1 -p '
+
str
(
port
)
+
' > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
EPCUserName
,
5
)
else
:
self
.
command
(
'echo $USER; nohup iperf -s -i 1 -p '
+
str
(
port
)
+
' > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
EPCUserName
,
5
)
self
.
close
()
else
:
else
:
self
.
command
(
'echo $USER; nohup iperf -s -i 1 -p '
+
str
(
port
)
+
' > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
EPCUserName
,
5
)
if
udpIperf
:
cmd
=
'nohup iperf -u -s -i 1 -p '
+
str
(
port
)
+
' > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log 2>&1 &'
else
:
cmd
=
'nohup iperf -s -i 1 -p '
+
str
(
port
)
+
' > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log 2>&1 &'
logging
.
debug
(
cmd
+
'
\n
'
)
subprocess
.
run
(
cmd
,
shell
=
True
,
stdout
=
subprocess
.
PIPE
,
encoding
=
'utf-8'
)
time
.
sleep
(
0.5
)
time
.
sleep
(
0.5
)
self
.
close
()
# Launch iperf client on UE
# Launch iperf client on UE
if
(
device_id
==
'OAI-UE'
):
if
(
device_id
==
'OAI-UE'
):
...
@@ -2260,15 +2423,23 @@ class SSHConnection():
...
@@ -2260,15 +2423,23 @@ class SSHConnection():
self
.
close
()
self
.
close
()
# Kill iperf server on EPC side
# Kill iperf server on EPC side
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
launchFromEpc
:
self
.
command
(
'killall --signal SIGKILL iperf'
,
self
.
EPCUserName
,
5
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
close
()
self
.
command
(
'killall --signal SIGKILL iperf'
,
self
.
EPCUserName
,
5
)
self
.
close
()
else
:
cmd
=
'killall --signal SIGKILL iperf'
logging
.
debug
(
cmd
+
'
\n
'
)
subprocess
.
run
(
cmd
,
shell
=
True
)
time
.
sleep
(
1
)
self
.
copyout
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
self
.
EPCSourceCodePath
+
'/scripts'
)
# in case of failure, retrieve server log
# in case of failure, retrieve server log
if
(
clientStatus
==
-
1
):
if
(
clientStatus
==
-
1
):
time
.
sleep
(
1
)
if
launchFromEpc
:
if
(
os
.
path
.
isfile
(
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
time
.
sleep
(
1
)
os
.
remove
(
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)
if
(
os
.
path
.
isfile
(
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
self
.
copyin
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
self
.
EPCSourceCodePath
+
'/scripts/iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'.'
)
os
.
remove
(
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)
self
.
copyin
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
self
.
EPCSourceCodePath
+
'/scripts/iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'.'
)
self
.
Iperf_analyzeV2Server
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
modified_options
)
self
.
Iperf_analyzeV2Server
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
modified_options
)
# in case of OAI-UE
# in case of OAI-UE
if
(
device_id
==
'OAI-UE'
):
if
(
device_id
==
'OAI-UE'
):
...
@@ -2288,7 +2459,10 @@ class SSHConnection():
...
@@ -2288,7 +2459,10 @@ class SSHConnection():
self
.
command
(
'if [ ! -d '
+
self
.
EPCSourceCodePath
+
'/scripts ]; then mkdir -p '
+
self
.
EPCSourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
self
.
command
(
'if [ ! -d '
+
self
.
EPCSourceCodePath
+
'/scripts ]; then mkdir -p '
+
self
.
EPCSourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
# Checking if iperf / iperf3 are installed
# Checking if iperf / iperf3 are installed
self
.
command
(
'adb -s '
+
device_id
+
' shell "ls /data/local/tmp"'
,
'\$'
,
5
)
if
self
.
ADBCentralized
:
self
.
command
(
'adb -s '
+
device_id
+
' shell "ls /data/local/tmp"'
,
'\$'
,
5
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "ls /data/local/tmp"
\'
'
,
'\$'
,
60
)
result
=
re
.
search
(
'iperf3'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'iperf3'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
if
result
is
None
:
result
=
re
.
search
(
'iperf'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'iperf'
,
str
(
self
.
ssh
.
before
))
...
@@ -2322,22 +2496,32 @@ class SSHConnection():
...
@@ -2322,22 +2496,32 @@ class SSHConnection():
else
:
else
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
if
(
useIperf3
):
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/iperf3 -s &'
,
'\$'
,
5
)
if
(
useIperf3
):
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/iperf3 -s &'
,
'\$'
,
5
)
else
:
self
.
command
(
'rm -f iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
result
=
re
.
search
(
'-u'
,
str
(
self
.
iperf_args
))
if
result
is
None
:
self
.
command
(
'echo $USER; nohup adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -s -i 1" > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
ADBUserName
,
5
)
udpIperf
=
False
else
:
self
.
command
(
'echo $USER; nohup adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
ADBUserName
,
5
)
else
:
else
:
self
.
command
(
'rm -f iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
self
.
command
(
'rm -f iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
result
=
re
.
search
(
'-u'
,
str
(
self
.
iperf_args
))
self
.
command
(
'echo $USER; nohup ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &
\'
> /dev/null 2>&1'
,
self
.
ADBUserName
,
60
)
if
result
is
None
:
self
.
command
(
'echo $USER; nohup adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -s -i 1" > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
ADBUserName
,
5
)
udpIperf
=
False
else
:
self
.
command
(
'echo $USER; nohup adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
ADBUserName
,
5
)
time
.
sleep
(
0.5
)
time
.
sleep
(
0.5
)
self
.
close
()
self
.
close
()
# Launch the IPERF client on the EPC side for DL
# Launch the IPERF client on the EPC side for DL (true for ltebox and old open-air-cn
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
# But for OAI-Rel14-CUPS, we launch from python executor
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
launchFromEpc
=
True
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
launchFromEpc
=
False
if
launchFromEpc
:
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
iperf_time
=
self
.
Iperf_ComputeTime
()
iperf_time
=
self
.
Iperf_ComputeTime
()
time
.
sleep
(
0.5
)
time
.
sleep
(
0.5
)
...
@@ -2347,16 +2531,31 @@ class SSHConnection():
...
@@ -2347,16 +2531,31 @@ class SSHConnection():
modified_options
=
str
(
self
.
iperf_args
)
modified_options
=
str
(
self
.
iperf_args
)
time
.
sleep
(
0.5
)
time
.
sleep
(
0.5
)
self
.
command
(
'rm -f iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
if
launchFromEpc
:
self
.
command
(
'rm -f iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
else
:
if
(
os
.
path
.
isfile
(
'iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
os
.
remove
(
'iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)
if
(
useIperf3
):
if
(
useIperf3
):
self
.
command
(
'stdbuf -o0 iperf3 -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
self
.
command
(
'stdbuf -o0 iperf3 -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
clientStatus
=
0
clientStatus
=
0
self
.
Iperf_analyzeV3Output
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
)
self
.
Iperf_analyzeV3Output
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
)
else
:
else
:
iperf_status
=
self
.
command
(
'stdbuf -o0 iperf -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
if
launchFromEpc
:
iperf_status
=
self
.
command
(
'stdbuf -o0 iperf -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
else
:
cmd
=
'iperf -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 > iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
message
=
cmd
+
'
\n
'
logging
.
debug
(
cmd
)
ret
=
subprocess
.
run
(
cmd
,
shell
=
True
)
iperf_status
=
ret
.
returncode
self
.
copyout
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
'iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
self
.
EPCSourceCodePath
+
'/scripts'
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cat '
+
self
.
EPCSourceCodePath
+
'/scripts/iperf_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
if
iperf_status
<
0
:
if
iperf_status
<
0
:
self
.
close
()
if
launchFromEpc
:
self
.
close
()
message
=
'iperf on UE ('
+
str
(
UE_IPAddress
)
+
') crashed due to TIMEOUT !'
message
=
'iperf on UE ('
+
str
(
UE_IPAddress
)
+
') crashed due to TIMEOUT !'
logging
.
debug
(
'
\u001B
[1;37;41m '
+
message
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m '
+
message
+
'
\u001B
[0m'
)
self
.
ping_iperf_wrong_exit
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
message
)
self
.
ping_iperf_wrong_exit
(
lock
,
UE_IPAddress
,
device_id
,
statusQueue
,
message
)
...
@@ -2370,11 +2569,17 @@ class SSHConnection():
...
@@ -2370,11 +2569,17 @@ class SSHConnection():
self
.
command
(
'killall iperf'
,
'\$'
,
5
)
self
.
command
(
'killall iperf'
,
'\$'
,
5
)
else
:
else
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell ps | grep --color=never iperf | grep -v grep'
,
'\$'
,
5
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell ps | grep --color=never iperf | grep -v grep'
,
'\$'
,
5
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "ps" | grep --color=never iperf | grep -v grep
\'
'
,
'\$'
,
60
)
result
=
re
.
search
(
'shell +(?P<pid>\d+)'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'shell +(?P<pid>\d+)'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
pid_iperf
=
result
.
group
(
'pid'
)
pid_iperf
=
result
.
group
(
'pid'
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell kill -KILL '
+
pid_iperf
,
'\$'
,
5
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell kill -KILL '
+
pid_iperf
,
'\$'
,
5
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "kill -KILL '
+
pid_iperf
+
'"
\'
'
,
'\$'
,
60
)
self
.
close
()
self
.
close
()
# if the client report is absent, try to analyze the server log file
# if the client report is absent, try to analyze the server log file
if
(
clientStatus
==
-
1
):
if
(
clientStatus
==
-
1
):
...
@@ -2390,7 +2595,8 @@ class SSHConnection():
...
@@ -2390,7 +2595,8 @@ class SSHConnection():
# in case of OAI UE:
# in case of OAI UE:
if
(
device_id
==
'OAI-UE'
):
if
(
device_id
==
'OAI-UE'
):
if
(
os
.
path
.
isfile
(
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
if
(
os
.
path
.
isfile
(
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
)):
pass
if
not
launchFromEpc
:
self
.
copyout
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
self
.
EPCSourceCodePath
+
'/scripts'
)
else
:
else
:
self
.
copyin
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
,
self
.
UESourceCodePath
+
'/cmake_targets/iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'.'
)
self
.
copyin
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
,
self
.
UESourceCodePath
+
'/cmake_targets/iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'.'
)
self
.
copyout
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
self
.
EPCSourceCodePath
+
'/scripts'
)
self
.
copyout
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
'iperf_server_'
+
self
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
self
.
EPCSourceCodePath
+
'/scripts'
)
...
@@ -2673,10 +2879,14 @@ class SSHConnection():
...
@@ -2673,10 +2879,14 @@ class SSHConnection():
try
:
try
:
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never hss | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never hss | grep -v grep'
,
'\$'
,
5
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
result
=
re
.
search
(
'oai_hss -j'
,
str
(
self
.
ssh
.
before
))
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
result
=
re
.
search
(
'hss_sim s6as diam_hss'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'hss_sim s6as diam_hss'
,
str
(
self
.
ssh
.
before
))
else
:
logging
.
error
(
'This should not happen!'
)
if
result
is
None
:
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m HSS Process Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m HSS Process Not Found!
\u001B
[0m'
)
status_queue
.
put
(
HSS_PROCESS_FAILED
)
status_queue
.
put
(
HSS_PROCESS_FAILED
)
...
@@ -2690,10 +2900,14 @@ class SSHConnection():
...
@@ -2690,10 +2900,14 @@ class SSHConnection():
try
:
try
:
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never mme | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never mme | grep -v grep'
,
'\$'
,
5
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
result
=
re
.
search
(
'mme -c'
,
str
(
self
.
ssh
.
before
))
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
result
=
re
.
search
(
'mme'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'mme'
,
str
(
self
.
ssh
.
before
))
else
:
logging
.
error
(
'This should not happen!'
)
if
result
is
None
:
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m MME Process Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m MME Process Not Found!
\u001B
[0m'
)
status_queue
.
put
(
MME_PROCESS_FAILED
)
status_queue
.
put
(
MME_PROCESS_FAILED
)
...
@@ -2706,12 +2920,17 @@ class SSHConnection():
...
@@ -2706,12 +2920,17 @@ class SSHConnection():
def
CheckSPGWProcess
(
self
,
status_queue
):
def
CheckSPGWProcess
(
self
,
status_queue
):
try
:
try
:
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'spgwu -c '
,
str
(
self
.
ssh
.
before
))
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never xGw | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never xGw | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'xGw'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'xGw'
,
str
(
self
.
ssh
.
before
))
else
:
logging
.
error
(
'This should not happen!'
)
if
result
is
None
:
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m SPGW Process Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m SPGW Process Not Found!
\u001B
[0m'
)
status_queue
.
put
(
SPGW_PROCESS_FAILED
)
status_queue
.
put
(
SPGW_PROCESS_FAILED
)
...
@@ -3153,12 +3372,12 @@ class SSHConnection():
...
@@ -3153,12 +3372,12 @@ class SSHConnection():
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
lPassWord
+
' | sudo -S daemon --name=enb'
+
str
(
self
.
eNB_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
lPassWord
+
' | sudo -S daemon --name=enb'
+
str
(
self
.
eNB_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
lPassWord
+
' | sudo -S killall --signal SIGINT lte-softmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
lPassWord
+
' | sudo -S killall --signal SIGINT lte-softmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
5
)
time
.
sleep
(
10
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'lte-softmodem'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'lte-softmodem'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
lPassWord
+
' | sudo -S killall --signal SIGKILL lte-softmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
lPassWord
+
' | sudo -S killall --signal SIGKILL lte-softmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
time
.
sleep
(
5
)
self
.
command
(
'rm -f my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
command
(
'rm -f my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
close
()
self
.
close
()
# If tracer options is on, stopping tshark on EPC side
# If tracer options is on, stopping tshark on EPC side
...
@@ -3218,49 +3437,77 @@ class SSHConnection():
...
@@ -3218,49 +3437,77 @@ class SSHConnection():
def
TerminateHSS
(
self
):
def
TerminateHSS
(
self
):
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT oai_hss || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
self
.
command
(
'stdbuf -o0 ps -aux | grep hss | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'oai_hss -j'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL oai_hss || true'
,
'\$'
,
5
)
self
.
command
(
'rm -f '
+
self
.
EPCSourceCodePath
+
'/scripts/my-hss.sh'
,
'\$'
,
5
)
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT run_hss oai_hss || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT run_hss oai_hss || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
time
.
sleep
(
2
)
self
.
command
(
'stdbuf -o0 ps -aux | grep hss | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep hss | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL run_hss oai_hss || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL run_hss oai_hss || true'
,
'\$'
,
5
)
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S daemon --name=simulated_hss --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S daemon --name=simulated_hss --stop'
,
'\$'
,
5
)
time
.
sleep
(
1
)
time
.
sleep
(
1
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL hss_sim'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL hss_sim'
,
'\$'
,
5
)
else
:
logging
.
error
(
'This should not happen!'
)
self
.
close
()
self
.
close
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
def
TerminateMME
(
self
):
def
TerminateMME
(
self
):
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
)
or
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT run_mme mme || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT run_mme mme || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
time
.
sleep
(
2
)
self
.
command
(
'stdbuf -o0 ps -aux | grep mme | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep mme | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'
\/bin\/bash .\/run_
'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'
mme -c
'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL run_mme mme || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL run_mme mme || true'
,
'\$'
,
5
)
else
:
self
.
command
(
'rm -f '
+
self
.
EPCSourceCodePath
+
'/scripts/my-mme.sh'
,
'\$'
,
5
)
elif
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./stop_mme'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./stop_mme'
,
'\$'
,
5
)
else
:
logging
.
error
(
'This should not happen!'
)
self
.
close
()
self
.
close
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
def
TerminateSPGW
(
self
):
def
TerminateSPGW
(
self
):
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT spgwc spgwu || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
self
.
command
(
'stdbuf -o0 ps -aux | grep spgw | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'spgwc -c |spgwu -c '
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL spgwc spgwu || true'
,
'\$'
,
5
)
self
.
command
(
'rm -f '
+
self
.
EPCSourceCodePath
+
'/scripts/my-spgw*.sh'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep tshark | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'-w '
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT tshark || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S chmod 666 '
+
self
.
EPCSourceCodePath
+
'/scripts/*.pcap'
,
'\$'
,
5
)
elif
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT run_spgw spgw || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGINT run_spgw spgw || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
time
.
sleep
(
2
)
self
.
command
(
'stdbuf -o0 ps -aux | grep spgw | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 ps -aux | grep spgw | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'\/bin\/bash .\/run_'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL run_spgw spgw || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S killall --signal SIGKILL run_spgw spgw || true'
,
'\$'
,
5
)
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./stop_xGw'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S ./stop_xGw'
,
'\$'
,
5
)
else
:
logging
.
error
(
'This should not happen!'
)
self
.
close
()
self
.
close
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
...
@@ -3279,18 +3526,30 @@ class SSHConnection():
...
@@ -3279,18 +3526,30 @@ class SSHConnection():
self
.
flexranCtrlStarted
=
False
self
.
flexranCtrlStarted
=
False
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
def
TerminateUE_common
(
self
,
device_id
):
def
TerminateUE_common
(
self
,
device_id
,
idx
):
try
:
try
:
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
# back in airplane mode on (ie radio off)
# back in airplane mode on (ie radio off)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/off'
,
'\$'
,
60
)
if
self
.
ADBCentralized
:
if
device_id
==
'84B7N16418004022'
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "su - root -c /data/local/tmp/off"'
,
'\$'
,
60
)
else
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/off'
,
'\$'
,
60
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
' '
+
self
.
UEDevicesOffCmd
[
idx
],
'\$'
,
60
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Detach Completed
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1mUE ('
+
device_id
+
') Detach Completed
\u001B
[0m'
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell ps | grep --color=never iperf | grep -v grep'
,
'\$'
,
5
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "ps | grep --color=never iperf | grep -v grep"'
,
'\$'
,
5
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "ps | grep --color=never iperf | grep -v grep"
\'
'
,
'\$'
,
60
)
result
=
re
.
search
(
'shell +(?P<pid>\d+)'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'shell +(?P<pid>\d+)'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
pid_iperf
=
result
.
group
(
'pid'
)
pid_iperf
=
result
.
group
(
'pid'
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell kill -KILL '
+
pid_iperf
,
'\$'
,
5
)
if
self
.
ADBCentralized
:
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "kill -KILL '
+
pid_iperf
+
'"'
,
'\$'
,
5
)
else
:
self
.
command
(
'ssh '
+
self
.
UEDevicesRemoteUser
[
idx
]
+
'@'
+
self
.
UEDevicesRemoteServer
[
idx
]
+
'
\'
adb -s '
+
device_id
+
' shell "kill -KILL '
+
pid_iperf
+
'"
\'
'
,
'\$'
,
60
)
self
.
close
()
self
.
close
()
except
:
except
:
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
...
@@ -3299,11 +3558,13 @@ class SSHConnection():
...
@@ -3299,11 +3558,13 @@ class SSHConnection():
terminate_ue_flag
=
True
terminate_ue_flag
=
True
self
.
GetAllUEDevices
(
terminate_ue_flag
)
self
.
GetAllUEDevices
(
terminate_ue_flag
)
multi_jobs
=
[]
multi_jobs
=
[]
i
=
0
for
device_id
in
self
.
UEDevices
:
for
device_id
in
self
.
UEDevices
:
p
=
Process
(
target
=
SSH
.
TerminateUE_common
,
args
=
(
device_id
,))
p
=
Process
(
target
=
SSH
.
TerminateUE_common
,
args
=
(
device_id
,
i
,
))
p
.
daemon
=
True
p
.
daemon
=
True
p
.
start
()
p
.
start
()
multi_jobs
.
append
(
p
)
multi_jobs
.
append
(
p
)
i
+=
1
for
job
in
multi_jobs
:
for
job
in
multi_jobs
:
job
.
join
()
job
.
join
()
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
ALL_PROCESSES_OK
)
...
@@ -3316,12 +3577,12 @@ class SSHConnection():
...
@@ -3316,12 +3577,12 @@ class SSHConnection():
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S daemon --name=ue'
+
str
(
self
.
UE_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S daemon --name=ue'
+
str
(
self
.
UE_instance
)
+
'_daemon --stop'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGINT lte-uesoftmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGINT lte-uesoftmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
5
)
time
.
sleep
(
10
)
self
.
command
(
'ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
self
.
command
(
'ps -aux | grep --color=never softmodem | grep -v grep'
,
'\$'
,
5
)
result
=
re
.
search
(
'lte-uesoftmodem'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'lte-uesoftmodem'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
if
result
is
not
None
:
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGKILL lte-uesoftmodem || true'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
UEPassword
+
' | sudo -S killall --signal SIGKILL lte-uesoftmodem || true'
,
'\$'
,
5
)
time
.
sleep
(
2
)
time
.
sleep
(
5
)
self
.
command
(
'rm -f my-lte-uesoftmodem-run'
+
str
(
self
.
UE_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
command
(
'rm -f my-lte-uesoftmodem-run'
+
str
(
self
.
UE_instance
)
+
'.sh'
,
'\$'
,
5
)
self
.
close
()
self
.
close
()
result
=
re
.
search
(
'ue_'
,
str
(
self
.
UELogFile
))
result
=
re
.
search
(
'ue_'
,
str
(
self
.
UELogFile
))
...
@@ -3544,41 +3805,47 @@ class SSHConnection():
...
@@ -3544,41 +3805,47 @@ class SSHConnection():
def
LogCollectHSS
(
self
):
def
LogCollectHSS
(
self
):
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'rm -f hss.log.zip'
,
'\$'
,
5
)
self
.
command
(
'rm -f hss.log.zip'
,
'\$'
,
5
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
)
or
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'zip hss.log.zip hss*.log'
,
'\$'
,
60
)
self
.
command
(
'zip hss.log.zip hss*.log'
,
'\$'
,
60
)
self
.
command
(
'rm hss*.log'
,
'\$'
,
5
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm hss*.log'
,
'\$'
,
5
)
else
:
if
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'zip hss.log.zip logs/hss*.* *.pcap'
,
'\$'
,
60
)
self
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f logs/hss*.* *.pcap'
,
'\$'
,
5
)
elif
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
):
self
.
command
(
'cp /opt/hss_sim0609/hss.log .'
,
'\$'
,
60
)
self
.
command
(
'cp /opt/hss_sim0609/hss.log .'
,
'\$'
,
60
)
self
.
command
(
'zip hss.log.zip hss.log'
,
'\$'
,
60
)
self
.
command
(
'zip hss.log.zip hss.log'
,
'\$'
,
60
)
else
:
logging
.
error
(
'This option should not occur!'
)
self
.
close
()
self
.
close
()
def
LogCollectMME
(
self
):
def
LogCollectMME
(
self
):
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'rm -f mme.log.zip'
,
'\$'
,
5
)
self
.
command
(
'rm -f mme.log.zip'
,
'\$'
,
5
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
)
or
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'zip mme.log.zip mme*.log'
,
'\$'
,
60
)
self
.
command
(
'zip mme.log.zip mme*.log'
,
'\$'
,
60
)
self
.
command
(
'rm mme*.log'
,
'\$'
,
5
)
self
.
command
(
'
echo '
+
self
.
EPCPassword
+
' | sudo -S
rm mme*.log'
,
'\$'
,
5
)
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'cp /opt/ltebox/var/log/*Log.0 .'
,
'\$'
,
5
)
self
.
command
(
'cp /opt/ltebox/var/log/*Log.0 .'
,
'\$'
,
5
)
self
.
command
(
'zip mme.log.zip mmeLog.0 s1apcLog.0 s1apsLog.0 s11cLog.0 libLog.0 s1apCodecLog.0'
,
'\$'
,
60
)
self
.
command
(
'zip mme.log.zip mmeLog.0 s1apcLog.0 s1apsLog.0 s11cLog.0 libLog.0 s1apCodecLog.0'
,
'\$'
,
60
)
else
:
logging
.
error
(
'This option should not occur!'
)
self
.
close
()
self
.
close
()
def
LogCollectSPGW
(
self
):
def
LogCollectSPGW
(
self
):
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
self
.
command
(
'rm -f spgw.log.zip'
,
'\$'
,
5
)
self
.
command
(
'rm -f spgw.log.zip'
,
'\$'
,
5
)
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
):
if
re
.
match
(
'OAI'
,
self
.
EPCType
,
re
.
IGNORECASE
)
or
re
.
match
(
'OAI-Rel14-CUPS'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'zip spgw.log.zip spgw*.log'
,
'\$'
,
60
)
self
.
command
(
'zip spgw.log.zip spgw*.log'
,
'\$'
,
60
)
self
.
command
(
'rm spgw*.log'
,
'\$'
,
5
)
self
.
command
(
'
echo '
+
self
.
EPCPassword
+
' | sudo -S
rm spgw*.log'
,
'\$'
,
5
)
el
se
:
el
if
re
.
match
(
'ltebox'
,
self
.
EPCType
,
re
.
IGNORECASE
)
:
self
.
command
(
'cp /opt/ltebox/var/log/xGwLog.0 .'
,
'\$'
,
5
)
self
.
command
(
'cp /opt/ltebox/var/log/xGwLog.0 .'
,
'\$'
,
5
)
self
.
command
(
'zip spgw.log.zip xGwLog.0'
,
'\$'
,
60
)
self
.
command
(
'zip spgw.log.zip xGwLog.0'
,
'\$'
,
60
)
else
:
logging
.
error
(
'This option should not occur!'
)
self
.
close
()
self
.
close
()
def
LogCollectOAIUE
(
self
):
def
LogCollectOAIUE
(
self
):
...
@@ -3773,6 +4040,7 @@ class SSHConnection():
...
@@ -3773,6 +4040,7 @@ class SSHConnection():
self
.
htmlFile
.
write
(
' <div id="build-tab" class="tab-pane fade">
\n
'
)
self
.
htmlFile
.
write
(
' <div id="build-tab" class="tab-pane fade">
\n
'
)
self
.
htmlFile
.
write
(
' <table class="table" border = "1">
\n
'
)
self
.
htmlFile
.
write
(
' <table class="table" border = "1">
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#33CCFF" >
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#33CCFF" >
\n
'
)
self
.
htmlFile
.
write
(
' <th>Relative Time (ms)</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Test Id</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Test Id</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Test Desc</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Test Desc</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Test Options</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Test Options</th>
\n
'
)
...
@@ -3796,7 +4064,7 @@ class SSHConnection():
...
@@ -3796,7 +4064,7 @@ class SSHConnection():
def
CreateHtmlTabFooter
(
self
,
passStatus
):
def
CreateHtmlTabFooter
(
self
,
passStatus
):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "#33CCFF" colspan=
2
>Final Tab Status</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "#33CCFF" colspan=
3
>Final Tab Status</th>
\n
'
)
if
passStatus
:
if
passStatus
:
self
.
htmlFile
.
write
(
' <th bgcolor = "green" colspan='
+
str
(
2
+
self
.
htmlUEConnected
)
+
'><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "green" colspan='
+
str
(
2
+
self
.
htmlUEConnected
)
+
'><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>
\n
'
)
else
:
else
:
...
@@ -3869,7 +4137,9 @@ class SSHConnection():
...
@@ -3869,7 +4137,9 @@ class SSHConnection():
def
CreateHtmlTestRow
(
self
,
options
,
status
,
processesStatus
,
machine
=
'eNB'
):
def
CreateHtmlTestRow
(
self
,
options
,
status
,
processesStatus
,
machine
=
'eNB'
):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
currentTime
=
int
(
round
(
time
.
time
()
*
1000
))
-
self
.
startTime
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcyan" >'
+
format
(
currentTime
/
1000
,
'.1f'
)
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcyan" >'
+
self
.
testCase_id
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcyan" >'
+
self
.
testCase_id
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
self
.
desc
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
self
.
desc
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
str
(
options
)
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
str
(
options
)
+
'</td>
\n
'
)
...
@@ -3937,8 +4207,10 @@ class SSHConnection():
...
@@ -3937,8 +4207,10 @@ class SSHConnection():
def
CreateHtmlTestRowQueue
(
self
,
options
,
status
,
ue_status
,
ue_queue
):
def
CreateHtmlTestRowQueue
(
self
,
options
,
status
,
ue_status
,
ue_queue
):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
currentTime
=
int
(
round
(
time
.
time
()
*
1000
))
-
self
.
startTime
addOrangeBK
=
False
addOrangeBK
=
False
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcyan" >'
+
format
(
currentTime
/
1000
,
'.1f'
)
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcyan" >'
+
self
.
testCase_id
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcyan" >'
+
self
.
testCase_id
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
self
.
desc
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
self
.
desc
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
str
(
options
)
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
str
(
options
)
+
'</td>
\n
'
)
...
@@ -3977,9 +4249,9 @@ class SSHConnection():
...
@@ -3977,9 +4249,9 @@ class SSHConnection():
# Usage()
# Usage()
#-----------------------------------------------------------
#-----------------------------------------------------------
def
Usage
():
def
Usage
():
print
(
'------------------------------------------------------------'
)
print
(
'------------------------------------------------------------
----------------------------------------------------------
'
)
print
(
'main.py Ver:'
+
Version
)
print
(
'main.py Ver:'
+
Version
)
print
(
'------------------------------------------------------------'
)
print
(
'------------------------------------------------------------
----------------------------------------------------------
'
)
print
(
'Usage: python main.py [options]'
)
print
(
'Usage: python main.py [options]'
)
print
(
' --help Show this help.'
)
print
(
' --help Show this help.'
)
print
(
' --mode=[Mode]'
)
print
(
' --mode=[Mode]'
)
...
@@ -3987,25 +4259,35 @@ def Usage():
...
@@ -3987,25 +4259,35 @@ def Usage():
print
(
' InitiateHtml, FinalizeHtml'
)
print
(
' InitiateHtml, FinalizeHtml'
)
print
(
' TerminateeNB, TerminateUE, TerminateHSS, TerminateMME, TerminateSPGW'
)
print
(
' TerminateeNB, TerminateUE, TerminateHSS, TerminateMME, TerminateSPGW'
)
print
(
' LogCollectBuild, LogCollecteNB, LogCollectHSS, LogCollectMME, LogCollectSPGW, LogCollectPing, LogCollectIperf'
)
print
(
' LogCollectBuild, LogCollecteNB, LogCollectHSS, LogCollectMME, LogCollectSPGW, LogCollectPing, LogCollectIperf'
)
print
(
' --eNBRepository=[eNB
\'
s Repository URL] or --ranRepository=[OAI RAN Repository URL]'
)
print
(
'---------------------------------------------------------------------------------------------------- Git Options --'
)
print
(
' --eNBBranch=[eNB
\'
s Branch Name] or --ranBranch=[OAI RAN Repository Branch'
)
print
(
' --ranRepository=[OAI RAN Repository URL]'
)
print
(
' --eNBCommitID=[eNB
\'
s Commit Number] or --ranCommitID=[OAI RAN Repository Commit SHA-1'
)
print
(
' --ranBranch=[OAI RAN Repository Branch]'
)
print
(
' --eNB_AllowMerge=[eNB
\'
s Allow Merge Request (with target branch)] or --ranAllowMerge=true/false'
)
print
(
' --ranCommitID=[OAI RAN Repository Commit SHA-1]'
)
print
(
' --eNBTargetBranch=[eNB
\'
s Target Branch in case of a Merge Request] or --ranTargetBranch=[Target Branch]'
)
print
(
' --ranAllowMerge=[Allow Merge Request (with target branch) (true or false)]'
)
print
(
' --ranTargetBranch=[Target Branch in case of a Merge Request]'
)
print
(
'--------------------------------------------------------------------------------------------- eNB Server Options --'
)
print
(
' --eNBIPAddress=[eNB
\'
s IP Address]'
)
print
(
' --eNBIPAddress=[eNB
\'
s IP Address]'
)
print
(
' --eNBUserName=[eNB
\'
s Login User Name]'
)
print
(
' --eNBUserName=[eNB
\'
s Login User Name]'
)
print
(
' --eNBPassword=[eNB
\'
s Login Password]'
)
print
(
' --eNBPassword=[eNB
\'
s Login Password]'
)
print
(
' --eNBSourceCodePath=[eNB
\'
s Source Code Path]'
)
print
(
' --eNBSourceCodePath=[eNB
\'
s Source Code Path]'
)
print
(
'------------------------------------------------------------------------------------------ OAI UE Server Options --'
)
print
(
' --UEIPAddress=[UE
\'
s IP Address]'
)
print
(
' --UEUserName=[UE
\'
s Login User Name]'
)
print
(
' --UEPassword=[UE
\'
s Login Password]'
)
print
(
' --UESourceCodePath=[UE
\'
s Source Code Path]'
)
print
(
'--------------------------------------------------------------------------------------------- EPC Server Options --'
)
print
(
' --EPCIPAddress=[EPC
\'
s IP Address]'
)
print
(
' --EPCIPAddress=[EPC
\'
s IP Address]'
)
print
(
' --EPCUserName=[EPC
\'
s Login User Name]'
)
print
(
' --EPCUserName=[EPC
\'
s Login User Name]'
)
print
(
' --EPCPassword=[EPC
\'
s Login Password]'
)
print
(
' --EPCPassword=[EPC
\'
s Login Password]'
)
print
(
' --EPCSourceCodePath=[EPC
\'
s Source Code Path]'
)
print
(
' --EPCSourceCodePath=[EPC
\'
s Source Code Path]'
)
print
(
' --EPCType=[EPC
\'
s Type: OAI or ltebox]'
)
print
(
' --EPCType=[EPC
\'
s Type: OAI or ltebox or OAI-Rel14-CUPS]'
)
print
(
'--------------------------------------------------------------------------------------------- ABD Server Options --'
)
print
(
' --ADBIPAddress=[ADB
\'
s IP Address]'
)
print
(
' --ADBIPAddress=[ADB
\'
s IP Address]'
)
print
(
' --ADBUserName=[ADB
\'
s Login User Name]'
)
print
(
' --ADBUserName=[ADB
\'
s Login User Name]'
)
print
(
' --ADBPassword=[ADB
\'
s Login Password]'
)
print
(
' --ADBPassword=[ADB
\'
s Login Password]'
)
print
(
'----------------------------------------------------------------------------------------------------------------------'
)
print
(
' --XMLTestFile=[XML Test File to be run]'
)
print
(
' --XMLTestFile=[XML Test File to be run]'
)
print
(
'------------------------------------------------------------'
)
print
(
'------------------------------------------------------------
----------------------------------------------------------
'
)
def
CheckClassValidity
(
action
,
id
):
def
CheckClassValidity
(
action
,
id
):
if
action
!=
'Build_eNB'
and
action
!=
'WaitEndBuild_eNB'
and
action
!=
'Initialize_eNB'
and
action
!=
'Terminate_eNB'
and
action
!=
'Initialize_UE'
and
action
!=
'Terminate_UE'
and
action
!=
'Attach_UE'
and
action
!=
'Detach_UE'
and
action
!=
'Build_OAI_UE'
and
action
!=
'Initialize_OAI_UE'
and
action
!=
'Terminate_OAI_UE'
and
action
!=
'DataDisable_UE'
and
action
!=
'DataEnable_UE'
and
action
!=
'CheckStatusUE'
and
action
!=
'Ping'
and
action
!=
'Iperf'
and
action
!=
'Reboot_UE'
and
action
!=
'Initialize_FlexranCtrl'
and
action
!=
'Terminate_FlexranCtrl'
and
action
!=
'Initialize_HSS'
and
action
!=
'Terminate_HSS'
and
action
!=
'Initialize_MME'
and
action
!=
'Terminate_MME'
and
action
!=
'Initialize_SPGW'
and
action
!=
'Terminate_SPGW'
and
action
!=
'Initialize_CatM_module'
and
action
!=
'Terminate_CatM_module'
and
action
!=
'Attach_CatM_module'
and
action
!=
'Detach_CatM_module'
and
action
!=
'Ping_CatM_module'
and
action
!=
'IdleSleep'
and
action
!=
'Perform_X2_Handover'
:
if
action
!=
'Build_eNB'
and
action
!=
'WaitEndBuild_eNB'
and
action
!=
'Initialize_eNB'
and
action
!=
'Terminate_eNB'
and
action
!=
'Initialize_UE'
and
action
!=
'Terminate_UE'
and
action
!=
'Attach_UE'
and
action
!=
'Detach_UE'
and
action
!=
'Build_OAI_UE'
and
action
!=
'Initialize_OAI_UE'
and
action
!=
'Terminate_OAI_UE'
and
action
!=
'DataDisable_UE'
and
action
!=
'DataEnable_UE'
and
action
!=
'CheckStatusUE'
and
action
!=
'Ping'
and
action
!=
'Iperf'
and
action
!=
'Reboot_UE'
and
action
!=
'Initialize_FlexranCtrl'
and
action
!=
'Terminate_FlexranCtrl'
and
action
!=
'Initialize_HSS'
and
action
!=
'Terminate_HSS'
and
action
!=
'Initialize_MME'
and
action
!=
'Terminate_MME'
and
action
!=
'Initialize_SPGW'
and
action
!=
'Terminate_SPGW'
and
action
!=
'Initialize_CatM_module'
and
action
!=
'Terminate_CatM_module'
and
action
!=
'Attach_CatM_module'
and
action
!=
'Detach_CatM_module'
and
action
!=
'Ping_CatM_module'
and
action
!=
'IdleSleep'
and
action
!=
'Perform_X2_Handover'
:
...
@@ -4238,16 +4520,25 @@ while len(argvs) > 1:
...
@@ -4238,16 +4520,25 @@ while len(argvs) > 1:
SSH
.
EPCSourceCodePath
=
matchReg
.
group
(
1
)
SSH
.
EPCSourceCodePath
=
matchReg
.
group
(
1
)
elif
re
.
match
(
'^\-\-EPCType=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
elif
re
.
match
(
'^\-\-EPCType=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-EPCType=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
matchReg
=
re
.
match
(
'^\-\-EPCType=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
if
re
.
match
(
'OAI'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
)
or
re
.
match
(
'ltebox'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
):
if
re
.
match
(
'OAI'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
)
or
re
.
match
(
'ltebox'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
)
or
re
.
match
(
'OAI-Rel14-CUPS'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
)
:
SSH
.
EPCType
=
matchReg
.
group
(
1
)
SSH
.
EPCType
=
matchReg
.
group
(
1
)
else
:
else
:
sys
.
exit
(
'Invalid EPC Type: '
+
matchReg
.
group
(
1
)
+
' -- (should be OAI or ltebox)'
)
sys
.
exit
(
'Invalid EPC Type: '
+
matchReg
.
group
(
1
)
+
' -- (should be OAI or ltebox
or OAI-Rel14-CUPS
)'
)
elif
re
.
match
(
'^\-\-ADBIPAddress=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
elif
re
.
match
(
'^\-\-ADBIPAddress=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-ADBIPAddress=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
matchReg
=
re
.
match
(
'^\-\-ADBIPAddress=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
SSH
.
ADBIPAddress
=
matchReg
.
group
(
1
)
SSH
.
ADBIPAddress
=
matchReg
.
group
(
1
)
elif
re
.
match
(
'^\-\-ADBUserName=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
elif
re
.
match
(
'^\-\-ADBUserName=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-ADBUserName=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
matchReg
=
re
.
match
(
'^\-\-ADBUserName=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
SSH
.
ADBUserName
=
matchReg
.
group
(
1
)
SSH
.
ADBUserName
=
matchReg
.
group
(
1
)
elif
re
.
match
(
'^\-\-ADBType=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-ADBType=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
if
re
.
match
(
'centralized'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
)
or
re
.
match
(
'distributed'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
):
if
re
.
match
(
'distributed'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
):
SSH
.
ADBCentralized
=
False
else
:
SSH
.
ADBCentralized
=
True
else
:
sys
.
exit
(
'Invalid ADB Type: '
+
matchReg
.
group
(
1
)
+
' -- (should be centralized or distributed)'
)
elif
re
.
match
(
'^\-\-ADBPassword=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
elif
re
.
match
(
'^\-\-ADBPassword=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-ADBPassword=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
matchReg
=
re
.
match
(
'^\-\-ADBPassword=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
SSH
.
ADBPassword
=
matchReg
.
group
(
1
)
SSH
.
ADBPassword
=
matchReg
.
group
(
1
)
...
@@ -4447,6 +4738,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
...
@@ -4447,6 +4738,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
cnt
=
0
cnt
=
0
SSH
.
prematureExit
=
True
SSH
.
prematureExit
=
True
SSH
.
startTime
=
int
(
round
(
time
.
time
()
*
1000
))
while
cnt
<
SSH
.
repeatCounts
[
0
]
and
SSH
.
prematureExit
:
while
cnt
<
SSH
.
repeatCounts
[
0
]
and
SSH
.
prematureExit
:
SSH
.
prematureExit
=
False
SSH
.
prematureExit
=
False
for
test_case_id
in
todo_tests
:
for
test_case_id
in
todo_tests
:
...
...
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_start.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
epc-start-oai-ue
</htmlTabRef>
<htmlTabName>
EPC-Start-OAI-UE
</htmlTabName>
<htmlTabIcon>
log-in
</htmlTabIcon>
<TestCaseRequestedList>
050101 000001 060101 000001 070101
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
20
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"050101"
>
<class>
Initialize_HSS
</class>
<desc>
Initialize HSS
</desc>
</testCase>
<testCase
id=
"060101"
>
<class>
Initialize_MME
</class>
<desc>
Initialize MME
</desc>
</testCase>
<testCase
id=
"070101"
>
<class>
Initialize_SPGW
</class>
<desc>
Initialize SPGW
</desc>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_stop.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
epc-closure
</htmlTabRef>
<htmlTabName>
EPC-Closure
</htmlTabName>
<htmlTabIcon>
log-out
</htmlTabIcon>
<TestCaseRequestedList>
050201 060201 070201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"050201"
>
<class>
Terminate_HSS
</class>
<desc>
Terminate HSS
</desc>
</testCase>
<testCase
id=
"060201"
>
<class>
Terminate_MME
</class>
<desc>
Terminate MME
</desc>
</testCase>
<testCase
id=
"070201"
>
<class>
Terminate_SPGW
</class>
<desc>
Terminate SPGW
</desc>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_terminate.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
terminate-enb-oai-ue
</htmlTabRef>
<htmlTabName>
Terminate-all-eNBs-OAI-UEs
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<TestCaseRequestedList>
030201 090109
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"030201"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate eNB
</desc>
</testCase>
<testCase
id=
"090109"
>
<class>
Terminate_OAI_UE
</class>
<desc>
Terminate OAI UE
</desc>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
test-05-tm1-oai-ue
</htmlTabRef>
<htmlTabName>
Test-05MHz-TM1-OAI-UE
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
4
</repeatCount>
<TestCaseRequestedList>
030201 090109
030102 000001 090102 000002 040503 000002 040603 040604 040643 040644 000002 090109 000001 030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep for 10 sec
</desc>
<idle_sleep_time_in_sec>
10
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000002"
>
<class>
IdleSleep
</class>
<desc>
Sleep for 3 sec
</desc>
<idle_sleep_time_in_sec>
3
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"030102"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize eNB (FDD/Band7/5MHz)
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --eNBs.[0].rrc_inactivity_threshold 0 --RUs.[0].max_rxgain 120 --eNBs.[0].component_carriers.[0].pusch_p0_Nominal -90 --eNBs.[0].component_carriers.[0].pucch_p0_Nominal -96 --eNBs.[0].tracking_area_code 600 --eNBs.[0].plmn_list.[0].mnc 95 --THREAD_STRUCT.[0].parallel_config PARALLEL_RU_L1_TRX_SPLIT
</Initialize_eNB_args>
</testCase>
<testCase
id=
"030201"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate eNB
</desc>
</testCase>
<testCase
id=
"090102"
>
<class>
Initialize_OAI_UE
</class>
<desc>
Initialize OAI UE (FDD/Band7/5MHz)
</desc>
<Initialize_OAI_UE_args>
-C 2680000000 -r 25 --ue-rxgain 130 --ue-txgain 1 --ue-max-power -6 --ue-scan-carrier --nokrnmod 1
</Initialize_OAI_UE_args>
</testCase>
<testCase
id=
"090109"
>
<class>
Terminate_OAI_UE
</class>
<desc>
Terminate OAI UE
</desc>
</testCase>
<testCase
id=
"040503"
>
<class>
Ping
</class>
<desc>
ping (5MHz - 20 sec)
</desc>
<ping_args>
-I 192.168.248.159 -c 20
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"040603"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - DL/1Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 1M -t 30 -i 1 -fm
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040604"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - DL/12Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 12M -t 30 -i 1 -fm
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040643"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - UL/1Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 1M -t 30 -i 1 -fm -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040644"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - UL/2Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 2M -t 30 -i 1 -fm -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
test-05-tm1-nos1-tunnel
</htmlTabRef>
<htmlTabName>
Test-05MHz-TM1-noS1-tunnel
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
2
</repeatCount>
<TestCaseRequestedList>
030201 090109
030101 000001 090101 000002 040501 040502 000001 040601 040602 040641 040642 000001 090109 030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
10
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000002"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
5
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000003"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
60
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"030101"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize eNB (FDD/Band7/5MHz)
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --noS1 --eNBs.[0].rrc_inactivity_threshold 0 --RUs.[0].max_rxgain 120 --eNBs.[0].component_carriers.[0].pusch_p0_Nominal -90 --eNBs.[0].component_carriers.[0].pucch_p0_Nominal -96 --eNBs.[0].tracking_area_code 600 --eNBs.[0].plmn_list.[0].mnc 95 --THREAD_STRUCT.[0].parallel_config PARALLEL_RU_L1_TRX_SPLIT
</Initialize_eNB_args>
</testCase>
<testCase
id=
"030201"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate eNB
</desc>
</testCase>
<testCase
id=
"090101"
>
<class>
Initialize_OAI_UE
</class>
<desc>
Initialize OAI UE (FDD/Band7/5MHz)
</desc>
<Initialize_OAI_UE_args>
-C 2680000000 -r 25 --ue-rxgain 130 --ue-txgain 1 --ue-max-power -6 --ue-scan-carrier --nokrnmod 1 --noS1
</Initialize_OAI_UE_args>
</testCase>
<testCase
id=
"090109"
>
<class>
Terminate_OAI_UE
</class>
<desc>
Terminate OAI UE
</desc>
</testCase>
<testCase
id=
"040501"
>
<class>
Ping
</class>
<desc>
ping (5MHz - 20 sec)(from eNB to OAI UE)
</desc>
<ping_args>
-I oaitun_enb1 -c 20 10.0.1.2
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"040502"
>
<class>
Ping
</class>
<desc>
ping (5MHz - 20 sec)(from OAI UE to eNB)
</desc>
<ping_args>
-I oaitun_ue1 -c 20 10.0.1.1
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"040601"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - DL/1Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-c 10.0.1.2 -u -b 1M -t 30 -i 1 -fm -B 10.0.1.1
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040602"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - DL/10Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-c 10.0.1.2 -u -b 10M -t 30 -i 1 -fm -B 10.0.1.1
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040641"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - UL/1Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-c 10.0.1.1 -u -b 1M -t 30 -i 1 -fm -B 10.0.1.2 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
balanced
</iperf_profile>
</testCase>
<testCase
id=
"040642"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - UL/2Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-c 10.0.1.1 -u -b 2M -t 30 -i 1 -fm -B 10.0.1.2 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
balanced
</iperf_profile>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_usrp210_band7_build.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
build-tab-enb0
</htmlTabRef>
<htmlTabName>
Build eNB0
</htmlTabName>
<htmlTabIcon>
wrench
</htmlTabIcon>
<TestCaseRequestedList>
010101
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"010101"
>
<class>
Build_eNB
</class>
<desc>
Build eNB (USRP)
</desc>
<Build_eNB_args>
-w USRP -c --eNB
</Build_eNB_args>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_usrp210_band7_epc_start.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
epc-start
</htmlTabRef>
<htmlTabName>
EPC-Start
</htmlTabName>
<htmlTabIcon>
log-in
</htmlTabIcon>
<TestCaseRequestedList>
050102 000001 060102 000001 070102
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
20
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"050102"
>
<class>
Initialize_HSS
</class>
<desc>
Initialize HSS
</desc>
</testCase>
<testCase
id=
"060102"
>
<class>
Initialize_MME
</class>
<desc>
Initialize MME
</desc>
</testCase>
<testCase
id=
"070102"
>
<class>
Initialize_SPGW
</class>
<desc>
Initialize SPGW
</desc>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_usrp210_band7_epc_stop.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
epc-stop
</htmlTabRef>
<htmlTabName>
EPC-Stop
</htmlTabName>
<htmlTabIcon>
log-out
</htmlTabIcon>
<TestCaseRequestedList>
050201 060201 070201
040101
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"050201"
>
<class>
Terminate_HSS
</class>
<desc>
Terminate HSS
</desc>
</testCase>
<testCase
id=
"060201"
>
<class>
Terminate_MME
</class>
<desc>
Terminate MME
</desc>
</testCase>
<testCase
id=
"070201"
>
<class>
Terminate_SPGW
</class>
<desc>
Terminate SPGW
</desc>
</testCase>
<testCase
id=
"040101"
>
<class>
Initialize_UE
</class>
<desc>
Initialize UE
</desc>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/enb_usrp210_band7_test_05mhz_tm1.xml
0 → 100644
View file @
50962242
<!--
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
030102 000002 040301 000002 040504 040605 040606 040645 040646 000001 040401 000002 030201
-->
<testCaseList>
<htmlTabRef>
test-05-tm1
</htmlTabRef>
<htmlTabName>
Test-05MHz-TM1
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<repeatCount>
2
</repeatCount>
<TestCaseRequestedList>
030201 040101
030102 000002 040301 000002 040504 000001 040401 000002 030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"040101"
>
<class>
Initialize_UE
</class>
<desc>
Initialize UE
</desc>
</testCase>
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep for 10 sec
</desc>
<idle_sleep_time_in_sec>
10
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000002"
>
<class>
IdleSleep
</class>
<desc>
Sleep for 3 sec
</desc>
<idle_sleep_time_in_sec>
3
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"030102"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize eNB (FDD/Band7/5MHz)
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --eNBs.[0].rrc_inactivity_threshold 0 --RUs.[0].max_rxgain 120 --eNBs.[0].component_carriers.[0].pusch_p0_Nominal -90 --eNBs.[0].component_carriers.[0].pucch_p0_Nominal -96 --eNBs.[0].tracking_area_code 600 --eNBs.[0].plmn_list.[0].mnc 95 --THREAD_STRUCT.[0].parallel_config PARALLEL_RU_L1_TRX_SPLIT
</Initialize_eNB_args>
</testCase>
<testCase
id=
"030201"
>
<class>
Terminate_eNB
</class>
<desc>
Terminate eNB
</desc>
</testCase>
<testCase
id=
"040301"
>
<class>
Attach_UE
</class>
<desc>
Attach UE
</desc>
</testCase>
<testCase
id=
"040401"
>
<class>
Detach_UE
</class>
<desc>
Detach UE
</desc>
</testCase>
<testCase
id=
"040504"
>
<class>
Ping
</class>
<desc>
ping (5MHz - 20 sec)
</desc>
<ping_args>
-I 192.168.248.159 -c 20
</ping_args>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"040605"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - DL/1Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 1M -t 30 -i 1 -fm
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040606"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - DL/12Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 12M -t 30 -i 1 -fm
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040645"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - UL/1Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 1M -t 30 -i 1 -fm -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040646"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - UL/2Mbps/UDP)(30 sec)
</desc>
<iperf_args>
-u -b 2M -t 30 -i 1 -fm -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
</testCaseList>
ci-scripts/xml_files/inria/ue_usrp210_band7_build.xml
0 → 100644
View file @
50962242
<!--
Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The OpenAirInterface Software Alliance licenses this file to You under
the OAI Public License, Version 1.1 (the "License"); you may not use this file
except in compliance with the License.
You may obtain a copy of the License at
http://www.openairinterface.org/?page_id=698
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information about the OpenAirInterface (OAI) Software Alliance:
contact@openairinterface.org
-->
<testCaseList>
<htmlTabRef>
build-tab-ue0
</htmlTabRef>
<htmlTabName>
Build UE0
</htmlTabName>
<htmlTabIcon>
wrench
</htmlTabIcon>
<TestCaseRequestedList>
090101
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"090101"
>
<class>
Build_OAI_UE
</class>
<desc>
Build OAI UE
</desc>
<Build_OAI_UE_args>
-w USRP --UE
</Build_OAI_UE_args>
</testCase>
</testCaseList>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment