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
81fcec5c
Commit
81fcec5c
authored
Apr 21, 2020
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CI: fix HTML footer generation
Signed-off-by:
Raphael Defosseux
<
raphael.defosseux@eurecom.fr
>
parent
66e36888
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
166 additions
and
154 deletions
+166
-154
ci-scripts/html.py
ci-scripts/html.py
+40
-50
ci-scripts/main.py
ci-scripts/main.py
+51
-46
ci-scripts/ran.py
ci-scripts/ran.py
+75
-58
No files found.
ci-scripts/html.py
View file @
81fcec5c
...
...
@@ -69,6 +69,14 @@ class HTMLManagement():
self
.
testCase_id
=
''
self
.
desc
=
''
self
.
OsVersion
=
[
''
,
''
]
self
.
KernelVersion
=
[
''
,
''
]
self
.
UhdVersion
=
[
''
,
''
]
self
.
UsrpBoard
=
[
''
,
''
]
self
.
CpuNb
=
[
''
,
''
]
self
.
CpuModel
=
[
''
,
''
]
self
.
CpuMHz
=
[
''
,
''
]
#-----------------------------------------------------------
# Setters and Getters
#-----------------------------------------------------------
...
...
@@ -90,8 +98,9 @@ class HTMLManagement():
def
SettestCase_id
(
self
,
tcid
):
self
.
testCase_id
=
tcid
def
GettestCase_id
(
self
):
return
self
.
testCase_id
def
SetranRepository
(
self
,
repository
):
self
.
ranRepository
=
repository
def
GetranRepository
(
self
):
...
...
@@ -102,7 +111,6 @@ class HTMLManagement():
def
GetranAllowMerge
(
self
):
return
self
.
ranAllowMerge
def
SetranBranch
(
self
,
branch
):
self
.
ranBranch
=
branch
def
GetranBranch
(
self
):
...
...
@@ -132,19 +140,29 @@ class HTMLManagement():
def
GetnbTestXMLfiles
(
self
):
return
self
.
nbTestXMLfiles
def
SettestXMLfiles
(
self
,
xmlFile
):
self
.
testXMLfiles
.
append
(
xmlFile
)
def
SethtmlTabRefs
(
self
,
tabRef
):
self
.
htmlTabRefs
.
append
(
tabRef
)
def
SethtmlTabNames
(
self
,
tabName
):
self
.
htmlTabNames
.
append
(
tabName
)
def
SethtmlTabIcons
(
self
,
tabIcon
):
self
.
htmlTabIcons
.
append
(
tabIcon
)
def
SetOsVersion
(
self
,
version
,
idx
):
self
.
OsVersion
[
idx
]
=
version
def
SetKernelVersion
(
self
,
version
,
idx
):
self
.
KernelVersion
[
idx
]
=
version
def
SetUhdVersion
(
self
,
version
,
idx
):
self
.
UhdVersion
[
idx
]
=
version
def
SetUsrpBoard
(
self
,
version
,
idx
):
self
.
UsrpBoard
[
idx
]
=
version
def
SetCpuNb
(
self
,
nb
,
idx
):
self
.
CpuNb
[
idx
]
=
nb
def
SetCpuModel
(
self
,
model
,
idx
):
self
.
CpuModel
[
idx
]
=
model
def
SetCpuMHz
(
self
,
freq
,
idx
):
self
.
CpuMHz
[
idx
]
=
freq
#-----------------------------------------------------------
# HTML structure creation functions
...
...
@@ -307,68 +325,40 @@ class HTMLManagement():
def
CreateHtmlFooter
(
self
,
passStatus
):
if
(
os
.
path
.
isfile
(
'test_results.html'
)):
logging
.
debug
(
'
\u001B
[1m----------------------------------------
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m Creating HTML footer
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m----------------------------------------
\u001B
[0m'
)
self
.
htmlFile
=
open
(
'test_results.html'
,
'a'
)
self
.
htmlFile
.
write
(
'</div>
\n
'
)
self
.
htmlFile
.
write
(
' <p></p>
\n
'
)
self
.
htmlFile
.
write
(
' <table class="table table-condensed">
\n
'
)
# GP machines = [ 'eNB', 'UE' ]
# GP for machine in machines:
#GP This needs to move back to main and be called before CreateHtmlFooter
res
=
self
.
reseNB
if
res
!=
-
1
:
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=8>'
+
str
(
'eNB'
)
+
' Server Characteristics</th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td>OS Version</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
OsVersion
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>Kernel Version</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
KernelVersion
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>UHD Version</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
UhdVersion
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>USRP Board</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
UsrpBoard
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td>Nb CPUs</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuNb
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>CPU Model Name</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuModel
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>CPU Frequency</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuMHz
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
machines
=
[
'eNB'
,
'UE'
]
for
machine
in
machines
:
if
machine
==
'eNB'
:
idx
=
0
else
:
idx
=
1
if
self
.
OsVersion
[
idx
]
==
''
:
continue
res
=
self
.
resUE
if
res
!=
-
1
:
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=8>'
+
str
(
'
UE
'
)
+
' Server Characteristics</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=8>'
+
str
(
'
eNB
'
)
+
' Server Characteristics</th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td>OS Version</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
OsVersion
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
OsVersion
[
idx
]
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>Kernel Version</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
KernelVersion
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
KernelVersion
[
idx
]
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>UHD Version</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
UhdVersion
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
UhdVersion
[
idx
]
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>USRP Board</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
UsrpBoard
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
UsrpBoard
[
idx
]
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td>Nb CPUs</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuNb
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuNb
[
idx
]
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>CPU Model Name</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuModel
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuModel
[
idx
]
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>CPU Frequency</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuMHz
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td><span class="label label-default">'
+
self
.
CpuMHz
[
idx
]
+
'</span></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
...
...
ci-scripts/main.py
View file @
81fcec5c
...
...
@@ -94,13 +94,6 @@ class OaiCiTest():
self
.
x2ENBConnectedUEs
=
[]
self
.
repeatCounts
=
[]
self
.
finalStatus
=
False
self
.
OsVersion
=
''
self
.
KernelVersion
=
''
self
.
UhdVersion
=
''
self
.
UsrpBoard
=
''
self
.
CpuNb
=
''
self
.
CpuModel
=
''
self
.
CpuMHz
=
''
self
.
UEIPAddress
=
''
self
.
UEUserName
=
''
self
.
UEPassword
=
''
...
...
@@ -2747,26 +2740,26 @@ class OaiCiTest():
def
AutoTerminateUEandeNB
(
self
):
if
(
self
.
ADBIPAddress
!=
'none'
):
self
.
testCase_id
=
'AUTO-KILL-UE'
RAN
.
SettestCase_id
(
self
.
testCase_id
)
HTML
.
SettestCase_id
(
self
.
testCase_id
)
self
.
desc
=
'Automatic Termination of UE'
self
.
ShowTestID
()
self
.
TerminateUE
()
if
(
self
.
Initialize_OAI_UE_args
!=
''
):
self
.
testCase_id
=
'AUTO-KILL-UE'
RAN
.
SettestCase_id
(
self
.
testCase_id
)
HTML
.
SettestCase_id
(
self
.
testCase_id
)
self
.
desc
=
'Automatic Termination of UE'
self
.
ShowTestID
()
self
.
TerminateOAIUE
()
if
(
RAN
.
GetInitialize_eNB_args
()
!=
''
):
self
.
testCase_id
=
'AUTO-KILL-eNB'
RAN
.
SettestCase_id
(
self
.
testCase_id
)
HTML
.
SettestCase_id
(
self
.
testCase_id
)
self
.
desc
=
'Automatic Termination of eNB'
self
.
ShowTestID
()
RAN
.
SeteNB_instance
(
'0'
)
RAN
.
TerminateeNB
()
if
RAN
.
GetflexranCtrlInstalled
()
and
RAN
.
GetflexranCtrlStarted
():
self
.
testCase_id
=
'AUTO-KILL-flexran-ctl'
RAN
.
SettestCase_id
(
self
.
testCase_id
)
HTML
.
SettestCase_id
(
self
.
testCase_id
)
self
.
desc
=
'Automatic Termination of FlexRan CTL'
self
.
ShowTestID
()
self
.
TerminateFlexranCtrl
()
...
...
@@ -2934,19 +2927,20 @@ class OaiCiTest():
def
RetrieveSystemVersion
(
self
,
machine
):
if
RAN
.
GeteNBIPAddress
()
==
'none'
or
self
.
UEIPAddress
==
'none'
:
self
.
OsVersion
=
'Ubuntu 16.04.5 LTS'
self
.
KernelVersion
=
'4.15.0-45-generic'
self
.
UhdVersion
=
'3.13.0.1-0'
self
.
UsrpBoard
=
'B210'
self
.
CpuNb
=
'4'
self
.
CpuModel
=
'Intel(R) Core(TM) i5-6200U'
self
.
CpuMHz
=
'2399.996 MHz'
HTML
.
SetOsVersion
(
'Ubuntu 16.04.5 LTS'
,
0
)
HTML
.
SetKernelVersion
(
'4.15.0-45-generic'
,
0
)
HTML
.
SetUhdVersion
(
'3.13.0.1-0'
,
0
)
HTML
.
SetUsrpBoard
(
'B210'
,
0
)
HTML
.
SetCpuNb
(
'4'
,
0
)
HTML
.
SetCpuModel
(
'Intel(R) Core(TM) i5-6200U'
,
0
)
HTML
.
SetCpuMHz
(
'2399.996 MHz'
,
0
)
return
0
if
machine
==
'eNB'
:
if
RAN
.
GeteNBIPAddress
()
!=
''
and
RAN
.
GeteNBUserName
()
!=
''
and
RAN
.
GeteNBPassword
()
!=
''
:
IPAddress
=
RAN
.
GeteNBIPAddress
()
UserName
=
RAN
.
GeteNBUserName
()
Password
=
RAN
.
GeteNBPassword
()
idx
=
0
else
:
return
-
1
if
machine
==
'UE'
:
...
...
@@ -2954,6 +2948,7 @@ class OaiCiTest():
IPAddress
=
self
.
UEIPAddress
UserName
=
self
.
UEUserName
Password
=
self
.
UEPassword
idx
=
1
else
:
return
-
1
...
...
@@ -2961,55 +2956,64 @@ class OaiCiTest():
SSH
.
command
(
'lsb_release -a'
,
'\$'
,
5
)
result
=
re
.
search
(
'Description:
\\\\
t(?P<os_type>[a-zA-Z0-9\-\_\.\ ]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
self
.
OsVersion
=
result
.
group
(
'os_type'
)
logging
.
debug
(
'OS is: '
+
self
.
OsVersion
)
OsVersion
=
result
.
group
(
'os_type'
)
logging
.
debug
(
'OS is: '
+
OsVersion
)
HTML
.
SetOsVersion
(
OsVersion
,
idx
)
else
:
SSH
.
command
(
'hostnamectl'
,
'\$'
,
5
)
result
=
re
.
search
(
'Operating System: (?P<os_type>[a-zA-Z0-9\-\_\.\ ]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
self
.
OsVersion
=
result
.
group
(
'os_type'
)
if
self
.
OsVersion
==
'CentOS Linux 7 '
:
OsVersion
=
result
.
group
(
'os_type'
)
if
OsVersion
==
'CentOS Linux 7 '
:
SSH
.
command
(
'cat /etc/redhat-release'
,
'\$'
,
5
)
result
=
re
.
search
(
'CentOS Linux release (?P<os_version>[0-9\.]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
self
.
OsVersion
=
self
.
OsVersion
.
replace
(
'7 '
,
result
.
group
(
'os_version'
))
logging
.
debug
(
'OS is: '
+
self
.
OsVersion
)
OsVersion
=
OsVersion
.
replace
(
'7 '
,
result
.
group
(
'os_version'
))
logging
.
debug
(
'OS is: '
+
OsVersion
)
HTML
.
SetOsVersion
(
OsVersion
,
idx
)
SSH
.
command
(
'uname -r'
,
'\$'
,
5
)
result
=
re
.
search
(
'uname -r
\\\\
r
\\\\
n(?P<kernel_version>[a-zA-Z0-9\-\_\.]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
self
.
KernelVersion
=
result
.
group
(
'kernel_version'
)
logging
.
debug
(
'Kernel Version is: '
+
self
.
KernelVersion
)
KernelVersion
=
result
.
group
(
'kernel_version'
)
logging
.
debug
(
'Kernel Version is: '
+
KernelVersion
)
HTML
.
SetKernelVersion
(
KernelVersion
,
idx
)
SSH
.
command
(
'dpkg --list | egrep --color=never libuhd003'
,
'\$'
,
5
)
result
=
re
.
search
(
'libuhd003:amd64 *(?P<uhd_version>[0-9\.]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
self
.
UhdVersion
=
result
.
group
(
'uhd_version'
)
logging
.
debug
(
'UHD Version is: '
+
self
.
UhdVersion
)
UhdVersion
=
result
.
group
(
'uhd_version'
)
logging
.
debug
(
'UHD Version is: '
+
UhdVersion
)
HTML
.
SetUhdVersion
(
UhdVersion
,
idx
)
else
:
SSH
.
command
(
'uhd_config_info --version'
,
'\$'
,
5
)
result
=
re
.
search
(
'UHD (?P<uhd_version>[a-zA-Z0-9\.\-]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
self
.
UhdVersion
=
result
.
group
(
'uhd_version'
)
logging
.
debug
(
'UHD Version is: '
+
self
.
UhdVersion
)
UhdVersion
=
result
.
group
(
'uhd_version'
)
logging
.
debug
(
'UHD Version is: '
+
UhdVersion
)
HTML
.
SetUhdVersion
(
UhdVersion
,
idx
)
SSH
.
command
(
'echo '
+
Password
+
' | sudo -S uhd_find_devices'
,
'\$'
,
60
)
usrp_boards
=
re
.
findall
(
'product: ([0-9A-Za-z]+)
\\\\
r
\\\\
n'
,
SSH
.
getBefore
())
count
=
0
for
board
in
usrp_boards
:
if
count
==
0
:
self
.
UsrpBoard
=
board
UsrpBoard
=
board
else
:
self
.
UsrpBoard
+=
','
+
board
UsrpBoard
+=
','
+
board
count
+=
1
if
count
>
0
:
logging
.
debug
(
'USRP Board(s) : '
+
self
.
UsrpBoard
)
logging
.
debug
(
'USRP Board(s) : '
+
UsrpBoard
)
HTML
.
SetUsrpBoard
(
UsrpBoard
,
idx
)
SSH
.
command
(
'lscpu'
,
'\$'
,
5
)
result
=
re
.
search
(
'CPU\(s\): *(?P<nb_cpus>[0-9]+).*Model name: *(?P<model>[a-zA-Z0-9\-\_\.\ \(\)]+).*CPU MHz: *(?P<cpu_mhz>[0-9\.]+)'
,
SSH
.
getBefore
())
if
result
is
not
None
:
self
.
CpuNb
=
result
.
group
(
'nb_cpus'
)
logging
.
debug
(
'nb_cpus: '
+
self
.
CpuNb
)
self
.
CpuModel
=
result
.
group
(
'model'
)
logging
.
debug
(
'model: '
+
self
.
CpuModel
)
self
.
CpuMHz
=
result
.
group
(
'cpu_mhz'
)
+
' MHz'
logging
.
debug
(
'cpu_mhz: '
+
self
.
CpuMHz
)
CpuNb
=
result
.
group
(
'nb_cpus'
)
logging
.
debug
(
'nb_cpus: '
+
CpuNb
)
HTML
.
SetCpuNb
(
CpuNb
,
idx
)
CpuModel
=
result
.
group
(
'model'
)
logging
.
debug
(
'model: '
+
CpuModel
)
HTML
.
SetCpuModel
(
CpuModel
,
idx
)
CpuMHz
=
result
.
group
(
'cpu_mhz'
)
+
' MHz'
logging
.
debug
(
'cpu_mhz: '
+
CpuMHz
)
HTML
.
SetCpuMHz
(
CpuMHz
,
idx
)
SSH
.
close
()
#-----------------------------------------------------------
...
...
@@ -3199,6 +3203,8 @@ RAN = ran.RANManagement()
HTML
=
html
.
HTMLManagement
()
EPC
.
SetHtmlObj
(
HTML
)
RAN
.
SetHtmlObj
(
HTML
)
RAN
.
SetEpcObj
(
EPC
)
argvs
=
sys
.
argv
argc
=
len
(
argvs
)
...
...
@@ -3293,19 +3299,15 @@ while len(argvs) > 1:
elif
re
.
match
(
'^\-\-EPCIPAddress=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-EPCIPAddress=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
EPC
.
SetIPAddress
(
matchReg
.
group
(
1
))
RAN
.
SetIPAddress
(
matchReg
.
group
(
1
))
elif
re
.
match
(
'^\-\-EPCUserName=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-EPCUserName=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
EPC
.
SetUserName
(
matchReg
.
group
(
1
))
RAN
.
SetUserName
(
matchReg
.
group
(
1
))
elif
re
.
match
(
'^\-\-EPCPassword=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-EPCPassword=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
EPC
.
SetPassword
(
matchReg
.
group
(
1
))
RAN
.
SetPassword
(
matchReg
.
group
(
1
))
elif
re
.
match
(
'^\-\-EPCSourceCodePath=(.+)$'
,
myArgv
,
re
.
IGNORECASE
):
matchReg
=
re
.
match
(
'^\-\-EPCSourceCodePath=(.+)$'
,
myArgv
,
re
.
IGNORECASE
)
EPC
.
SetSourceCodePath
(
matchReg
.
group
(
1
))
RAN
.
SetSourceCodePath
(
matchReg
.
group
(
1
))
elif
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
)
or
re
.
match
(
'OAI-Rel14-CUPS'
,
matchReg
.
group
(
1
),
re
.
IGNORECASE
):
...
...
@@ -3466,8 +3468,12 @@ elif re.match('^InitiateHtml$', mode, re.IGNORECASE):
HTML
.
SethtmlNb_CATM_Modules
(
len
(
CiTestObj
.
CatMDevices
))
HTML
.
CreateHtmlHeader
(
CiTestObj
.
ADBIPAddress
)
elif
re
.
match
(
'^FinalizeHtml$'
,
mode
,
re
.
IGNORECASE
):
HTML
.
SetreseNB
(
RetrieveSystemVersion
(
'eNB'
))
HTML
.
SetresUE
(
RetrieveSystemVersion
(
'UE'
))
logging
.
debug
(
'
\u001B
[1m----------------------------------------
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m Creating HTML footer
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m----------------------------------------
\u001B
[0m'
)
CiTestObj
.
RetrieveSystemVersion
(
'eNB'
)
CiTestObj
.
RetrieveSystemVersion
(
'UE'
)
HTML
.
CreateHtmlFooter
(
CiTestObj
.
finalStatus
)
elif
re
.
match
(
'^TesteNB$'
,
mode
,
re
.
IGNORECASE
)
or
re
.
match
(
'^TestUE$'
,
mode
,
re
.
IGNORECASE
):
if
re
.
match
(
'^TesteNB$'
,
mode
,
re
.
IGNORECASE
):
...
...
@@ -3575,7 +3581,6 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
if
test_case_id
!=
id
:
continue
CiTestObj
.
testCase_id
=
id
RAN
.
SettestCase_id
(
CiTestObj
.
testCase_id
)
HTML
.
SettestCase_id
(
CiTestObj
.
testCase_id
)
CiTestObj
.
desc
=
test
.
findtext
(
'desc'
)
HTML
.
Setdesc
(
CiTestObj
.
desc
)
...
...
ci-scripts/ran.py
View file @
81fcec5c
...
...
@@ -46,10 +46,7 @@ import sshconnection as SSH
import
epc
import
helpreadme
as
HELP
import
constants
as
CONST
import
html
as
HTML
EPC
=
epc
.
EPCManagement
()
import
html
#-----------------------------------------------------------
# Class Declaration
...
...
@@ -90,23 +87,19 @@ class RANManagement():
self
.
eNBstatuses
=
[
-
1
,
-
1
,
-
1
]
self
.
flexranCtrlInstalled
=
False
self
.
flexranCtrlStarted
=
False
self
.
epcPcapFile
=
''
self
.
htmlObj
=
None
self
.
epcObj
=
None
#-----------------------------------------------------------
# Setters and Getters
# Setters and Getters
on Public members
#-----------------------------------------------------------
def
SetIPAddress
(
self
,
ipaddress
):
self
.
EPCIPAddress
=
ipaddress
def
SetUserName
(
self
,
username
):
self
.
EPCUserName
=
username
def
SetPassword
(
self
,
password
):
self
.
EPCPassword
=
password
def
SetSourceCodePath
(
self
,
sourcecodepath
):
self
.
EPCSourceCodePath
=
sourcecodepath
def
SetHtmlObj
(
self
,
obj
):
self
.
htmlObj
=
obj
def
SetEpcObj
(
self
,
obj
):
self
.
epcObj
=
obj
def
SettestCase_id
(
self
,
tcid
):
self
.
testCase_id
=
tcid
def
SetflexranCtrlInstalled
(
self
,
fxrctin
):
self
.
flexranCtrlInstalled
=
fxrctin
def
GetflexranCtrlInstalled
(
self
):
...
...
@@ -242,7 +235,6 @@ class RANManagement():
def
BuildeNB
(
self
):
myHTML
=
HTML
.
HTMLManagement
()
if
self
.
ranRepository
==
''
or
self
.
ranBranch
==
''
or
self
.
ranCommitID
==
''
:
GenericHelp
(
Version
)
sys
.
exit
(
'Insufficient Parameter'
)
...
...
@@ -315,7 +307,8 @@ class RANManagement():
mismatch
=
True
if
not
mismatch
:
mySSH
.
close
()
myHTML
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
return
mySSH
.
command
(
'echo '
+
lPassWord
+
' | sudo -S git clean -x -d -ff'
,
'\$'
,
30
)
...
...
@@ -341,12 +334,17 @@ class RANManagement():
mySSH
.
command
(
'chmod 775 ./my-lte-softmodem-build.sh'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
lPassWord
+
' | sudo -S -E daemon --inherit --unsafe --name=build_enb_daemon --chdir='
+
lSourcePath
+
'/cmake_targets -o '
+
lSourcePath
+
'/cmake_targets/compile_oai_enb.log ./my-lte-softmodem-build.sh'
,
'\$'
,
5
)
mySSH
.
close
()
myHTML
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
self
.
backgroundBuildTestId
[
int
(
self
.
eNB_instance
)]
=
self
.
testCase_id
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
self
.
backgroundBuildTestId
[
int
(
self
.
eNB_instance
)]
=
self
.
htmlObj
.
GettestCase_id
()
return
mySSH
.
command
(
'stdbuf -o0 ./build_oai '
+
self
.
Build_eNB_args
+
' 2>&1 | stdbuf -o0 tee compile_oai_enb.log'
,
'Bypassing the Tests|build have failed'
,
1500
)
mySSH
.
close
()
self
.
checkBuildeNB
(
lIpAddr
,
lUserName
,
lPassWord
,
lSourcePath
,
self
.
testCase_id
)
if
self
.
htmlObj
is
not
None
:
tId
=
self
.
htmlObj
.
GettestCase_id
()
else
:
tId
=
'0000'
self
.
checkBuildeNB
(
lIpAddr
,
lUserName
,
lPassWord
,
lSourcePath
,
tId
)
...
...
@@ -385,8 +383,8 @@ class RANManagement():
self
.
checkBuildeNB
(
lIpAddr
,
lUserName
,
lPassWord
,
lSourcePath
,
self
.
backgroundBuildTestId
[
int
(
self
.
eNB_instance
)])
def
checkBuildeNB
(
self
,
lIpAddr
,
lUserName
,
lPassWord
,
lSourcePath
,
testcaseId
):
myHTML
=
HTML
.
HTMLManagement
()
myHTML
.
SettestCase_id
(
testcaseId
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
SettestCase_id
(
testcaseId
)
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
lIpAddr
,
lUserName
,
lPassWord
)
mySSH
.
command
(
'cd '
+
lSourcePath
+
'/cmake_targets'
,
'\$'
,
3
)
...
...
@@ -436,16 +434,17 @@ class RANManagement():
if
buildStatus
:
logging
.
info
(
'
\u001B
[1m Building OAI '
+
nodeB_prefix
+
'NB Pass
\u001B
[0m'
)
myHTML
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
else
:
logging
.
error
(
'
\u001B
[1m Building OAI '
+
nodeB_prefix
+
'NB Failed
\u001B
[0m'
)
myHTML
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'KO'
,
CONST
.
ALL_PROCESSES_OK
)
myHTML
.
CreateHtmlTabFooter
(
False
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'KO'
,
CONST
.
ALL_PROCESSES_OK
)
self
.
htmlObj
.
CreateHtmlTabFooter
(
False
)
sys
.
exit
(
1
)
def
InitializeeNB
(
self
):
myHTML
=
HTML
.
HTMLManagement
()
if
self
.
eNB_serverId
==
'0'
:
lIpAddr
=
self
.
eNBIPAddress
lUserName
=
self
.
eNBUserName
...
...
@@ -467,21 +466,25 @@ class RANManagement():
mySSH
=
SSH
.
SSHConnection
()
if
(
self
.
pStatus
<
0
):
myHTML
.
CreateHtmlTestRow
(
self
.
Initialize_eNB_args
,
'KO'
,
self
.
pStatus
)
myHTML
.
CreateHtmlTabFooter
(
False
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
self
.
Initialize_eNB_args
,
'KO'
,
self
.
pStatus
)
self
.
htmlObj
.
CreateHtmlTabFooter
(
False
)
sys
.
exit
(
1
)
# If tracer options is on, running tshark on EPC side and capture traffic b/ EPC and eNB
result
=
re
.
search
(
'T_stdout'
,
str
(
self
.
Initialize_eNB_args
))
if
result
is
not
None
:
mySSH
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
(
result
is
not
None
)
and
(
self
.
epcObj
is
not
None
):
localEpcIpAddr
=
self
.
epcObj
.
GetIPAddress
()
localEpcUserName
=
self
.
epcObj
.
GetUserName
()
localEpcPassword
=
self
.
epcObj
.
GetPassword
()
mySSH
.
open
(
localEpcIpAddr
,
localEpcUserName
,
localEpcPassword
)
mySSH
.
command
(
'ip addr show | awk -f /tmp/active_net_interfaces.awk | egrep -v "lo|tun"'
,
'\$'
,
5
)
result
=
re
.
search
(
'interfaceToUse=(?P<eth_interface>[a-zA-Z0-9\-\_]+)done'
,
mySSH
.
getBefore
())
if
result
is
not
None
:
eth_interface
=
result
.
group
(
'eth_interface'
)
logging
.
debug
(
'
\u001B
[1m Launching tshark on interface '
+
eth_interface
+
'
\u001B
[0m'
)
EPC
.
Set_PcapFileName
(
'enb_'
+
self
.
testCase_id
+
'_s1log.pcap'
)
mySSH
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S rm -f /tmp/'
+
EPC
.
Get_PcapFileName
()
,
'\$'
,
5
)
mySSH
.
command
(
'echo $USER; nohup sudo tshark -f "host '
+
lIpAddr
+
'" -i '
+
eth_interface
+
' -w /tmp/'
+
EPC
.
Get_PcapFileName
()
+
' > /tmp/tshark.log 2>&1 &'
,
self
.
EPC
UserName
,
5
)
self
.
epcPcapFile
=
'enb_'
+
self
.
testCase_id
+
'_s1log.pcap'
mySSH
.
command
(
'echo '
+
localEpcPassword
+
' | sudo -S rm -f /tmp/'
+
self
.
epcPcapFile
,
'\$'
,
5
)
mySSH
.
command
(
'echo $USER; nohup sudo tshark -f "host '
+
lIpAddr
+
'" -i '
+
eth_interface
+
' -w /tmp/'
+
self
.
epcPcapFile
+
' > /tmp/tshark.log 2>&1 &'
,
localEpc
UserName
,
5
)
mySSH
.
close
()
mySSH
.
open
(
lIpAddr
,
lUserName
,
lPassWord
)
mySSH
.
command
(
'cd '
+
lSourcePath
,
'\$'
,
5
)
...
...
@@ -520,7 +523,9 @@ class RANManagement():
mySSH
.
command
(
'echo '
+
lPassWord
+
' | sudo -S uhd_find_devices'
,
'\$'
,
60
)
# Make a copy and adapt to EPC / eNB IP addresses
mySSH
.
command
(
'cp '
+
full_config_file
+
' '
+
ci_full_config_file
,
'\$'
,
5
)
mySSH
.
command
(
'sed -i -e
\'
s/CI_MME_IP_ADDR/'
+
self
.
EPCIPAddress
+
'/
\'
'
+
ci_full_config_file
,
'\$'
,
2
);
if
self
.
epcObj
is
not
None
:
localEpcIpAddr
=
self
.
epcObj
.
GetIPAddress
()
mySSH
.
command
(
'sed -i -e
\'
s/CI_MME_IP_ADDR/'
+
localEpcIpAddr
+
'/
\'
'
+
ci_full_config_file
,
'\$'
,
2
);
mySSH
.
command
(
'sed -i -e
\'
s/CI_ENB_IP_ADDR/'
+
lIpAddr
+
'/
\'
'
+
ci_full_config_file
,
'\$'
,
2
);
mySSH
.
command
(
'sed -i -e
\'
s/CI_RCC_IP_ADDR/'
+
self
.
eNBIPAddress
+
'/
\'
'
+
ci_full_config_file
,
'\$'
,
2
);
mySSH
.
command
(
'sed -i -e
\'
s/CI_RRU1_IP_ADDR/'
+
self
.
eNB1IPAddress
+
'/
\'
'
+
ci_full_config_file
,
'\$'
,
2
);
...
...
@@ -569,22 +574,26 @@ class RANManagement():
mySSH
.
close
()
doLoop
=
False
logging
.
error
(
'
\u001B
[1;37;41m eNB logging system did not show got sync!
\u001B
[0m'
)
myHTML
.
CreateHtmlTestRow
(
'-O '
+
config_file
+
extra_options
,
'KO'
,
CONST
.
ALL_PROCESSES_OK
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
'-O '
+
config_file
+
extra_options
,
'KO'
,
CONST
.
ALL_PROCESSES_OK
)
# In case of T tracer recording, we need to kill tshark on EPC side
result
=
re
.
search
(
'T_stdout'
,
str
(
self
.
Initialize_eNB_args
))
if
result
is
not
None
:
mySSH
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
(
result
is
not
None
)
and
(
self
.
epcObj
is
not
None
):
localEpcIpAddr
=
self
.
epcObj
.
GetIPAddress
()
localEpcUserName
=
self
.
epcObj
.
GetUserName
()
localEpcPassword
=
self
.
epcObj
.
GetPassword
()
mySSH
.
open
(
localEpcIpAddr
,
localEpcUserName
,
localEpcPassword
)
logging
.
debug
(
'
\u001B
[1m Stopping tshark
\u001B
[0m'
)
mySSH
.
command
(
'echo '
+
self
.
EPC
Password
+
' | sudo -S killall --signal SIGKILL tshark'
,
'\$'
,
5
)
if
EPC
.
Get_PcapFileName
()
!=
''
:
mySSH
.
command
(
'echo '
+
localEpc
Password
+
' | sudo -S killall --signal SIGKILL tshark'
,
'\$'
,
5
)
if
self
.
epcPcapFile
!=
''
:
time
.
sleep
(
0.5
)
mySSH
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S chmod 666 /tmp/'
+
EPC
.
Get_PcapFileName
()
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
localEpcPassword
+
' | sudo -S chmod 666 /tmp/'
+
self
.
epcPcapFile
,
'\$'
,
5
)
mySSH
.
close
()
time
.
sleep
(
1
)
if
EPC
.
Get_PcapFileName
()
!=
''
:
copyin_res
=
mySSH
.
copyin
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
'/tmp/'
+
EPC
.
Get_PcapFileName
()
,
'.'
)
if
self
.
epcPcapFile
!=
''
:
copyin_res
=
mySSH
.
copyin
(
localEpcIpAddr
,
localEpcUserName
,
localEpcPassword
,
'/tmp/'
+
self
.
epcPcapFile
,
'.'
)
if
(
copyin_res
==
0
):
mySSH
.
copyout
(
lIpAddr
,
lUserName
,
lPassWord
,
EPC
.
Get_PcapFileName
()
,
lSourcePath
+
'/cmake_targets/.'
)
mySSH
.
copyout
(
lIpAddr
,
lUserName
,
lPassWord
,
self
.
epcPcapFile
,
lSourcePath
+
'/cmake_targets/.'
)
self
.
prematureExit
=
True
return
else
:
...
...
@@ -619,7 +628,8 @@ class RANManagement():
self
.
eNBstatuses
[
int
(
self
.
eNB_instance
)]
=
int
(
self
.
eNB_serverId
)
mySSH
.
close
()
myHTML
.
CreateHtmlTestRow
(
'-O '
+
config_file
+
extra_options
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
'-O '
+
config_file
+
extra_options
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
logging
.
debug
(
'
\u001B
[1m Initialize eNB Completed
\u001B
[0m'
)
...
...
@@ -659,7 +669,6 @@ class RANManagement():
def
TerminateeNB
(
self
):
myHTML
=
HTML
.
HTMLManagement
()
if
self
.
eNB_serverId
==
'0'
:
lIpAddr
=
self
.
eNBIPAddress
lUserName
=
self
.
eNBUserName
...
...
@@ -700,15 +709,18 @@ class RANManagement():
mySSH
.
close
()
# If tracer options is on, stopping tshark on EPC side
result
=
re
.
search
(
'T_stdout'
,
str
(
self
.
Initialize_eNB_args
))
if
result
is
not
None
:
mySSH
.
open
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
)
if
(
result
is
not
None
)
and
(
self
.
epcObj
is
not
None
):
localEpcIpAddr
=
self
.
epcObj
.
GetIPAddress
()
localEpcUserName
=
self
.
epcObj
.
GetUserName
()
localEpcPassword
=
self
.
epcObj
.
GetPassword
()
mySSH
.
open
(
localEpcIpAddr
,
localEpcUserName
,
localEpcPassword
)
logging
.
debug
(
'
\u001B
[1m Stopping tshark
\u001B
[0m'
)
mySSH
.
command
(
'echo '
+
self
.
EPC
Password
+
' | sudo -S killall --signal SIGKILL tshark'
,
'\$'
,
5
)
mySSH
.
command
(
'echo '
+
localEpc
Password
+
' | sudo -S killall --signal SIGKILL tshark'
,
'\$'
,
5
)
time
.
sleep
(
1
)
if
EPC
.
Get_PcapFileName
()
!=
''
:
mySSH
.
command
(
'echo '
+
self
.
EPCPassword
+
' | sudo -S chmod 666 /tmp/'
+
EPC
.
Get_PcapFileName
()
,
'\$'
,
5
)
mySSH
.
copyin
(
self
.
EPCIPAddress
,
self
.
EPCUserName
,
self
.
EPCPassword
,
'/tmp/'
+
EPC
.
Get_PcapFileName
()
,
'.'
)
mySSH
.
copyout
(
lIpAddr
,
lUserName
,
lPassWord
,
EPC
.
Get_PcapFileName
()
,
lSourcePath
+
'/cmake_targets/.'
)
if
self
.
epcPcapFile
!=
''
:
mySSH
.
command
(
'echo '
+
localEpcPassword
+
' | sudo -S chmod 666 /tmp/'
+
self
.
epcPcapFile
,
'\$'
,
5
)
mySSH
.
copyin
(
localEpcIpAddr
,
localEpcUserName
,
localEpcPassword
,
'/tmp/'
+
self
.
epcPcapFile
,
'.'
)
mySSH
.
copyout
(
lIpAddr
,
lUserName
,
lPassWord
,
self
.
epcPcapFile
,
lSourcePath
+
'/cmake_targets/.'
)
mySSH
.
close
()
logging
.
debug
(
'
\u001B
[1m Replaying RAW record file
\u001B
[0m'
)
mySSH
.
open
(
lIpAddr
,
lUserName
,
lPassWord
)
...
...
@@ -725,7 +737,8 @@ class RANManagement():
mySSH
.
copyin
(
lIpAddr
,
lUserName
,
lPassWord
,
lSourcePath
+
'/cmake_targets/'
+
extracted_log_file
,
'.'
)
logging
.
debug
(
'
\u001B
[1m Analyzing eNB replay logfile
\u001B
[0m'
)
logStatus
=
self
.
AnalyzeLogFile_eNB
(
extracted_log_file
)
myHTML
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
self
.
eNBLogFiles
[
int
(
self
.
eNB_instance
)]
=
''
else
:
analyzeFile
=
False
...
...
@@ -738,7 +751,8 @@ class RANManagement():
if
(
copyin_res
==
-
1
):
logging
.
debug
(
'
\u001B
[1;37;41m Could not copy '
+
nodeB_prefix
+
'NB logfile to analyze it!
\u001B
[0m'
)
self
.
htmleNBFailureMsg
=
'Could not copy '
+
nodeB_prefix
+
'NB logfile to analyze it!'
myHTML
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
CONST
.
ENB_PROCESS_NOLOGFILE_TO_ANALYZE
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
CONST
.
ENB_PROCESS_NOLOGFILE_TO_ANALYZE
)
self
.
eNBmbmsEnables
[
int
(
self
.
eNB_instance
)]
=
False
return
if
self
.
eNB_serverId
!=
'0'
:
...
...
@@ -746,14 +760,17 @@ class RANManagement():
logging
.
debug
(
'
\u001B
[1m Analyzing '
+
nodeB_prefix
+
'NB logfile
\u001B
[0m '
+
fileToAnalyze
)
logStatus
=
self
.
AnalyzeLogFile_eNB
(
fileToAnalyze
)
if
(
logStatus
<
0
):
myHTML
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
logStatus
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
logStatus
)
self
.
preamtureExit
=
True
self
.
eNBmbmsEnables
[
int
(
self
.
eNB_instance
)]
=
False
return
else
:
myHTML
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
else
:
myHTML
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
if
self
.
htmlObj
is
not
None
:
self
.
htmlObj
.
CreateHtmlTestRow
(
'N/A'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
self
.
eNBmbmsEnables
[
int
(
self
.
eNB_instance
)]
=
False
self
.
eNBstatuses
[
int
(
self
.
eNB_instance
)]
=
-
1
...
...
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