diff --git a/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot b/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot new file mode 100644 index 0000000000000000000000000000000000000000..f18faa66d8602cbf84f46baa4d39b1ed73a7db5a --- /dev/null +++ b/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot @@ -0,0 +1,214 @@ +*** Settings *** + +Documentation +... A test suite for validating UE Zone Lookup (UEZONELOOK) operations. + +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt +Resource environment/variables.txt +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem +Library String +Default Tags TC_MEC_SRV_RLOCLOOK + + +*** Test Cases *** +TC_MEC_MEC013_SRV_UEZONELOOK_001_OK + [Documentation] + ... Check that the IUT responds with a list zones + ... when queried by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription ZoneLocationEventSubscription + Get subscriptions + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + [TearDown] Remove subscription ${SUB_ID} + +TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_01 + [Documentation] + ... Check that the IUT responds with the subscription when + ... queried by a MEC Application - Zone location Event + ... ETSI GS MEC 013 3.1.1 Clause 5.3.11 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create multiple subscriptions ZoneLocationEventSubscription ZoneStatusSubscription + Get sub info with filters subscription_type event + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + Should Be Equal As Strings ${response['body']['subscription'][0]['subscriptionType']} ZoneLocationEventSubscription + [TearDown] Remove multiple subscriptions ${FIRST_SUB_ID} ${SECOND_SUB_ID} + +TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_02 + [Documentation] + ... Check that the IUT responds with the subscription when + ... queried by a MEC Application - Zone Status + ... ETSI GS MEC 013 3.1.1 Clause 5.3.11 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.7 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create multiple subscriptions ZoneLocationEventSubscription ZoneStatusSubscription + Get sub info with filters subscription_type status + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + Should Be Equal As Strings ${response['body']['subscription'][0]['subscriptionType']} ZoneStatusSubscription + [TearDown] Remove multiple subscriptions ${FIRST_SUB_ID} ${SECOND_SUB_ID} + +TC_MEC_MEC013_SRV_UEZONELOOK_002_OK_03 + [Documentation] + ... Check that the IUT responds with the subscription + ... when queried by a MEC Application - UE location Event and address + ... ETSI GS MEC 013 3.1.1 Clause 5.3.11 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.7 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create multiple subscriptions ZoneLocationEventSubscription ZoneStatusSubscription + Get sub info with multiple filters subscription_type status + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + Should Be Equal As Strings ${response['body']['subscription'][0]['subscriptionType']} ZoneStatusSubscription + [TearDown] Remove multiple subscriptions ${FIRST_SUB_ID} ${SECOND_SUB_ID} + + + +TC_MEC_MEC013_SRV_UEZONELOOK_002_BR + [Documentation] + ... Check that the IUT responds with an error + ... when inconsistent request was sent by a MEC Application - Invalid filter + ... ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.3 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription ZoneLocationEventSubscription + Get sub info with filters subscription_type dummy + Check HTTP Response Status Code Is 400 + [TearDown] Remove subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UEZONELOOK_002_NF + [Documentation] + ... Check that the IUT responds with an error + ... when inconsistent request was sent by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.3 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.1 + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get subscriptions + Check HTTP Response Status Code Is 404 + + + +TC_MEC_MEC013_SRV_UEZONELOOK_003_OK_01 + [Documentation] + ... Check that the IUT responds with the subscription + ... when queried by a MEC Application - Zone location Event + ... ETSI GS MEC 013 3.1.1 Clause 5.3.11 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.12.3.1 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create multiple subscriptions ZoneLocationEventSubscription ZoneStatusSubscription + Get single subscription with filter ${FIRST_SUB_ID} subscription_type event + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ZoneLocationEventSubscription + [TearDown] Remove multiple subscriptions ${FIRST_SUB_ID} ${SECOND_SUB_ID} + + +TC_MEC_MEC013_SRV_UEZONELOOK_003_NF + [Documentation] + ... Check that the IUT responds with an error + ... when the non existing subscription is queried by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 7.12.3.1 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription ZoneLocationEventSubscription + Get single subscription with filter ${NOT_EXISTING_SUB_ID} subscription_type event + Check HTTP Response Status Code Is 404 + [Teardown] Remove subscription ${SUB_ID} + + +*** Keywords *** +Create new subscription + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + + +Create multiple subscriptions + [Arguments] ${first_sub} ${second_sub} + Create new subscription ${first_sub} + Set Suite Variable ${FIRST_SUB_ID} ${SUB_ID} + Create new subscription ${second_sub} + Set Suite Variable ${SECOND_SUB_ID} ${SUB_ID} + + +Remove subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones/${subscription_id} + ${output}= Output response + +Remove multiple subscriptions + [Arguments] ${first_sub_id} ${second_sub_id} + Remove subscription ${first_sub_id} + Remove subscription ${second_sub_id} + + + +Get sub info with filters + [Arguments] ${filter_key} ${filter_value} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones?${filter_key}=${filter_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get sub info with multiple filters + [Arguments] ${filter_key} ${filter_value} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones?${filter_key}=${filter_value}&address=10.30.0.3 + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get the zone info location + [Arguments] ${zoneId} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones/${zoneId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones + ${output}= Output response + Set Suite Variable ${response} ${output} + +Get single subscription with filter + [Arguments] ${subscription_id} ${filter_key} ${filter_value} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones/${subscription_id}?${filter_key}=${filter_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + diff --git a/MEC013/SRV/UEZONELOOK/README.md b/MEC013/SRV/UEZONELOOK/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/MEC013/SRV/UEZONELOOK/environment/variables.txt b/MEC013/SRV/UEZONELOOK/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..585984a3819f9c80c71bfa055580b9fe5d80cba4 --- /dev/null +++ b/MEC013/SRV/UEZONELOOK/environment/variables.txt @@ -0,0 +1,13 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} location +${apiVersion} v3 + +# Specific variables +${NOT_EXISTING_SUB_ID} NOT_EXISTING_SUB_ID diff --git a/MEC013/SRV/UEZONELOOK/jsons/ZoneLocationEventSubscription.json b/MEC013/SRV/UEZONELOOK/jsons/ZoneLocationEventSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..2015771dd79ccc8a68460405b74aa1dcff95e3b6 --- /dev/null +++ b/MEC013/SRV/UEZONELOOK/jsons/ZoneLocationEventSubscription.json @@ -0,0 +1,8 @@ +{ + "subscriptionType": "ZoneLocationEventSubscription", + "callbackReference": "http://my.callback.com/zone-notification/some-id", + "zoneId": "zone01", + "locationEventCriteria": [ + "ENTERING_AREA_EVENT" + ] +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONELOOK/jsons/ZoneStatusSubscription.json b/MEC013/SRV/UEZONELOOK/jsons/ZoneStatusSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..eea7a4b67f89554854c076d435a9e11943f6d75b --- /dev/null +++ b/MEC013/SRV/UEZONELOOK/jsons/ZoneStatusSubscription.json @@ -0,0 +1,8 @@ +{ + "callbackReference": "http://someurl.com/callback_uri", + "operationStatus": [ + "Unknown" + ], + "subscriptionType": "ZoneStatusSubscription", + "zoneId": "zoneId" +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONELOOK/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEZONELOOK/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..4b245317effbe3f5a5e90afcf44f372bba29e50c --- /dev/null +++ b/MEC013/SRV/UEZONELOOK/schemas/NotificationSubscriptionList.schema.json @@ -0,0 +1,55 @@ +{ + "description": "This type contains a list of subscriptions.", + "properties": { + "resourceURL": { + "properties": { + "href": { + "description": "URI referring to a resource.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.7.2" + }, + "subscription": { + "items": { + "description": "", + "minItems": 0, + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + }, + "subscriptionType": { + "description": "Type of the subscription. The string shall be set according to the \"subscriptionType\" attribute of the associated subscription data type defined in clauses 6.3.4, 6.3.5, 6.3.6, 6.3.7 6.3.8 and 6.3.9:\n\"UserLocationEventSubscription\"\n\"UserLocationPeriodicSubscription\"\n\"ZoneLocationEventSubscription\"\n\"ZoneStatusSubscription\"\n\"UserAreaSubscription\"\n\"UserDistanceSubscription\"", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href", + "subscriptionType" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "type": "array" + } + }, + "required": [ + "resourceURL" + ], + "type": "object", + "x-etsi-ref": "6.3.3" + } \ No newline at end of file diff --git a/MEC013/SRV/UEZONELOOK/schemas/ZoneLocationEventSubscription.schema.json b/MEC013/SRV/UEZONELOOK/schemas/ZoneLocationEventSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..9d16c052a38d167f31659003acad331fede50577 --- /dev/null +++ b/MEC013/SRV/UEZONELOOK/schemas/ZoneLocationEventSubscription.schema.json @@ -0,0 +1,161 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "properties": { + "href": { + "description": "URI referring to a resource.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.7.2" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "addressList": { + "description": "List of the users to be monitored. If not present, all the users need to be monitored.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array(Uri)" + }, + "callbackReference": { + "description": "URI exposed by the client on which to receive notifications via HTTP. See note 1.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uri" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server. See note 2.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "expiryDeadline": { + "properties": { + "nanoSeconds": { + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-ref": "6.5.2" + }, + "locationEventCriteria": { + "description": "List of user event values to generate notifications for. ", + "items": { + "description": "This type represents specified event types for UE location report.", + "enum": [ + "ENTERING_AREA_EVENT", + "LEAVING_AREA_EVENT" + ], + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array(LocationEventType)" + }, + "reportingCtrl": { + "properties": { + "maximumCount": { + "description": "Maximum number of notifications. For no maximum, either do not include this element or specify a value of zero. Default value is 0.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "maximumFrequency": { + "description": "Maximum frequency (in seconds) of notifications per subscription.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "minimumInterval": { + "description": "Minimum interval between reports in case frequently reporting. Unit is second.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "type": "object", + "x-etsi-ref": "6.5.6" + }, + "requestTestNotification": { + "description": "Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4], clause 6.12a.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "subscriptionType": { + "description": "Shall be set to \"ZoneLocationEventSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "websockNotifConfig": { + "properties": { + "requestWebsocketUri": { + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "websocketUri": { + "description": "Set by location server to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uri" + } + }, + "type": "object", + "x-etsi-ref": "6.5.4" + }, + "zoneId": { + "description": "Identifier of zone (e.g. zone001) to monitor.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "zoneId" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAt least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to location server to select an alternative and return only that alternative in the response, as specified in ETSI GS MEC 009 [4], clause 6.12a.\nNOTE 2:\tThis allows the client to recover from communication failures during resource creation and therefore avoids duplicate subscription creation in such situations. In case the element is present, the server shall not alter its value, and shall provide it as part of the representation of this resource. In case the element is not present, the server shall not generate it.", + "x-etsi-ref": "6.3.6" + } \ No newline at end of file diff --git a/MEC013/SRV/UEZONELOOK/schemas/ZoneStatusSubscription.schema.json b/MEC013/SRV/UEZONELOOK/schemas/ZoneStatusSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..1d576f2e1ce734944d867f28b27280543989fce1 --- /dev/null +++ b/MEC013/SRV/UEZONELOOK/schemas/ZoneStatusSubscription.schema.json @@ -0,0 +1,176 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "properties": { + "href": { + "description": "URI referring to a resource.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.7.2" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "callbackReference": { + "description": "URI exposed by the client on which to receive notifications via HTTP. See note 1.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uri" + }, + "clientCorrelator": { + "description": "A correlator that the client can use to tag this particular resource representation during a request to create a resource on the server. See note 2.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "expiryDeadline": { + "properties": { + "nanoSeconds": { + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-ref": "6.5.2" + }, + "lowerNumberOfUsersAPThreshold": { + "description": "Threshold number of users in an access point which if crossed downward shall cause a notification", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "lowerNumberOfUsersZoneThreshold": { + "description": "Threshold number of users in a zone which if crossed downward shall cause a notification", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "operationStatus": { + "description": "List of operation status values to generate notifications for (these apply to all access points within a zone). See note 3.", + "items": { + "description": "An enumeration defining the operations status of an access point.", + "enum": [ + "Serviceable", + "Unserviceable", + "Unknown" + ], + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "OperationStatus" + }, + "reportingCtrl": { + "properties": { + "maximumCount": { + "description": "Maximum number of notifications. For no maximum, either do not include this element or specify a value of zero. Default value is 0.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "maximumFrequency": { + "description": "Maximum frequency (in seconds) of notifications per subscription.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "minimumInterval": { + "description": "Minimum interval between reports in case frequently reporting. Unit is second.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "type": "object", + "x-etsi-ref": "6.5.6" + }, + "requestTestNotification": { + "description": "Set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, as specified in ETSI GS MEC 009 [4], clause 6.12a.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "subscriptionType": { + "description": "Shall be set to \"ZoneStatusSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "upperNumberOfUsersAPThreshold": { + "description": "Threshold number of users in an access point which if crossed upward shall cause a notification.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "upperNumberOfUsersZoneThreshold": { + "description": "Threshold number of users in a zone which if crossed upward shall cause a notification.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "websockNotifConfig": { + "properties": { + "requestWebsocketUri": { + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "websocketUri": { + "description": "Set by location server to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uri" + } + }, + "type": "object", + "x-etsi-ref": "6.5.4" + }, + "zoneId": { + "description": "Identifier of zone (e.g. zone001) to monitor.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "zoneId" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAt least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to location server to select an alternative and return only that alternative in the response, as specified in ETSI GS MEC 009 [4], clause 6.12a.\nNOTE 2:\tThis allows the client to recover from communication failures during resource creation and therefore avoids duplicate subscription creation in such situations. In case the element is present, the server shall not alter its value, and shall provide it as part of the representation of this resource. In case the element is not present, the server shall not generate it.\nNOTE 3:\tAs specified in [5], clause 5.2.3.2.", + "x-etsi-ref": "6.3.7" + } \ No newline at end of file