Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
OpenXG
OpenXG UE
Commits
bd16c4a9
Commit
bd16c4a9
authored
Oct 06, 2021
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/ci_implement_cn5g_deployment' into ci_test_sa_nsa
parents
5f385a73
8c790491
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
91 additions
and
21 deletions
+91
-21
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
+15
-0
ci-scripts/ci_ueinfra.yaml
ci-scripts/ci_ueinfra.yaml
+1
-1
ci-scripts/cls_oaicitest.py
ci-scripts/cls_oaicitest.py
+2
-0
ci-scripts/epc.py
ci-scripts/epc.py
+37
-1
ci-scripts/ran.py
ci-scripts/ran.py
+13
-1
ci-scripts/sshconnection.py
ci-scripts/sshconnection.py
+12
-0
ci-scripts/xml_files/fr1_gnb_build.xml
ci-scripts/xml_files/fr1_gnb_build.xml
+0
-2
ci-scripts/xml_files/fr1_sa_quectel.xml
ci-scripts/xml_files/fr1_sa_quectel.xml
+11
-16
No files found.
ci-scripts/Jenkinsfile-tmp-multi-enb-nsa
View file @
bd16c4a9
...
...
@@ -262,6 +262,21 @@ pipeline {
if
(
fileExists
(
"enb.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"enb.log.${env.BUILD_ID}.zip"
}
}
}
}
stage
(
'Log Collection (CN)'
)
{
steps
{
withCredentials
([
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.EPC_Credentials}"
,
usernameVariable:
'EPC_Username'
,
passwordVariable:
'EPC_Password'
]
])
{
echo
'\u2705 \u001B[32mLog Transfer (CN)\u001B[0m'
sh
"sshpass -p \'${EPC_Password}\' scp -o 'StrictHostKeyChecking no' -o 'ConnectTimeout 10' ${EPC_Username}@${params.EPC_IPAddress}:${EPC_SourceCodePath}/logs/oai-cn5g.log.zip ./oai-cn5g.log.${env.BUILD_ID}.zip || true"
}
script
{
if
(
fileExists
(
"oai-cn5g.log.${env.BUILD_ID}.zip"
))
{
archiveArtifacts
"oai-cn5g.log.${env.BUILD_ID}.zip"
}
if
(
fileExists
(
"ci-scripts/test_results.html"
))
{
sh
"mv ci-scripts/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}#' test_results-${JOB_NAME}.html"
...
...
ci-scripts/ci_ueinfra.yaml
View file @
bd16c4a9
...
...
@@ -20,7 +20,7 @@ nrmodule2_quectel:
Kind
:
quectel
Process
:
Name
:
quectel-CM
Cmd
:
/home/nrmodule2/quectel-CM/quectel-CM -s oai
.ipv4 -4
Cmd
:
/home/nrmodule2/quectel-CM/quectel-CM -s oai
-4
#oai is the dnn for OAI CN5G (hardcoded in CN)
WakeupScript
:
ci_ctl_qtel.py /dev/ttyUSB7 wup
DetachScript
:
ci_ctl_qtel.py /dev/ttyUSB7 detach
LogStore
:
/media/ci_qlogs
...
...
ci-scripts/cls_oaicitest.py
View file @
bd16c4a9
...
...
@@ -1549,6 +1549,8 @@ class OaiCiTest():
#target address is different depending on EPC type
if
re
.
match
(
'OAI-Rel14-Docker'
,
EPC
.
Type
,
re
.
IGNORECASE
):
Target
=
EPC
.
MmeIPAddress
elif
re
.
match
(
'OAICN5G'
,
EPC
.
Type
,
re
.
IGNORECASE
):
Target
=
'8.8.8.8'
else
:
Target
=
EPC
.
IPAddress
#ping from module NIC rather than IP address to make sure round trip is over the air
...
...
ci-scripts/epc.py
View file @
bd16c4a9
...
...
@@ -220,7 +220,7 @@ class EPCManagement():
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
if
re
.
match
(
'ltebox'
,
self
.
Type
,
re
.
IGNORECASE
):
logging
.
debug
(
'Using the
sabox
simulated HSS'
)
logging
.
debug
(
'Using the
SABOX
simulated HSS'
)
mySSH
.
command
(
'if [ -d '
+
self
.
SourceCodePath
+
'/scripts ]; then echo '
+
self
.
Password
+
' | sudo -S rm -Rf '
+
self
.
SourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
mySSH
.
command
(
'mkdir -p '
+
self
.
SourceCodePath
+
'/scripts'
,
'\$'
,
5
)
mySSH
.
command
(
'cd /opt/hss_sim0609'
,
'\$'
,
5
)
...
...
@@ -229,6 +229,13 @@ class EPCManagement():
logging
.
debug
(
'Using the sabox'
)
mySSH
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo -S ./start_sabox'
,
'\$'
,
5
)
elif
re
.
match
(
'OAICN5G'
,
self
.
Type
,
re
.
IGNORECASE
):
logging
.
debug
(
'Starting OAI CN5G'
)
mySSH
.
command
(
'if [ -d '
+
self
.
SourceCodePath
+
'/scripts ]; then echo '
+
self
.
Password
+
' | sudo -S rm -Rf '
+
self
.
SourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
mySSH
.
command
(
'mkdir -p '
+
self
.
SourceCodePath
+
'/scripts'
,
'\$'
,
5
)
mySSH
.
command
(
'cd /opt/oai-cn5g-fed/docker-compose'
,
'\$'
,
5
)
mySSH
.
command
(
'./core-network.sh start nrf spgwu'
,
'\$'
,
60
)
mySSH
.
command
(
'docker-compose up -d trf_gen'
,
'\$'
,
5
)
else
:
logging
.
error
(
'This option should not occur!'
)
mySSH
.
close
()
...
...
@@ -242,6 +249,16 @@ class EPCManagement():
return
if
re
.
match
(
'ltebox'
,
self
.
Type
,
re
.
IGNORECASE
):
self
.
MmeIPAddress
=
self
.
IPAddress
elif
re
.
match
(
'OAICN5G'
,
self
.
Type
,
re
.
IGNORECASE
):
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
response
=
mySSH
.
command3
(
'docker container ls -f name=oai-amf'
,
10
)
if
len
(
response
)
>
1
:
response
=
mySSH
.
command3
(
'docker inspect --format=
\'
{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}
\'
oai-amf'
,
10
)
tmp
=
str
(
response
[
0
],
'utf-8'
)
self
.
MmeIPAddress
=
tmp
.
rstrip
()
logging
.
debug
(
'AMF IP Address '
+
self
.
MmeIPAddress
)
mySSH
.
close
()
def
CheckHSSProcess
(
self
,
status_queue
):
try
:
...
...
@@ -433,6 +450,7 @@ class EPCManagement():
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
if
re
.
match
(
'ltebox'
,
self
.
Type
,
re
.
IGNORECASE
):
logging
.
debug
(
'Terminating SA BOX'
)
mySSH
.
command
(
'cd /opt/ltebox/tools'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo -S ./stop_sabox'
,
'\$'
,
5
)
time
.
sleep
(
1
)
...
...
@@ -440,6 +458,11 @@ class EPCManagement():
mySSH
.
command
(
'cd scripts'
,
'\$'
,
5
)
time
.
sleep
(
1
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo -S screen -S simulated_5g_hss -X quit'
,
'\$'
,
5
)
elif
re
.
match
(
'OAICN5G'
,
self
.
Type
,
re
.
IGNORECASE
):
self
.
LogCollectOAICN5G
()
logging
.
debug
(
'Terminating OAI CN5G'
)
mySSH
.
command
(
'cd /opt/oai-cn5g-fed/docker-compose'
,
'\$'
,
5
)
mySSH
.
command
(
'./core-network.sh stop nrf spgwu'
,
'\$'
,
60
)
else
:
logging
.
error
(
'This should not happen!'
)
mySSH
.
close
()
...
...
@@ -679,3 +702,16 @@ class EPCManagement():
logging
.
error
(
'This option should not occur!'
)
mySSH
.
close
()
def
LogCollectOAICN5G
(
self
):
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
logging
.
debug
(
'OAI CN5G Collecting Log files to workspace'
)
mySSH
.
command
(
'echo '
+
self
.
Password
+
' | sudo rm -rf '
+
self
.
SourceCodePath
+
'/logs'
,
'\$'
,
5
)
mySSH
.
command
(
'mkdir '
+
self
.
SourceCodePath
+
'/logs'
,
'\$'
,
5
)
containers_list
=
[
'oai-smf'
,
'oai-spgwu'
,
'oai-amf'
,
'oai-nrf'
]
for
c
in
containers_list
:
mySSH
.
command
(
'docker logs '
+
c
+
' > '
+
self
.
SourceCodePath
+
'/logs/'
+
c
+
'.log'
,
'\$'
,
5
)
mySSH
.
command
(
'cd '
+
self
.
SourceCodePath
+
'/logs'
,
'\$'
,
5
)
mySSH
.
command
(
'zip oai-cn5g.log.zip *.log'
,
'\$'
,
60
)
mySSH
.
close
()
ci-scripts/ran.py
View file @
bd16c4a9
...
...
@@ -462,7 +462,19 @@ class RANManagement():
mySSH
.
command
(
'if [ -e rbconfig.raw ]; then echo '
+
lPassWord
+
' | sudo -S rm rbconfig.raw; fi'
,
'\$'
,
5
)
mySSH
.
command
(
'if [ -e reconfig.raw ]; then echo '
+
lPassWord
+
' | sudo -S rm reconfig.raw; fi'
,
'\$'
,
5
)
# NOTE: WE SHALL do a check if the executable is present (in case build went wrong)
#hack UHD_RFNOC_DIR variable for gNB / N310 on RHEL8 server:
#if the USRP address is in the xml then we are using an eth USRP (N3xx)
if
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'lte-softmodem'
)
or
(
self
.
air_interface
[
self
.
eNB_instance
]
==
'ocp-enb'
):
gNB
=
False
else
:
gNB
=
True
if
((
self
.
USRPIPAddress
!=
''
)
and
(
gNB
==
True
)):
mySSH
.
command
(
'echo '
+
lPassWord
+
' | echo "ulimit -c unlimited && sudo UHD_RFNOC_DIR=/usr/local/share/uhd/rfnoc ./ran_build/build/'
+
self
.
air_interface
[
self
.
eNB_instance
]
+
' -O '
+
lSourcePath
+
'/'
+
ci_full_config_file
+
extra_options
+
'" > ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
#otherwise the regular command is ok
else
:
mySSH
.
command
(
'echo "ulimit -c unlimited && ./ran_build/build/'
+
self
.
air_interface
[
self
.
eNB_instance
]
+
' -O '
+
lSourcePath
+
'/'
+
ci_full_config_file
+
extra_options
+
'" > ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
mySSH
.
command
(
'chmod 775 ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
lPassWord
+
' | sudo -S rm -Rf enb_'
+
self
.
testCase_id
+
'.log'
,
'\$'
,
5
)
mySSH
.
command
(
'echo $USER; nohup sudo -E ./my-lte-softmodem-run'
+
str
(
self
.
eNB_instance
)
+
'.sh > '
+
lSourcePath
+
'/cmake_targets/enb_'
+
self
.
testCase_id
+
'.log 2>&1 &'
,
lUserName
,
10
)
...
...
ci-scripts/sshconnection.py
View file @
bd16c4a9
...
...
@@ -163,6 +163,18 @@ class SSHConnection():
lSsh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
myHost
,
commandline
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
self
.
cmd2Results
=
str
(
lSsh
.
stdout
.
readlines
())
def
command3
(
self
,
commandline
,
timeout
,
silent
=
False
):
if
not
silent
:
logging
.
debug
(
commandline
)
self
.
cmd2Results
=
''
myHost
=
self
.
username
+
'@'
+
self
.
ipaddress
# CAUTION: THIS METHOD IMPLIES THAT THERE ARE VALID SSH KEYS
# BETWEEN THE PYTHON EXECUTOR NODE AND THE REMOTE HOST
# OTHERWISE IT WON'T WORK
lSsh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
myHost
,
commandline
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
return
lSsh
.
stdout
.
readlines
()
def
close
(
self
):
self
.
ssh
.
timeout
=
5
self
.
ssh
.
sendline
(
'exit'
)
...
...
ci-scripts/xml_files/fr1_gnb_build.xml
View file @
bd16c4a9
...
...
@@ -26,7 +26,6 @@
<htmlTabIcon>
wrench
</htmlTabIcon>
<TestCaseRequestedList>
000001
000002
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
...
...
@@ -36,7 +35,6 @@
<Build_eNB_args>
-w USRP -c --gNB --ninja
</Build_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<backgroundBuild>
True
</backgroundBuild>
<forced_workspace_cleanup>
True
</forced_workspace_cleanup>
</testCase>
...
...
ci-scripts/xml_files/fr1_sa_quectel.xml
View file @
bd16c4a9
...
...
@@ -31,6 +31,9 @@
010000
000001
050000
050001
070000
070001
000001
010002
080000
...
...
@@ -55,7 +58,7 @@
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa -q
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf --sa -q
--usrp-tx-thread-config 1 --thread-pool 0,2,4,6
</Initialize_eNB_args>
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
nr
</air_interface>
...
...
@@ -81,34 +84,26 @@
<desc>
Ping: 20pings in 20sec
</desc>
<id>
nrmodule2_quectel
</id>
<ping_args>
-c 20
</ping_args>
<ping_packetloss_threshold>
50
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"050001"
>
<class>
Ping
</class>
<desc>
Ping: 100pings in 20sec
</desc>
<id>
nrmodule2_quectel
</id>
<ping_args>
-c 100 -i 0.2
</ping_args>
<ping_packetloss_threshold>
50
</ping_packetloss_threshold>
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/
20
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
20
M -t 60
</iperf_args>
<desc>
iperf (DL/
5
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
5
M -t 60
</iperf_args>
<direction>
DL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
0
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070001"
>
<class>
Iperf
</class>
<desc>
iperf (UL/
3
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
3
M -t 60
</iperf_args>
<desc>
iperf (UL/
1
Mbps/UDP)(60 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b
1
M -t 60
</iperf_args>
<direction>
UL
</direction>
<id>
nrmodule2_quectel
</id>
<iperf_packetloss_threshold>
5
0
</iperf_packetloss_threshold>
<iperf_packetloss_threshold>
5
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
...
...
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