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
fcd57992
Commit
fcd57992
authored
Mar 27, 2019
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CI: improved HTML reporting on OAI UE
Signed-off-by:
Raphael Defosseux
<
raphael.defosseux@eurecom.fr
>
parent
76d2c183
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
83 additions
and
61 deletions
+83
-61
ci-scripts/main.py
ci-scripts/main.py
+81
-45
ci-scripts/xml_files/ue_band20_test_10mhz_orange.xml
ci-scripts/xml_files/ue_band20_test_10mhz_orange.xml
+1
-8
ci-scripts/xml_files/ue_band20_test_10mhz_sfr.xml
ci-scripts/xml_files/ue_band20_test_10mhz_sfr.xml
+1
-8
No files found.
ci-scripts/main.py
View file @
fcd57992
...
...
@@ -43,6 +43,8 @@ ENB_PROCESS_ASSERTION = -12
ENB_PROCESS_REALTIME_ISSUE
=
-
13
ENB_PROCESS_NOLOGFILE_TO_ANALYZE
=
-
14
UE_PROCESS_NOLOGFILE_TO_ANALYZE
=
-
20
UE_PROCESS_COULD_NOT_SYNC
=
-
21
UE_PROCESS_ASSERTION
=
-
22
HSS_PROCESS_FAILED
=
-
2
HSS_PROCESS_OK
=
+
2
MME_PROCESS_FAILED
=
-
3
...
...
@@ -332,8 +334,6 @@ class SSHConnection():
self
.
command
(
'mkdir -p build_log_'
+
self
.
testCase_id
,
'\$'
,
5
)
self
.
command
(
'mv log/* '
+
'build_log_'
+
self
.
testCase_id
,
'\$'
,
5
)
self
.
command
(
'mv compile_oai_enb.log '
+
'build_log_'
+
self
.
testCase_id
,
'\$'
,
5
)
# Workaround to run with develop-nr
self
.
command
(
'if [ -e ran_build ]; then cp -rf ran_build lte_build_oai; fi'
,
'\$'
,
30
)
self
.
close
()
self
.
CreateHtmlTestRow
(
self
.
Build_eNB_args
,
'OK'
,
ALL_PROCESSES_OK
)
...
...
@@ -2086,6 +2086,9 @@ class SSHConnection():
pdcpFailure
=
0
ulschFailure
=
0
no_cell_sync_found
=
False
mib_found
=
False
frequency_found
=
False
self
.
htmlUEFailureMsg
=
''
for
line
in
ue_log_file
.
readlines
():
result
=
re
.
search
(
'[Ss]egmentation [Ff]ault'
,
str
(
line
))
if
result
is
not
None
:
...
...
@@ -2105,66 +2108,78 @@ class SSHConnection():
result
=
re
.
search
(
'uci->stat'
,
str
(
line
))
if
result
is
not
None
:
uciStatMsgCount
+=
1
# full pattern
# No cell synchronization found, abandoning
result
=
re
.
search
(
'No cell synchronization found, abandoning'
,
str
(
line
))
if
result
is
not
None
:
no_cell_sync_found
=
True
# MIB Information => FDD, NORMAL, NidCell 421, N_RB_DL 50, PHICH DURATION 0, PHICH RESOURCE 1/6, TX_ANT 2
# mask --> FDD NORMAL 421 50 0 1/6 2
result
=
re
.
search
(
"MIB Information => ([a-zA-Z]{1,10}), ([a-zA-Z]{1,10}), NidCell (?P<nidcell>\d{1,3}), N_RB_DL (?P<n_rb_dl>\d{1,3}), PHICH DURATION (?P<phich_duration>\d), PHICH RESOURCE (?P<phich_resource>.{1,4}), TX_ANT (?P<tx_ant>\d)"
,
str
(
line
))
if
result
is
not
None
:
if
result
is
not
None
and
(
not
mib_found
)
:
try
:
print
(
'
\033
[94m'
+
"MIB Information: "
+
result
.
group
(
1
)
+
', '
+
result
.
group
(
2
)
+
'
\033
[0m'
)
print
(
'
\033
[94m'
+
"nidcell = "
+
result
.
group
(
'nidcell'
)
+
'
\033
[0m'
)
print
(
'
\033
[94m'
+
"n_rb_dl = "
+
result
.
group
(
'n_rb_dl'
)
+
'
\033
[0m'
)
print
(
'
\033
[94m'
+
"phich_duration = "
+
result
.
group
(
'phich_duration'
)
+
'
\033
[0m'
)
print
(
'
\033
[94m'
+
"phich_resource = "
+
result
.
group
(
'phich_resource'
)
+
'
\033
[0m'
)
print
(
'
\033
[94m'
+
"tx_ant = "
+
result
.
group
(
'tx_ant'
)
+
'
\033
[0m'
)
mibMsg
=
"MIB Information: "
+
result
.
group
(
1
)
+
', '
+
result
.
group
(
2
)
self
.
htmlUEFailureMsg
+=
mibMsg
+
'
\n
'
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
mibMsg
=
" nidcell = "
+
result
.
group
(
'nidcell'
)
self
.
htmlUEFailureMsg
+=
mibMsg
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
mibMsg
=
" n_rb_dl = "
+
result
.
group
(
'n_rb_dl'
)
self
.
htmlUEFailureMsg
+=
mibMsg
+
'
\n
'
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
mibMsg
=
" phich_duration = "
+
result
.
group
(
'phich_duration'
)
self
.
htmlUEFailureMsg
+=
mibMsg
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
mibMsg
=
" phich_resource = "
+
result
.
group
(
'phich_resource'
)
self
.
htmlUEFailureMsg
+=
mibMsg
+
'
\n
'
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
mibMsg
=
" tx_ant = "
+
result
.
group
(
'tx_ant'
)
self
.
htmlUEFailureMsg
+=
mibMsg
+
'
\n
'
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
mib_found
=
True
except
Exception
as
e
:
print
(
'
\033
[91m'
+
"a marker was not found"
+
'
\033
[0m'
)
# Measured Carrier Frequency 816000688 Hz (offset 12 Hz)
# mask --> 816000688i
logging
.
error
(
'
\033
[91m'
+
"MIB marker was not found"
+
'
\033
[0m'
)
result
=
re
.
search
(
"Measured Carrier Frequency (?P<measured_carrier_frequency>\d{1,15}) Hz"
,
str
(
line
))
if
result
is
not
None
:
if
result
is
not
None
and
(
not
frequency_found
)
:
try
:
print
(
'
\033
[94m'
+
"Measured Carrier Frequency = "
+
result
.
group
(
'measured_carrier_frequency'
)
+
'
\033
[0m'
)
mibMsg
=
"Measured Carrier Frequency = "
+
result
.
group
(
'measured_carrier_frequency'
)
+
' Hz'
self
.
htmlUEFailureMsg
+=
mibMsg
+
'
\n
'
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
frequency_found
=
True
except
Exception
as
e
:
print
(
'
\033
[91m'
+
"Measured Carrier Frequency not found"
+
'
\033
[0m'
)
# Found Orange FR (name from internal table)
# mask Orange FR
logging
.
error
(
'
\033
[91m'
+
"Measured Carrier Frequency not found"
+
'
\033
[0m'
)
result
=
re
.
search
(
"Found (?P<operator>[\w,\s]{1,15}) \(name from internal table\)"
,
str
(
line
))
if
result
is
not
None
:
try
:
print
(
'
\033
[94m'
+
"The operator is: "
+
result
.
group
(
'operator'
)
+
'
\033
[0m'
)
mibMsg
=
"The operator is: "
+
result
.
group
(
'operator'
)
self
.
htmlUEFailureMsg
+=
mibMsg
+
'
\n
'
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
except
Exception
as
e
:
print
(
'
\033
[91m'
+
"Operator name not found"
+
'
\033
[0m'
)
# SIB5 InterFreqCarrierFreq element 0/3
# mask -- 0 and 3
logging
.
error
(
'
\033
[91m'
+
"Operator name not found"
+
'
\033
[0m'
)
result
=
re
.
search
(
"SIB5 InterFreqCarrierFreq element (.{1,4})/(.{1,4})"
,
str
(
line
))
if
result
is
not
None
:
try
:
print
(
'
\033
[94m'
+
"SIB5 InterFreqCarrierFreq element "
+
result
.
group
(
1
)
+
'/'
+
result
.
group
(
2
)
+
'
\033
[0m'
)
mibMsg
=
"SIB5 InterFreqCarrierFreq element "
+
result
.
group
(
1
)
+
'/'
+
result
.
group
(
2
)
self
.
htmlUEFailureMsg
+=
mibMsg
+
' -> '
logging
.
debug
(
'
\033
[94m'
+
mibMsg
+
'
\033
[0m'
)
except
Exception
as
e
:
print
(
'
\033
[91m'
+
"SIB5 InterFreqCarrierFreq element not found"
+
'
\033
[0m'
)
# DL Carrier Frequency/ARFCN : 2645000000/3000
# mask 2645000000
result
=
re
.
search
(
"DL Carrier Frequency/ARFCN : (?P<carrier_frequency>)\d{1,15}/\d{1,4}"
,
str
(
line
))
logging
.
error
(
'
\033
[91m'
+
"SIB5 InterFreqCarrierFreq element not found"
+
'
\033
[0m'
)
result
=
re
.
search
(
"DL Carrier Frequency/ARFCN : (?P<carrier_frequency>\d{1,15}/\d{1,4})"
,
str
(
line
))
if
result
is
not
None
:
try
:
print
(
'
\033
[94m'
+
"DL Carrier Frequency is: "
+
result
.
group
(
'carrier_frequency'
)
+
'
\033
[0m'
)
freq
=
result
.
group
(
'carrier_frequency'
)
new_freq
=
re
.
sub
(
'/[0-9]+'
,
''
,
freq
)
float_freq
=
float
(
new_freq
)
/
1000000
self
.
htmlUEFailureMsg
+=
'DL Freq: '
+
(
'%.1f'
%
float_freq
)
+
' MHz'
logging
.
debug
(
'
\033
[94m'
+
" DL Carrier Frequency is: "
+
freq
+
'
\033
[0m'
)
except
Exception
as
e
:
print
(
'
\033
[91m'
+
"DL Carrier Frequency not found"
+
'
\033
[0m'
)
# AllowedMeasBandwidth : 100
# mask 100
logging
.
error
(
'
\033
[91m'
+
" DL Carrier Frequency not found"
+
'
\033
[0m'
)
result
=
re
.
search
(
"AllowedMeasBandwidth : (?P<allowed_bandwidth>\d{1,7})"
,
str
(
line
))
if
result
is
not
None
:
try
:
print
(
'
\033
[94m'
+
"AllowedMeasBandwidth: "
+
result
.
group
(
'allowed_bandwidth'
)
+
'
\033
[0m'
)
prb
=
result
.
group
(
'allowed_bandwidth'
)
self
.
htmlUEFailureMsg
+=
' -- PRB: '
+
prb
+
'
\n
'
logging
.
debug
(
'
\033
[94m'
+
" AllowedMeasBandwidth: "
+
prb
+
'
\033
[0m'
)
except
Exception
as
e
:
print
(
'
\033
[91m'
+
"
AllowedMeasBandwidth not found"
+
'
\033
[0m'
)
logging
.
error
(
'
\033
[91m'
+
"
AllowedMeasBandwidth not found"
+
'
\033
[0m'
)
ue_log_file
.
close
()
self
.
htmlUEFailureMsg
=
''
if
uciStatMsgCount
>
0
:
statMsg
=
'UE showed '
+
str
(
uciStatMsgCount
)
+
' "uci->stat" message(s)'
logging
.
debug
(
'
\u001B
[1;30;43m '
+
statMsg
+
'
\u001B
[0m'
)
...
...
@@ -2186,12 +2201,19 @@ class SSHConnection():
return
ENB_PROCESS_SEG_FAULT
if
foundAssertion
:
logging
.
debug
(
'
\u001B
[1;37;43m UE ended with an assertion!
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
msgAssertion
return
ENB_PROCESS_ASSERTION
# removed for esthetics
#self.htmlUEFailureMsg += msgAssertion
self
.
htmlUEFailureMsg
+=
'UE ended with an assertion!
\n
'
if
not
mib_found
or
not
frequency_found
:
return
UE_PROCESS_ASSERTION
if
foundRealTimeIssue
:
logging
.
debug
(
'
\u001B
[1;37;41m UE faced real time issues!
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
'UE faced real time issues!
\n
'
#return ENB_PROCESS_REALTIME_ISSUE
if
no_cell_sync_found
and
not
mib_found
:
logging
.
debug
(
'
\u001B
[1;37;41m UE could not synchronize !
\u001B
[0m'
)
self
.
htmlUEFailureMsg
+=
'UE could not synchronize!
\n
'
return
UE_PROCESS_COULD_NOT_SYNC
if
rlcDiscardBuffer
>
0
:
rlcMsg
=
'UE RLC discarded '
+
str
(
rlcDiscardBuffer
)
+
' buffer(s)'
logging
.
debug
(
'
\u001B
[1;37;41m '
+
rlcMsg
+
'
\u001B
[0m'
)
...
...
@@ -2386,21 +2408,27 @@ class SSHConnection():
copyin_res
=
self
.
copyin
(
self
.
UEIPAddress
,
self
.
UEUserName
,
self
.
UEPassword
,
self
.
UESourceCodePath
+
'/cmake_targets/'
+
self
.
UELogFile
,
'.'
)
if
(
copyin_res
==
-
1
):
logging
.
debug
(
'
\u001B
[1;37;41m Could not copy UE logfile to analyze it!
\u001B
[0m'
)
self
.
htmlUEFailureMsg
=
'Could not copy UE logfile to analyze it!
'
self
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
UE_PROCESS_NOLOGFILE_TO_ANALYZE
)
optionsMsg
=
'<pre style="background-color:white">Could not copy UE logfile to analyze it!</pre>
'
self
.
CreateHtmlTestRow
(
optionsMsg
,
'KO'
,
UE_PROCESS_NOLOGFILE_TO_ANALYZE
,
'UE'
)
self
.
UELogFile
=
''
return
logging
.
debug
(
'
\u001B
[1m Analyzing UE logfile
\u001B
[0m'
)
logStatus
=
self
.
AnalyzeLogFile_UE
(
self
.
UELogFile
)
if
(
logStatus
<
0
):
self
.
CreateHtmlTestRow
(
'N/A'
,
'KO'
,
logStatus
)
optionsMsg
=
'<pre style="background-color:white"><b>Sniffing Unsuccessful</b>
\n
'
optionsMsg
+=
self
.
htmlUEFailureMsg
optionsMsg
+=
'</pre>'
self
.
CreateHtmlTestRow
(
optionsMsg
,
'KO'
,
logStatus
,
'UE'
)
self
.
CreateHtmlTabFooter
(
False
)
sys
.
exit
(
1
)
else
:
self
.
CreateHtmlTestRow
(
'<pre style="background-color:white">sniffing successful</pre>'
,
'OK'
,
ALL_PROCESSES_OK
)
optionsMsg
=
'<pre style="background-color:white"><b>Sniffing Successful</b>
\n
'
optionsMsg
+=
self
.
htmlUEFailureMsg
optionsMsg
+=
'</pre>'
self
.
CreateHtmlTestRow
(
optionsMsg
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
UELogFile
=
''
else
:
self
.
CreateHtmlTestRow
(
'<pre style="background-color:white">
sniffing successful
</pre>'
,
'OK'
,
ALL_PROCESSES_OK
)
self
.
CreateHtmlTestRow
(
'<pre style="background-color:white">
No Log File to analyze
</pre>'
,
'OK'
,
ALL_PROCESSES_OK
)
def
AutoTerminateUEandeNB
(
self
):
self
.
testCase_id
=
'AUTO-KILL-UE'
...
...
@@ -2574,6 +2602,9 @@ class SSHConnection():
#-----------------------------------------------------------
def
CreateHtmlHeader
(
self
):
if
(
not
self
.
htmlHeaderCreated
):
logging
.
debug
(
'
\u001B
[1m----------------------------------------
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m Creating HTML header
\u001B
[0m'
)
logging
.
debug
(
'
\u001B
[1m----------------------------------------
\u001B
[0m'
)
self
.
htmlFile
=
open
(
'test_results.html'
,
'w'
)
self
.
htmlFile
.
write
(
'<!DOCTYPE html>
\n
'
)
self
.
htmlFile
.
write
(
'<html class="no-js" lang="en-US">
\n
'
)
...
...
@@ -2720,6 +2751,9 @@ class SSHConnection():
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
.
RetrieveSystemVersion
()
self
.
htmlFile
=
open
(
'test_results.html'
,
'a'
)
self
.
htmlFile
.
write
(
'</div>
\n
'
)
...
...
@@ -2777,12 +2811,14 @@ class SSHConnection():
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >KO - '
+
machine
+
' process not found</td>
\n
'
)
elif
(
processesStatus
==
ENB_PROCESS_SEG_FAULT
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >KO - '
+
machine
+
' process ended in Segmentation Fault</td>
\n
'
)
elif
(
processesStatus
==
ENB_PROCESS_ASSERTION
):
elif
(
processesStatus
==
ENB_PROCESS_ASSERTION
)
or
(
processesStatus
==
UE_PROCESS_ASSERTION
)
:
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >KO - '
+
machine
+
' process ended in Assertion</td>
\n
'
)
elif
(
processesStatus
==
ENB_PROCESS_REALTIME_ISSUE
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >KO - '
+
machine
+
' process faced Real Time issue(s)</td>
\n
'
)
elif
(
processesStatus
==
ENB_PROCESS_NOLOGFILE_TO_ANALYZE
)
or
(
processesStatus
==
UE_PROCESS_NOLOGFILE_TO_ANALYZE
):
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >OK</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >OK?</td>
\n
'
)
elif
(
processesStatus
==
UE_PROCESS_COULD_NOT_SYNC
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >KO - UE could not sync</td>
\n
'
)
elif
(
processesStatus
==
HSS_PROCESS_FAILED
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >KO - HSS process not found</td>
\n
'
)
elif
(
processesStatus
==
MME_PROCESS_FAILED
):
...
...
ci-scripts/xml_files/ue_band20_test_10mhz_orange.xml
View file @
fcd57992
...
...
@@ -25,16 +25,9 @@
<htmlTabName>
Test-10Mhz-Orange
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<TestCaseRequestedList>
090101
090102 000001 090109
</TestCaseRequestedList>
<TestCaseExclusionList>
090101
</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>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"090102"
>
<class>
Initialize_OAI_UE
</class>
...
...
ci-scripts/xml_files/ue_band20_test_10mhz_sfr.xml
View file @
fcd57992
...
...
@@ -25,16 +25,9 @@
<htmlTabName>
Test-10MHz-SFR
</htmlTabName>
<htmlTabIcon>
tasks
</htmlTabIcon>
<TestCaseRequestedList>
090101
090104 000001 090109
</TestCaseRequestedList>
<TestCaseExclusionList>
090101
</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>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase
id=
"090104"
>
<class>
Initialize_OAI_UE
</class>
...
...
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