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
Michael Black
OpenXG UE
Commits
bae4e614
Commit
bae4e614
authored
Apr 13, 2021
by
hardy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tentative to improve Module control encapsulation
parent
bf637629
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
88 additions
and
59 deletions
+88
-59
ci-scripts/ci_ueinfra.yaml
ci-scripts/ci_ueinfra.yaml
+4
-1
ci-scripts/cls_module_ue.py
ci-scripts/cls_module_ue.py
+45
-28
ci-scripts/cls_oaicitest.py
ci-scripts/cls_oaicitest.py
+6
-6
ci-scripts/main.py
ci-scripts/main.py
+1
-1
ci-scripts/xml_files/fr1_nsa_quectel.xml
ci-scripts/xml_files/fr1_nsa_quectel.xml
+32
-23
No files found.
ci-scripts/ci_ueinfra.yaml
View file @
bae4e614
...
...
@@ -2,9 +2,12 @@ idefix:
ID
:
idefix
State
:
enabled
Kind
:
quectel
Process
:
quectel-CM
Process
:
Name
:
quectel-CM
Cmd
:
/home/oaicicd/quectel-CM/quectel-CM -s oai.ipv4 -4
WakeupScript
:
ci_ctl_qtel.py /dev/ttyUSB2 wup
DetachScript
:
ci_ctl_qtel.py /dev/ttyUSB2 detach
PLMN
:
22201
UENetwork
:
wwan0
HostIPAddress
:
192.168.18.188
HostUsername
:
oaicicd
...
...
ci-scripts/cls_module_ue.py
View file @
bae4e614
...
...
@@ -56,7 +56,8 @@ class Module_UE:
for
k
,
v
in
Module
.
items
():
setattr
(
self
,
k
,
v
)
self
.
UEIPAddress
=
""
#dictionary linking command names and related module scripts
self
.
cmd_dict
=
{
"wup"
:
self
.
WakeupScript
,
"detach"
:
self
.
DetachScript
}
#dictionary of function scripts
...
...
@@ -65,56 +66,72 @@ class Module_UE:
#-----------------$
#this method checks if the specified Process is running on the server hosting the module
def
CheckIsModule
(
self
):
#if not it will be started
def
CheckCMProcess
(
self
):
HOST
=
self
.
HostIPAddress
COMMAND
=
"ps aux | grep "
+
self
.
Process
+
" | grep -v grep "
COMMAND
=
"ps aux | grep "
+
self
.
Process
[
'Name'
]
+
" | grep -v grep "
logging
.
debug
(
COMMAND
)
ssh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
HOST
,
COMMAND
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
result
=
ssh
.
stdout
.
readlines
()
if
len
(
result
)
!=
0
:
logging
.
debug
(
self
.
Process
+
" process found"
)
logging
.
debug
(
self
.
Process
[
'Name'
]
+
" process found"
)
return
True
else
:
logging
.
debug
(
self
.
Process
+
" process NOT found"
)
return
False
else
:
#start process and check again
logging
.
debug
(
self
.
Process
[
'Name'
]
+
" process NOT found"
)
#starting the process
logging
.
debug
(
'Starting '
+
self
.
Process
[
'Name'
])
mySSH
=
sshconnection
.
SSHConnection
()
mySSH
.
open
(
self
.
HostIPAddress
,
self
.
HostUsername
,
self
.
HostPassword
)
mySSH
.
command
(
'echo '
+
self
.
HostPassword
+
' | sudo -S '
+
self
.
Process
[
'Cmd'
]
+
' &'
,
'\$'
,
5
)
mySSH
.
close
()
#checking the process
HOST
=
self
.
HostIPAddress
COMMAND
=
"ps aux | grep "
+
self
.
Process
[
'Name'
]
+
" | grep -v grep "
logging
.
debug
(
COMMAND
)
ssh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
HOST
,
COMMAND
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
result
=
ssh
.
stdout
.
readlines
()
if
len
(
result
)
!=
0
:
logging
.
debug
(
self
.
Process
[
'Name'
]
+
" process found"
)
return
True
else
:
logging
.
debug
(
self
.
Process
[
'Name'
]
+
" process NOT found"
)
return
False
#Wakeup/Detach can probably be improved with encapsulation of the command such def Command(self, command)
#this method wakes up the module by calling the specified python script
def
WakeUp
(
self
):
#Generic command function, using function pointers dictionary
def
Command
(
self
,
cmd
):
mySSH
=
sshconnection
.
SSHConnection
()
mySSH
.
open
(
self
.
HostIPAddress
,
self
.
HostUsername
,
self
.
HostPassword
)
mySSH
.
command
(
'echo '
+
self
.
HostPassword
+
' | sudo -S python3 '
+
self
.
WakeupScript
+
' '
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
self
.
HostPassword
+
' | sudo -S python3 '
+
self
.
cmd_dict
[
cmd
]
,
'\$'
,
5
)
time
.
sleep
(
5
)
logging
.
debug
(
"Module
wake-up"
)
logging
.
debug
(
"Module
"
+
cmd
)
mySSH
.
close
()
#this method detaches the module by calling the specified python script
def
Detach
(
self
):
mySSH
=
sshconnection
.
SSHConnection
()
mySSH
.
open
(
self
.
HostIPAddress
,
self
.
HostUsername
,
self
.
HostPassword
)
mySSH
.
command
(
'echo '
+
self
.
HostPassword
+
' | sudo -S python3 '
+
self
.
DetachScript
+
' '
,
'\$'
,
5
)
time
.
sleep
(
5
)
logging
.
debug
(
"Module detach"
)
mySSH
.
close
()
#this method retrieves the Module IP address (not the Host IP address)
def
GetModuleIPAddress
(
self
):
HOST
=
self
.
HostIPAddress
COMMAND
=
"ip a show dev "
+
self
.
UENetwork
+
" | grep inet | grep "
+
self
.
UENetwork
ssh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
HOST
,
COMMAND
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
response
=
ssh
.
stdout
.
readlines
()
if
len
(
response
)
!=
0
:
response
=
[]
tentative
=
10
while
(
len
(
response
)
==
0
)
and
(
tentative
>
0
):
COMMAND
=
"ip a show dev "
+
self
.
UENetwork
+
" | grep inet | grep "
+
self
.
UENetwork
logging
.
debug
(
COMMAND
)
ssh
=
subprocess
.
Popen
([
"ssh"
,
"%s"
%
HOST
,
COMMAND
],
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
response
=
ssh
.
stdout
.
readlines
()
tentative
-=
1
time
.
sleep
(
10
)
if
(
tentative
==
0
)
and
(
len
(
response
)
==
0
):
logging
.
debug
(
'
\u001B
[1;37;41m Module IP Address Not Found! Time expired
\u001B
[0m'
)
return
-
1
else
:
#check response
result
=
re
.
search
(
'inet (?P<moduleipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)'
,
response
[
0
].
decode
(
"utf-8"
)
)
if
result
is
not
None
:
if
result
.
group
(
'moduleipaddress'
)
is
not
None
:
self
.
UEIPAddress
=
result
.
group
(
'moduleipaddress'
)
logging
.
debug
(
'
\u001B
[1mUE Module IP Address is '
+
self
.
UEIPAddress
+
'
\u001B
[0m'
)
return
0
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Module IP Address Not Found!
\u001B
[0m'
)
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Module IP Address Not Found!
\u001B
[0m'
)
else
:
logging
.
debug
(
'
\u001B
[1;37;41m Module IP Address Not Found!
\u001B
[0m'
)
return
-
1
...
...
ci-scripts/cls_oaicitest.py
View file @
bae4e614
...
...
@@ -386,13 +386,13 @@ class OaiCiTest():
else
:
#if an ID is specified, it is a module from the yaml infrastructure file
#RH
Module_UE
=
cls_module_ue
.
Module_UE
(
InfraUE
.
ci_ue_infra
[
self
.
ue_id
])
is_module
=
Module_UE
.
Check
IsModule
()
is_module
=
Module_UE
.
Check
CMProcess
()
if
is_module
:
Module_UE
.
WakeUp
(
)
Module_UE
.
Command
(
"wup"
)
Module_UE
.
GetModuleIPAddress
()
HTML
.
CreateHtmlTestRow
(
Module_UE
.
UEIPAddress
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
self
.
UEIPAddresses
.
append
(
Module_UE
.
UEIPAddress
)
logging
.
debug
(
'UEs IP addresses : '
+
self
.
UEIPAddresse
s
)
logging
.
debug
(
'UE IP addresss : '
+
Module_UE
.
UEIPAddres
s
)
def
InitializeOAIUE
(
self
,
HTML
,
RAN
,
EPC
,
COTS_UE
):
if
self
.
UEIPAddress
==
''
or
self
.
UEUserName
==
''
or
self
.
UEPassword
==
''
or
self
.
UESourceCodePath
==
''
:
...
...
@@ -1039,7 +1039,7 @@ class OaiCiTest():
except
:
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
def
DetachUE
(
self
,
HTML
,
RAN
,
EPC
,
COTS_UE
):
def
DetachUE
(
self
,
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
):
if
self
.
ue_id
==
''
:
#no ID specified, then it is a COTS controlled by ADB
if
self
.
ADBIPAddress
==
''
or
self
.
ADBUserName
==
''
or
self
.
ADBPassword
==
''
:
HELP
.
GenericHelp
(
CONST
.
Version
)
...
...
@@ -1073,9 +1073,9 @@ class OaiCiTest():
cnt
+=
1
else
:
#if an ID is specified, it is a module from the yaml infrastructure file
Module_UE
=
cls_module_ue
.
Module_UE
(
InfraUE
.
ci_ue_infra
[
self
.
ue_id
])
is_module
=
Module_UE
.
Check
IsModule
()
is_module
=
Module_UE
.
Check
CMProcess
()
if
is_module
:
Module_UE
.
Detach
(
)
Module_UE
.
Command
(
"detach"
)
Module_UE
.
GetModuleIPAddress
()
HTML
.
CreateHtmlTestRow
(
Module_UE
.
UEIPAddress
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
...
...
ci-scripts/main.py
View file @
bae4e614
...
...
@@ -717,7 +717,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
elif
action
==
'Attach_UE'
:
CiTestObj
.
AttachUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
)
elif
action
==
'Detach_UE'
:
CiTestObj
.
DetachUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
)
CiTestObj
.
DetachUE
(
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
)
elif
action
==
'DataDisable_UE'
:
CiTestObj
.
DataDisableUE
(
HTML
)
elif
action
==
'DataEnable_UE'
:
...
...
ci-scripts/xml_files/fr1_nsa_quectel.xml
View file @
bae4e614
...
...
@@ -29,7 +29,7 @@
040000
000001
010000
00000
1
00000
2
050000
050001
000001
...
...
@@ -37,6 +37,8 @@
000001
070001
000001
010002
000001
080001
080000
...
...
@@ -46,14 +48,14 @@
<testCase
id=
"010000"
>
<class>
Initialize_UE
</class>
<desc>
Initialize Quectel
</desc>
<id>
idefix
</id>
<id>
idefix
</id>
</testCase>
<testCase
id=
"010002"
>
<class>
Detach_UE
</class>
<desc>
Detach UE
</desc>
<id>
idefix
</id>
<id>
idefix
</id>
</testCase>
...
...
@@ -64,13 +66,13 @@
<eNB_instance>
0
</eNB_instance>
<eNB_serverId>
0
</eNB_serverId>
<air_interface>
lte
</air_interface>
</testCase>
</testCase>
<testCase
id=
"040000"
>
<class>
Initialize_eNB
</class>
<desc>
Initialize gNB
</desc>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrp
b210.conf -E
</Initialize_eNB_args>
<Initialize_eNB_args>
-O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrp
n310.conf -q
</Initialize_eNB_args>
<eNB_instance>
1
</eNB_instance>
<eNB_serverId>
1
</eNB_serverId>
<air_interface>
nr
</air_interface>
...
...
@@ -79,9 +81,16 @@
<testCase
id=
"000001"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
10
</idle_sleep_time_in_sec>
<idle_sleep_time_in_sec>
5
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"000002"
>
<class>
IdleSleep
</class>
<desc>
Sleep
</desc>
<idle_sleep_time_in_sec>
30
</idle_sleep_time_in_sec>
</testCase>
<testCase
id=
"050000"
>
<class>
Ping
</class>
<desc>
Ping: 20pings in 20sec
</desc>
...
...
@@ -98,25 +107,25 @@
<ping_packetloss_threshold>
50
</ping_packetloss_threshold>
</testCase>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/20Mbps/UDP)(20 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 20M -t 20 -i 1
</iperf_args>
<testCase
id=
"070000"
>
<class>
Iperf
</class>
<desc>
iperf (DL/20Mbps/UDP)(20 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 20M -t 20 -i 1
</iperf_args>
<direction>
DL
</direction>
<id>
idefix
</id>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070001"
>
<class>
Iperf
</class>
<desc>
iperf (UL/3Mbps/UDP)(20 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 3M -t 20 -i 1
</iperf_args>
<id>
idefix
</id>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"070001"
>
<class>
Iperf
</class>
<desc>
iperf (UL/3Mbps/UDP)(20 sec)(single-ue profile)
</desc>
<iperf_args>
-u -b 3M -t 20 -i 1
</iperf_args>
<direction>
UL
</direction>
<id>
idefix
</id>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<id>
idefix
</id>
<iperf_packetloss_threshold>
50
</iperf_packetloss_threshold>
<iperf_profile>
single-ue
</iperf_profile>
</testCase>
<testCase
id=
"080000"
>
...
...
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