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
常顺宇
OpenXG-RAN
Commits
4080cfd8
Commit
4080cfd8
authored
Aug 03, 2018
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CI: adding UL iperf support
Signed-off-by:
Raphael Defosseux
<
raphael.defosseux@eurecom.fr
>
parent
9db654d6
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
148 additions
and
75 deletions
+148
-75
ci-scripts/main.py
ci-scripts/main.py
+124
-72
ci-scripts/xml_files/enb_usrp210_band7.xml
ci-scripts/xml_files/enb_usrp210_band7.xml
+24
-3
No files found.
ci-scripts/main.py
View file @
4080cfd8
...
...
@@ -277,7 +277,7 @@ class SSHConnection():
self
.
CreateHtmlTestRow
(
config_file
,
'eNB not showing got sync!'
,
0
)
# Not getting got sync is bypassed for the moment
#sys.exit(1)
self
.
command
(
'stdbuf -o0 cat enb_'
+
SSH
.
testCase_id
+
'.log'
,
'\$'
,
10
)
self
.
command
(
'stdbuf -o0 cat enb_'
+
SSH
.
testCase_id
+
'.log
| grep -i sync
'
,
'\$'
,
10
)
result
=
re
.
search
(
'got sync'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
time
.
sleep
(
6
)
...
...
@@ -540,48 +540,19 @@ class SSHConnection():
job
.
join
()
self
.
CreateHtmlTestRow
(
self
.
ping_args
,
'OK'
,
0
)
def
Iperf_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
ue_num
):
try
:
useIperf3
=
False
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
# if by chance ADB server and EPC are on the same remote host, at least log collection will take of it
self
.
command
(
'if [ ! -d '
+
self
.
EPCSourceCodePath
+
'/scripts ]; then mkdir -p '
+
self
.
EPCSourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
# Checking if iperf / iperf3 are installed
self
.
command
(
'adb -s '
+
device_id
+
' shell "ls /data/local/tmp"'
,
'\$'
,
5
)
result
=
re
.
search
(
'iperf3'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
result
=
re
.
search
(
'iperf'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Neither iperf nor iperf3 installed on UE!
\u001B
[0m'
)
sys
.
exit
(
1
)
else
:
useIperf3
=
True
if
(
useIperf3
):
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/iperf3 -s &'
,
'\$'
,
5
)
else
:
self
.
command
(
'rm -f /tmp/iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
self
.
command
(
'echo $USER; nohup adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
ADBUserName
,
5
)
time
.
sleep
(
0.5
)
self
.
close
()
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd scripts'
,
'\$'
,
5
)
def
Iperf_ComputeTime
(
self
):
result
=
re
.
search
(
'-t (?P<iperf_time>\d+)'
,
str
(
self
.
iperf_args
))
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Iperf time Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
iperf_time
=
result
.
group
(
'iperf_time'
)
time
.
sleep
(
0.5
)
return
result
.
group
(
'iperf_time'
)
def
Iperf_ComputeModifiedBW
(
self
,
ue_num
):
result
=
re
.
search
(
'-b (?P<iperf_bandwidth>[0-9\.]+)[KMG]'
,
str
(
self
.
iperf_args
))
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Iperf bandwidth Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
iperf_bandwidth
=
result
.
group
(
'iperf_bandwidth'
)
time
.
sleep
(
0.5
)
iperf_bandwidth_new
=
float
(
iperf_bandwidth
)
/
ue_num
iperf_bandwidth_str
=
'-b '
+
iperf_bandwidth
iperf_bandwidth_str_new
=
'-b '
+
str
(
iperf_bandwidth_new
)
...
...
@@ -589,23 +560,25 @@ class SSHConnection():
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Calculate Iperf bandwidth Failed!
\u001B
[0m'
)
sys
.
exit
(
1
)
return
result
self
.
command
(
'rm -f iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
if
(
useIperf3
):
self
.
command
(
'stdbuf -o0 iperf3 -c '
+
UE_IPAddress
+
' '
+
result
+
' 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
result
=
re
.
search
(
'(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)
\\\\
r
\\\\
n(?:|\[ *\d+\] Sent \d+ datagrams)
\\\\
r
\\\\
niperf Done\.'
,
str
(
self
.
ssh
.
before
))
def
Iperf_analyzeV2Output
(
self
,
lock
,
UE_IPAddress
):
result
=
re
.
search
(
'Server Report:'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
result
=
re
.
search
(
'(?P<error>iperf: error - [a-zA-Z0-9 :]+)
'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'read failed: Connection refused
'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
logging
.
debug
(
'
\u001B
[1;37;41m '
+
result
.
group
(
'error'
)
+
'
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m Could not connect to iperf server!
\u001B
[0m'
)
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Bitrate and/or Packet Loss
Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m Server Report and Connection refused
Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
result
=
re
.
search
(
'Server Report:
\\\\
r
\\\\
n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/.\d+) (\((?P<packetloss>[0-9\.]+)%\))'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
bitrate
=
result
.
group
(
'bitrate'
)
packetloss
=
result
.
group
(
'packetloss'
)
jitter
=
result
.
group
(
'jitter'
)
lock
.
acquire
()
logging
.
debug
(
'
\u001B
[1;37;44m iperf result ('
+
UE_IPAddress
+
')
\u001B
[0m'
)
if
bitrate
is
not
None
:
logging
.
debug
(
'
\u001B
[1;34m Bitrate : '
+
bitrate
+
'
\u001B
[0m'
)
if
packetloss
is
not
None
:
logging
.
debug
(
'
\u001B
[1;34m Packet Loss : '
+
packetloss
+
'%
\u001B
[0m'
)
...
...
@@ -613,26 +586,23 @@ class SSHConnection():
logging
.
debug
(
'
\u001B
[1;37;41m Packet Loss too high
\u001B
[0m'
)
lock
.
release
()
sys
.
exit
(
1
)
if
jitter
is
not
None
:
logging
.
debug
(
'
\u001B
[1;34m Jitter : '
+
jitter
+
'
\u001B
[0m'
)
lock
.
release
()
else
:
self
.
command
(
'stdbuf -o0 iperf -c '
+
UE_IPAddress
+
' '
+
result
+
' 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
result
=
re
.
search
(
'Server Report:'
,
str
(
self
.
ssh
.
before
))
def
Iperf_analyzeV3Output
(
self
,
lock
,
UE_IPAddress
):
result
=
re
.
search
(
'(?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?:|[0-9\.]+ ms +\d+\/\d+ \((?P<packetloss>[0-9\.]+)%\)) +(?:|receiver)
\\\\
r
\\\\
n(?:|\[ *\d+\] Sent \d+ datagrams)
\\\\
r
\\\\
niperf Done\.'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
result
=
re
.
search
(
'read failed: Connection refused
'
,
str
(
self
.
ssh
.
before
))
result
=
re
.
search
(
'(?P<error>iperf: error - [a-zA-Z0-9 :]+)
'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Could not connect to iperf server!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m '
+
result
.
group
(
'error'
)
+
'
\u001B
[0m'
)
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Server Report and Connection refused
Not Found!
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1;37;41m Bitrate and/or Packet Loss
Not Found!
\u001B
[0m'
)
sys
.
exit
(
1
)
result
=
re
.
search
(
'Server Report:
\\\\
r
\\\\
n(?:|\[ *\d+\].*) (?P<bitrate>[0-9\.]+ [KMG]bits\/sec) +(?P<jitter>[0-9\.]+ ms) +(\d+\/.\d+) (\((?P<packetloss>[0-9\.]+)%\))'
,
str
(
self
.
ssh
.
before
))
if
result
is
not
None
:
bitrate
=
result
.
group
(
'bitrate'
)
packetloss
=
result
.
group
(
'packetloss'
)
jitter
=
result
.
group
(
'jitter'
)
lock
.
acquire
()
logging
.
debug
(
'
\u001B
[1;37;44m iperf result ('
+
UE_IPAddress
+
')
\u001B
[0m'
)
if
bitrate
is
not
None
:
logging
.
debug
(
'
\u001B
[1;34m Bitrate : '
+
bitrate
+
'
\u001B
[0m'
)
if
packetloss
is
not
None
:
logging
.
debug
(
'
\u001B
[1;34m Packet Loss : '
+
packetloss
+
'%
\u001B
[0m'
)
...
...
@@ -640,9 +610,91 @@ class SSHConnection():
logging
.
debug
(
'
\u001B
[1;37;41m Packet Loss too high
\u001B
[0m'
)
lock
.
release
()
sys
.
exit
(
1
)
if
jitter
is
not
None
:
logging
.
debug
(
'
\u001B
[1;34m Jitter : '
+
jitter
+
'
\u001B
[0m'
)
lock
.
release
()
def
Iperf_UL_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
):
ipnumbers
=
UE_IPAddress
.
split
(
'.'
)
if
(
len
(
ipnumbers
)
==
4
):
ipnumbers
[
3
]
=
'1'
EPC_Iperf_UE_IPAddress
=
ipnumbers
[
0
]
+
'.'
+
ipnumbers
[
1
]
+
'.'
+
ipnumbers
[
2
]
+
'.'
+
ipnumbers
[
3
]
# Launch iperf server on EPC side
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
self
.
command
(
'rm -f iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
port
=
5001
+
idx
self
.
command
(
'echo $USER; nohup iperf -u -s -i 1 -p '
+
str
(
port
)
+
' > iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
EPCUserName
,
5
)
time
.
sleep
(
0.5
)
self
.
close
()
# Launch iperf client on UE
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
iperf_time
=
self
.
Iperf_ComputeTime
()
time
.
sleep
(
0.5
)
modified_options
=
self
.
Iperf_ComputeModifiedBW
(
ue_num
)
time
.
sleep
(
0.5
)
self
.
command
(
'rm -f iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -c '
+
EPC_Iperf_UE_IPAddress
+
' '
+
modified_options
+
' -p '
+
str
(
port
)
+
'" 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
self
.
Iperf_analyzeV2Output
(
lock
,
UE_IPAddress
)
# Launch iperf server on EPC side
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'killall --signal SIGKILL iperf'
,
self
.
EPCUserName
,
5
)
self
.
close
()
def
Iperf_common
(
self
,
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
):
try
:
useIperf3
=
False
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
# if by chance ADB server and EPC are on the same remote host, at least log collection will take of it
self
.
command
(
'if [ ! -d '
+
self
.
EPCSourceCodePath
+
'/scripts ]; then mkdir -p '
+
self
.
EPCSourceCodePath
+
'/scripts ; fi'
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
# Checking if iperf / iperf3 are installed
self
.
command
(
'adb -s '
+
device_id
+
' shell "ls /data/local/tmp"'
,
'\$'
,
5
)
result
=
re
.
search
(
'iperf3'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
result
=
re
.
search
(
'iperf'
,
str
(
self
.
ssh
.
before
))
if
result
is
None
:
logging
.
debug
(
'
\u001B
[1;37;41m Neither iperf nor iperf3 installed on UE!
\u001B
[0m'
)
sys
.
exit
(
1
)
else
:
useIperf3
=
True
# in case of iperf, UL has its own function
if
(
not
useIperf3
):
result
=
re
.
search
(
'-R'
,
str
(
self
.
iperf_args
))
if
result
is
not
None
:
self
.
close
()
self
.
Iperf_UL_common
(
lock
,
UE_IPAddress
,
device_id
,
idx
,
ue_num
)
return
if
(
useIperf3
):
self
.
command
(
'stdbuf -o0 adb -s '
+
device_id
+
' shell /data/local/tmp/iperf3 -s &'
,
'\$'
,
5
)
else
:
self
.
command
(
'rm -f iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
self
.
command
(
'echo $USER; nohup adb -s '
+
device_id
+
' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log &'
,
self
.
ADBUserName
,
5
)
time
.
sleep
(
0.5
)
self
.
close
()
self
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
self
.
command
(
'cd '
+
self
.
EPCSourceCodePath
+
'/scripts'
,
'\$'
,
5
)
iperf_time
=
self
.
Iperf_ComputeTime
()
time
.
sleep
(
0.5
)
modified_options
=
self
.
Iperf_ComputeModifiedBW
(
ue_num
)
time
.
sleep
(
0.5
)
self
.
command
(
'rm -f iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
5
)
if
(
useIperf3
):
self
.
command
(
'stdbuf -o0 iperf3 -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
self
.
Iperf_analyzeV3Output
(
lock
,
UE_IPAddress
)
else
:
self
.
command
(
'stdbuf -o0 iperf -c '
+
UE_IPAddress
+
' '
+
modified_options
+
' 2>&1 | stdbuf -o0 tee -a iperf_'
+
SSH
.
testCase_id
+
'_'
+
device_id
+
'.log'
,
'\$'
,
int
(
iperf_time
)
*
5.0
)
self
.
Iperf_analyzeV2Output
(
lock
,
UE_IPAddress
)
self
.
close
()
self
.
open
(
self
.
ADBIPAddress
,
self
.
ADBUserName
,
self
.
ADBPassword
)
...
...
@@ -668,7 +720,7 @@ class SSHConnection():
lock
=
Lock
()
for
UE_IPAddress
in
self
.
UEIPAddresses
:
device_id
=
self
.
UEDevices
[
i
]
p
=
Process
(
target
=
SSH
.
Iperf_common
,
args
=
(
lock
,
UE_IPAddress
,
device_id
,
ue_num
,))
p
=
Process
(
target
=
SSH
.
Iperf_common
,
args
=
(
lock
,
UE_IPAddress
,
device_id
,
i
,
ue_num
,))
p
.
daemon
=
True
p
.
start
()
multi_jobs
.
append
(
p
)
...
...
ci-scripts/xml_files/enb_usrp210_band7.xml
View file @
4080cfd8
...
...
@@ -21,7 +21,7 @@
-->
<testCaseList>
<TestCaseRequestedList>
010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040
401 040201 030201 030111 040301 040511 040611 040612 040613 040401 040201 030201 030112 040301 040512 040621 040622 040623
040401 040201 030201
</TestCaseRequestedList>
<TestCaseRequestedList>
010101 050101 060101 070101 040101 030101 040301 040501 040601 040602 040603 040
641 040401 040201 030201 030111 040301 040511 040611 040612 040613 040651 040401 040201 030201 030121 040301 040521 040621 040622 040623 040661
040401 040201 030201
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"010101"
>
...
...
@@ -42,7 +42,7 @@
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf
</Initialize_eNB_args>
</testCase>
<testCase
id=
"0301
12
"
>
<testCase
id=
"0301
21
"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize eNB (FDD/Band7/20MHz)
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf
</Initialize_eNB_args>
...
...
@@ -87,7 +87,7 @@
<ping_packetloss_threshold>
5
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"0405
12
"
>
<testCase
id=
"0405
21
"
>
<class>
Ping
</class>
<desc>
ping (20MHz - 20 sec)
</desc>
<ping_args>
-c 20
</ping_args>
...
...
@@ -115,6 +115,13 @@
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040641"
>
<class>
Iperf
</class>
<desc>
iperf (5MHz - UL/9Mbps/UDP)(60 sec)
</desc>
<iperf_args>
-u -b 9M -t 60 -i 1 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040611"
>
<class>
Iperf
</class>
<desc>
iperf (10MHz - DL/10Mbps/UDP)(60 sec)
</desc>
...
...
@@ -136,6 +143,13 @@
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040651"
>
<class>
Iperf
</class>
<desc>
iperf (10MHz - UL/20Mbps/UDP)(60 sec)
</desc>
<iperf_args>
-u -b 20M -t 60 -i 1 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040621"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - DL/20Mbps/UDP)(60 sec)
</desc>
...
...
@@ -157,6 +171,13 @@
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"040661"
>
<class>
Iperf
</class>
<desc>
iperf (20MHz - UL/20Mbps/UDP)(60 sec)
</desc>
<iperf_args>
-u -b 20M -t 60 -i 1 -R
</iperf_args>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
</testCase>
<testCase
id=
"050101"
>
<class>
Initialize_HSS
</class>
<desc>
Initialize HSS
</desc>
...
...
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