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
b55fa194
Commit
b55fa194
authored
Aug 09, 2019
by
YannGarcia
Browse files
Merge branch 'master' of
https://forge.etsi.org/gitlab/mec/gs032p3-ttcn-test-suite
parents
8949f887
0536f513
Changes
2
Hide whitespace changes
Inline
Side-by-side
simu/mec_database.py
View file @
b55fa194
...
...
@@ -153,6 +153,15 @@ class mec_database:
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
):
""" Build a SubscriberList Json message. """
print
(
">>> getSubscriberList"
)
...
...
@@ -307,6 +316,14 @@ class mec_database:
return
resp
# End of method getUEidentityTagInfo
def
getBwAllocationAppInst
(
self
,
p_app_inst
,
p_ue_identity_tag
):
print
(
">>> getBwAllocationAppInst: "
,
p_app_inst
,
", "
,
p_ue_identity_tag
)
resp
=
None
resp
=
"{
\"
bwInfo
\"
: {
\"
timeStamp
\"
: {
\"
seconds
\"
: 0,
\"
nanoSeconds
\"
: 0},
\"
appInsId
\"
:
\"
string
\"
,
\"
requestType
\"
:
\"
APPLICATION_SPECIFIC_BW_ALLOCATION
\"
,
\"
sessionFilter
\"
: [{
\"
sourceIp
\"
:
\"
string
\"
,
\"
sourcePort
\"
: [
\"
string
\"
],
\"
dstAddress
\"
:
\"
string
\"
,
\"
dstPort
\"
: [
\"
string
\"
],
\"
protocol
\"
:
\"
string
\"
}],
\"
fixedBWPriority
\"
:
\"
not defined in the present document
\"
,
\"
fixedAllocation
\"
:
\"
string
\"
,
\"
allocationDirection
\"
:
\"
00 = Downlink (towards the UE)
\"
}}"
print
(
"getBwAllocationAppInst: "
,
resp
)
return
resp
# End of method getBwAllocationAppInst
def
registerUEidentity
(
self
,
p_app_inst
,
p_json_msg
):
print
(
">>> registerUEidentity"
,
p_json_msg
)
if
p_json_msg
[
"state"
]
!=
"REGISTERED"
and
p_json_msg
[
"state"
]
!=
"UNREGISTERED"
:
...
...
@@ -363,12 +380,32 @@ class mec_database:
return
resp
# End of unregisterSubscription
def
getBwAllocationAppInst
(
self
,
p_app_inst
,
p_ue_identity_ta
g
):
print
(
">>>
getBwAllocationAppInst: "
,
p_app_inst
,
", "
,
p_ue_identity_ta
g
)
def
registerRniSubscription
(
self
,
p_json_ms
g
):
print
(
">>>
registerRniSubscription: "
,
p_json_ms
g
)
resp
=
None
resp
=
"{
\"
bwInfo
\"
: {
\"
timeStamp
\"
: {
\"
seconds
\"
: 0,
\"
nanoSeconds
\"
: 0},
\"
appInsId
\"
:
\"
string
\"
,
\"
requestType
\"
:
\"
APPLICATION_SPECIFIC_BW_ALLOCATION
\"
,
\"
sessionFilter
\"
: [{
\"
sourceIp
\"
:
\"
string
\"
,
\"
sourcePort
\"
: [
\"
string
\"
],
\"
dstAddress
\"
:
\"
string
\"
,
\"
dstPort
\"
: [
\"
string
\"
],
\"
protocol
\"
:
\"
string
\"
}],
\"
fixedBWPriority
\"
:
\"
not defined in the present document
\"
,
\"
fixedAllocation
\"
:
\"
string
\"
,
\"
allocationDirection
\"
:
\"
00 = Downlink (towards the UE)
\"
}}"
print
(
"getBwAllocationAppInst: "
,
resp
)
if
p_json_msg
[
'subscriptionType'
]
==
'CELL_CHANGE'
:
resp
=
self
.
__to_rni_subscriptions__
(
p_json_msg
,
'CELL_CHANGE'
)
return
resp
# End of method getBwAllocationAppInst
# End of registerRniSubscription
def
getRabInfo
(
self
,
p_cell_id
):
print
(
">>> getRabInfo: "
,
p_cell_id
)
resp
=
None
if
p_cell_id
==
'0xFFFFFFFF'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
else
:
resp
=
"{
\"
RabInfo
\"
: {
\"
timeStamp
\"
: {
\"
seconds
\"
: 1577836800,
\"
nanoSeconds
\"
: 0 },
\"
appInsId
\"
:
\"
01
\"
,
\"
requestId
\"
:
\"
01
\"
,
\"
cellUserInfo
\"
: {
\"
ecgi
\"
: {
\"
plmn
\"
: {
\"
mcc
\"
:
\"
001
\"
,
\"
mnc
\"
:
\"
01
\"
},
\"
cellId
\"
:
\"
"
+
p_cell_id
+
"
\"
},
\"
ueInfo
\"
: {
\"
associateId
\"
: null,
\"
type
\"
:
\"
1
\"
,
\"
value
\"
:
\"
192.0.2.0
\"
,
\"
erabInfo
\"
: {
\"
erabId
\"
: 10 },
\"
erabQosParameters
\"
: {
\"
qci
\"
: 7,
\"
qosInformation
\"
: {
\"
erabMbrDl
\"
: 10,
\"
erabMbrUl
\"
: 10,
\"
erabGbrDl
\"
: 10,
\"
erabGbrUl
\"
: 10 } } } } } }"
return
resp
# End of getRabInfo
def
getPlmnInfo
(
self
,
p_app_inst
):
print
(
">>> getPlmnInfo: "
,
p_app_inst
)
resp
=
None
if
p_app_inst
==
'99'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
else
:
resp
=
"{
\"
PlmnInfo
\"
: {
\"
timeStamp
\"
: {
\"
seconds
\"
: 1577836800,
\"
nanoSeconds
\"
: 0 },
\"
appInsId
\"
:
\"
"
+
p_app_inst
+
"
\"
,
\"
ecgi
\"
: {
\"
plmn
\"
: {
\"
mcc
\"
:
\"
001
\"
,
\"
mnc
\"
:
\"
01
\"
},
\"
cellId
\"
:
\"
0x800000A
\"
} } }"
return
resp
# End of getPlmnInfo
# End of class mec_database
simu/mec_http_server.py
View file @
b55fa194
...
...
@@ -100,9 +100,8 @@ class myHandler(http.server.BaseHTTPRequestHandler):
elif
resp
.
find
(
'Forbidden'
)
!=
-
1
:
self
.
send_response
(
403
,
'Forbidden'
)
resp
=
""
elif
resp
.
find
(
'Bad Request'
)
!=
-
1
:
elif
resp
.
find
(
'Bad Request'
)
!=
-
1
or
resp
.
find
(
'Wrong parameters'
)
!=
-
1
:
self
.
send_response
(
400
,
'Bad Request'
)
resp
=
""
elif
resp
.
find
(
'Precondition Failed'
)
!=
-
1
:
self
.
send_response
(
412
,
'Precondition Failed'
)
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Precondition Failed
\"
,
\t\"
title
\"
:
\"
N/A
\"
,
\t\"
status
\"
: 412,
\t\"
detail
\"
:
\"
Wrong preconditions
\"
,
\t\"
instance
\"
:
\"
N/A
\"
}}"
...
...
@@ -110,6 +109,8 @@ class myHandler(http.server.BaseHTTPRequestHandler):
elif
resp
.
find
(
'userTrackingSubscription'
)
!=
-
1
:
self
.
send_response
(
201
,
'Created'
)
resp
=
""
elif
resp
.
find
(
'CellChangeSubscription'
)
!=
-
1
:
self
.
send_response
(
201
,
'Created'
)
else
:
self
.
send_response
(
200
,
'OK'
)
self
.
send_header
(
'Host'
,
self
.
headers
.
get
(
'Host'
))
# send_header() shall be after send_response()
...
...
@@ -172,9 +173,6 @@ class myHandler(http.server.BaseHTTPRequestHandler):
self
.
send_response
(
412
,
'Precondition Failed'
)
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Precondition Failed
\"
,
\t\"
title
\"
:
\"
N/A
\"
,
\t\"
status
\"
: 412,
\t\"
detail
\"
:
\"
Wrong preconditions
\"
,
\t\"
instance
\"
:
\"
N/A
\"
}}"
content_type
=
'application/problem+json'
elif
resp
.
find
(
'userTrackingSubscription'
)
!=
-
1
:
self
.
send_response
(
201
,
'Created'
)
resp
=
""
else
:
self
.
send_response
(
200
,
'OK'
)
self
.
send_header
(
'Host'
,
self
.
headers
.
get
(
'Host'
))
# send_header() shall be after send_response()
...
...
@@ -377,8 +375,7 @@ class myHandler(http.server.BaseHTTPRequestHandler):
content_type
=
'application/problem+json'
if
(
resp
==
None
):
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
UEidentityAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
content_type
=
'application/problem+json'
elif
resp
.
find
(
'problemDetails'
)
!=
-
1
:
if
resp
.
find
(
'problemDetails'
)
!=
-
1
:
content_type
=
'application/problem+json'
print
(
"<<< __process__ue__identity__api__: "
,
resp
,
", "
,
content_type
)
...
...
@@ -393,24 +390,63 @@ class myHandler(http.server.BaseHTTPRequestHandler):
if
p_split
[
4
].
startswith
(
'subscriptions'
):
if
p_split
.
__len__
()
==
5
:
s
=
p_split
[
4
].
split
(
'?'
)
if
s
.
__len__
()
==
1
:
resp
=
self
.
__db__
.
getSubscriptionLinkList
(
self
.
path
)
if
s
.
__len__
()
==
1
:
# Chek message body
# Register/Unregister operation
body
=
None
# Extract the body if any
content_len
=
int
(
self
.
headers
.
get
(
'Content-Length'
))
if
(
content_len
!=
0
):
body
=
self
.
rfile
.
read
(
content_len
)
json_msg
=
self
.
__decode__json__body__
(
body
)
if
(
json_msg
==
None
):
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Body processing not supported
\"
,
\t\"
title
\"
:
\"
UEidentityAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Unknown request
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
else
:
resp
=
self
.
__db__
.
registerRniSubscription
(
json_msg
)
elif
s
[
0
]
!=
'subscriptions'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
content_type
=
'application/problem+json'
else
:
s
=
s
[
1
].
split
(
'='
)
print
(
'__process__rnis__api__: '
,
s
)
if
s
[
0
]
!=
'subscription_type'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
content_type
=
'application/problem+json'
elif
s
[
1
]
==
'wrongSubscriptionType'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
else
:
resp
=
self
.
__db__
.
getSubscriptionLinkList
(
self
.
path
)
elif
p_split
.
__len__
()
==
6
:
if
p_split
[
5
]
==
''
:
resp
=
self
.
__db__
.
getSubscriptionLinkList
(
self
.
path
)
elif
s
[
0
]
!=
'subscriptions'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
else
:
s
=
s
[
1
].
split
(
'='
)
print
(
'__process__rnis__api__: '
,
s
)
if
s
[
0
]
!=
'subscription_type'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
elif
s
[
1
]
==
'wrongSubscriptionType'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
else
:
resp
=
self
.
__db__
.
getSubscriptionLinkList
(
self
.
path
)
elif
p_split
[
4
].
startswith
(
'queries'
):
if
p_split
.
__len__
()
==
5
:
s
=
p_split
[
4
].
split
(
'?'
)
if
s
.
__len__
()
==
1
:
# Chek message body
pass
else
:
if
s
[
0
]
!=
'queries'
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
else
:
s
=
s
[
1
].
split
(
'='
)
print
(
'__process__rnis__api__ (queries): '
,
s
)
if
s
[
0
]
==
'cell_id'
:
resp
=
self
.
__db__
.
getRabInfo
(
s
[
1
])
elif
s
[
0
]
==
'plmn_info'
:
resp
=
self
.
__db__
.
getPlmnInfo
(
s
[
1
])
else
:
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Bad Request
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
if
(
resp
==
None
):
resp
=
"{
\"
problemDetails
\"
: {
\t\"
type
\"
:
\"
Not supported
\"
,
\t\"
title
\"
:
\"
RnisAPI
\"
,
\t\"
status
\"
: 400,
\t\"
detail
\"
:
\"
Wrong parameters
\"
,
\t\"
instance
\"
:
\"
string
\"
}}"
if
resp
.
find
(
'problemDetails'
)
!=
-
1
:
content_type
=
'application/problem+json'
print
(
"<<< __process__rnis__api__: "
,
resp
,
", "
,
content_type
)
...
...
@@ -481,6 +517,8 @@ class myHandler(http.server.BaseHTTPRequestHandler):
return
json_msg
.
get
(
"ueIdentityTags"
)[
0
]
elif
(
"userTrackingSubscription"
in
json_msg
.
keys
())
==
True
:
return
json_msg
.
get
(
"userTrackingSubscription"
)
elif
(
"CellChangeSubscription"
in
json_msg
.
keys
())
==
True
:
return
json_msg
.
get
(
"CellChangeSubscription"
)
return
None
# End of __decode__json__body__
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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