Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
MEC - Multi-access Edge Computing
MEC TTCN-3 Test Suite
Commits
68867733
Commit
68867733
authored
Aug 09, 2019
by
Elian Kraja
Browse files
Merging jsonMessageBodyTypes and JsonTemplates
parents
30d3f8ad
b55fa194
Changes
33
Hide whitespace changes
Inline
Side-by-side
LICENSE
0 → 100644
View file @
68867733
ETSI Software License
As long as the hereunder conditions are respected, non-exclusive permission is
hereby granted, free of charge, to use, reproduce and modify this software
source code, under the following conditions:
- This source code is provided “AS IS” with no warranties, express or implied,
including but not limited to, the warranties of merchantability, fitness for
a particular purpose and warranties for non-infringement of intellectual
property rights. ETSI shall not be held liable in any event for any direct or
indirect damages whatsoever (including, without limitation, damages for loss
of profits, business interruption, loss of information, or any other pecuniary
loss) arising out of or related to the use of or inability to use the
source code.
- This permission is granted to facilitate the implementation of the related
ETSI standard, provided that ETSI is given the right to use, reproduce and
amend the modified source code under the same conditions as the
present permission.
- This permission does not apply to any documentation associated with this
source code for which ETSI keeps all rights reserved.
The present ETSI Source Code license shall be included in all copies of whole
or part of this source code and shall not imply any sub-license right.
TODO.md
View file @
68867733
...
@@ -21,6 +21,14 @@ This file provides the list of the TODOs related to the STF 569.
...
@@ -21,6 +21,14 @@ This file provides the list of the TODOs related to the STF 569.
### RNIS
### RNIS
Draft ETSI GS MEC 012 2.0.4
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2
-
TC_MEC_SRV_RNIS_011_OK
<font
color=
"color:green"
>
To be tested
</font>
-
TC_MEC_SRV_RNIS_012_OK
<font
color=
"color:green"
>
To be tested
</font>
### SAQ
### SAQ
### SRVSUB
### SRVSUB
...
@@ -29,18 +37,39 @@ This file provides the list of the TODOs related to the STF 569.
...
@@ -29,18 +37,39 @@ This file provides the list of the TODOs related to the STF 569.
### TRAF
### TRAF
Draft ETSI GS MEC 011 V2.0.9 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/TRAF/PlatTrafficRules.tplan2
-
TC_MEC_SRV_TRANS_001_OK
<font
color=
"color:green"
>
To be tested
</font>
-
TC_MEC_SRV_TRAF_001_OK
<font
color=
"color:green"
>
To be tested
</font>
-
TC_MEC_SRV_TRAF_002_OK
<font
color=
"color:green"
>
To be tested
</font>
-
TC_MEC_SRV_TRAF_003_OK
<font
color=
"color:green"
>
To be tested
</font>
-
TC_MEC_SRV_TRAF_001_NF
<font
color=
"color:green"
>
To be tested
</font>
### TRANS
### TRANS
Draft ETSI GS MEC 011 V2.0.9 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/TRANS/PlatTransport.tplan2
-
TP_MEC_SRV_TRAF_001_OK
<font
color=
"color:green"
>
To be tested
</font>
### UEAREASUB
### UEAREASUB
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTSUB/PlatUeAreaSubscription.tplan2
TODO CircleNotificationSubscription data structure not found
### UEDISTLOOK
### UEDISTLOOK
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTSUB/PlatUeDistanceSubscription.tplan2
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTLOOK/PlatUeDistanceSubscription.tplan2
TODO TerminalDistance data structure not found
TODO TerminalDistance data structure not found
### UEDISTSUB
### UEDISTSUB
...
@@ -50,7 +79,6 @@ https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20
...
@@ -50,7 +79,6 @@ https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20
TODO DistanceNotificationSubscription data structure not found
TODO DistanceNotificationSubscription data structure not found
### UEINFLOOK
### UEINFLOOK
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
...
...
ccsrc/Protocols/Json/json_codec.cc
View file @
68867733
...
@@ -24,6 +24,10 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O
...
@@ -24,6 +24,10 @@ int json_codec::encode (const LibItsHttp__JsonMessageBodyTypes::JsonBody& msg, O
const
LocationAPI__TypesAndValues
::
UserTrackingSubscription
&
user_tracking_subscription
=
msg
.
userTrackingSubscription
();
const
LocationAPI__TypesAndValues
::
UserTrackingSubscription
&
user_tracking_subscription
=
msg
.
userTrackingSubscription
();
user_tracking_subscription
.
encode
(
LocationAPI__TypesAndValues
::
UserTrackingSubscription_descr_
,
encoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
user_tracking_subscription
.
encode
(
LocationAPI__TypesAndValues
::
UserTrackingSubscription_descr_
,
encoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
data
=
char2oct
(
CHARSTRING
(
"{
\"
userTrackingSubscription
\"
: "
))
+
OCTETSTRING
(
encoding_buffer
.
get_len
(),
encoding_buffer
.
get_data
())
+
char2oct
(
CHARSTRING
(
"}"
));
data
=
char2oct
(
CHARSTRING
(
"{
\"
userTrackingSubscription
\"
: "
))
+
OCTETSTRING
(
encoding_buffer
.
get_len
(),
encoding_buffer
.
get_data
())
+
char2oct
(
CHARSTRING
(
"}"
));
}
else
if
(
msg
.
ischosen
(
LibItsHttp__JsonMessageBodyTypes
::
JsonBody
::
ALT_cellChangeSubscription
))
{
const
RnisAPI__TypesAndValues
::
CellChangeSubscription
&
cell_change_subscription
=
msg
.
cellChangeSubscription
();
cell_change_subscription
.
encode
(
RnisAPI__TypesAndValues
::
CellChangeSubscription_descr_
,
encoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
data
=
char2oct
(
CHARSTRING
(
"{
\"
CellChangeSubscription
\"
: "
))
+
OCTETSTRING
(
encoding_buffer
.
get_len
(),
encoding_buffer
.
get_data
())
+
char2oct
(
CHARSTRING
(
"}"
));
}
else
{
}
else
{
loggers
::
get_instance
().
error
(
"json_codec::encode: Not supported"
);
loggers
::
get_instance
().
error
(
"json_codec::encode: Not supported"
);
}
}
...
@@ -58,21 +62,26 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy
...
@@ -58,21 +62,26 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy
// ..and create the decoding buffer
// ..and create the decoding buffer
TTCN_Buffer
decoding_buffer
(
OCTETSTRING
(
str
.
length
(),
(
const
unsigned
char
*
)
str
.
c_str
()));
TTCN_Buffer
decoding_buffer
(
OCTETSTRING
(
str
.
length
(),
(
const
unsigned
char
*
)
str
.
c_str
()));
if
(
it
->
second
.
find
(
"
\"
userList
\"
"
)
!=
std
::
string
::
npos
)
{
// Be careful
l
to the order
if
(
it
->
second
.
find
(
"
\"
userList
\"
"
)
!=
std
::
string
::
npos
)
{
// Be careful to the order
// TODO To be refined, find("\"userList\"") is not optimal
// TODO To be refined, find("\"userList\"") is not optimal
LocationAPI__TypesAndValues
::
UserList
user_list
;
LocationAPI__TypesAndValues
::
UserList
user_list
;
user_list
.
decode
(
LocationAPI__TypesAndValues
::
UserList_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
user_list
.
decode
(
LocationAPI__TypesAndValues
::
UserList_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
userList
()
=
user_list
;
msg
.
userList
()
=
user_list
;
}
else
if
(
it
->
second
.
find
(
"
\"
accessPointList
\"
"
)
!=
std
::
string
::
npos
)
{
// Be careful
l
to the order
}
else
if
(
it
->
second
.
find
(
"
\"
accessPointList
\"
"
)
!=
std
::
string
::
npos
)
{
// Be careful to the order
// TODO To be refined, find("\"accessPointList\"") is not optimal
// TODO To be refined, find("\"accessPointList\"") is not optimal
LocationAPI__TypesAndValues
::
AccessPointList
access_point_list
;
LocationAPI__TypesAndValues
::
AccessPointList
access_point_list
;
access_point_list
.
decode
(
LocationAPI__TypesAndValues
::
AccessPointList_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
access_point_list
.
decode
(
LocationAPI__TypesAndValues
::
AccessPointList_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
accessPointList
()
=
access_point_list
;
msg
.
accessPointList
()
=
access_point_list
;
}
else
if
(
it
->
second
.
find
(
"
\"
SubscriptionLinkList
\"
"
)
!=
std
::
string
::
npos
)
{
// Be careful
l
to the order
}
else
if
(
it
->
second
.
find
(
"
\"
SubscriptionLinkList
\"
"
)
!=
std
::
string
::
npos
)
{
// Be careful to the order
// TODO To be refined, find("\"accessPointList\"") is not optimal
// TODO To be refined, find("\"accessPointList\"") is not optimal
RnisAPI__TypesAndValues
::
SubscriptionLinkList
subscription_link_list
;
RnisAPI__TypesAndValues
::
SubscriptionLinkList
subscription_link_list
;
subscription_link_list
.
decode
(
RnisAPI__TypesAndValues
::
SubscriptionLinkList_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
subscription_link_list
.
decode
(
RnisAPI__TypesAndValues
::
SubscriptionLinkList_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
subscriptionLinkList
()
=
subscription_link_list
;
msg
.
subscriptionLinkList
()
=
subscription_link_list
;
}
else
if
(
it
->
second
.
find
(
"
\"
transportInfoList
\"
"
)
!=
std
::
string
::
npos
)
{
// Be careful to the order
// TODO To be refined, find("\"accessPointList\"") is not optimal
AppEnablementAPI__TypesAndValues
::
TransportInfoList
transport_info_list
;
transport_info_list
.
decode
(
AppEnablementAPI__TypesAndValues
::
TransportInfoList_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
transportInfoList
()
=
transport_info_list
;
}
else
if
(
it
->
second
.
find
(
"
\"
userTrackingSubscription
\"
"
)
!=
std
::
string
::
npos
)
{
}
else
if
(
it
->
second
.
find
(
"
\"
userTrackingSubscription
\"
"
)
!=
std
::
string
::
npos
)
{
LocationAPI__TypesAndValues
::
UserTrackingSubscription
user_tracking_subscription
;
LocationAPI__TypesAndValues
::
UserTrackingSubscription
user_tracking_subscription
;
user_tracking_subscription
.
decode
(
LocationAPI__TypesAndValues
::
UserTrackingSubscription_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
user_tracking_subscription
.
decode
(
LocationAPI__TypesAndValues
::
UserTrackingSubscription_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
...
@@ -85,6 +94,23 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy
...
@@ -85,6 +94,23 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy
UEidentityAPI__TypesAndValues
::
UeIdentityTagInfo
ue_identity_tag_info
;
UEidentityAPI__TypesAndValues
::
UeIdentityTagInfo
ue_identity_tag_info
;
ue_identity_tag_info
.
decode
(
UEidentityAPI__TypesAndValues
::
UeIdentityTagInfo_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
ue_identity_tag_info
.
decode
(
UEidentityAPI__TypesAndValues
::
UeIdentityTagInfo_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
ueIdentityTagInfo
()
=
ue_identity_tag_info
;
msg
.
ueIdentityTagInfo
()
=
ue_identity_tag_info
;
}
else
if
(
it
->
second
.
find
(
"
\"
trafficRule
\"
"
)
!=
std
::
string
::
npos
)
{
AppEnablementAPI__TypesAndValues
::
TrafficRule
traffic_rule
;
traffic_rule
.
decode
(
AppEnablementAPI__TypesAndValues
::
TrafficRule_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
trafficRule
()
=
traffic_rule
;
}
else
if
(
it
->
second
.
find
(
"
\"
CellChangeSubscription
\"
"
)
!=
std
::
string
::
npos
)
{
RnisAPI__TypesAndValues
::
CellChangeSubscription
cell_change_subscription
;
cell_change_subscription
.
decode
(
RnisAPI__TypesAndValues
::
CellChangeSubscription_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
cellChangeSubscription
()
=
cell_change_subscription
;
//TODO Continue with other ChangeSubscription
}
else
if
(
it
->
second
.
find
(
"
\"
RabInfo
\"
"
)
!=
std
::
string
::
npos
)
{
RnisAPI__TypesAndValues
::
RabInfo
rab_info
;
rab_info
.
decode
(
RnisAPI__TypesAndValues
::
RabInfo_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
rabInfo
()
=
rab_info
;
}
else
if
(
it
->
second
.
find
(
"
\"
PlmnInfo
\"
"
)
!=
std
::
string
::
npos
)
{
RnisAPI__TypesAndValues
::
PlmnInfo
plmn_info
;
plmn_info
.
decode
(
RnisAPI__TypesAndValues
::
PlmnInfo_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
plmnInfo
()
=
plmn_info
;
}
else
if
(
it
->
second
.
find
(
"
\"
bwInfo
\"
"
)
!=
std
::
string
::
npos
)
{
}
else
if
(
it
->
second
.
find
(
"
\"
bwInfo
\"
"
)
!=
std
::
string
::
npos
)
{
BwManagementAPI__TypesAndValues
::
BwInfo
bw_info
;
BwManagementAPI__TypesAndValues
::
BwInfo
bw_info
;
...
@@ -105,9 +131,17 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy
...
@@ -105,9 +131,17 @@ int json_codec::decode (const OCTETSTRING& p_data, LibItsHttp__JsonMessageBodyTy
bw_info
.
decode
(
BwManagementAPI__TypesAndValues
::
BwInfo_descr_
,
decoding_buffer_
,
TTCN_EncDec
::
CT_JSON
);
bw_info
.
decode
(
BwManagementAPI__TypesAndValues
::
BwInfo_descr_
,
decoding_buffer_
,
TTCN_EncDec
::
CT_JSON
);
msg
.
bwInfo
()
=
bw_info
;
msg
.
bwInfo
()
=
bw_info
;
}
else
if
(
it
->
second
.
find
(
"
\"
problemDetails
\"
"
)
!=
std
::
string
::
npos
)
{
// TODO To be refined, problemDetails in different modules
}
else
if
(
it
->
second
.
find
(
"
\"
problemDetails
\"
"
)
!=
std
::
string
::
npos
)
{
// TODO To be refined, problemDetails in different modules
UEidentityAPI__TypesAndValues
::
ProblemDetails
problem_details
;
problem_details
.
decode
(
UEidentityAPI__TypesAndValues
::
ProblemDetails_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
problemDetails__ue__identity
()
=
problem_details
;
// UEidentityAPI__TypesAndValues::ProblemDetails problem_details;
// problem_details.decode(UEidentityAPI__TypesAndValues::ProblemDetails_descr_, decoding_buffer, TTCN_EncDec::CT_JSON);
// msg.problemDetails__ue__identity() = problem_details;
RnisAPI__TypesAndValues
::
ProblemDetails
problem_details
;
problem_details
.
decode
(
RnisAPI__TypesAndValues
::
ProblemDetails_descr_
,
decoding_buffer
,
TTCN_EncDec
::
CT_JSON
);
msg
.
problemDetails__rni
()
=
problem_details
;
}
else
{
}
else
{
loggers
::
get_instance
().
warning
(
"json_codec::decode: Unsupported variant"
);
loggers
::
get_instance
().
warning
(
"json_codec::decode: Unsupported variant"
);
return
-
1
;
return
-
1
;
...
...
docker/Dockerfile
View file @
68867733
...
@@ -37,6 +37,7 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update \
...
@@ -37,6 +37,7 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update \
libssl-dev
\
libssl-dev
\
libtool-bin
\
libtool-bin
\
libtool
\
libtool
\
libwebsockets-dev
\
libwireshark-dev
\
libwireshark-dev
\
libxml2-dev
\
libxml2-dev
\
lsof
\
lsof
\
...
@@ -87,9 +88,9 @@ RUN cd /home/etsi \
...
@@ -87,9 +88,9 @@ RUN cd /home/etsi \
# Seems that COPY does not work as expected, to be investaged
# Seems that COPY does not work as expected, to be investaged
#==> Fallback to more secured solution
#==> Fallback to more secured solution
#COPY [^.]*
/home/etsi/dev/STF569_Mec
/
ADD
.
/home/etsi/dev/STF569_Mec
#COPY home home/etsi
#COPY home home/etsi
RUN
git clone https://forge.etsi.org/gitlab/mec/gs032p3-ttcn-test-suite.git /home/etsi/dev/STF569_Mec
#
RUN git clone https://forge.etsi.org/gitlab/mec/gs032p3-ttcn-test-suite.git /home/etsi/dev/STF569_Mec
RUN
chown
-R
etsi /home/etsi/dev/STF569_Mec/
&&
cd
/home/etsi/dev/STF569_Mec
RUN
chown
-R
etsi /home/etsi/dev/STF569_Mec/
&&
cd
/home/etsi/dev/STF569_Mec
USER
etsi
USER
etsi
...
@@ -107,8 +108,6 @@ RUN cd /home/etsi/frameworks \
...
@@ -107,8 +108,6 @@ RUN cd /home/etsi/frameworks \
&&
rm
-f
./eclipse-cpp-photon-R-linux-gtk-x86_64.tar.gz
\
&&
rm
-f
./eclipse-cpp-photon-R-linux-gtk-x86_64.tar.gz
\
&&
cd
/home/etsi/dev/STF569_Mec
\
&&
cd
/home/etsi/dev/STF569_Mec
\
&&
cd
/home/etsi/dev/STF569_Mec/ttcn
\
&&
cd
/home/etsi/dev/STF569_Mec/ttcn
\
&&
git clone https://forge.etsi.org/gitlab/LIBS/LibSip.git ./LibSip
\
&&
git clone https://forge.etsi.org/gitlab/LIBS/LibIms.git ./LibIms
\
&&
git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon
\
&&
git clone https://forge.etsi.org/gitlab/LIBS/LibCommon.git ./LibCommon
\
&&
git clone
-bSTF525
https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts
\
&&
git clone
-bSTF525
https://forge.etsi.org/gitlab/LIBS/LibIts ./LibIts
\
&&
cd
/home/etsi/dev/STF569_Mec/ttcn/LibIts
\
&&
cd
/home/etsi/dev/STF569_Mec/ttcn/LibIts
\
...
...
docker/build-container.sh
View file @
68867733
...
@@ -3,20 +3,25 @@
...
@@ -3,20 +3,25 @@
# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt
# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt
#set -e
#set -e
#
set -vx
set
-vx
DOCKER_FILE
=
./docker/Dockerfile
DOCKER_FILE
=
./docker/Dockerfile
if
[
-f
${
DOCKER_FILE
}
]
if
[
-f
${
DOCKER_FILE
}
]
then
then
docker
rm
--force
stf569_Mec
#check and build stf569_mec image
docker build
--tag
stf569_Mec
--force-rm
-f
${
DOCKER_FILE
}
.
DOCKER_ID
=
`
docker ps
-a
|
grep
-e
stf569_mec |
awk
'{ print $1 }'
`
if
[
!
-z
"
${
DOCKER_ID
}
"
]
then
docker
rm
--force
stf569_mec
fi
docker build
--tag
stf569_mec
--force-rm
-f
${
DOCKER_FILE
}
.
if
[
"
$?
"
!=
"0"
]
if
[
"
$?
"
!=
"0"
]
then
then
echo
"Docker build failed:
$?
"
echo
"Docker build failed:
$?
"
exit
-1
exit
-1
fi
fi
docker image
ls
-a
docker image
ls
-a
docker inspect stf569_
M
ec:latest
docker inspect stf569_
m
ec:latest
if
[
"
$?
"
!=
"0"
]
if
[
"
$?
"
!=
"0"
]
then
then
echo
"Docker inspect failed:
$?
"
echo
"Docker inspect failed:
$?
"
...
...
docker/run-container.sh
View file @
68867733
...
@@ -5,9 +5,9 @@
...
@@ -5,9 +5,9 @@
#set -e
#set -e
#set -vx
#set -vx
docker run stf569_
M
ec:latest
"/bin/bash"
\
docker run stf569_
m
ec:latest
"/bin/bash"
\
-c
"source /home/etsi/devenv.bash
\
-c
"source /home/etsi/devenv.bash
\
&& cd /home/etsi/dev/etsi_
emcom
/src/AtsMec/objs
\
&& cd /home/etsi/dev/etsi_
mec
/src/AtsMec/objs
\
&& ../bin/run_all.bash
\
&& ../bin/run_all.bash
\
&& ls -ltr ../logs"
&& ls -ltr ../logs"
...
...
etc/AtsMec/AtsMec.cfg
View file @
68867733
...
@@ -7,21 +7,27 @@ LibCommon_Time.PX_TAC := 30.0
...
@@ -7,21 +7,27 @@ LibCommon_Time.PX_TAC := 30.0
LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0;
LibCommon_Sync.PX_TSYNC_TIME_LIMIT := 30.0;
LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0;
LibCommon_Sync.PX_TSHUT_DOWN_TIME_LIMIT := 30.0;
LibItsHttp_Pics.PICS_HEADER_HOST := "172.28.4.87"
LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.56.1"
#LibItsHttp_Pics.PICS_HEADER_HOST := "172.28.4.87"
#LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.0.17"
#LibItsHttp_Pics.PICS_HEADER_HOST := "192.168.0.17"
LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json"
LibItsHttp_Pics.PICS_HEADER_CONTENT_TYPE := "application/json"
LibMec_Pics.PICS_MEC_PLAT := true
LibMec_Pics.PICS_MEC_PLAT := true
LibMec_Pics.PICS_SERVICES := true
LibMec_Pics.PICS_SERVICES := true
LibMec_Pics.PICS_RNIS := false
LibMec_Pics.PICS_RNIS := true
LibMec_Pics.PICS_RNIS_QUERY := true
LibMec_Pics.PICS_RNIS_ALL_SUBSCRIPTIONS := true
LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := false
LocationAPI_Pics.PICS_LOCATION_API_SUPPORTED := false
UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED :=
tru
e
UEidentityAPI_Pics.PICS_UE_IDENTITY_API_SUPPORTED :=
fals
e
BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false
BwManagementAPI_Pics.PICS_BWMANAGEMENT_API_SUPPORTED := false
AppEnablementAPI_Pics.PICS_ENABLE_APP_API_SUPPORTED := true
[LOGGING]
[LOGGING]
# In this section you can specify the name of the log file and the classes of events
# In this section you can specify the name of the log file and the classes of events
# you want to log into the file or display on console (standard error).
# you want to log into the file or display on console (standard error).
...
@@ -38,7 +44,7 @@ LogEventTypes:= Yes
...
@@ -38,7 +44,7 @@ LogEventTypes:= Yes
[TESTPORT_PARAMETERS]
[TESTPORT_PARAMETERS]
# In this section you can specify parameters that are passed to Test Ports.
# In this section you can specify parameters that are passed to Test Ports.
system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=1
7
2.
28.4.87
,port=8081,use_ssl=0)"
system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=1
9
2.
168.56.1
,port=8081,use_ssl=0)"
[DEFINE]
[DEFINE]
# In this section you can create macro definitions,
# In this section you can create macro definitions,
...
@@ -69,7 +75,7 @@ system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.2
...
@@ -69,7 +75,7 @@ system.httpPort.params := "HTTP(codecs=json:json_codec)/TCP(debug=1,server=172.2
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_001_NF
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_BR
AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF
#
AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_OK
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_BR
#AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UELOC_001_BR
...
@@ -94,6 +100,17 @@ AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF
...
@@ -94,6 +100,17 @@ AtsMec_UEidentityAPI_TestCases.TC_MEC_SRV_UETAG_002_PF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_OK
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF
#AtsMec_LocationAPI_TestCases.TC_MEC_SRV_UEINFSUB_002_NF
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_OK
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_011_BR
#AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_012_BR
AtsMec_RnisAPI_TestCases.TC_MEC_SRV_RNIS_016_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRANS_001_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_002_OK
#AtsMec_AppEnablementAPI_TestCases.TC_MEC_SRV_TRAF_001_NF
[GROUPS]
[GROUPS]
# In this section you can specify groups of hosts. These groups can be used inside the
# In this section you can specify groups of hosts. These groups can be used inside the
# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts.
# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts.
...
...
simu/data/security.csv
0 → 100644
View file @
68867733
id,grantTypes,tokenEndpoint
security0,OAUTH2_CLIENT_CREDENTIALS,/meMp1/security/TokenEndPoint
simu/data/traffic_rules.csv
0 → 100644
View file @
68867733
trafficRuleId,filterType,priority,trafficFilter,action,dstInterface,state
simu/data/transport_info.csv
0 → 100644
View file @
68867733
transportId,name,description,type,protocol,version,endpoint,security,implSpecificInfo
TransId12345,REST,REST API,REST_HTTP,HTTP,2.0,{},security0,{}
simu/data/ue_information_list.csv
View file @
68867733
appInst,ueTag,address,state
appInst,ueTag,address,state
appInst01,UeTagA,acr:192.0.0.1,UNREGISTERED
appInst01,UeTagA,acr:192.0.0.1,UNREGISTERED
appInst01,UeTagC,acr:192.0.0.3,
UNREGISTERED
appInst01,UeTagC,acr:192.0.0.3,
INVALID_STATE
appInst02,UeTagB,acr:192.0.0.2,UNREGISTERED
appInst02,UeTagB,acr:192.0.0.2,UNREGISTERED
appInst03,UeTagD,acr:192.0.0.4,UNREGISTERED
appInst03,UeTagD,acr:192.0.0.4,UNREGISTERED
appInst03,UeTagE,acr:192.0.0.5,UNREGISTERED
appInst03,UeTagE,acr:192.0.0.5,UNREGISTERED
simu/mec_database.py
View file @
68867733
...
@@ -15,6 +15,9 @@ class mec_database:
...
@@ -15,6 +15,9 @@ class mec_database:
__cells__
=
None
__cells__
=
None
__associated__
=
None
__associated__
=
None
__subscribions__
=
None
__subscribions__
=
None
__transport_info__
=
None
__security__
=
None
__traffic_rules__
=
None
def
__init__
(
self
):
def
__init__
(
self
):
""" Default ctor: Open Pandas database. """
""" Default ctor: Open Pandas database. """
...
@@ -26,7 +29,10 @@ class mec_database:
...
@@ -26,7 +29,10 @@ class mec_database:
self
.
__cells__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'cells.csv'
,
encoding
=
'utf-8'
,
index_col
=
'cellId'
))
self
.
__cells__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'cells.csv'
,
encoding
=
'utf-8'
,
index_col
=
'cellId'
))
self
.
__associated__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'associated.csv'
,
encoding
=
'utf-8'
,
index_col
=
'cellId'
))
self
.
__associated__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'associated.csv'
,
encoding
=
'utf-8'
,
index_col
=
'cellId'
))
self
.
__subscriptions__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'subscriptions.csv'
,
encoding
=
'utf-8'
,
index_col
=
'subscription_id'
))
self
.
__subscriptions__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'subscriptions.csv'
,
encoding
=
'utf-8'
,
index_col
=
'subscription_id'
))
#self.dump()
self
.
__transport_info__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'transport_info.csv'
,
encoding
=
'utf-8'
,
index_col
=
'transportId'
))
self
.
__security__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'security.csv'
,
encoding
=
'utf-8'
,
index_col
=
'id'
))
self
.
__traffic_rules__
=
pd
.
DataFrame
(
pd
.
read_csv
(
self
.
__path__
+
'traffic_rules.csv'
,
encoding
=
'utf-8'
,
index_col
=
'trafficRuleId'
))
# self.dump()
# End of __init__
# End of __init__
def
dump
(
self
):
def
dump
(
self
):
...
@@ -38,7 +44,10 @@ class mec_database:
...
@@ -38,7 +44,10 @@ class mec_database:
print
(
"LocationInfo: "
,
self
.
__location_info__
.
head
())
print
(
"LocationInfo: "
,
self
.
__location_info__
.
head
())
print
(
"Cells: "
,
self
.
__cells__
.
head
())
print
(
"Cells: "
,
self
.
__cells__
.
head
())
print
(
"Associated: "
,
self
.
__associated__
.
head
())
print
(
"Associated: "
,
self
.
__associated__
.
head
())
print
(
"subscriptions: "
,
self
.
__subscribions__
.
head
())
print
(
"subscriptions: "
,
self
.
__subscriptions__
.
head
())
print
(
"transport_info: "
,
self
.
__transport_info__
.
head
())
print
(
"security: "
,
self
.
__security__
.
head
())
print
(
"traffic_rules: "
,
self
.
__traffic_rules__
.
head
())
# End of dump
# End of dump
def
__to_accessPoint__
(
self
,
p_access_point
,
p_location
):
def
__to_accessPoint__
(
self
,
p_access_point
,
p_location
):
...
@@ -106,6 +115,53 @@ class mec_database:
...
@@ -106,6 +115,53 @@ class mec_database:
return
resp
return
resp
# End of __to_subscriptions__
# End of __to_subscriptions__
def
__to_transport_info__
(
self
,
p_transport_info
):
"""
Build a TransportInfo Json message.
Keyword arguments:
-- p_transport_info: TransportInfo description
"""
print
(
">>> __to_transport_info__: "
,
p_transport_info
)
# print("__to_transport_info__: security id: ", p_transport_info[7])
resp
=
"{{
\t\"
id
\"
:
\"
TransId12345
\"
,
\"
name
\"
:
\"
REST
\"
,
\"
description
\"
:
\"
REST API
\"
,
\"
type
\"
:
\"
REST_HTTP
\"
,
\"
protocol
\"
:
\"
HTTP
\"
,
\"
version
\"
:
\"
2.0
\"
,
\"
endpoint
\"
: {},
\"
security
\"
: {
\"
oAuth2Info
\"
: {
\"
grantTypes
\"
: [
\"
OAUTH2_CLIENT_CREDENTIALS
\"
],
\"
tokenEndpoint
\"
:
\"
/meMp1/security/TokenEndPoint
\"
}
\"
},
\"
implSpecificInfo
\"
: {}}"
# resp = None
# try:
# security = self.__security__.loc[self.__security__['id'] == p_transport_info[7]]
# print("__to_transport_info__: security= ", security)
#
# resp = "{\t\"id\": \"" + p_transport_info[0] + "\",\t\"name\": \"" + p_transport_info[1] + "\",\t\"description\": \"" + p_transport_info[2] + "\",\t\"type\": \"" + p_transport_info[3] + "\",\t\"protocol\": \"" + p_transport_info[4] + "\",\t\"version\": \"" + str(p_transport_info[5]) + "\",\t\"endpoint\": \"" + p_transport_info[6] + "\",\t\"security\": \"" + security + "\",\t\"implSpecificInfo\": \"" + p_transport_info[8] + "\"}"
# print("__to_transport_info__: ", resp)
# except KeyError:
# print("__to_transport_info__: No security entry")
return
resp
# End of method __to_transport_info__
def
__to_traffic_rule__
(
self
,
p_traffic_rule
):
"""
Build a TrafficRule Json message.
Keyword arguments:
-- p_traffic_rule: TrafficRule description
"""
print
(
">>> __to_traffic_rule__: "
,
p_traffic_rule
)
resp
=
"{
\"
trafficRuleId
\"
:
\"
TrafficRule1
\"
,
\"
filterType
\"
:
\"
FLOW
\"
,
\"
priority
\"
: 1,
\"
trafficFilter
\"
: [{
\"
srcAddress
\"
: [
\"
192.168.1.1
\"
],
\"
dstAddress
\"
: [
\"
192.168.1.1
\"
],
\"
srcPort
\"
: [
\"
8080
\"
],
\"
dstPort
\"
: [
\"
8080
\"
],
\"
protocol
\"
: [
\"
?
\"
],
\"
token
\"
: [
\"
?
\"
],
\"
srcTunnelAddress
\"
: [
\"
?
\"
],
\"
tgtTunnelAddress
\"
: [
\"
?
\"
],
\"
srcTunnelPort
\"
: [
\"
?
\"
],
\"
dstTunnelPort
\"
: [
\"
?
\"
],
\"
qCI
\"
: 1,
\"
dSCP
\"
: 0,
\"
tC
\"
: 1}],
\"
action
\"
:
\"
DROP
\"
,
\"
dstInterface
\"
: {
\"
interfaceType
\"
:
\"
TUNNEL
\"
,
\"
tunnelInfo
\"
: {
\"
tunnelType
\"
:
\"
GTP_U
\"
,
\"
tunnelDstAddress
\"
:
\"
?
\"
,
\"
tunnelSrcAddress
\"
:
\"
?
\"
},
\"
srcMacAddress
\"
:
\"
02-00-00-00-00-00
\"
,
\"
dstMacAddress
\"
:
\"
02-00-00-00-00-00
\"
,
\"
dstIpAddress
\"
:
\"
192.0.2.0
\"
},
\"
state
\"
:
\"
ACTIVE
\"
}"
# resp = None
# try:
# resp = "{\t\"id\": \"" + p_transport_info[0] + "\",\t\"name\": \"" + p_transport_info[1] + "\",\t\"description\": \"" + p_transport_info[2] + "\",\t\"type\": \"" + p_transport_info[3] + "\",\t\"protocol\": \"" + p_transport_info[4] + "\",\t\"version\": \"" + str(p_transport_info[5]) + "\",\t\"endpoint\": \"" + p_transport_info[6] + "\",\t\"security\": \"" + security + "\",\t\"implSpecificInfo\": \"" + p_transport_info[8] + "\"}"
# print("__to_transport_info__: ", resp)
# except KeyError:
# print("__to_transport_info__: No security entry")
return
resp
# End of method __to_transport_info__
def
__to_rni_subscriptions__
(
self
,
p_subscription
,
p_subscription_type
):
""" Build a RNI subscription Json message. """
print
(
">>> __to_rni_subscriptions__"
)
resp
=
"{
\"
CellChangeSubscription
\"
: {
\"
subscriptionType
\"
:
\"
"
+
p_subscription_type
+
"
\"
,
\"
callbackReference
\"
:
\"
http://meAppClient.example.com/rni/v2/notifications/cell_change/77777
\"
,
\"
_links
\"
: {
\"
self
\"
:
\"
http://example.com/exampleAPI/rni/v2/subscriptions
\"
},
\"
filterCriteria
\"
: {
\"
appInsId
\"
:
\"
01
\"
,
\"
associateId
\"
: [{
\"
type
\"
:
\"
UE_IPV4_ADDRESS
\"
,
\"
value
\"
: 1}],
\"
plmn
\"
: {
\"
mcc
\"
:
\"
01
\"
,
\"
mnc
\"
:
\"
001
\"
},
\"
cellId
\"
: [
\"
0x800000A
\"
],
\"
hoStatus
\"
:
\"
COMPLETED
\"
},
\"
expiryDeadline
\"
: {
\"
seconds
\"
: 1577836800,
\"
nanoSeconds
\"
: 0}}}"
# resp = "{\"CellChangeSubscription\": {\"callbackReference\": " + p_subscription['callbackReference'] + ", \"_links\": {\"self\": " + p_subscription['_links'] + "}, \"filterCriteria\": {\"appInsId\": " + p_subscription['filterCriteria']['appInsId'] + ", \"associateId\": [{\"type\": " + p_subscription['filterCriteria']['associateId']['type'] + ", \"value\": " + p_subscription['filterCriteria']['associateId']['value'] + "}], \"plmn\": {\"mcc\": " + p_subscription['filterCriteria']['plmn']['mcc'] + ", \"mnc\": " + p_subscription['filterCriteria']['plmn']['mnc'] + "}, \"cellId\": [" + p_subscription['filterCriteria']['cellId'] + "], 'hoStatus': " + p_subscription['filterCriteria']['hoStatus'] + "}, \"expiryDeadline\": {\"seconds\": " + p_subscription['expiryDeadline']['seconds'] + ", \"nanoSeconds\": \"" + p_subscription['expiryDeadline']['nanoSeconds'] + "}}"
print
(
"__to_rni_subscriptions__: "
,
resp
)
return
resp
# end of __to_rni_subscriptions__
def
getSubscriberList
(
self
,
p_uri
):
def
getSubscriberList
(
self
,
p_uri
):
""" Build a SubscriberList Json message. """
""" Build a SubscriberList Json message. """
print
(
">>> getSubscriberList"
)
print
(
">>> getSubscriberList"
)
...
@@ -145,7 +201,6 @@ class mec_database:
...
@@ -145,7 +201,6 @@ class mec_database:
print
(
">>> getAccessPointList"
)
print
(
">>> getAccessPointList"
)
resp
=
None
resp
=
None
try
:
try
:
r
=
self
.
__access_point_list__
.
loc
[
self
.
__access_point_list__
[
'zoneId'
]
==
p_zone_id
]
r
=
self
.
__access_point_list__
.
loc
[
self
.
__access_point_list__
[
'zoneId'
]
==
p_zone_id
]
print
(
"getAccessPointList: r= "
,
r
)
print
(
"getAccessPointList: r= "
,
r
)
resp
=
"{
\"
accessPointList
\"
: {
\t\"
zoneId
\"
:
\"
"
+
p_zone_id
+
"
\"
,
\t\"
accessPoint
\"
: [
\t
"
resp
=
"{
\"
accessPointList
\"
: {
\t\"
zoneId
\"
:
\"
"
+
p_zone_id
+
"
\"
,
\t\"
accessPoint
\"
: [
\t
"
...
@@ -163,9 +218,61 @@ class mec_database:
...
@@ -163,9 +218,61 @@ class mec_database:
# End of method getAccessPointList
# End of method getAccessPointList
def
getSubscriptionLinkList
(
self
,
p_uri
):
def
getSubscriptionLinkList
(
self
,
p_uri
):
return
"{
\"
SubscriptionLinkList
\"
: {
\"
_links
\"
: {
\"
self
\"
:
\"
http://example.com"
+
p_uri
+
"
\"
},
\"
subscription
\"
: [{
\"
href
\"
:
\"
http://meAppClient.example.com/rni/v1/notifications/cell_change/77777
\"
,
\"
subscriptionType
\"
:
\"
CELL_CHANGE
\"
},{
\"
href
\"
:
\"
http://meAppClient.example.com/rni/v1/notifications/MeasTa/77777
\"
,
\"
subscriptionType
\"
:
\"
MEAS_TIMING_ADVANCE
\"
}]}}"
s
=
p_uri
.
split
(
'?'
)
return
"{
\"
SubscriptionLinkList
\"
: {
\"
_links
\"
: {
\"
self
\"
:
\"
http://example.com"
+
s
[
0
]
+
"
\"
},
\"
subscription
\"
: [{
\"
href
\"
:
\"
http://meAppClient.example.com/rni/v1/notifications/cell_change/77777
\"
,
\"
subscriptionType
\"
:
\"
CELL_CHANGE
\"
},{
\"
href
\"
:
\"
http://meAppClient.example.com/rni/v1/notifications/MeasTa/77777
\"
,
\"
subscriptionType
\"
:
\"
MEAS_TIMING_ADVANCE
\"
}]}}"
# End of method getSubscriptionLinkList
# End of method getSubscriptionLinkList
def
getMp1TransportInfoList
(
self
):
print
(
">>> getMp1TransportInfoList"
)
resp
=
None
try
:
resp
=
"{
\"
transportInfoList
\"
: [
\t
"
for
r
in
self
.
__transport_info__
.
itertuples
():
t
=
tuple
(
r
)
resp
+=
self
.
__to_transport_info__
(
t
)
+
","
# En of 'for' statement
resp
=
resp
[:
len
(
resp
)
-
1
]
resp
+=
"
\t
]}"
print
(
"getMp1TransportInfoList: "
,
resp
)
except
KeyError
:
print
(
"getMp1TransportInfoList: No transportInfo list"
)
return
resp
# End of method getMp1TransportInfo
def
getMp1TrafficRulesList
(
self
):
print
(
">>> getMp1TrafficRulesList"
)
resp
=
None
try
:
resp
=
"{
\"
TrafficRulesList
\"
: [
\t
"
for
r
in
self
.
__traffic_rules__
.
itertuples
():
t
=
tuple
(
r
)
resp
+=
self
.
__to_traffic_rule__
(
t
)
+
","