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
spbro
OpenXG-RAN
Commits
59af5bd8
Commit
59af5bd8
authored
Feb 14, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CreateHtmlTestRowQueue: one UE column in any test
parent
646cec27
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
139 additions
and
232 deletions
+139
-232
ci-scripts/cls_containerize.py
ci-scripts/cls_containerize.py
+17
-31
ci-scripts/cls_oai_html.py
ci-scripts/cls_oai_html.py
+64
-85
ci-scripts/cls_oaicitest.py
ci-scripts/cls_oaicitest.py
+38
-55
ci-scripts/cls_physim.py
ci-scripts/cls_physim.py
+4
-11
ci-scripts/cls_static_code_analysis.py
ci-scripts/cls_static_code_analysis.py
+8
-28
ci-scripts/epc.py
ci-scripts/epc.py
+8
-20
ci-scripts/main.py
ci-scripts/main.py
+0
-2
No files found.
ci-scripts/cls_containerize.py
View file @
59af5bd8
...
...
@@ -927,24 +927,21 @@ class Containerize():
mySSH
.
copyin
(
lIpAddr
,
lUserName
,
lPassWord
,
logfilename
,
'.'
)
mySSH
.
close
()
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">
\n
'
message
=
''
if
usedImage
!=
''
:
html_cell
+=
f'Used Image =
{
usedImage
}
:
\n
'
html_cell
+=
imageInfo
message
+=
f'Used Image =
{
usedImage
}
:
\n
'
message
+=
imageInfo
else
:
html_cell
+=
'Could not retrieve used image info!
\n
'
message
+=
'Could not retrieve used image info!
\n
'
if
status
:
html_cell
+=
'
\n
Healthy deployment!
\n
'
message
+=
'
\n
Healthy deployment!
\n
'
else
:
html_cell
+=
'
\n
Unhealthy deployment! -- Check logs for reason!
\n
'
html_cell
+=
'</pre>'
html_queue
.
put
(
html_cell
)
message
+=
'
\n
Unhealthy deployment! -- Check logs for reason!
\n
'
if
status
:
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'OK'
,
CONST
.
ENB_PROCESS_OK
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'OK'
,
[
message
]
)
else
:
self
.
exitStatus
=
1
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
CONST
.
ENB_PROCESS_OK
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
[
message
]
)
def
UndeployObject
(
self
,
HTML
,
RAN
):
...
...
@@ -1128,25 +1125,22 @@ class Containerize():
imagesInfo
+=
imageInspect
.
stdout
.
strip
()
myCmd
.
close
()
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">
\n
'
html_cell
=
''
for
imageInfo
in
imagesInfo
.
split
(
'
\n
'
):
html_cell
+=
imageInfo
[:
-
11
]
+
'
\n
'
html_cell
+=
'
\n
'
for
cState
in
containerStatus
:
html_cell
+=
cState
+
'
\n
'
html_cell
+=
'</pre>'
html_queue
.
put
(
html_cell
)
if
count
==
100
and
healthy
==
self
.
nb_healthy
[
0
]:
if
self
.
tsharkStarted
==
False
:
logging
.
debug
(
'Starting tshark on public network'
)
self
.
CaptureOnDockerNetworks
()
HTML
.
CreateHtmlTestRowQueue
(
'n/a'
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'n/a'
,
'OK'
,
[
html_cell
]
)
for
cState
in
containerStatus
:
logging
.
debug
(
cState
)
logging
.
info
(
'
\u001B
[1m Deploying OAI Object(s) PASS
\u001B
[0m'
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
'Could not deploy in time'
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'Could not deploy in time'
,
'KO'
,
[
html_cell
]
)
for
cState
in
containerStatus
:
logging
.
debug
(
cState
)
logging
.
error
(
'
\u001B
[1m Deploying OAI Object(s) FAILED
\u001B
[0m'
)
...
...
@@ -1357,10 +1351,7 @@ class Containerize():
message
+=
statLine
+
'
\n
'
myCmd
.
close
()
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">
\n
'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
pingOptions
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
pingOptions
,
'OK'
,
[
message
])
def
PingFromContainer
(
self
,
HTML
,
RAN
,
UE
):
myCmd
=
cls_cmd
.
LocalCmd
()
...
...
@@ -1419,14 +1410,11 @@ class Containerize():
logging
.
info
(
'
\u001B
[1m Ping Test PASS
\u001B
[0m'
)
def
PingExit
(
self
,
HTML
,
RAN
,
UE
,
status
,
message
):
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">UE
\n
'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
if
status
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
pingOptions
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
pingOptions
,
'OK'
,
[
message
]
)
else
:
logging
.
error
(
'
\u001B
[1;37;41m ping test FAIL -- '
+
message
+
'
\u001B
[0m'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
pingOptions
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
pingOptions
,
'KO'
,
[
message
]
)
# Automatic undeployment
logging
.
warning
(
'----------------------------------------'
)
logging
.
warning
(
'
\u001B
[1m Starting Automatic undeployment
\u001B
[0m'
)
...
...
@@ -1475,14 +1463,12 @@ class Containerize():
self
.
IperfExit
(
HTML
,
RAN
,
UE
,
iperfStatus
,
msg
)
def
IperfExit
(
self
,
HTML
,
RAN
,
UE
,
status
,
message
):
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">UE
\n
'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
html_cell
=
f'UE
\n
{
message
}
'
if
status
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
cliOptions
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
cliOptions
,
'OK'
,
[
html_cell
]
)
else
:
logging
.
error
(
'
\u001B
[1m Iperf Test FAIL -- '
+
message
+
'
\u001B
[0m'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
cliOptions
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
cliOptions
,
'KO'
,
[
html_cell
]
)
# Automatic undeployment
logging
.
warning
(
'----------------------------------------'
)
logging
.
warning
(
'
\u001B
[1m Starting Automatic undeployment
\u001B
[0m'
)
...
...
ci-scripts/cls_oai_html.py
View file @
59af5bd8
...
...
@@ -84,16 +84,6 @@ class HTMLManagement():
self
.
CpuModel
=
[
''
,
''
]
self
.
CpuMHz
=
[
''
,
''
]
#-----------------------------------------------------------
# Setters and Getters
#-----------------------------------------------------------
def
SethtmlUEConnected
(
self
,
nbUEs
):
if
nbUEs
>
0
:
self
.
htmlUEConnected
=
nbUEs
else
:
self
.
htmlUEConnected
=
1
#-----------------------------------------------------------
...
...
@@ -231,10 +221,7 @@ class HTMLManagement():
self
.
htmlFile
.
write
(
' <th>Test Options</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Test Status</th>
\n
'
)
i
=
0
while
(
i
<
self
.
htmlUEConnected
):
self
.
htmlFile
.
write
(
' <th>UE'
+
str
(
i
)
+
' Status</th>
\n
'
)
i
+=
1
self
.
htmlFile
.
write
(
' <th>Info</th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
close
()
self
.
htmlHeaderCreated
=
True
...
...
@@ -247,14 +234,14 @@ class HTMLManagement():
testOkEvenIfUnstable
=
True
self
.
htmlFile
=
open
(
'test_results.html'
,
'a'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "#33CCFF" colspan=
3
>Final Tab Status</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "#33CCFF" colspan=
"3"
>Final Tab Status</th>
\n
'
)
if
passStatus
:
self
.
htmlFile
.
write
(
' <th bgcolor = "green" colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "green" colspan=
"3"
><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>
\n
'
)
else
:
if
testOkEvenIfUnstable
:
self
.
htmlFile
.
write
(
' <th bgcolor = "orange" colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
><font color="white">KNOWN UNSTABLE SCENARIO <span class="glyphicon glyphicon-exclamation-sign"></span> </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "orange" colspan=
"3"
><font color="white">KNOWN UNSTABLE SCENARIO <span class="glyphicon glyphicon-exclamation-sign"></span> </font></th>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <th bgcolor = "red" colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th bgcolor = "red" colspan=
"3"
><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' </table>
\n
'
)
self
.
htmlFile
.
write
(
' </div>
\n
'
)
...
...
@@ -321,11 +308,11 @@ class HTMLManagement():
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
5
bgcolor = "#33CCFF">Final Status</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"5"
bgcolor = "#33CCFF">Final Status</th>
\n
'
)
if
passStatus
:
self
.
htmlFile
.
write
(
' <th colspan=
3
bgcolor="green"><font color="white">PASS <span class="glyphicon glyphicon-ok"></span></font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"3"
bgcolor="green"><font color="white">PASS <span class="glyphicon glyphicon-ok"></span></font></th>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <th colspan=
3
bgcolor="red"><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"3"
bgcolor="red"><font color="white">FAIL <span class="glyphicon glyphicon-remove"></span> </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' </table>
\n
'
)
self
.
htmlFile
.
write
(
' <p></p>
\n
'
)
...
...
@@ -338,7 +325,7 @@ class HTMLManagement():
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
self
.
htmlFile
=
open
(
'test_results.html'
,
'a'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> ---- Try Run #'
+
str
(
cntnumfails
)
+
' ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> ---- Try Run #'
+
str
(
cntnumfails
)
+
' ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
close
()
...
...
@@ -404,7 +391,7 @@ class HTMLManagement():
result
=
re
.
search
(
'showed|Reestablishment|Could not copy eNB logfile'
,
self
.
htmleNBFailureMsg
)
if
result
is
not
None
:
cellBgColor
=
'orange'
self
.
htmlFile
.
write
(
' <td bgcolor = "'
+
cellBgColor
+
'" colspan=
'
+
str
(
self
.
htmlUEConnected
)
+
'
><pre style="background-color:'
+
cellBgColor
+
'">'
+
self
.
htmleNBFailureMsg
+
'</pre></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "'
+
cellBgColor
+
'" colspan=
"1"
><pre style="background-color:'
+
cellBgColor
+
'">'
+
self
.
htmleNBFailureMsg
+
'</pre></td>
\n
'
)
self
.
htmleNBFailureMsg
=
''
elif
(
len
(
str
(
self
.
htmlUEFailureMsg
))
>
2
):
cellBgColor
=
'white'
...
...
@@ -415,13 +402,10 @@ class HTMLManagement():
result
=
re
.
search
(
'showed|Could not copy UE logfile|oaitun_ue1 interface is either NOT mounted or NOT configured'
,
self
.
htmlUEFailureMsg
)
if
result
is
not
None
:
cellBgColor
=
'orange'
self
.
htmlFile
.
write
(
' <td bgcolor = "'
+
cellBgColor
+
'" colspan=
'
+
str
(
self
.
htmlUEConnected
)
+
'
><pre style="background-color:'
+
cellBgColor
+
'">'
+
self
.
htmlUEFailureMsg
+
'</pre></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td bgcolor = "'
+
cellBgColor
+
'" colspan=
"1"
><pre style="background-color:'
+
cellBgColor
+
'">'
+
self
.
htmlUEFailureMsg
+
'</pre></td>
\n
'
)
self
.
htmlUEFailureMsg
=
''
else
:
i
=
0
while
(
i
<
self
.
htmlUEConnected
):
self
.
htmlFile
.
write
(
' <td>-</td>
\n
'
)
i
+=
1
self
.
htmlFile
.
write
(
' <td>-</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
close
()
...
...
@@ -432,7 +416,7 @@ class HTMLManagement():
self
.
htmlFile
=
open
(
'test_results.html'
,
'a'
)
if
bool
(
collectInfo
)
==
False
:
self
.
htmlFile
.
write
(
' <tr bgcolor = "red" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> ----IMAGES BUILDING FAILED - Unable to recover the image logs ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> ----IMAGES BUILDING FAILED - Unable to recover the image logs ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
else
:
for
image
in
collectInfo
:
...
...
@@ -444,13 +428,13 @@ class HTMLManagement():
self
.
htmlFile
.
write
(
' <tr bgcolor = "red" >
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> ---- '
+
image
+
' IMAGE STATUS ----> Size '
+
allImagesSize
[
image
]
+
' </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> ---- '
+
image
+
' IMAGE STATUS ----> Size '
+
allImagesSize
[
image
]
+
' </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#33CCFF" >
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan="2">Element</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Nb Errors</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th>Nb Warnings</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
>Status</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"2"
>Status</th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
for
fil
in
files
:
...
...
@@ -469,11 +453,11 @@ class HTMLManagement():
else
:
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >'
+
str
(
parameters
[
'warnings'
])
+
'</td>
\n
'
)
if
(
parameters
[
'errors'
]
==
0
)
and
(
parameters
[
'warnings'
]
==
0
):
self
.
htmlFile
.
write
(
' <th colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
bgcolor = "green" ><font color="white">OK </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"2"
bgcolor = "green" ><font color="white">OK </font></th>
\n
'
)
elif
(
parameters
[
'errors'
]
==
0
):
self
.
htmlFile
.
write
(
' <th colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
bgcolor = "orange" ><font color="white">OK </font></th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"2"
bgcolor = "orange" ><font color="white">OK </font></th>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <th colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
bgcolor = "red" > NOT OK </th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"2"
bgcolor = "red" > NOT OK </th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
close
()
...
...
@@ -485,12 +469,12 @@ class HTMLManagement():
# TabHeader
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> ---- '
+
DataLog
[
'Title'
]
+
' ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> ---- '
+
DataLog
[
'Title'
]
+
' ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#33CCFF" >
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan="3">'
+
DataLog
[
'ColNames'
][
0
]
+
'</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan="2">'
+
DataLog
[
'ColNames'
][
1
]
+
'</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
>'
+
DataLog
[
'ColNames'
][
2
]
+
'</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"2"
>'
+
DataLog
[
'ColNames'
][
2
]
+
'</th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
for
k
in
DataLog
[
'Data'
]:
...
...
@@ -506,7 +490,7 @@ class HTMLManagement():
self
.
htmlFile
.
close
()
def
CreateHtmlTestRowQueue
(
self
,
options
,
status
,
ue_status
,
ue_queue
):
def
CreateHtmlTestRowQueue
(
self
,
options
,
status
,
infoList
):
if
((
not
self
.
htmlFooterCreated
)
and
(
self
.
htmlHeaderCreated
)):
self
.
htmlFile
=
open
(
'test_results.html'
,
'a'
)
currentTime
=
int
(
round
(
time
.
time
()
*
1000
))
-
self
.
startTime
...
...
@@ -517,25 +501,20 @@ class HTMLManagement():
self
.
htmlFile
.
write
(
' <td>'
+
self
.
desc
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td>'
+
str
(
options
)
+
'</td>
\n
'
)
if
(
str
(
status
)
==
'OK'
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightgreen" >'
+
str
(
status
)
+
'
</td>
\n
'
)
self
.
htmlFile
.
write
(
f' <td bgcolor = "lightgreen" >
{
status
}
</td>
\n
'
)
elif
(
str
(
status
)
==
'KO'
):
self
.
htmlFile
.
write
(
' <td bgcolor = "lightcoral" >'
+
str
(
status
)
+
'
</td>
\n
'
)
self
.
htmlFile
.
write
(
f' <td bgcolor = "lightcoral" >
{
status
}
</td>
\n
'
)
else
:
addOrangeBK
=
True
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >'
+
str
(
status
)
+
'</td>
\n
'
)
i
=
0
while
(
i
<
self
.
htmlUEConnected
):
if
(
i
<
ue_status
):
if
(
not
ue_queue
.
empty
()):
if
(
addOrangeBK
):
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >'
+
str
(
ue_queue
.
get
()).
replace
(
'white'
,
'orange'
)
+
'</td>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <td>'
+
str
(
ue_queue
.
get
())
+
'</td>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <td>-</td>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <td>-</td>
\n
'
)
i
+=
1
self
.
htmlFile
.
write
(
f' <td bgcolor = "orange" >
{
status
}
</td>
\n
'
)
if
(
addOrangeBK
):
self
.
htmlFile
.
write
(
' <td bgcolor = "orange" >'
)
else
:
self
.
htmlFile
.
write
(
' <td>'
)
for
i
in
infoList
:
self
.
htmlFile
.
write
(
f' <pre>
{
i
}
</pre>'
)
self
.
htmlFile
.
write
(
' </td>'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
close
()
...
...
@@ -546,80 +525,80 @@ class HTMLManagement():
vId
=
0
for
version
in
CCR
.
versions
:
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> Results for cppcheck v '
+
version
+
' </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> Results for cppcheck v '
+
version
+
' </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> NB ERRORS</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> NB ERRORS</b></td>
\n
'
)
if
CCR
.
nbErrors
[
vId
]
==
0
:
myColor
=
'lightgreen'
elif
CCR
.
nbErrors
[
vId
]
<
20
:
myColor
=
'orange'
else
:
myColor
=
'lightcoral'
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
bgcolor = "'
+
myColor
+
'"><b>'
+
str
(
CCR
.
nbErrors
[
vId
])
+
'</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
bgcolor = "'
+
myColor
+
'"><b>'
+
str
(
CCR
.
nbErrors
[
vId
])
+
'</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> NB WARNINGS</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> NB WARNINGS</b></td>
\n
'
)
if
CCR
.
nbWarnings
[
vId
]
==
0
:
myColor
=
'lightgreen'
elif
CCR
.
nbWarnings
[
vId
]
<
20
:
myColor
=
'orange'
else
:
myColor
=
'lightcoral'
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
bgcolor = "'
+
myColor
+
'"><b>'
+
str
(
CCR
.
nbWarnings
[
vId
])
+
'</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
bgcolor = "'
+
myColor
+
'"><b>'
+
str
(
CCR
.
nbWarnings
[
vId
])
+
'</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
> ----------------- </td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
> ----------------- </td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Memory leak</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbMemLeaks
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Memory leak</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbMemLeaks
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Possible null pointer deference</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbNullPtrs
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Possible null pointer deference</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbNullPtrs
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Uninitialized variable</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbUninitVars
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Uninitialized variable</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbUninitVars
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Undefined behaviour shifting</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbTooManyBitsShift
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Undefined behaviour shifting</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbTooManyBitsShift
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Signed integer overflow</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbIntegerOverflow
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Signed integer overflow</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbIntegerOverflow
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
> </td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
> </td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Printf formatting issues</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbInvalidPrintf
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Printf formatting issues</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbInvalidPrintf
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Modulo result is predetermined</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbModuloAlways
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Modulo result is predetermined</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbModuloAlways
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Opposite Condition -> dead code</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbOppoInnerCondition
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Opposite Condition -> dead code</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbOppoInnerCondition
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
2
bgcolor = "lightcyan" ><b> Wrong Scanf Nb Args</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
2
+
self
.
htmlUEConnected
)
+
'
>'
+
str
(
CCR
.
nbWrongScanfArg
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "lightcyan" ><b> Wrong Scanf Nb Args</b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"3"
>'
+
str
(
CCR
.
nbWrongScanfArg
[
vId
])
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
vId
+=
1
...
...
@@ -629,12 +608,12 @@ class HTMLManagement():
self
.
htmlFile
=
open
(
'test_results.html'
,
'a'
)
if
bool
(
testResult
)
==
False
and
bool
(
testSummary
)
==
False
:
self
.
htmlFile
.
write
(
' <tr bgcolor = "red" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> ----PHYSIM TESTING FAILED - Unable to recover the test logs ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> ----PHYSIM TESTING FAILED - Unable to recover the test logs ---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
else
:
# Tab header
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> ---- PHYSIM TEST SUMMARY---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> ---- PHYSIM TEST SUMMARY---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#33CCFF" >
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan="2">LogFile Name</th>
\n
'
)
...
...
@@ -652,27 +631,27 @@ class HTMLManagement():
self
.
htmlFile
.
write
(
' <td gcolor = "lightcyan" >'
+
str
(
testSummary
[
'Nbpass'
])
+
' </td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#F0F0F0" >
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b> ---- PHYSIM TEST DETAIL INFO---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"6"
><b> ---- PHYSIM TEST DETAIL INFO---- </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
self
.
htmlFile
.
write
(
' <tr bgcolor = "#33CCFF" >
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan="2">Test Name</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan="2">Test Description</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
>Result</th>
\n
'
)
self
.
htmlFile
.
write
(
' <th colspan=
"2"
>Result</th>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
y
=
''
for
key
,
value
in
testResult
.
items
():
x
=
key
.
split
(
"."
)
if
x
[
0
]
!=
y
:
self
.
htmlFile
.
write
(
' <tr bgcolor = "lightgreen" >
\n
'
)
self
.
htmlFile
.
write
(
' <td style="text-align: center;" colspan=
'
+
str
(
5
+
self
.
htmlUEConnected
)
+
'
><b>"'
+
x
[
0
]
+
'" series </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' <td style="text-align: center;" colspan=
"6"
><b>"'
+
x
[
0
]
+
'" series </b></td>
\n
'
)
self
.
htmlFile
.
write
(
' </tr>
\n
'
)
y
=
x
[
0
]
self
.
htmlFile
.
write
(
' <tr>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan="2" bgcolor = "lightcyan" >'
+
key
+
' </td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan="2" bgcolor = "lightcyan" >'
+
value
[
0
]
+
'</td>
\n
'
)
if
'PASS'
in
value
:
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
bgcolor = "green" >'
+
value
[
1
]
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "green" >'
+
value
[
1
]
+
'</td>
\n
'
)
else
:
self
.
htmlFile
.
write
(
' <td colspan=
'
+
str
(
1
+
self
.
htmlUEConnected
)
+
'
bgcolor = "red" >'
+
value
[
1
]
+
'</td>
\n
'
)
self
.
htmlFile
.
write
(
' <td colspan=
"2"
bgcolor = "red" >'
+
value
[
1
]
+
'</td>
\n
'
)
self
.
htmlFile
.
close
()
ci-scripts/cls_oaicitest.py
View file @
59af5bd8
...
...
@@ -780,22 +780,17 @@ class OaiCiTest():
logging
.
debug
(
' RSRP = '
+
str
(
-
140
+
nRSRP
)
+
' dBm'
)
SSH
.
close
()
SSH
.
disablePicocomClosure
()
html_queue
=
SimpleQueue
()
self
.
checkDevTTYisUnlocked
()
if
attach_status
:
html_cell
=
'<pre style="background-color:white">
CAT-M module Attachment Completed in '
+
str
(
attach_cnt
+
4
)
+
' seconds'
message
=
'
CAT-M module Attachment Completed in '
+
str
(
attach_cnt
+
4
)
+
' seconds'
if
(
nRSRQ
is
not
None
)
and
(
nRSRP
is
not
None
):
html_cell
+=
'
\n
RSRQ = '
+
str
(
-
20
+
(
nRSRQ
/
2
))
+
' dB'
html_cell
+=
'
\n
RSRP = '
+
str
(
-
140
+
nRSRP
)
+
' dBm</pre>'
else
:
html_cell
+=
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'OK'
,
1
,
html_queue
)
message
+=
'
\n
RSRQ = '
+
str
(
-
20
+
(
nRSRQ
/
2
))
+
' dB'
message
+=
'
\n
RSRP = '
+
str
(
-
140
+
nRSRP
)
+
' dBm'
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'OK'
,
[
message
])
else
:
logging
.
error
(
'
\u001B
[1m CAT-M module Attachment Failed
\u001B
[0m'
)
html_cell
=
'<pre style="background-color:white">CAT-M module Attachment Failed</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
1
,
html_queue
)
message
=
'CAT-M module Attachment Failed'
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
[
message
])
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
def
PingCatM
(
self
,
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
):
...
...
@@ -886,12 +881,11 @@ class OaiCiTest():
logging
.
debug
(
'
\u001B
[1;30;43m Packet Loss is not 0%
\u001B
[0m'
)
lock
.
release
()
SSH
.
close
()
html_cell
=
'<pre style="background-color:white">CAT-M module
\n
IP Address : '
+
moduleIPAddr
+
'
\n
'
+
qMsg
+
'</pre>'
statusQueue
.
put
(
html_cell
)
message
=
'CAT-M module
\n
IP Address : '
+
moduleIPAddr
+
'
\n
'
+
qMsg
if
(
packetLossOK
):
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'OK'
,
1
,
statusQueue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'OK'
,
[
message
]
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
1
,
statusQueue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
[
message
]
)
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
except
:
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
...
...
@@ -1017,7 +1011,7 @@ class OaiCiTest():
return
else
:
attach_status
=
True
html_queue
=
SimpleQueue
()
message
=
''
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
...
...
@@ -1025,23 +1019,22 @@ class OaiCiTest():
device_id
=
status_queue
.
get
()
message
=
status_queue
.
get
()
if
(
count
<
0
):
html_cell
=
'<pre style="background-color:white">UE ('
+
device_id
+
')
\n
'
+
message
+
'</pre>'
message
=
'UE ('
+
device_id
+
')
\n
'
+
message
else
:
html_cell
=
'<pre style="background-color:white">UE ('
+
device_id
+
')
\n
'
+
message
+
' in '
+
str
(
count
+
2
)
+
' seconds</pre>'
html_queue
.
put
(
html_cell
)
message
=
'UE ('
+
device_id
+
')
\n
'
+
message
+
' in '
+
str
(
count
+
2
)
+
' seconds'
if
(
attach_status
):
cnt
=
0
while
cnt
<
len
(
self
.
UEDevices
):
if
self
.
UEDevicesStatus
[
cnt
]
==
CONST
.
UE_STATUS_ATTACHING
:
self
.
UEDevicesStatus
[
cnt
]
=
CONST
.
UE_STATUS_ATTACHED
cnt
+=
1
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'OK'
,
[
message
]
)
result
=
re
.
search
(
'T_stdout'
,
str
(
RAN
.
Initialize_eNB_args
))
if
result
is
not
None
:
logging
.
debug
(
'Waiting 5 seconds to fill up record file'
)
time
.
sleep
(
5
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'N/A'
,
'KO'
,
[
message
]
)
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
else
:
#if an ID is specified, it is a module from the yaml infrastructure file
...
...
@@ -1418,19 +1411,17 @@ class OaiCiTest():
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
else
:
check_status
=
True
html_queue
=
SimpleQueue
()
messages
=
[]
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
check_status
=
False
device_id
=
status_queue
.
get
()
message
=
status_queue
.
get
()
html_cell
=
'<pre style="background-color:white">UE ('
+
device_id
+
')
\n
'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
messages
.
append
(
f'UE (
{
device_id
}
)
\n
{
status_queue
.
get
()
}
'
)
if
check_status
and
passStatus
:
HTML
.
CreateHtmlTestRowQueue
(
htmlOptions
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
htmlOptions
,
'OK'
,
messages
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
htmlOptions
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
htmlOptions
,
'KO'
,
messages
)
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
def
GetAllUEIPAddresses
(
self
):
...
...
@@ -1694,10 +1685,8 @@ class OaiCiTest():
os
.
kill
(
os
.
getppid
(),
signal
.
SIGUSR1
)
def
PingNoS1_wrong_exit
(
self
,
qMsg
,
HTML
):
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">OAI UE ping result
\n
'
+
qMsg
+
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
message
=
'OAI UE ping result
\n
{qMsg}'
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
[
message
])
def
PingNoS1
(
self
,
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
):
SSH
=
sshconnection
.
SSHConnection
()
...
...
@@ -1773,14 +1762,11 @@ class OaiCiTest():
qMsg
+=
'
\n
Packet Loss is not 0%'
logging
.
debug
(
'
\u001B
[1;30;43m Packet Loss is not 0%
\u001B
[0m'
)
SSH
.
close
()
html_queue
=
SimpleQueue
()
ip_addr
=
'TBD'
html_cell
=
'<pre style="background-color:white">OAI UE ping result
\n
'
+
qMsg
+
'</pre>'
html_queue
.
put
(
html_cell
)
message
=
f'OAI UE ping result
\n
{
qMsg
}
'
if
packetLossOK
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'OK'
,
[
message
]
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
[
message
]
)
# copying on the EPC server for logCollection
if
ping_from_eNB
is
not
None
:
...
...
@@ -1857,7 +1843,7 @@ class OaiCiTest():
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
else
:
ping_status
=
True
html_queue
=
SimpleQueue
()
messages
=
[]
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
...
...
@@ -1865,12 +1851,11 @@ class OaiCiTest():
device_id
=
status_queue
.
get
()
ip_addr
=
status_queue
.
get
()
message
=
status_queue
.
get
()
html_cell
=
'<pre style="background-color:white">UE ('
+
device_id
+
')
\n
IP Address : '
+
ip_addr
+
'
\n
'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
messages
.
append
(
f'UE (
{
device_id
}
)
\n
IP Address :
{
ip_addr
}
\n
{
message
}
'
)
if
(
ping_status
):
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'OK'
,
messages
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
ping_args
,
'KO'
,
messages
)
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
def
Iperf_ComputeTime
(
self
):
...
...
@@ -2909,7 +2894,7 @@ class OaiCiTest():
iperf_status
=
False
else
:
iperf_status
=
True
html_queue
=
SimpleQueue
()
messages
=
[]
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
...
...
@@ -2919,14 +2904,13 @@ class OaiCiTest():
device_id
=
status_queue
.
get
()
ip_addr
=
status_queue
.
get
()
message
=
status_queue
.
get
()
html_cell
=
'<pre style="background-color:white">UE ('
+
device_id
+
')
\n
IP Address : '
+
ip_addr
+
'
\n
'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
messages
.
append
(
f'UE (
{
device_id
}
)
\n
IP Address :
{
ip_addr
}
\n
{
message
}
'
)
if
(
iperf_noperf
and
iperf_status
):
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'PERF NOT MET'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'PERF NOT MET'
,
messages
)
elif
(
iperf_status
):
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'OK'
,
messages
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'KO'
,
messages
)
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
def
Iperf
(
self
,
HTML
,
RAN
,
EPC
,
COTS_UE
,
InfraUE
,
CONTAINERS
):
...
...
@@ -3001,7 +2985,7 @@ class OaiCiTest():
else
:
iperf_status
=
True
iperf_noperf
=
False
html_queue
=
SimpleQueue
()
messages
=
[]
while
(
not
status_queue
.
empty
()):
count
=
status_queue
.
get
()
if
(
count
<
0
):
...
...
@@ -3010,15 +2994,14 @@ class OaiCiTest():
iperf_noperf
=
True
device_id
=
status_queue
.
get
()
ip_addr
=
status_queue
.
get
()
message
=
status_queue
.
get
()
html_cell
=
'<pre style="background-color:white">UE ('
+
device_id
+
')
\n
IP Address : '
+
ip_addr
+
'
\n
'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
msg
=
status_queue
.
get
()
messages
.
append
(
f'UE (
{
device_id
}
)
\n
IP Address :
{
ip_addr
}
\n
{
msg
}
'
)
if
(
iperf_noperf
and
iperf_status
):
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'PERF NOT MET'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'PERF NOT MET'
,
messages
)
elif
(
iperf_status
):
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'OK'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'OK'
,
messages
)
else
:
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'KO'
,
len
(
self
.
UEDevices
),
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
iperf_args
,
'KO'
,
messages
)
self
.
AutoTerminateUEandeNB
(
HTML
,
RAN
,
COTS_UE
,
EPC
,
InfraUE
,
CONTAINERS
)
def
CheckProcessExist
(
self
,
check_eNB
,
check_OAI_UE
,
RAN
,
EPC
):
...
...
ci-scripts/cls_physim.py
View file @
59af5bd8
...
...
@@ -81,11 +81,7 @@ class PhySim:
#once parsed move the local logfile to its folder for tidiness
os
.
system
(
'mv '
+
self
.
__runLogFile
+
' '
+
self
.
__runLogPath
+
'/.'
)
#updating the HTML with results
html_cell
=
'<pre style="background-color:white">'
+
info
+
'</pre>'
html_queue
=
SimpleQueue
()
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
runargs
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
runargs
,
'OK'
,
[
info
])
return
HTML
def
__CheckResults_LDPCt1Test
(
self
,
HTML
,
CONST
,
testcase_id
):
...
...
@@ -131,8 +127,7 @@ class PhySim:
if
ret
!=
0
:
error_msg
=
f'could not recover test result file
{
filename
}
'
logging
.
error
(
error_msg
)
html_queue
.
put
(
f'<pre style="background-color:white">
{
error_msg
}
</pre>'
)
HTML
.
CreateHtmlTestRowQueue
(
"could not recover results"
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
"could not recover results"
,
'KO'
,
[
error_msg
])
self
.
exitStatus
=
1
return
HTML
...
...
@@ -145,13 +140,11 @@ class PhySim:
#updating the HTML with results
if
PUSCH_OK
:
html_queue
.
put
(
'<pre style="background-color:white">succeeded</pre>'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
runargs
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
runargs
,
'OK'
,
1
,
[
"succeeded"
])
else
:
error_msg
=
'error: no "PUSCH test OK"'
logging
.
error
(
error_msg
)
html_queue
.
put
(
f'<pre style="background-color:white">
{
error_msg
}
</pre>'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
runargs
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
runargs
,
'KO'
,
1
,
[
error_msg
])
self
.
exitStatus
=
1
return
HTML
...
...
ci-scripts/cls_static_code_analysis.py
View file @
59af5bd8
...
...
@@ -357,63 +357,43 @@ class StaticCodeAnalysis():
if
nbFilesNotFormatted
==
0
:
HTML
.
CreateHtmlTestRow
(
'File(s) Format'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
else
:
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">
\n
'
html_cell
+=
'Number of files not following OAI Rules: '
+
str
(
nbFilesNotFormatted
)
+
'
\n
'
html_cell
=
f'Number of files not following OAI Rules:
{
nbFilesNotFormatted
}
\n
'
for
nFile
in
listFilesNotFormatted
:
html_cell
+=
str
(
nFile
).
strip
()
+
'
\n
'
html_cell
+=
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
'File(s) Format'
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'File(s) Format'
,
'KO'
,
[
html_cell
])
del
(
html_cell
)
del
(
html_queue
)
logging
.
debug
(
'header files not respecting the circular dependency protection: '
+
str
(
len
(
circularHeaderDependencyFiles
)))
if
len
(
circularHeaderDependencyFiles
)
==
0
:
HTML
.
CreateHtmlTestRow
(
'Header Circular Dependency'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
else
:
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">
\n
'
html_cell
+=
'Number of files not respecting: '
+
str
(
len
(
circularHeaderDependencyFiles
))
+
'
\n
'
html_cell
=
f'Number of files not respecting:
{
len
(
circularHeaderDependencyFiles
)
}
\n
'
for
nFile
in
circularHeaderDependencyFiles
:
html_cell
+=
str
(
nFile
).
strip
()
+
'
\n
'
html_cell
+=
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
'Header Circular Dependency'
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'Header Circular Dependency'
,
'KO'
,
[
html_cell
])
del
(
html_cell
)
del
(
html_queue
)
finalStatus
=
-
1
logging
.
debug
(
'files with a GNU GPL license: '
+
str
(
len
(
gnuGplLicenceFiles
)))
if
len
(
gnuGplLicenceFiles
)
==
0
:
HTML
.
CreateHtmlTestRow
(
'Files w/ GNU GPL License'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
else
:
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">
\n
'
html_cell
+=
'Number of files not respecting: '
+
str
(
len
(
gnuGplLicenceFiles
))
+
'
\n
'
html_cell
=
f'Number of files not respecting:
{
len
(
gnuGplLicenceFiles
)
}
\n
'
for
nFile
in
gnuGplLicenceFiles
:
html_cell
+=
str
(
nFile
).
strip
()
+
'
\n
'
html_cell
+=
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
'Files w/ GNU GPL License'
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'Files w/ GNU GPL License'
,
'KO'
,
html_queue
)
del
(
html_cell
)
del
(
html_queue
)
finalStatus
=
-
1
logging
.
debug
(
'files with a suspect license: '
+
str
(
len
(
suspectLicenceFiles
)))
if
len
(
suspectLicenceFiles
)
==
0
:
HTML
.
CreateHtmlTestRow
(
'Files with suspect license'
,
'OK'
,
CONST
.
ALL_PROCESSES_OK
)
else
:
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">
\n
'
html_cell
+=
'Number of files not respecting: '
+
str
(
len
(
suspectLicenceFiles
))
+
'
\n
'
html_cell
=
f'Number of files not respecting:
{
len
(
suspectLicenceFiles
)
}
\n
'
for
nFile
in
suspectLicenceFiles
:
html_cell
+=
str
(
nFile
).
strip
()
+
'
\n
'
html_cell
+=
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
'Files with suspect license'
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
'Files with suspect license'
,
'KO'
,
[
html_cell
])
del
(
html_cell
)
del
(
html_queue
)
finalStatus
=
-
1
else
:
...
...
ci-scripts/epc.py
View file @
59af5bd8
...
...
@@ -237,7 +237,7 @@ class EPCManagement():
sys
.
exit
(
'Insufficient EPC Parameters'
)
mySSH
=
SSH
.
SSHConnection
()
mySSH
.
open
(
self
.
IPAddress
,
self
.
UserName
,
self
.
Password
)
html_cell
=
'
<pre style="background-color:white">
\n
'
html_cell
=
''
if
re
.
match
(
'ltebox'
,
self
.
Type
,
re
.
IGNORECASE
):
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
)
...
...
@@ -288,11 +288,8 @@ class EPCManagement():
html_cell
+=
'
\n
'
else
:
logging
.
error
(
'This option should not occur!'
)
html_cell
+=
'</pre>'
mySSH
.
close
()
html_queue
=
SimpleQueue
()
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
[
html_cell
])
def
SetAmfIPAddress
(
self
):
# Not an error if we don't need an 5GCN
...
...
@@ -551,10 +548,7 @@ class EPCManagement():
else
:
logging
.
error
(
'This should not happen!'
)
mySSH
.
close
()
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
[
message
])
def
DeployEpc
(
self
,
HTML
):
logging
.
debug
(
'Trying to deploy'
)
...
...
@@ -644,7 +638,7 @@ class EPCManagement():
expectedHealthyContainers
+=
1
mySSH
.
command
(
'docker-compose config | grep --colour=never image'
,
'\$'
,
10
)
html_cell
=
'
<pre style="background-color:white">
\n
'
html_cell
=
''
listOfImages
=
mySSH
.
getBefore
()
for
imageLine
in
listOfImages
.
split
(
'
\\
r
\\
n'
):
res1
=
re
.
search
(
'image: (?P<name>[a-zA-Z0-9\-]+):(?P<tag>[a-zA-Z0-9\-]+)'
,
str
(
imageLine
))
...
...
@@ -666,7 +660,6 @@ class EPCManagement():
if
res4
is
not
None
:
html_cell
+=
'('
+
res4
.
group
(
'date'
)
+
')'
html_cell
+=
'
\n
'
html_cell
+=
'</pre>'
# Checking if all are healthy
cnt
=
0
while
(
cnt
<
3
):
...
...
@@ -682,8 +675,6 @@ class EPCManagement():
logging
.
debug
(
' -- '
+
str
(
healthyNb
)
+
' healthy container(s)'
)
logging
.
debug
(
' -- '
+
str
(
unhealthyNb
)
+
' unhealthy container(s)'
)
logging
.
debug
(
' -- '
+
str
(
startingNb
)
+
' still starting container(s)'
)
html_queue
=
SimpleQueue
()
html_queue
.
put
(
html_cell
)
if
healthyNb
==
expectedHealthyContainers
:
mySSH
.
command
(
'docker exec -d prod-oai-hss /bin/bash -c "nohup tshark -i any -f
\'
port 9042 or port 3868
\'
-w /tmp/hss_check_run.pcap 2>&1 > /dev/null"'
,
'\$'
,
5
)
if
self
.
isMagmaUsed
:
...
...
@@ -695,11 +686,11 @@ class EPCManagement():
mySSH
.
command
(
'docker exec -d prod-oai-spgwu-tiny /bin/bash -c "nohup tshark -i any -f
\'
port 8805
\'
-w /tmp/spgwu_check_run.pcap 2>&1 > /dev/null"'
,
'\$'
,
10
)
mySSH
.
close
()
logging
.
debug
(
'Deployment OK'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
[
html_cell
]
)
else
:
mySSH
.
close
()
logging
.
debug
(
'Deployment went wrong'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'KO'
,
[
html_cell
]
)
def
UndeployEpc
(
self
,
HTML
):
logging
.
debug
(
'Trying to undeploy'
)
...
...
@@ -767,15 +758,12 @@ class EPCManagement():
mySSH
.
command
(
'docker inspect --format=
\'
{{.Name}}
\'
prod-oai-public-net prod-oai-private-net'
,
'\$'
,
10
)
noMoreNetworkNb
=
mySSH
.
getBefore
().
count
(
'No such object'
)
mySSH
.
close
()
html_queue
=
SimpleQueue
()
html_cell
=
'<pre style="background-color:white">'
+
message
+
'</pre>'
html_queue
.
put
(
html_cell
)
if
noMoreContainerNb
==
nbContainers
and
noMoreNetworkNb
==
2
:
logging
.
debug
(
'Undeployment OK'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'OK'
,
[
message
]
)
else
:
logging
.
debug
(
'Undeployment went wrong'
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'KO'
,
1
,
html_queue
)
HTML
.
CreateHtmlTestRowQueue
(
self
.
Type
,
'KO'
,
[
message
]
)
def
LogCollectHSS
(
self
):
mySSH
=
SSH
.
SSHConnection
()
...
...
ci-scripts/main.py
View file @
59af5bd8
...
...
@@ -717,7 +717,6 @@ elif re.match('^InitiateHtml$', mode, re.IGNORECASE):
terminate_ue_flag
=
False
CiTestObj
.
GetAllUEDevices
(
terminate_ue_flag
)
CiTestObj
.
GetAllCatMDevices
(
terminate_ue_flag
)
HTML
.
SethtmlUEConnected
(
len
(
CiTestObj
.
UEDevices
)
+
len
(
CiTestObj
.
CatMDevices
))
HTML
.
htmlNb_Smartphones
=
len
(
CiTestObj
.
UEDevices
)
HTML
.
htmlNb_CATM_Modules
=
len
(
CiTestObj
.
CatMDevices
)
HTML
.
CreateHtmlHeader
(
CiTestObj
.
ADBIPAddress
)
...
...
@@ -824,7 +823,6 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
CiTestObj
.
UEDevices
.
append
(
'COTS-Module'
)
else
:
CiTestObj
.
UEDevices
.
append
(
'OAI-UE'
)
HTML
.
SethtmlUEConnected
(
len
(
CiTestObj
.
UEDevices
)
+
len
(
CiTestObj
.
CatMDevices
))
HTML
.
CreateHtmlTabHeader
()
# On CI bench w/ containers, we need to validate if IP routes are set
...
...
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